@cheetah.js/orm 0.1.18 → 0.1.20
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/dist/SqlBuilder.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EntityStorage } from './domain/entities';
|
|
2
2
|
import { Orm } from './orm';
|
|
3
3
|
import { ValueObject } from './common/value-object';
|
|
4
|
-
import { BaseEntity } from '
|
|
4
|
+
import { BaseEntity } from './domain/base-entity';
|
|
5
5
|
export class SqlBuilder {
|
|
6
6
|
driver;
|
|
7
7
|
entityStorage;
|
package/dist/SqlBuilder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqlBuilder.js","sourceRoot":"","sources":["../src/SqlBuilder.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,aAAa,EAAW,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAEhE,MAAM,OAAO,UAAU;IACJ,MAAM,CAAkB;IACjC,aAAa,CAAgB;IAC7B,UAAU,GAAiB,EAAE,CAAC;IAC9B,MAAM,CAAW;IACjB,KAAK,CAAe;IACpB,OAAO,GAAgB,IAAI,GAAG,EAAE,CAAC;IACjC,kBAAkB,GAAG,EAAE,CAAC;IACxB,MAAM,CAAgB;IACtB,cAAc,GAAU,EAAE,CAAC;IAC3B,eAAe,GAAU,EAAE,CAAC;IAEpC,YAAY,KAAkB;QAC5B,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;QAEjD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,OAAmC;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,IAAK,IAAI,CAAC,KAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACvF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC;QAE9C,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,QAAQ,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAClC,IAAI,CAAC,eAAe,GAAG,OAAO,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,MAAM,MAAM,SAAS,GAAG,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW,CAAC,WAAgC,QAAQ;QAClD,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW,CAAC,QAAW;QACrB,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,MAA0D;QAC/D,MAAM,EAAC,SAAS,EAAE,MAAM,EAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChD,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QACjE,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,QAAQ,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,MAAM,MAAM,SAAS,GAAG,CAAC;QACrD,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAC7C,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAC3C,IAAI,CAAC,MAAM,CACZ,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,MAA0D;QAC/D,MAAM,EAAC,SAAS,EAAE,MAAM,EAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChD,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QACjE,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,QAAQ,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,MAAM,IAAI,SAAS,EAAE,CAAC;QACjD,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAqB;QACzB,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7C,OAAO,IAAI,CAAC;SACb;QAED,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACvF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,OAAgE;QACtE,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,IAAI,CAAC;SACb;QAED,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAyB;QAC7B,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,MAA0B;QAC/B,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,IAAc;QACjB,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,EAAE;YAC/B,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YACxB,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,CAAA;SACvD;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;YAC9B,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,CAAA;SACnE;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,0BAA0B,CAAC,MAAe,EAAE,gBAAwB;QAC1E,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtD,IAAI,aAAa,GAAG,MAAM,CAAC;QAC3B,IAAI,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,KAAM,CAAC;QAC1C,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAC1G,IAAI,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;QAEtF,iBAAiB,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,KAAK,EAAE,EAAE;YACpD,MAAM,YAAY,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,KAAK,gBAAgB,CAAC,CAAC;YAE/F,IAAI,CAAC,YAAY,EAAE;gBACjB,aAAa;gBACb,MAAM,IAAI,KAAK,CAAC,iBAAiB,gBAAgB,0BAA0B,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC;aACnG;YAED,MAAM,kBAAkB,GAAG,KAAK,KAAK,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;YAElE,IAAI,KAAK,KAAK,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;gBACpF,MAAM,IAAI,GAAG,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,gBAAgB,CAAC,CAAC;gBACvE,IAAI,IAAI,EAAE;oBACR,aAAa;oBACb,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;iBACxC;aACF;YAED,IAAI,YAAY,CAAC,QAAQ,KAAK,aAAa,IAAI,kBAAkB,EAAE;gBACjE,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;gBAC/C,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;gBACtG,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;aACnE;YAED,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAc,CAAE,CAAC;QAC7E,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,uBAAuB,CAAC,MAAe;QAC7C,mEAAmE;QACnE,2FAA2F;QAC3F,6EAA6E;QAC7E,8GAA8G;QAC9G,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;YAC5B,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;SAClD;aAAM;YACL,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9B,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC7B;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,CAAA;QACtD,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC1B,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,WAAW;QACjB,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,KAAK,QAAQ,EAAE;YAC1C,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACxD,OAAO;SACR;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,KAAK,QAAQ,EAAE;YAC1C,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;YAC9B,OAAO;SACR;IACH,CAAC;IAEO,UAAU,CAAC,KAAW;QAC5B,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,KAAK,QAAQ,EAAE;YAC1C,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACvD,OAAO;SACR;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,KAAK,QAAQ,EAAE;YAC1C,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YACpC,OAAO;SACR;IACH,CAAC;IAED,KAAK,CAAC,qBAAqB;QACzB,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC;QAE1B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAEpC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAClC,OAAO,SAAS,CAAC;SAClB;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACjF,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvB,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE7C,OAAO,KAAY,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,2BAA2B;QAC/B,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC;QAE1B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAEpC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAClC,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;SACrC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACjF,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvB,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC7C,OAAO,KAAY,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAEpC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAClC,OAAO,EAAE,CAAC;SACX;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;QAC/B,MAAM,OAAO,GAAG,EAAE,CAAC;QAEnB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;YACtE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACxB,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACtB;QAED,OAAO,OAAc,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,QAAa,EAAE,MAAM;QAClD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1E,OAAO;SACR;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE;YACvD,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YAC7D,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE;gBAC9B,gBAAgB;gBAChB,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC;gBAE9F,IAAI,CAAC,YAAY,EAAE;oBACjB,SAAS;iBACV;gBACD,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;aAC1D;YAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACtB,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aAClD;YAED,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,SAAS,GAAG,GAAG,CAAC;aAC5E;iBAAM;gBACL,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,SAAS,GAAG,GAAG,CAAC;aAC1D;YAED,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC3C,IAAI,CAAC,OAAO,GAAI,IAAI,CAAC,OAAO,CAAC,GAAG;gBAC9B,aAAa;gBACb,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,KAAK,MAAM,SAAS,IAAI,CAAC,KAAK,IAAI,MAAM,GAAG,CAC3D,CAAC;aACb;iBAAM;gBACL,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAQ,CAAC;aAC1E;YAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,KAAK,CAAC,CAAC;YAE3E,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAE,CAAC,SAAS,CAAC,IAAI,CACjE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC,YAAY,CAC/C,CAAC;YACF,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAC/C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,CAClD,CAAC;YAEF,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;SACvF;QAED,OAAO,MAAa,CAAC;IACvB,CAAC;IAED,oBAAoB,CAAC,UAA0B;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAEO,cAAc,CAAC,GAAQ,EAAE,IAAc,EAAE,KAAU;QACzD,IAAI,UAAU,GAAG,GAAG,CAAC;QAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,UAAU,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACxC,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;SAC9B;QAED,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAC5C,CAAC;IAEO,6BAA6B,CAAC,UAA0B,EAAE,UAA0B;QAC1F,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,YAAY,CAAC,CAAC;QAClG,IAAI,UAAU,GAAG,EAAE,CAAC;QAEpB,IAAI,CAAC,UAAU,EAAE;YACf,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;SACjC;QAED,IAAI,UAAU,CAAC,YAAY,KAAK,UAAU,CAAC,YAAY,EAAE;YACvD,UAAU,GAAG,IAAI,CAAC,6BAA6B,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;SACzE;QAED,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,GAAG,UAAU,CAAC,CAAC;IAClD,CAAC;IAEO,iBAAiB,CAAC,MAAW,EAAE,YAAiB,EAAE,IAAS;QACjE,IAAI,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE/D,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE;YAC9B,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,YAAY,CAAC,YAAY,CAAC,CAAC;YAE1G,IAAI,gBAAgB,EAAE;gBACpB,0CAA0C;gBAC1C,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;aAC9D;SACF;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAGO,eAAe;QACrB,IAAI,OAAO,GAAU;YACnB,GAAG,IAAI,CAAC,gBAAgB,CAAE,IAAI,CAAC,KAAkB,EAAE,IAAI,CAAC,UAAU,CAAC,KAAM,CAAC;SAC3E,CAAC;QAEF,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YACxB,OAAO,GAAG;gBACR,GAAG,OAAO;gBACV,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;aACjG,CAAA;SACF;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,sBAAsB;QAC5B,aAAa;QACb,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAQ,CAAC,GAAG,CAAC,CAAC,MAAc,EAAE,EAAE;YACxE,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;QACzC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;IAEO,oBAAoB;QAC1B,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrE,CAAC;IAEO,qBAAqB;QAC3B,IAAI,CAAC,UAAU,CAAC,OAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;IACxD,CAAC;IAEO,YAAY,CAAC,MAAsD;QACzE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,KAAK,CAAC,CAAC;IAC/E,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;IACxC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;IACzC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;IAC3C,CAAC;IAED,wDAAwD;IACxD,KAAK,CAAC,aAAa,CAAI,QAAgD;QACrE,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC9B,IAAI;YACF,aAAa;YACb,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,MAAM,CAAC;SACf;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtB,MAAM,CAAC,CAAC;SACT;IACH,CAAC;IAEO,iBAAiB,CAAC,GAAQ,EAAE,YAAoB,EAAE;QACxD,IAAI,MAAM,GAAa,EAAE,CAAC;QAE1B,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE;YACnB,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;gBAC3B,IAAI,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;gBACtD,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;oBACrD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;iBACnE;qBAAM;oBACL,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;iBACvE;aACF;SACF;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,mBAAmB,CAAC,MAAc,EAAE,SAAS,GAAG,KAAK;QAC3D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACzB,IAAI,SAAS,EAAE;gBACb,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,KAAM,KAAK,MAAM,GAAG,CAAA;aAC/C;YACD,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,KAAM,KAAK,MAAM,QAAQ,IAAI,CAAC,UAAU,CAAC,KAAM,IAAI,MAAM,EAAE,CAAC;SACvF;QAED,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,KAAK,WAAW,EAAE;YACpG,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;SACnC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,UAAU,GAAG,IAAI,CAAC,KAAiB,CAAC;QACxC,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,KAAM,CAAC;QAEvC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QACvF,MAAM,OAAO,GAAG,IAAI,GAAG,EAA8B,CAAA;QACrD,MAAM,aAAa,GAAG,IAAI,GAAG,EAA0B,CAAA;QACvD,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAA;QAC3E,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAA;QAEvF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACX,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/C,UAAU,GAAG,QAAQ,EAAE,MAAM,EAAc,CAAC;gBAC5C,aAAa;gBACb,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;oBAC5B,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;iBAChD;qBAAM;oBACL,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;oBAClD,OAAO,SAAS,CAAA;iBACjB;aACF;iBAAM;gBACL,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,QAAQ,CAAC,MAAM,EAAE;oBAC/B,IAAI,SAAS,EAAE;wBACb,OAAO,GAAG,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAA;qBACvC;oBACD,OAAO,GAAG,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,SAAS,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;iBACvE;gBAED,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/C,UAAU,GAAG,aAAa,EAAE,UAAsB,CAAC;gBACnD,aAAa;gBACb,SAAS,GAAG,aAAa,EAAE,SAAS,CAAC;aACtC;SACF;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,YAAY;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,IAAK,IAAI,CAAC,KAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACvF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC;QAC9C,OAAO,EAAC,SAAS,EAAE,MAAM,EAAC,CAAC;IAC7B,CAAC;IAEO,uBAAuB,CAAC,GAAW,EAAE,KAAU,EAAE,QAAuB,IAAI,EAAE,WAAmB,GAAG;QAC1G,MAAM,UAAU,GAAG,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAClD,MAAM,WAAW,GAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;QAEvE,OAAO,GAAG,UAAU,IAAI,GAAG,IAAI,QAAQ,IAAI,WAAW,EAAE,CAAC;IAC3D,CAAC;IAEO,mBAAmB,CAAC,GAAW,EAAE,MAAa,EAAE,QAAuB,IAAI;QACjF,MAAM,UAAU,GAAG,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAClD,OAAO,GAAG,UAAU,IAAI,GAAG,QAAQ,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACnH,CAAC;IAEO,uBAAuB,CAAC,UAAoB,EAAE,QAAsB;QAC1E,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,GAAG,CAAC;IACjD,CAAC;IAEO,cAAc,CAAC,SAAyB,EAAE,KAAa,EAAE,KAAe;QAC9E,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAEtG,KAAK,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YAClD,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE;gBAC9D,KAAK,GAAI,KAA+B,CAAC,QAAQ,EAAE,CAAC;aACrD;YAED,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBAC5B,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC;aAC/B;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAC5C,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,KAAK,GAAG,CAAC,CAAC;YAC5E,IAAI,YAAY,EAAE;gBAChB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;gBACvD,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,QAAQ,EAAE;oBACzC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBACpB;aACF;iBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;gBACtD,IAAI,GAAG,KAAK,KAAK,EAAE;oBACjB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;oBACxF,SAAS;iBACV;gBAED,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;aAChE;iBAAM,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBAC7D,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;aAC5D;iBAAM;gBACL,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;oBACjC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAiB,CAAC,CAAC,CAAC;iBACpK;gBAED,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;oBAChC,IAAI,QAAQ,IAAI,KAAK,EAAE;wBACrB,QAAQ,QAAQ,EAAE;4BAChB,KAAK,KAAK;gCACR,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;gCAC3E,MAAM;4BACR,KAAK,KAAK;gCACR,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;gCAC5E,MAAM;4BACR,KAAK,KAAK;gCACR,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;gCAClE,MAAM;4BACR,KAAK,MAAM;gCACT,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,GAAG,YAAY,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gCACrG,MAAM;4BACR,KAAK,OAAO;gCACV,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,GAAG,UAAU,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gCAC1D,MAAM;4BACR,KAAK,KAAK;gCACR,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gCACnD,MAAM;4BACR,KAAK,MAAM;gCACT,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,GAAG,OAAO,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gCACrD,MAAM;4BACR,KAAK,KAAK;gCACR,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gCACnD,MAAM;4BACR,KAAK,MAAM;gCACT,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,GAAG,OAAO,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gCACrD,MAAM;4BACR,KAAK,MAAM,CAAC;4BACZ,KAAK,KAAK;gCACR,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;gCACzF,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAiB,CAAC,CAAC,CAAC;gCAC5G,MAAM;yBACT;qBACF;iBACF;aACF;SACF;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB,OAAO,EAAE,CAAC;SACX;QAED,OAAO,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IAEO,CAAC,CAAC,KAAU;QAClB,OAAO,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5D,CAAC;IAEO,SAAS,CAAC,YAA+B,EAAE,KAAuB,EAAE,KAAa;QACvF,MAAM,EAAC,SAAS,EAAE,MAAM,EAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChD,MAAM,EACJ,SAAS,EAAE,aAAa,EACxB,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,SAAS,GACjB,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAE,YAAY,CAAC,MAAM,EAAe,CAAC,IAAI;YACjE,SAAS,EAAG,YAAY,CAAC,MAAM,EAAe,CAAC,IAAI,CAAC,WAAW,EAAE;YACjE,MAAM,EAAE,QAAQ;SACjB,CAAC;QACF,IAAI,gBAAgB,GAAG,IAAI,CAAC;QAC5B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;YACzC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE;gBAClD,gBAAgB,GAAG,IAAI,CAAC;gBACxB,MAAM;aACP;SACF;QACD,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,CAAC,MAAM,EAAc,CAAC,CAAC;QAC3F,IAAI,EAAE,GAAG,EAAE,CAAC;QAEZ,QAAQ,YAAY,CAAC,QAAQ,EAAE;YAC7B,KAAK,aAAa;gBAChB,EAAE,GAAG,GAAG,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,KAAK,KAAK,gBAAgB,GAAG,CAAC;gBACtF,MAAM;YACR,KAAK,aAAa;gBAChB,EAAE,GAAG,GAAG,KAAK,KAAK,YAAY,CAAC,WAAqB,OAAO,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC;gBACxG,MAAM;SACT;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,QAAQ,EAAE;YACzC,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;YAClD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;gBACxB,SAAS,EAAE,SAAS;gBACpB,SAAS,EAAE,aAAa;gBACxB,UAAU,EAAE,UAAU,IAAI,QAAQ;gBAClC,SAAS,EAAE,SAAS;gBACpB,YAAY,EAAE,YAAY,CAAC,WAAqB;gBAChD,WAAW,EAAE,KAAK;gBAClB,YAAY,EAAE,MAAM;gBACpB,WAAW,EAAE,SAAS;gBACtB,WAAW,EAAE,YAAY,CAAC,WAAW;gBACrC,UAAU,EAAG,YAAY,CAAC,MAAM,EAAe;gBAC/C,IAAI,EAAE,MAAM;gBACZ,aAAa;gBACb,EAAE;gBACF,cAAc,EAAE,YAAY,CAAC,cAA0B;gBACvD,KAAK,EAAE,SAAS;aACjB,CAAC,CAAA;SACH;aAAM;YAEL,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC;YAE9D,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC;gBAC9B,SAAS,EAAE,QAAQ;gBACnB,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC,WAAqB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;gBACpJ,KAAK,EAAE,IAAI,UAAU,IAAI,QAAQ,MAAM,aAAa,GAAG;gBACvD,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,SAAS;gBAChB,YAAY,EAAE,YAAY,CAAC,WAAqB;gBAChD,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAClC,UAAU,EAAE,gBAAgB;gBAC5B,WAAW,EAAE,KAAK;gBAClB,cAAc,EAAE,YAAY,CAAC,WAAqB;gBAClD,UAAU,EAAG,YAAY,CAAC,MAAM,EAAe;gBAC/C,YAAY,EAAE,YAAY,CAAC,cAA0B;gBACrD,KAAK,EAAE,SAAS;aACjB,CAAC,CAAA;SACH;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,QAAQ,CAAC,YAA+B;QAC9C,oEAAoE;QACpE,IAAI,OAAO,YAAY,CAAC,KAAK,KAAK,WAAW,EAAE;YAC7C,OAAO,IAAI,CAAC,CAAC,6DAA6D;SAC3E;QAED,6FAA6F;QAC7F,4CAA4C;QAC5C,IAAI,OAAO,YAAY,CAAC,KAAK,KAAK,QAAQ,EAAE;YAC1C,OAAO,YAAY,CAAC,KAAK,CAAC;SAC3B;QAED,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5E,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,CAAC;IAED,mIAAmI;IACnI,wEAAwE;IACxE,6DAA6D;IAC7D,IAAI;IAGI,SAAS,CAAC,KAAkB;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAE,KAAkB,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;SACrC;QAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEO,gBAAgB,CAAI,KAAU,EAAE,SAAyB,EAAE,IAAS;QAC1E,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAE,CAAA;QAE5B,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC;QAC9B,MAAM,eAAe,GAAgC;YACnD,CAAC,SAAS,CAAC,KAAM,CAAC,EAAE,QAAQ;SAC7B,CAAA;QACD,MAAM,eAAe,GAAyB,IAAI,GAAG,EAAE,CAAC;QACxD,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,KAAM,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAE,CAAC,CAAA;QAEpF,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAClC,MAAM,YAAY,GAAG,IAAK,IAAI,CAAC,UAAmB,EAAE,CAAC;gBACrD,YAAY,CAAC,aAAa,GAAG,IAAI,CAAC;gBAClC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC;gBAC/C,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,WAAW,CAAE,CAAC,CAAA;YACxF,CAAC,CAAC,CAAA;SACH;QAED,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC5C,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrC,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,EAAE;gBACX,OAAO;aACR;YAED,MAAM,cAAc,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YACnE,IAAI,cAAc,EAAE;gBAClB,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;oBAChE,aAAa;oBACb,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC9C,OAAO;iBACR;gBAED,aAAa;gBACb,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;aACtB;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAClC,MAAM,EAAC,SAAS,EAAE,WAAW,EAAE,WAAW,EAAC,GAAG,IAAI,CAAC;gBACnD,MAAM,YAAY,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;gBAClD,MAAM,UAAU,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;gBAC9C,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;gBAE1G,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,EAAE;oBAChC,OAAO;iBACR;gBAED,aAAa;gBACb,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;YAC/J,CAAC,CAAC,CAAA;SACH;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;;OAMG;IACK,QAAQ,CAAC,SAAiB;QAChC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;QAEhD,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,WAAW,GAAG,GAAG,KAAK,GAAG,OAAO,EAAE,CAAC;QAEvC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;YACpC,OAAO,EAAE,CAAC;YACV,WAAW,GAAG,GAAG,KAAK,GAAG,OAAO,EAAE,CAAC;SACpC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC9B,OAAO,WAAW,CAAC;IACrB,CAAC;IAEO,gBAAgB,CAAC,MAAgB,EAAE,KAAa;QACtD,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,CAAC,EAAE;YACN,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;SACrC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,KAAK,GAAG,SAAS,KAAK,IAAI,GAAG,GAAG,CAAC,CAAA;QAE9F,IAAI,CAAC,CAAC,SAAS,EAAE;YACf,KAAK,MAAM,QAAQ,IAAI,CAAC,CAAC,SAAS,EAAE;gBAClC,IAAI,QAAQ,CAAC,QAAQ,KAAK,aAAa,EAAE;oBACvC,aAAa;oBACb,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,KAAK,QAAQ,CAAC,WAAW,SAAS,KAAK,IAAI,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAA;iBACzF;aACF;SACF;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,iBAAiB,CAAC,MAAW,EAAE,aAAsB;QAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzG,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEjH,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,iBAAiB,EAAE;YAC/C,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,WAAW,EAAE;gBACtC,IAAI,OAAO,QAAQ,CAAC,OAAO,CAAC,OAAO,KAAK,UAAU,EAAE;oBAClD,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;iBAChD;qBAAM;oBACL,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;iBAC9C;aACF;SACF;QAED,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE;YACnC,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAS,EAAE,CAAC;YAC3C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,GAAG,SAAS,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,GAAG,GAAG,CAAC,CAAA;QACpG,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,iBAAiB,CAAC,MAAW,EAAE,aAAsB;QAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEzG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE;YACnC,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAS,EAAE,CAAC;YAC3C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,GAAG,SAAS,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,GAAG,GAAG,CAAC,CAAA;QACpG,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,WAAW,CAAC,SAAS,EAAE,QAAQ;QACrC,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5B,IAAI,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC5C,OAAO,KAAK,EAAE;YACZ,IAAI,KAAK,KAAK,SAAS,CAAC,SAAS,EAAE;gBACjC,OAAO,IAAI,CAAC;aACb;YACD,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;SACtC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,QAAQ,CAAC,IAAY,EAAE,KAAW;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9E,MAAM,QAAQ,GAAG,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAEnD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAA;YAE7B,IAAI,CAAC,KAAK,EAAE;gBACV,IAAI,CAAC,eAAe,EAAE,CAAC;aACxB;SACF;IACH,CAAC;IAEO,eAAe;QACrB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,QAAe,EAAE;YACjD,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;gBACvB,SAAS;aACV;YACD,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;gBACvB,SAAS;aACV;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;gBAC/B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC5D,SAAS;aACV;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,KAAK,GAAG,CAAC,EAAE;gBAC9D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;aAC7D;SACF;IACH,CAAC;CACF;AAGD,SAAS,sBAAsB,CAAI,MAA0D;IAC3F,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;QAC1B,IAAI,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE;YACjE,MAAM,CAAC,KAAK,CAAC,GAAI,MAAM,CAAC,KAAK,CAA2B,CAAC,QAAQ,EAAE,CAAC;YACpE,SAAS;SACV;QAED,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,UAAU,EAAE;YACvC,aAAa;YACb,MAAM,CAAC,KAAK,CAAC,GAAI,MAAM,CAAC,KAAK,CAAgB,CAAC,EAAE,CAAC,CAAC,wBAAwB;SAC3E;KACF;AACH,CAAC;AAED,SAAS,sBAAsB,CAAI,MAA0D;IAC3F,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;QAC1B,IAAI,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE;YACjE,MAAM,CAAC,KAAK,CAAC,GAAI,MAAM,CAAC,KAAK,CAA2B,CAAC,QAAQ,EAAE,CAAC;SACrE;KACF;AACH,CAAC;AAED,SAAS,WAAW,CAAC,SAAS,EAAE,QAAQ;IACtC,IAAI,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,KAAK,EAAE;QACZ,IAAI,KAAK,KAAK,SAAS,CAAC,SAAS,EAAE;YACjC,OAAO,IAAI,CAAC;SACb;QACD,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;KACtC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,MAAW,EAAE,MAAgB,EAAE,SAA8B,SAAS;IACtF,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;IAClD,MAAM,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChD,aAAa;IACb,MAAM,QAAQ,GAAG,IAAI,MAAM,EAAE,CAAC;IAE9B,IAAI,CAAC,aAAa,EAAE;QAClB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;KACrC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;IACzD,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;IAE1C,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE;QACnC,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,IAAI,MAAM,KAAK,QAAQ,EAAE;YACpD,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAS,EAAE,CAAC;SAC9C;QAED,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,IAAI,MAAM,KAAK,QAAQ,EAAE;YACpD,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAS,EAAE,CAAC;SAC9C;QAED,IAAI,GAAG,IAAI,MAAM,EAAE;YACjB,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;SAC7B;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,SAAS,EAAE;QACb,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;YAChC,IAAI,QAAQ,CAAC,QAAQ,KAAK,aAAa,EAAE;gBACvC,aAAa;gBACb,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;aACjE;SACF;KACF;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
1
|
+
{"version":3,"file":"SqlBuilder.js","sourceRoot":"","sources":["../src/SqlBuilder.ts"],"names":[],"mappings":"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"}
|
package/dist/bun/index.js.map
CHANGED
|
@@ -300,8 +300,8 @@
|
|
|
300
300
|
"import { EVENTS_METADATA } from '../constants';\n\nexport function BeforeCreate() {\n return function (target, propertyName) {\n const metadata = Reflect.getMetadata(EVENTS_METADATA, target.constructor) || [];\n Reflect.defineMetadata(EVENTS_METADATA, [...metadata, { type: 'beforeCreate', propertyName }], target.constructor);\n };\n}\n\nexport function AfterCreate() {\n return function (target, propertyName) {\n const metadata = Reflect.getMetadata(EVENTS_METADATA, target.constructor) || [];\n Reflect.defineMetadata(EVENTS_METADATA, [...metadata, { type: 'afterCreate', propertyName }], target.constructor);\n };\n}\n\nexport function BeforeUpdate() {\n return function (target, propertyName) {\n const metadata = Reflect.getMetadata(EVENTS_METADATA, target.constructor) || [];\n Reflect.defineMetadata(EVENTS_METADATA, [...metadata, { type: 'beforeUpdate', propertyName }], target.constructor);\n };\n}\n\nexport function AfterUpdate() {\n return function (target, propertyName) {\n const metadata = Reflect.getMetadata(EVENTS_METADATA, target.constructor) || [];\n Reflect.defineMetadata(EVENTS_METADATA, [...metadata, { type: 'afterUpdate', propertyName }], target.constructor);\n };\n}",
|
|
301
301
|
"import { Metadata, Service } from '@cheetah.js/core';\nimport { PropertyOptions } from '../decorators/property.decorator';\nimport { ColumnsInfo, Relationship, SnapshotIndexInfo, SnapshotTable } from '../driver/driver.interface';\nimport { getDefaultLength } from '../utils';\n\nexport type Property = {\n options: PropertyOptions;\n type: Function;\n}\n\nexport type Options = {\n properties: { [key: string]: Property };\n hideProperties: string[];\n indexes?: SnapshotIndexInfo[];\n relations: Relationship<any>[];\n tableName: string;\n hooks?: { type: string, propertyName: string }[];\n schema?: string;\n}\n\n@Service()\nexport class EntityStorage {\n static instance: EntityStorage;\n\n private entities: Map<Function, Options> = new Map();\n\n constructor() {\n EntityStorage.instance = this;\n }\n\n add(entity: { target: Function, options: any }, properties: {\n [key: string]: Property\n }, relations: Relationship<any>[], hooks: { type: string, propertyName: string }[]) {\n const entityName = entity.options?.tableName || entity.target.name.toLowerCase();\n const indexes = Metadata.get('indexes', entity.target) || [];\n this.entities.set(entity.target, {\n properties: properties,\n hideProperties: Object.entries(properties).filter(([key, value]) => value.options.hidden).map(([key]) => key),\n relations,\n indexes: indexes.map((index: { name: string, properties: string[] }) => {\n return {\n table: entityName,\n indexName: index.name.replace('[TABLE]', entityName),\n columnName: index.properties.join(','),\n }\n }),\n hooks,\n tableName: entityName,\n ...entity.options,\n })\n }\n\n get(entity: Function) {\n return this.entities.get(entity);\n }\n\n entries() {\n return this.entities.entries();\n }\n\n static getInstance() {\n return EntityStorage.instance;\n }\n\n async snapshot(values: Options): Promise<SnapshotTable> {\n return {\n tableName: values.tableName,\n schema: values.schema || 'public',\n indexes: values.indexes || [],\n columns: this.snapshotColumns(values),\n }\n }\n\n private snapshotColumns(values: Options): ColumnsInfo[] {\n\n let properties: ColumnsInfo[] = Object.entries(values.properties).map(([key, value]) => {\n return {\n name: key,\n type: value.options.dbType ?? value.type.name,\n nullable: value.options?.nullable,\n default: value.options?.default,\n autoIncrement: value.options?.autoIncrement,\n primary: value.options?.isPrimary,\n unique: value.options?.unique,\n length: value.options?.length,\n isEnum: value.options?.isEnum,\n enumItems: value.options?.enumItems,\n }\n })\n // @ts-ignore\n let relations: ColumnsInfo[] = values.relations && values.relations.map((relation) => {\n const type = this.getFkType(relation)\n\n return {\n name: relation.propertyKey as string,\n type,\n nullable: relation.nullable,\n unique: relation.unique,\n length: relation.length || getDefaultLength(type),\n default: relation.default,\n autoIncrement: relation.autoIncrement,\n primary: relation.isPrimary,\n foreignKeys: [\n {\n referencedColumnName: this.getFkKey(relation),\n referencedTableName: this.get(relation.entity() as any)!.tableName,\n },\n ],\n }\n })\n\n if (!relations) {\n relations = []\n }\n if (!properties) {\n properties = []\n }\n\n return [...properties, ...relations]\n }\n\n private snapshotIndexes(values: Options): SnapshotIndexInfo[] {\n return Object.entries(values.properties).map(([key, value]) => {\n return {\n indexName: key,\n columnName: key,\n table: values.tableName,\n }\n })\n }\n\n private getFkType(relation: Relationship<any>): any {\n const entity = this.get(relation.entity() as any)\n if (!entity) {\n return 'unknown'\n }\n\n return entity.properties[this.getFkKey(relation)].type.name\n }\n\n /**\n * If fkKey is null, return the primary key of the entity\n * @private\n * @param relationShip\n */\n private getFkKey(relationShip: Relationship<any>): string | number {\n // se for nullable, deverá retornar o primary key da entidade target\n if (typeof relationShip.fkKey === 'undefined') {\n const entity = this.entities.get(relationShip.entity() as any);\n const property = Object.entries(entity!.properties).find(([key, value]) => value.options.isPrimary === true);\n if (!property) {\n throw new Error(`Entity ${entity!.tableName} does not have a primary key`);\n }\n\n return property[0];\n }\n\n // se o fkKey é uma função, ele retornará a propriedade da entidade que é a chave estrangeira\n // precisamos pegar o nome dessa propriedade\n if (typeof relationShip.fkKey === 'string') {\n return relationShip.fkKey;\n }\n\n const match = /\\.(?<propriedade>[\\w]+)/.exec(relationShip.fkKey.toString());\n return match ? match.groups!.propriedade : '';\n }\n}",
|
|
302
302
|
"import { HttpException } from '@cheetah.js/core';\n\ntype VoExtended<T, Vo> = Vo extends ValueObject<T, Vo>\n ? Vo\n : ValueObject<T, Vo>;\n\nexport abstract class ValueObject<T, Vo> {\n /**\n * Validates the value of the Value Object.\n * It is abstract so that each Value Object can implement its own validation.\n * It is protected from being called directly.\n *\n * @param value\n * @protected\n */\n protected abstract validate(value: T): boolean;\n\n /**\n * Valor do Value Object.\n * É privado para não ser alterado diretamente.\n * O valor também é imutável.\n *\n * @private\n */\n private value: T;\n\n constructor(value: T) {\n if (!this.validate(value)) {\n throw new HttpException(`Invalid value for ${this.constructor.name}`, 400);\n }\n\n this.setValue(value);\n }\n\n /**\n * Creates a Value Object instance from a value.\n *\n * @example\n * Email.from('test@test.com');\n *\n * @param value\n */\n static from<T, Vo>(\n this: new (value: T) => VoExtended<T, Vo>,\n value: T,\n ): VoExtended<T, Vo> {\n return new this(value);\n }\n\n /**\n * Returns the scalar value of the Value Object.\n *\n */\n public getValue(): T {\n return this.value;\n }\n\n /**\n * Compares the value of the Value Object with another Value Object.\n *\n * @param vo\n */\n public equals(vo: ValueObject<T, Vo>): boolean {\n return this.getValue() === vo.getValue();\n }\n\n /**\n * Sets the value of the Value Object.\n *\n * @param value\n * @private\n */\n private setValue(value: T) {\n this.value = value;\n }\n}",
|
|
303
|
-
"import { SqlBuilder } from '../SqlBuilder';\nimport { FilterQuery, FindOneOption, FindOptions, ValueOrInstance } from '../driver/driver.interface';\nimport { EntityStorage,
|
|
304
|
-
"import {\n AutoPath,\n DriverInterface,\n FilterQuery,\n JoinStatement,\n QueryOrderMap,\n Relationship,\n Statement,\n ValueOrInstance,\n} from './driver/driver.interface';\nimport { EntityStorage, Options } from './domain/entities';\nimport { Orm } from './orm';\nimport { LoggerService } from '@cheetah.js/core';\nimport { ValueObject } from './common/value-object';\nimport { BaseEntity } from '@cheetah.js/orm/domain/base-entity';\n\nexport class SqlBuilder<T> {\n private readonly driver: DriverInterface;\n private entityStorage: EntityStorage;\n private statements: Statement<T> = {};\n private entity!: Options;\n private model!: new () => T;\n private aliases: Set<string> = new Set();\n private lastKeyNotOperator = '';\n private logger: LoggerService;\n private updatedColumns: any[] = [];\n private originalColumns: any[] = [];\n\n constructor(model: new () => T) {\n const orm = Orm.getInstance();\n this.driver = orm.driverInstance;\n this.logger = orm.logger;\n this.entityStorage = EntityStorage.getInstance();\n\n this.getEntity(model);\n this.statements.hooks = this.entity.hooks;\n }\n\n select(columns?: AutoPath<T, never, '*'>[]): SqlBuilder<T> {\n const tableName = this.entity.tableName || (this.model as Function).name.toLowerCase();\n const schema = this.entity.schema || 'public';\n\n this.statements.statement = 'select';\n this.statements.columns = columns;\n this.originalColumns = columns || [];\n this.statements.alias = this.getAlias(tableName);\n this.statements.table = `\"${schema}\".\"${tableName}\"`;\n return this;\n }\n\n setStrategy(strategy: 'joined' | 'select' = 'joined'): SqlBuilder<T> {\n this.statements.strategy = strategy;\n return this;\n }\n\n setInstance(instance: T): SqlBuilder<T> {\n this.statements.instance = instance;\n return this;\n }\n\n insert(values: Partial<{ [K in keyof T]: ValueOrInstance<T[K]> }>): SqlBuilder<T> {\n const {tableName, schema} = this.getTableName();\n processValuesForInsert(values);\n this.statements.instance = upEntity(values, this.model, 'insert')\n this.statements.statement = 'insert';\n this.statements.alias = this.getAlias(tableName);\n this.statements.table = `\"${schema}\".\"${tableName}\"`;\n this.statements.values = this.withUpdatedValues(\n this.withDefaultValues(values, this.entity),\n this.entity,\n );\n return this;\n }\n\n update(values: Partial<{ [K in keyof T]: ValueOrInstance<T[K]> }>): SqlBuilder<T> {\n const {tableName, schema} = this.getTableName();\n processValuesForUpdate(values);\n this.statements.instance = upEntity(values, this.model, 'update')\n this.statements.statement = 'update';\n this.statements.alias = this.getAlias(tableName);\n this.statements.table = `${schema}.${tableName}`;\n this.statements.values = this.withUpdatedValues(values, this.entity);\n return this;\n }\n\n where(where: FilterQuery<T>): SqlBuilder<T> {\n if (!where || Object.keys(where).length === 0) {\n return this;\n }\n\n this.statements.where = this.conditionToSql(where, this.statements.alias!, this.model);\n return this;\n }\n\n orderBy(orderBy: (QueryOrderMap<T> & { 0?: never }) | QueryOrderMap<T>[]): SqlBuilder<T> {\n if (!orderBy) {\n return this;\n }\n\n this.statements.orderBy = this.objectToStringMap(orderBy);\n return this;\n }\n\n limit(limit: number | undefined): SqlBuilder<T> {\n this.statements.limit = limit;\n return this;\n }\n\n offset(offset: number | undefined): SqlBuilder<T> {\n this.statements.offset = offset;\n return this;\n }\n\n load(load: string[]): SqlBuilder<T> {\n load?.forEach(relationshipPath => {\n this.addJoinForRelationshipPath(this.entity, relationshipPath);\n });\n if (this.statements.join) {\n this.statements.join = this.statements.join?.reverse()\n }\n\n if (this.statements.selectJoin) {\n this.statements.selectJoin = this.statements.selectJoin?.reverse()\n }\n\n return this;\n }\n\n private addJoinForRelationshipPath(entity: Options, relationshipPath: string) {\n const relationshipNames = relationshipPath.split('.');\n let currentEntity = entity;\n let currentAlias = this.statements.alias!;\n let statement = this.statements.strategy === 'joined' ? this.statements.join : this.statements.selectJoin;\n let nameAliasProperty = this.statements.strategy === 'joined' ? 'joinAlias' : 'alias';\n\n relationshipNames.forEach((relationshipName, index) => {\n const relationship = currentEntity.relations.find(rel => rel.propertyKey === relationshipName);\n\n if (!relationship) {\n // @ts-ignore\n throw new Error(`Relationship \"${relationshipName}\" not found in entity \"${currentEntity.name}\"`);\n }\n\n const isLastRelationship = index === relationshipNames.length - 1;\n\n if (index === (relationshipNames.length - 2 >= 0 ? relationshipNames.length - 2 : 0)) {\n const join = statement?.find(j => j.joinProperty === relationshipName);\n if (join) {\n // @ts-ignore\n currentAlias = join[nameAliasProperty];\n }\n }\n\n if (relationship.relation === 'many-to-one' && isLastRelationship) {\n this.applyJoin(relationship, {}, currentAlias);\n statement = this.statements.strategy === 'joined' ? this.statements.join : this.statements.selectJoin;\n currentAlias = statement[statement.length - 1][nameAliasProperty];\n }\n\n currentEntity = this.entityStorage.get(relationship.entity() as Function)!;\n });\n }\n\n private getPrimaryKeyColumnName(entity: Options): string {\n // Lógica para obter o nome da coluna de chave primária da entidade\n // Aqui você pode substituir por sua própria lógica, dependendo da estrutura do seu projeto\n // Por exemplo, se a chave primária for sempre 'id', você pode retornar 'id'.\n // Se a lógica for mais complexa, você pode adicionar um método na classe Options para obter a chave primária.\n return 'id';\n }\n\n async execute(): Promise<{ query: any; startTime: number; sql: string }> {\n if (!this.statements.columns) {\n this.statements.columns = this.generateColumns();\n } else {\n this.extractAliasForColumns();\n this.filterInvalidColumns();\n }\n this.statements.join = this.statements.join?.reverse()\n this.includeUpdatedColumns();\n this.beforeHooks();\n const result = await this.driver.executeStatement(this.statements);\n this.logExecution(result);\n return result;\n }\n\n private beforeHooks() {\n if (this.statements.statement === 'update') {\n this.callHook('beforeUpdate', this.statements.instance);\n return;\n }\n\n if (this.statements.statement === 'insert') {\n this.callHook('beforeCreate');\n return;\n }\n }\n\n private afterHooks(model?: any) {\n if (this.statements.statement === 'update') {\n this.callHook('afterUpdate', this.statements.instance);\n return;\n }\n\n if (this.statements.statement === 'insert') {\n this.callHook('afterCreate', model);\n return;\n }\n }\n\n async executeAndReturnFirst(): Promise<T | undefined> {\n this.statements.limit = 1;\n\n const result = await this.execute();\n\n if (result.query.rows.length === 0) {\n return undefined;\n }\n\n const entities = result.query.rows[0];\n const model = await this.transformToModel(this.model, this.statements, entities);\n this.afterHooks(model);\n await this.handleSelectJoin(entities, model);\n\n return model as any;\n }\n\n async executeAndReturnFirstOrFail(): Promise<T> {\n this.statements.limit = 1;\n\n const result = await this.execute();\n\n if (result.query.rows.length === 0) {\n throw new Error('Result not found');\n }\n\n const entities = result.query.rows[0];\n const model = await this.transformToModel(this.model, this.statements, entities);\n this.afterHooks(model);\n await this.handleSelectJoin(entities, model);\n return model as any;\n }\n\n async executeAndReturnAll(): Promise<T[]> {\n const result = await this.execute();\n\n if (result.query.rows.length === 0) {\n return [];\n }\n\n const rows = result.query.rows;\n const results = [];\n\n for (const row of rows) {\n const models = this.transformToModel(this.model, this.statements, row)\n this.afterHooks(models);\n await this.handleSelectJoin(row, models);\n results.push(models);\n }\n\n return results as any;\n }\n\n private async handleSelectJoin(entities: any, models): Promise<void> {\n if (!this.statements.selectJoin || this.statements.selectJoin.length === 0) {\n return;\n }\n\n for (const join of this.statements.selectJoin.reverse()) {\n let ids = entities[`${join.originAlias}_${join.primaryKey}`];\n if (typeof ids === 'undefined') {\n // get of models\n const selectJoined = this.statements.selectJoin.find(j => j.joinEntity === join.originEntity);\n\n if (!selectJoined) {\n continue;\n }\n ids = this.findIdRecursively(models, selectJoined, join);\n }\n\n if (Array.isArray(ids)) {\n ids = ids.map((id: any) => this.t(id)).join(', ')\n }\n\n if (join.where) {\n join.where = `${join.where} AND ${join.alias}.\"${join.fkKey}\" IN (${ids})`;\n } else {\n join.where = `${join.alias}.\"${join.fkKey}\" IN (${ids})`;\n }\n\n if (join.columns && join.columns.length > 0) {\n join.columns = (join.columns.map(\n // @ts-ignore\n (column) => `${join.alias}.\"${column}\" as \"${join.alias}_${column}\"`,\n ) as any[]);\n } else {\n join.columns = this.getColumnsEntity(join.joinEntity, join.alias) as any;\n }\n\n const child = await this.driver.executeStatement(join);\n this.logger.debug(`SQL: ${child.sql} [${Date.now() - child.startTime}ms]`);\n\n const property = this.entityStorage.get(this.model)!.relations.find(\n (rel) => rel.propertyKey === join.joinProperty,\n );\n const values = child.query.rows.map((row: any) =>\n this.transformToModel(join.joinEntity, join, row),\n );\n\n const path = this.getPathForSelectJoin(join);\n this.setValueByPath(models, path, property?.type === Array ? [...values] : values[0]);\n }\n\n return models as any;\n }\n\n getPathForSelectJoin(selectJoin: Statement<any>): string[] | null {\n const path = this.getPathForSelectJoinRecursive(this.statements, selectJoin);\n return path.reverse();\n }\n\n private setValueByPath(obj: any, path: string[], value: any) {\n let currentObj = obj;\n\n for (let i = 0; i < path.length - 1; i++) {\n const key = path[i];\n currentObj[key] = currentObj[key] || {};\n currentObj = currentObj[key];\n }\n\n currentObj[path[path.length - 1]] = value;\n }\n\n private getPathForSelectJoinRecursive(statements: Statement<any>, selectJoin: Statement<any>): string[] | null {\n const originJoin = this.statements.selectJoin.find(j => j.joinEntity === selectJoin.originEntity);\n let pathInJoin = [];\n\n if (!originJoin) {\n return [selectJoin.joinProperty]\n }\n\n if (originJoin.originEntity !== statements.originEntity) {\n pathInJoin = this.getPathForSelectJoinRecursive(statements, originJoin);\n }\n\n return [selectJoin.joinProperty, ...pathInJoin];\n }\n\n private findIdRecursively(models: any, selectJoined: any, join: any): any {\n let ids = models[selectJoined.originProperty][join.primaryKey];\n\n if (typeof ids === 'undefined') {\n const nextSelectJoined = this.statements.selectJoin.find(j => j.joinEntity === selectJoined.originEntity);\n\n if (nextSelectJoined) {\n // Chamada recursiva para a próxima camada\n ids = this.findIdRecursively(models, nextSelectJoined, join);\n }\n }\n\n return ids;\n }\n\n\n private generateColumns(): any[] {\n let columns: any[] = [\n ...this.getColumnsEntity((this.model as Function), this.statements.alias!),\n ];\n\n if (this.statements.join) {\n columns = [\n ...columns,\n ...this.statements.join.flatMap(join => this.getColumnsEntity(join.joinEntity!, join.joinAlias)),\n ]\n }\n\n return columns;\n }\n\n private extractAliasForColumns() {\n // @ts-ignore\n this.statements.columns = this.statements.columns!.map((column: string) => {\n return this.discoverColumnAlias(column)\n }).flat();\n }\n\n private filterInvalidColumns() {\n this.statements.columns = this.statements.columns!.filter(Boolean);\n }\n\n private includeUpdatedColumns() {\n this.statements.columns!.push(...this.updatedColumns);\n }\n\n private logExecution(result: { query: any, startTime: number, sql: string }): void {\n this.logger.debug(`SQL: ${result.sql} [${Date.now() - result.startTime}ms]`);\n }\n\n startTransaction(): Promise<void> {\n return this.driver.startTransaction();\n }\n\n commit(): Promise<void> {\n return this.driver.commitTransaction();\n }\n\n rollback(): Promise<void> {\n return this.driver.rollbackTransaction();\n }\n\n // TODO: transform transaction queries into just 1 query\n async inTransaction<T>(callback: (builder: SqlBuilder<T>) => Promise<T>): Promise<T> {\n await this.startTransaction();\n try {\n // @ts-ignore\n const result = await callback(this);\n await this.commit();\n return result;\n } catch (e) {\n await this.rollback();\n throw e;\n }\n }\n\n private objectToStringMap(obj: any, parentKey: string = ''): string[] {\n let result: string[] = [];\n\n for (let key in obj) {\n if (obj.hasOwnProperty(key)) {\n let fullKey = parentKey ? `${parentKey}.${key}` : key;\n if (typeof obj[key] === 'object' && obj[key] !== null) {\n result = result.concat(this.objectToStringMap(obj[key], fullKey));\n } else {\n result.push(`${this.discoverColumnAlias(fullKey, true)} ${obj[key]}`);\n }\n }\n }\n\n return result;\n }\n\n private discoverColumnAlias(column: string, onlyAlias = false): string {\n if (!column.includes('.')) {\n if (onlyAlias) {\n return `${this.statements.alias!}.\"${column}\"`\n }\n return `${this.statements.alias!}.\"${column}\" as ${this.statements.alias!}_${column}`;\n }\n\n if (typeof this.statements.join === 'undefined' && typeof this.statements.selectJoin === 'undefined') {\n throw new Error('Join not found');\n }\n\n const entities = column.split('.');\n let lastEntity = this.model as Function;\n let lastAlias = this.statements.alias!;\n\n const relationsMap = new Map(this.entity.relations.map(rel => [rel.propertyKey, rel]));\n const joinMap = new Map<string, JoinStatement<any>>()\n const joinSelectMap = new Map<string, Statement<any>>()\n this.statements.join?.forEach(join => joinMap.set(join.joinProperty, join))\n this.statements.selectJoin?.forEach(join => joinSelectMap.set(join.joinProperty, join))\n\n for (let i = 0; i < entities.length; i++) {\n if (i === 0) {\n const relation = relationsMap.get(entities[i]);\n lastEntity = relation?.entity() as Function;\n // @ts-ignore\n if (joinMap.has(entities[i])) {\n lastAlias = joinMap.get(entities[i]).joinAlias;\n } else {\n lastAlias = joinSelectMap.get(entities[i])?.alias;\n return undefined\n }\n } else {\n if ((i + 1) === entities.length) {\n if (onlyAlias) {\n return `${lastAlias}.\"${entities[i]}\"`\n }\n return `${lastAlias}.\"${entities[i]}\" as ${lastAlias}_${entities[i]}`;\n }\n\n const lastStatement = joinMap.get(entities[i]);\n lastEntity = lastStatement?.joinEntity as Function;\n // @ts-ignore\n lastAlias = lastStatement?.joinAlias;\n }\n }\n\n return '';\n }\n\n private getTableName() {\n const tableName = this.entity.tableName || (this.model as Function).name.toLowerCase();\n const schema = this.entity.schema || 'public';\n return {tableName, schema};\n }\n\n private addSimpleConditionToSql(key: string, value: any, alias: string | null = null, operator: string = '='): string {\n const aliasToUse = alias || this.statements.alias;\n const valueByType = (typeof value === 'string') ? `'${value}'` : value;\n\n return `${aliasToUse}.${key} ${operator} ${valueByType}`;\n }\n\n private addInConditionToSql(key: string, values: any[], alias: string | null = null): string {\n const aliasToUse = alias || this.statements.alias;\n return `${aliasToUse}.${key} IN (${values.map(val => (typeof val === 'string') ? `'${val}'` : val).join(\", \")})`;\n }\n\n private addLogicalOperatorToSql(conditions: string[], operator: 'AND' | 'OR'): string {\n return `(${conditions.join(` ${operator} `)})`;\n }\n\n private conditionToSql(condition: FilterQuery<T>, alias: string, model: Function): string {\n const sqlParts = [];\n const operators = ['$eq', '$ne', '$in', '$nin', '$like', '$gt', '$gte', '$lt', '$lte', '$and', '$or'];\n\n for (let [key, value] of Object.entries(condition)) {\n if (this.extendsFrom(ValueObject, value.constructor.prototype)) {\n value = (value as ValueObject<any, any>).getValue();\n }\n\n if (!operators.includes(key)) {\n this.lastKeyNotOperator = key;\n }\n const entity = this.entityStorage.get(model)\n const relationShip = entity.relations?.find(rel => rel.propertyKey === key);\n if (relationShip) {\n const sql = this.applyJoin(relationShip, value, alias);\n if (this.statements.strategy === 'joined') {\n sqlParts.push(sql);\n }\n } else if (typeof value !== 'object' || value === null) {\n if (key === '$eq') {\n sqlParts.push(this.addSimpleConditionToSql(this.lastKeyNotOperator, value, alias, '='));\n continue;\n }\n\n sqlParts.push(this.addSimpleConditionToSql(key, value, alias));\n } else if (!(operators.includes(key)) && Array.isArray(value)) {\n sqlParts.push(this.addInConditionToSql(key, value, alias));\n } else {\n if (['$or', '$and'].includes(key)) {\n sqlParts.push(this.addLogicalOperatorToSql(value.map((cond: any) => this.conditionToSql(cond, alias, model)), key.toUpperCase().replace('$', '') as 'AND' | 'OR'));\n }\n\n for (const operator of operators) {\n if (operator in value) {\n switch (operator) {\n case '$eq':\n sqlParts.push(this.addSimpleConditionToSql(key, value['$eq'], alias, '='));\n break;\n case '$ne':\n sqlParts.push(this.addSimpleConditionToSql(key, value['$ne'], alias, '!='));\n break;\n case '$in':\n sqlParts.push(this.addInConditionToSql(key, value['$in'], alias));\n break;\n case '$nin':\n sqlParts.push(`${alias}.${key} NOT IN (${value['$nin'].map((val: any) => this.t(val)).join(\", \")})`);\n break;\n case '$like':\n sqlParts.push(`${alias}.${key} LIKE '${value['$like']}'`);\n break;\n case '$gt':\n sqlParts.push(`${alias}.${key} > ${value['$gt']}`);\n break;\n case '$gte':\n sqlParts.push(`${alias}.${key} >= ${value['$gte']}`);\n break;\n case '$lt':\n sqlParts.push(`${alias}.${key} < ${value['$lt']}`);\n break;\n case '$lte':\n sqlParts.push(`${alias}.${key} <= ${value['$lte']}`);\n break;\n case '$and':\n case '$or':\n const parts = value[operator].map((cond: any) => this.conditionToSql(cond, alias, model))\n sqlParts.push(this.addLogicalOperatorToSql(parts, operator.toUpperCase().replace('$', '') as 'AND' | 'OR'));\n break;\n }\n }\n }\n }\n }\n if (sqlParts.length === 0) {\n return '';\n }\n\n return this.addLogicalOperatorToSql(sqlParts, 'AND');\n }\n\n private t(value: any) {\n return (typeof value === 'string') ? `'${value}'` : value;\n }\n\n private applyJoin(relationShip: Relationship<any>, value: FilterQuery<any>, alias: string) {\n const {tableName, schema} = this.getTableName();\n const {\n tableName: joinTableName,\n schema: joinSchema,\n hooks: joinHooks,\n } = this.entityStorage.get((relationShip.entity() as Function)) || {\n tableName: (relationShip.entity() as Function).name.toLowerCase(),\n schema: 'public',\n };\n let originPrimaryKey = 'id';\n for (const prop in this.entity.properties) {\n if (this.entity.properties[prop].options.isPrimary) {\n originPrimaryKey = prop;\n break;\n }\n }\n const joinAlias = `${this.getAlias(joinTableName)}`;\n const joinWhere = this.conditionToSql(value, joinAlias, relationShip.entity() as Function);\n let on = '';\n\n switch (relationShip.relation) {\n case \"one-to-many\":\n on = `${joinAlias}.\"${this.getFkKey(relationShip)}\" = ${alias}.\"${originPrimaryKey}\"`;\n break;\n case \"many-to-one\":\n on = `${alias}.\"${relationShip.propertyKey as string}\" = ${joinAlias}.\"${this.getFkKey(relationShip)}\"`;\n break;\n }\n\n if (this.statements.strategy === 'joined') {\n this.statements.join = this.statements.join || [];\n this.statements.join.push({\n joinAlias: joinAlias,\n joinTable: joinTableName,\n joinSchema: joinSchema || 'public',\n joinWhere: joinWhere,\n joinProperty: relationShip.propertyKey as string,\n originAlias: alias,\n originSchema: schema,\n originTable: tableName,\n propertyKey: relationShip.propertyKey,\n joinEntity: (relationShip.entity() as Function),\n type: 'LEFT',\n // @ts-ignore\n on,\n originalEntity: relationShip.originalEntity as Function,\n hooks: joinHooks,\n })\n } else {\n\n this.statements.selectJoin = this.statements.selectJoin || [];\n\n this.statements.selectJoin.push({\n statement: 'select',\n columns: this.originalColumns.filter(column => column.startsWith(`${relationShip.propertyKey as string}`)).map(column => column.split('.')[1]) || [],\n table: `\"${joinSchema || 'public'}\".\"${joinTableName}\"`,\n alias: joinAlias,\n where: joinWhere,\n joinProperty: relationShip.propertyKey as string,\n fkKey: this.getFkKey(relationShip),\n primaryKey: originPrimaryKey,\n originAlias: alias,\n originProperty: relationShip.propertyKey as string,\n joinEntity: (relationShip.entity() as Function),\n originEntity: relationShip.originalEntity as Function,\n hooks: joinHooks,\n })\n }\n return joinWhere;\n }\n\n private getFkKey(relationShip: Relationship<any>): string {\n // se for nullable, deverá retornar o primary key da entidade target\n if (typeof relationShip.fkKey === 'undefined') {\n return 'id'; // TODO: Pegar dinamicamente o primary key da entidade target\n }\n\n // se o fkKey é uma função, ele retornará a propriedade da entidade que é a chave estrangeira\n // precisamos pegar o nome dessa propriedade\n if (typeof relationShip.fkKey === 'string') {\n return relationShip.fkKey;\n }\n\n const match = /\\.(?<propriedade>[\\w]+)/.exec(relationShip.fkKey.toString());\n return match ? match.groups!.propriedade : '';\n }\n\n // private conditionLogicalOperatorToSql<T extends typeof BaseEntity>(conditions: Condition<T>[], operator: 'AND' | 'OR'): string {\n // const sqlParts = conditions.map(cond => this.conditionToSql(cond));\n // return this.addLogicalOperatorToSql(sqlParts, operator);\n // }\n\n\n private getEntity(model: new () => T) {\n const entity = this.entityStorage.get((model as Function));\n this.model = model;\n\n if (!entity) {\n throw new Error('Entity not found');\n }\n\n this.entity = entity;\n }\n\n private transformToModel<T>(model: any, statement: Statement<any>, data: any): T {\n const instance = new model()\n\n instance.$_isPersisted = true;\n const entitiesByAlias: { [key: string]: Function } = {\n [statement.alias!]: instance,\n }\n const entitiesOptions: Map<string, Options> = new Map();\n entitiesOptions.set(statement.alias!, this.entityStorage.get(instance.constructor)!)\n\n if (this.statements.join) {\n this.statements.join.forEach(join => {\n const joinInstance = new (join.joinEntity! as any)();\n joinInstance.$_isPersisted = true;\n entitiesByAlias[join.joinAlias] = joinInstance;\n entitiesOptions.set(join.joinAlias, this.entityStorage.get(joinInstance.constructor)!)\n })\n }\n\n Object.entries(data).forEach(([key, value]) => {\n const [alias, prop] = key.split('_');\n const entity = entitiesByAlias[alias];\n if (!entity) {\n return;\n }\n\n const entityProperty = entitiesOptions.get(alias)!.properties[prop]\n if (entityProperty) {\n if (this.extendsFrom(ValueObject, entityProperty.type.prototype)) {\n // @ts-ignore\n entity[prop] = new entityProperty.type(value);\n return;\n }\n\n // @ts-ignore\n entity[prop] = value;\n }\n });\n\n if (this.statements.join) {\n this.statements.join.forEach(join => {\n const {joinAlias, originAlias, propertyKey} = join;\n const originEntity = entitiesByAlias[originAlias];\n const joinEntity = entitiesByAlias[joinAlias];\n const property = entitiesOptions.get(originAlias)!.relations.find(rel => rel.propertyKey === propertyKey);\n\n if (!originEntity || !joinEntity) {\n return;\n }\n\n // @ts-ignore\n originEntity[propertyKey] = (property.type === Array) ? (originEntity[propertyKey]) ? [...originEntity[propertyKey], joinEntity] : [joinEntity] : joinEntity;\n })\n }\n\n return instance;\n }\n\n /**\n * Retrieves an alias for a given table name.\n *\n * @param {string} tableName - The name of the table.\n * @private\n * @returns {string} - The alias for the table name.\n */\n private getAlias(tableName: string): string {\n const alias = tableName.split('').shift() || '';\n\n let counter = 1;\n let uniqueAlias = `${alias}${counter}`;\n\n while (this.aliases.has(uniqueAlias)) {\n counter++;\n uniqueAlias = `${alias}${counter}`;\n }\n\n this.aliases.add(uniqueAlias);\n return uniqueAlias;\n }\n\n private getColumnsEntity(entity: Function, alias: string): string [] {\n const e = this.entityStorage.get(entity);\n if (!e) {\n throw new Error('Entity not found');\n }\n\n const columns = Object.keys(e.properties).map(key => `${alias}.\"${key}\" as \"${alias}_${key}\"`)\n\n if (e.relations) {\n for (const relation of e.relations) {\n if (relation.relation === 'many-to-one') {\n // @ts-ignore\n columns.push(`${alias}.\"${relation.propertyKey}\" as \"${alias}_${relation.propertyKey}\"`)\n }\n }\n }\n\n return columns;\n }\n\n private withDefaultValues(values: any, entityOptions: Options) {\n const property = Object.entries(entityOptions.properties).filter(([_, value]) => value.options.onInsert);\n const defaultProperties = Object.entries(entityOptions.properties).filter(([_, value]) => value.options.default);\n\n for (const [key, property] of defaultProperties) {\n if (typeof values[key] === 'undefined') {\n if (typeof property.options.default === 'function') {\n values[key] = eval(property.options.default());\n } else {\n values[key] = eval(property.options.default);\n }\n }\n }\n\n property.forEach(([key, property]) => {\n values[key] = property.options.onInsert!();\n this.updatedColumns.push(`${this.statements.alias}.\"${key}\" as \"${this.statements.alias}_${key}\"`)\n });\n\n return values;\n }\n\n private withUpdatedValues(values: any, entityOptions: Options) {\n const property = Object.entries(entityOptions.properties).filter(([_, value]) => value.options.onUpdate);\n\n property.forEach(([key, property]) => {\n values[key] = property.options.onUpdate!();\n this.updatedColumns.push(`${this.statements.alias}.\"${key}\" as \"${this.statements.alias}_${key}\"`)\n });\n\n return values;\n }\n\n private extendsFrom(baseClass, instance) {\n if (!instance) return false;\n let proto = Object.getPrototypeOf(instance);\n while (proto) {\n if (proto === baseClass.prototype) {\n return true;\n }\n proto = Object.getPrototypeOf(proto);\n }\n return false;\n }\n\n public callHook(type: string, model?: any) {\n const hooks = this.statements.hooks?.filter(hook => hook.type === type) || [];\n const instance = model || this.statements.instance;\n\n for (const hook of hooks) {\n instance[hook.propertyName]()\n\n if (!model) {\n this.reflectToValues();\n }\n }\n }\n\n private reflectToValues() {\n for (const key in this.statements.instance as any) {\n if (key.startsWith('$')) {\n continue;\n }\n if (key.startsWith('_')) {\n continue;\n }\n if (this.entity.properties[key]) {\n this.statements.values[key] = this.statements.instance[key];\n continue;\n }\n if (this.entity.relations.find(rel => rel.propertyKey === key)) {\n this.statements.values[key] = this.statements.instance[key];\n }\n }\n }\n}\n\n\nfunction processValuesForInsert<T>(values: Partial<{ [K in keyof T]: ValueOrInstance<T[K]> }>): void {\n for (const value in values) {\n if (extendsFrom(ValueObject, values[value].constructor.prototype)) {\n values[value] = (values[value] as ValueObject<any, any>).getValue();\n continue;\n }\n\n if (values[value] instanceof BaseEntity) {\n // @ts-ignore\n values[value] = (values[value] as BaseEntity).id; // TODO: get primary key\n }\n }\n}\n\nfunction processValuesForUpdate<T>(values: Partial<{ [K in keyof T]: ValueOrInstance<T[K]> }>): void {\n for (const value in values) {\n if (extendsFrom(ValueObject, values[value].constructor.prototype)) {\n values[value] = (values[value] as ValueObject<any, any>).getValue();\n }\n }\n}\n\nfunction extendsFrom(baseClass, instance): boolean {\n let proto = Object.getPrototypeOf(instance);\n while (proto) {\n if (proto === baseClass.prototype) {\n return true;\n }\n proto = Object.getPrototypeOf(proto);\n }\n return false;\n}\n\nfunction upEntity(values: any, entity: Function, moment: 'insert' | 'update' = undefined) {\n const entityStorage = EntityStorage.getInstance();\n const entityOptions = entityStorage.get(entity);\n // @ts-ignore\n const instance = new entity();\n\n if (!entityOptions) {\n throw new Error('Entity not found');\n }\n\n const property = Object.entries(entityOptions.properties)\n const relations = entityOptions.relations;\n\n property.forEach(([key, property]) => {\n if (property.options.onInsert && moment === 'insert') {\n instance[key] = property.options.onInsert!();\n }\n\n if (property.options.onInsert && moment === 'update') {\n instance[key] = property.options.onUpdate!();\n }\n\n if (key in values) {\n instance[key] = values[key];\n }\n })\n\n if (relations) {\n for (const relation of relations) {\n if (relation.relation === 'many-to-one') {\n // @ts-ignore\n instance[relation.propertyKey] = instance[relation.propertyKey];\n }\n }\n }\n\n return instance;\n}",
|
|
303
|
+
"import { SqlBuilder } from '../SqlBuilder';\nimport { FilterQuery, FindOneOption, FindOptions, ValueOrInstance } from '../driver/driver.interface';\nimport { EntityStorage, Property } from './entities';\n\nexport abstract class BaseEntity {\n private _oldValues: any = {};\n private _changedValues: any = {};\n private $_isPersisted: boolean = false;\n\n constructor() {\n return new Proxy(this, {\n set(target: any, p: string, newValue: any): boolean {\n\n if (p.startsWith('$')) {\n target[p] = newValue;\n return true;\n }\n\n // se oldvalue não existir, é porque é a primeira vez que o atributo está sendo setado\n if (!target._oldValues[p]) {\n target._oldValues[p] = newValue;\n }\n\n // se o valor for diferente do valor antigo, é porque o valor foi alterado\n if (target._oldValues[p] !== newValue) {\n target._changedValues[p] = newValue;\n }\n\n target[p] = newValue;\n\n return true;\n },\n })\n }\n\n /**\n * Gets current entity's Repository.\n */\n static createQueryBuilder<T>(\n this: { new(): T } & typeof BaseEntity,\n ): SqlBuilder<T> {\n return new SqlBuilder<T>(this);\n }\n\n /**\n * Gets current entity's Repository.\n */\n private createQueryBuilder<T>(): SqlBuilder<T> {\n // @ts-ignore\n return new SqlBuilder<T>(this.constructor);\n }\n\n static async find<T, Hint extends string = never>(\n this: { new(): T } & typeof BaseEntity,\n where: FilterQuery<T>,\n options?: FindOptions<T, Hint>\n ): Promise<T[]> {\n return this.createQueryBuilder<T>()\n .select(options?.fields as any)\n .setStrategy(options?.loadStrategy)\n .load(options?.load as any[])\n .where(where)\n .limit(options?.limit)\n .offset(options?.offset)\n .orderBy(options?.orderBy as string[])\n .executeAndReturnAll();\n }\n\n static async findOne<T, Hint extends string = never>(\n this: { new(): T } & typeof BaseEntity,\n where: FilterQuery<T>,\n options?: FindOneOption<T, Hint>\n ): Promise<T | undefined> {\n return this.createQueryBuilder<T>()\n .select(options?.fields as any)\n .setStrategy(options?.loadStrategy)\n .load(options?.load as any[])\n .where(where)\n .executeAndReturnFirst();\n }\n\n /**\n * Find a record in the database based on the provided query where and return it, or throw an error if not found.\n *\n * @param {FilterQuery<T>} where - The query where used to search for the record.\n * @param options\n * @return {Promise<T>} - A promise that resolves with the found record.\n */\n static async findOneOrFail<T, Hint extends string = never>(\n this: { new(): T } & typeof BaseEntity,\n where: FilterQuery<T>,\n options?: FindOneOption<T, Hint>\n ): Promise<T> {\n return this.createQueryBuilder<T>()\n // @ts-ignore\n .select(options?.fields)\n .setStrategy(options?.loadStrategy)\n .load(options?.load as any[])\n .where(where)\n .orderBy(options?.orderBy as string[])\n .executeAndReturnFirstOrFail();\n }\n\n static async findAll<\n T extends object,\n Hint extends string = never\n >(\n this: { new(): T } & typeof BaseEntity,\n options: FindOptions<T, Hint>\n ): Promise<T[]> {\n const builder = this.createQueryBuilder<T>()\n .select(options.fields as any)\n .setStrategy(options?.loadStrategy)\n .load(options?.load as any[])\n .offset(options?.offset)\n .limit(options.limit)\n .orderBy(options?.orderBy as string[]);\n\n return builder.executeAndReturnAll();\n }\n\n static async create<T extends BaseEntity>(\n this: { new(): T } & typeof BaseEntity,\n where: Partial<{ [K in keyof T]: ValueOrInstance<T[K]> }>,\n ): Promise<T> {\n return this.createQueryBuilder<T>()\n .insert(where)\n .executeAndReturnFirstOrFail();\n }\n\n public async save() {\n const qb = this.createQueryBuilder()\n\n if (this.$_isPersisted) {\n qb.update(this._changedValues);\n qb.setInstance(this)\n // @ts-ignore\n qb.where({id: this._oldValues.id})\n } else {\n qb.insert(this._oldValues)\n }\n\n await qb.execute()\n qb.callHook('afterCreate', this)\n qb.callHook('afterUpdate', this)\n this._oldValues = {\n ...this._oldValues,\n ...this._changedValues,\n }\n this._changedValues = {}\n }\n\n public toJSON(): Record<string, any> {\n let data: any = {}\n let storage = EntityStorage.getInstance()\n let entity = storage.get(this.constructor)\n let allProperties = new Map<string, Property>(Object.entries(entity.properties).map(([key, value]) => [key, value]))\n\n for (const key in this) {\n // if starts with $ or _, ignore\n if (key.startsWith('$') || key.startsWith('_')) {\n continue;\n }\n\n if (!allProperties.has(key)) {\n continue;\n }\n\n if (entity.hideProperties.includes(key)) {\n continue;\n }\n\n data[key] = this[key]\n }\n return data;\n }\n}",
|
|
304
|
+
"import {\n AutoPath,\n DriverInterface,\n FilterQuery,\n JoinStatement,\n QueryOrderMap,\n Relationship,\n Statement,\n ValueOrInstance,\n} from './driver/driver.interface';\nimport { EntityStorage, Options } from './domain/entities';\nimport { Orm } from './orm';\nimport { LoggerService } from '@cheetah.js/core';\nimport { ValueObject } from './common/value-object';\nimport { BaseEntity } from './domain/base-entity';\n\nexport class SqlBuilder<T> {\n private readonly driver: DriverInterface;\n private entityStorage: EntityStorage;\n private statements: Statement<T> = {};\n private entity!: Options;\n private model!: new () => T;\n private aliases: Set<string> = new Set();\n private lastKeyNotOperator = '';\n private logger: LoggerService;\n private updatedColumns: any[] = [];\n private originalColumns: any[] = [];\n\n constructor(model: new () => T) {\n const orm = Orm.getInstance();\n this.driver = orm.driverInstance;\n this.logger = orm.logger;\n this.entityStorage = EntityStorage.getInstance();\n\n this.getEntity(model);\n this.statements.hooks = this.entity.hooks;\n }\n\n select(columns?: AutoPath<T, never, '*'>[]): SqlBuilder<T> {\n const tableName = this.entity.tableName || (this.model as Function).name.toLowerCase();\n const schema = this.entity.schema || 'public';\n\n this.statements.statement = 'select';\n this.statements.columns = columns;\n this.originalColumns = columns || [];\n this.statements.alias = this.getAlias(tableName);\n this.statements.table = `\"${schema}\".\"${tableName}\"`;\n return this;\n }\n\n setStrategy(strategy: 'joined' | 'select' = 'joined'): SqlBuilder<T> {\n this.statements.strategy = strategy;\n return this;\n }\n\n setInstance(instance: T): SqlBuilder<T> {\n this.statements.instance = instance;\n return this;\n }\n\n insert(values: Partial<{ [K in keyof T]: ValueOrInstance<T[K]> }>): SqlBuilder<T> {\n const {tableName, schema} = this.getTableName();\n processValuesForInsert(values);\n this.statements.instance = upEntity(values, this.model, 'insert')\n this.statements.statement = 'insert';\n this.statements.alias = this.getAlias(tableName);\n this.statements.table = `\"${schema}\".\"${tableName}\"`;\n this.statements.values = this.withUpdatedValues(\n this.withDefaultValues(values, this.entity),\n this.entity,\n );\n return this;\n }\n\n update(values: Partial<{ [K in keyof T]: ValueOrInstance<T[K]> }>): SqlBuilder<T> {\n const {tableName, schema} = this.getTableName();\n processValuesForUpdate(values);\n this.statements.instance = upEntity(values, this.model, 'update')\n this.statements.statement = 'update';\n this.statements.alias = this.getAlias(tableName);\n this.statements.table = `${schema}.${tableName}`;\n this.statements.values = this.withUpdatedValues(values, this.entity);\n return this;\n }\n\n where(where: FilterQuery<T>): SqlBuilder<T> {\n if (!where || Object.keys(where).length === 0) {\n return this;\n }\n\n this.statements.where = this.conditionToSql(where, this.statements.alias!, this.model);\n return this;\n }\n\n orderBy(orderBy: (QueryOrderMap<T> & { 0?: never }) | QueryOrderMap<T>[]): SqlBuilder<T> {\n if (!orderBy) {\n return this;\n }\n\n this.statements.orderBy = this.objectToStringMap(orderBy);\n return this;\n }\n\n limit(limit: number | undefined): SqlBuilder<T> {\n this.statements.limit = limit;\n return this;\n }\n\n offset(offset: number | undefined): SqlBuilder<T> {\n this.statements.offset = offset;\n return this;\n }\n\n load(load: string[]): SqlBuilder<T> {\n load?.forEach(relationshipPath => {\n this.addJoinForRelationshipPath(this.entity, relationshipPath);\n });\n if (this.statements.join) {\n this.statements.join = this.statements.join?.reverse()\n }\n\n if (this.statements.selectJoin) {\n this.statements.selectJoin = this.statements.selectJoin?.reverse()\n }\n\n return this;\n }\n\n private addJoinForRelationshipPath(entity: Options, relationshipPath: string) {\n const relationshipNames = relationshipPath.split('.');\n let currentEntity = entity;\n let currentAlias = this.statements.alias!;\n let statement = this.statements.strategy === 'joined' ? this.statements.join : this.statements.selectJoin;\n let nameAliasProperty = this.statements.strategy === 'joined' ? 'joinAlias' : 'alias';\n\n relationshipNames.forEach((relationshipName, index) => {\n const relationship = currentEntity.relations.find(rel => rel.propertyKey === relationshipName);\n\n if (!relationship) {\n // @ts-ignore\n throw new Error(`Relationship \"${relationshipName}\" not found in entity \"${currentEntity.name}\"`);\n }\n\n const isLastRelationship = index === relationshipNames.length - 1;\n\n if (index === (relationshipNames.length - 2 >= 0 ? relationshipNames.length - 2 : 0)) {\n const join = statement?.find(j => j.joinProperty === relationshipName);\n if (join) {\n // @ts-ignore\n currentAlias = join[nameAliasProperty];\n }\n }\n\n if (relationship.relation === 'many-to-one' && isLastRelationship) {\n this.applyJoin(relationship, {}, currentAlias);\n statement = this.statements.strategy === 'joined' ? this.statements.join : this.statements.selectJoin;\n currentAlias = statement[statement.length - 1][nameAliasProperty];\n }\n\n currentEntity = this.entityStorage.get(relationship.entity() as Function)!;\n });\n }\n\n private getPrimaryKeyColumnName(entity: Options): string {\n // Lógica para obter o nome da coluna de chave primária da entidade\n // Aqui você pode substituir por sua própria lógica, dependendo da estrutura do seu projeto\n // Por exemplo, se a chave primária for sempre 'id', você pode retornar 'id'.\n // Se a lógica for mais complexa, você pode adicionar um método na classe Options para obter a chave primária.\n return 'id';\n }\n\n async execute(): Promise<{ query: any; startTime: number; sql: string }> {\n if (!this.statements.columns) {\n this.statements.columns = this.generateColumns();\n } else {\n this.extractAliasForColumns();\n this.filterInvalidColumns();\n }\n this.statements.join = this.statements.join?.reverse()\n this.includeUpdatedColumns();\n this.beforeHooks();\n const result = await this.driver.executeStatement(this.statements);\n this.logExecution(result);\n return result;\n }\n\n private beforeHooks() {\n if (this.statements.statement === 'update') {\n this.callHook('beforeUpdate', this.statements.instance);\n return;\n }\n\n if (this.statements.statement === 'insert') {\n this.callHook('beforeCreate');\n return;\n }\n }\n\n private afterHooks(model?: any) {\n if (this.statements.statement === 'update') {\n this.callHook('afterUpdate', this.statements.instance);\n return;\n }\n\n if (this.statements.statement === 'insert') {\n this.callHook('afterCreate', model);\n return;\n }\n }\n\n async executeAndReturnFirst(): Promise<T | undefined> {\n this.statements.limit = 1;\n\n const result = await this.execute();\n\n if (result.query.rows.length === 0) {\n return undefined;\n }\n\n const entities = result.query.rows[0];\n const model = await this.transformToModel(this.model, this.statements, entities);\n this.afterHooks(model);\n await this.handleSelectJoin(entities, model);\n\n return model as any;\n }\n\n async executeAndReturnFirstOrFail(): Promise<T> {\n this.statements.limit = 1;\n\n const result = await this.execute();\n\n if (result.query.rows.length === 0) {\n throw new Error('Result not found');\n }\n\n const entities = result.query.rows[0];\n const model = await this.transformToModel(this.model, this.statements, entities);\n this.afterHooks(model);\n await this.handleSelectJoin(entities, model);\n return model as any;\n }\n\n async executeAndReturnAll(): Promise<T[]> {\n const result = await this.execute();\n\n if (result.query.rows.length === 0) {\n return [];\n }\n\n const rows = result.query.rows;\n const results = [];\n\n for (const row of rows) {\n const models = this.transformToModel(this.model, this.statements, row)\n this.afterHooks(models);\n await this.handleSelectJoin(row, models);\n results.push(models);\n }\n\n return results as any;\n }\n\n private async handleSelectJoin(entities: any, models): Promise<void> {\n if (!this.statements.selectJoin || this.statements.selectJoin.length === 0) {\n return;\n }\n\n for (const join of this.statements.selectJoin.reverse()) {\n let ids = entities[`${join.originAlias}_${join.primaryKey}`];\n if (typeof ids === 'undefined') {\n // get of models\n const selectJoined = this.statements.selectJoin.find(j => j.joinEntity === join.originEntity);\n\n if (!selectJoined) {\n continue;\n }\n ids = this.findIdRecursively(models, selectJoined, join);\n }\n\n if (Array.isArray(ids)) {\n ids = ids.map((id: any) => this.t(id)).join(', ')\n }\n\n if (join.where) {\n join.where = `${join.where} AND ${join.alias}.\"${join.fkKey}\" IN (${ids})`;\n } else {\n join.where = `${join.alias}.\"${join.fkKey}\" IN (${ids})`;\n }\n\n if (join.columns && join.columns.length > 0) {\n join.columns = (join.columns.map(\n // @ts-ignore\n (column) => `${join.alias}.\"${column}\" as \"${join.alias}_${column}\"`,\n ) as any[]);\n } else {\n join.columns = this.getColumnsEntity(join.joinEntity, join.alias) as any;\n }\n\n const child = await this.driver.executeStatement(join);\n this.logger.debug(`SQL: ${child.sql} [${Date.now() - child.startTime}ms]`);\n\n const property = this.entityStorage.get(this.model)!.relations.find(\n (rel) => rel.propertyKey === join.joinProperty,\n );\n const values = child.query.rows.map((row: any) =>\n this.transformToModel(join.joinEntity, join, row),\n );\n\n const path = this.getPathForSelectJoin(join);\n this.setValueByPath(models, path, property?.type === Array ? [...values] : values[0]);\n }\n\n return models as any;\n }\n\n getPathForSelectJoin(selectJoin: Statement<any>): string[] | null {\n const path = this.getPathForSelectJoinRecursive(this.statements, selectJoin);\n return path.reverse();\n }\n\n private setValueByPath(obj: any, path: string[], value: any) {\n let currentObj = obj;\n\n for (let i = 0; i < path.length - 1; i++) {\n const key = path[i];\n currentObj[key] = currentObj[key] || {};\n currentObj = currentObj[key];\n }\n\n currentObj[path[path.length - 1]] = value;\n }\n\n private getPathForSelectJoinRecursive(statements: Statement<any>, selectJoin: Statement<any>): string[] | null {\n const originJoin = this.statements.selectJoin.find(j => j.joinEntity === selectJoin.originEntity);\n let pathInJoin = [];\n\n if (!originJoin) {\n return [selectJoin.joinProperty]\n }\n\n if (originJoin.originEntity !== statements.originEntity) {\n pathInJoin = this.getPathForSelectJoinRecursive(statements, originJoin);\n }\n\n return [selectJoin.joinProperty, ...pathInJoin];\n }\n\n private findIdRecursively(models: any, selectJoined: any, join: any): any {\n let ids = models[selectJoined.originProperty][join.primaryKey];\n\n if (typeof ids === 'undefined') {\n const nextSelectJoined = this.statements.selectJoin.find(j => j.joinEntity === selectJoined.originEntity);\n\n if (nextSelectJoined) {\n // Chamada recursiva para a próxima camada\n ids = this.findIdRecursively(models, nextSelectJoined, join);\n }\n }\n\n return ids;\n }\n\n\n private generateColumns(): any[] {\n let columns: any[] = [\n ...this.getColumnsEntity((this.model as Function), this.statements.alias!),\n ];\n\n if (this.statements.join) {\n columns = [\n ...columns,\n ...this.statements.join.flatMap(join => this.getColumnsEntity(join.joinEntity!, join.joinAlias)),\n ]\n }\n\n return columns;\n }\n\n private extractAliasForColumns() {\n // @ts-ignore\n this.statements.columns = this.statements.columns!.map((column: string) => {\n return this.discoverColumnAlias(column)\n }).flat();\n }\n\n private filterInvalidColumns() {\n this.statements.columns = this.statements.columns!.filter(Boolean);\n }\n\n private includeUpdatedColumns() {\n this.statements.columns!.push(...this.updatedColumns);\n }\n\n private logExecution(result: { query: any, startTime: number, sql: string }): void {\n this.logger.debug(`SQL: ${result.sql} [${Date.now() - result.startTime}ms]`);\n }\n\n startTransaction(): Promise<void> {\n return this.driver.startTransaction();\n }\n\n commit(): Promise<void> {\n return this.driver.commitTransaction();\n }\n\n rollback(): Promise<void> {\n return this.driver.rollbackTransaction();\n }\n\n // TODO: transform transaction queries into just 1 query\n async inTransaction<T>(callback: (builder: SqlBuilder<T>) => Promise<T>): Promise<T> {\n await this.startTransaction();\n try {\n // @ts-ignore\n const result = await callback(this);\n await this.commit();\n return result;\n } catch (e) {\n await this.rollback();\n throw e;\n }\n }\n\n private objectToStringMap(obj: any, parentKey: string = ''): string[] {\n let result: string[] = [];\n\n for (let key in obj) {\n if (obj.hasOwnProperty(key)) {\n let fullKey = parentKey ? `${parentKey}.${key}` : key;\n if (typeof obj[key] === 'object' && obj[key] !== null) {\n result = result.concat(this.objectToStringMap(obj[key], fullKey));\n } else {\n result.push(`${this.discoverColumnAlias(fullKey, true)} ${obj[key]}`);\n }\n }\n }\n\n return result;\n }\n\n private discoverColumnAlias(column: string, onlyAlias = false): string {\n if (!column.includes('.')) {\n if (onlyAlias) {\n return `${this.statements.alias!}.\"${column}\"`\n }\n return `${this.statements.alias!}.\"${column}\" as ${this.statements.alias!}_${column}`;\n }\n\n if (typeof this.statements.join === 'undefined' && typeof this.statements.selectJoin === 'undefined') {\n throw new Error('Join not found');\n }\n\n const entities = column.split('.');\n let lastEntity = this.model as Function;\n let lastAlias = this.statements.alias!;\n\n const relationsMap = new Map(this.entity.relations.map(rel => [rel.propertyKey, rel]));\n const joinMap = new Map<string, JoinStatement<any>>()\n const joinSelectMap = new Map<string, Statement<any>>()\n this.statements.join?.forEach(join => joinMap.set(join.joinProperty, join))\n this.statements.selectJoin?.forEach(join => joinSelectMap.set(join.joinProperty, join))\n\n for (let i = 0; i < entities.length; i++) {\n if (i === 0) {\n const relation = relationsMap.get(entities[i]);\n lastEntity = relation?.entity() as Function;\n // @ts-ignore\n if (joinMap.has(entities[i])) {\n lastAlias = joinMap.get(entities[i]).joinAlias;\n } else {\n lastAlias = joinSelectMap.get(entities[i])?.alias;\n return undefined\n }\n } else {\n if ((i + 1) === entities.length) {\n if (onlyAlias) {\n return `${lastAlias}.\"${entities[i]}\"`\n }\n return `${lastAlias}.\"${entities[i]}\" as ${lastAlias}_${entities[i]}`;\n }\n\n const lastStatement = joinMap.get(entities[i]);\n lastEntity = lastStatement?.joinEntity as Function;\n // @ts-ignore\n lastAlias = lastStatement?.joinAlias;\n }\n }\n\n return '';\n }\n\n private getTableName() {\n const tableName = this.entity.tableName || (this.model as Function).name.toLowerCase();\n const schema = this.entity.schema || 'public';\n return {tableName, schema};\n }\n\n private addSimpleConditionToSql(key: string, value: any, alias: string | null = null, operator: string = '='): string {\n const aliasToUse = alias || this.statements.alias;\n const valueByType = (typeof value === 'string') ? `'${value}'` : value;\n\n return `${aliasToUse}.${key} ${operator} ${valueByType}`;\n }\n\n private addInConditionToSql(key: string, values: any[], alias: string | null = null): string {\n const aliasToUse = alias || this.statements.alias;\n return `${aliasToUse}.${key} IN (${values.map(val => (typeof val === 'string') ? `'${val}'` : val).join(\", \")})`;\n }\n\n private addLogicalOperatorToSql(conditions: string[], operator: 'AND' | 'OR'): string {\n return `(${conditions.join(` ${operator} `)})`;\n }\n\n private conditionToSql(condition: FilterQuery<T>, alias: string, model: Function): string {\n const sqlParts = [];\n const operators = ['$eq', '$ne', '$in', '$nin', '$like', '$gt', '$gte', '$lt', '$lte', '$and', '$or'];\n\n for (let [key, value] of Object.entries(condition)) {\n if (this.extendsFrom(ValueObject, value.constructor.prototype)) {\n value = (value as ValueObject<any, any>).getValue();\n }\n\n if (!operators.includes(key)) {\n this.lastKeyNotOperator = key;\n }\n const entity = this.entityStorage.get(model)\n const relationShip = entity.relations?.find(rel => rel.propertyKey === key);\n if (relationShip) {\n const sql = this.applyJoin(relationShip, value, alias);\n if (this.statements.strategy === 'joined') {\n sqlParts.push(sql);\n }\n } else if (typeof value !== 'object' || value === null) {\n if (key === '$eq') {\n sqlParts.push(this.addSimpleConditionToSql(this.lastKeyNotOperator, value, alias, '='));\n continue;\n }\n\n sqlParts.push(this.addSimpleConditionToSql(key, value, alias));\n } else if (!(operators.includes(key)) && Array.isArray(value)) {\n sqlParts.push(this.addInConditionToSql(key, value, alias));\n } else {\n if (['$or', '$and'].includes(key)) {\n sqlParts.push(this.addLogicalOperatorToSql(value.map((cond: any) => this.conditionToSql(cond, alias, model)), key.toUpperCase().replace('$', '') as 'AND' | 'OR'));\n }\n\n for (const operator of operators) {\n if (operator in value) {\n switch (operator) {\n case '$eq':\n sqlParts.push(this.addSimpleConditionToSql(key, value['$eq'], alias, '='));\n break;\n case '$ne':\n sqlParts.push(this.addSimpleConditionToSql(key, value['$ne'], alias, '!='));\n break;\n case '$in':\n sqlParts.push(this.addInConditionToSql(key, value['$in'], alias));\n break;\n case '$nin':\n sqlParts.push(`${alias}.${key} NOT IN (${value['$nin'].map((val: any) => this.t(val)).join(\", \")})`);\n break;\n case '$like':\n sqlParts.push(`${alias}.${key} LIKE '${value['$like']}'`);\n break;\n case '$gt':\n sqlParts.push(`${alias}.${key} > ${value['$gt']}`);\n break;\n case '$gte':\n sqlParts.push(`${alias}.${key} >= ${value['$gte']}`);\n break;\n case '$lt':\n sqlParts.push(`${alias}.${key} < ${value['$lt']}`);\n break;\n case '$lte':\n sqlParts.push(`${alias}.${key} <= ${value['$lte']}`);\n break;\n case '$and':\n case '$or':\n const parts = value[operator].map((cond: any) => this.conditionToSql(cond, alias, model))\n sqlParts.push(this.addLogicalOperatorToSql(parts, operator.toUpperCase().replace('$', '') as 'AND' | 'OR'));\n break;\n }\n }\n }\n }\n }\n if (sqlParts.length === 0) {\n return '';\n }\n\n return this.addLogicalOperatorToSql(sqlParts, 'AND');\n }\n\n private t(value: any) {\n return (typeof value === 'string') ? `'${value}'` : value;\n }\n\n private applyJoin(relationShip: Relationship<any>, value: FilterQuery<any>, alias: string) {\n const {tableName, schema} = this.getTableName();\n const {\n tableName: joinTableName,\n schema: joinSchema,\n hooks: joinHooks,\n } = this.entityStorage.get((relationShip.entity() as Function)) || {\n tableName: (relationShip.entity() as Function).name.toLowerCase(),\n schema: 'public',\n };\n let originPrimaryKey = 'id';\n for (const prop in this.entity.properties) {\n if (this.entity.properties[prop].options.isPrimary) {\n originPrimaryKey = prop;\n break;\n }\n }\n const joinAlias = `${this.getAlias(joinTableName)}`;\n const joinWhere = this.conditionToSql(value, joinAlias, relationShip.entity() as Function);\n let on = '';\n\n switch (relationShip.relation) {\n case \"one-to-many\":\n on = `${joinAlias}.\"${this.getFkKey(relationShip)}\" = ${alias}.\"${originPrimaryKey}\"`;\n break;\n case \"many-to-one\":\n on = `${alias}.\"${relationShip.propertyKey as string}\" = ${joinAlias}.\"${this.getFkKey(relationShip)}\"`;\n break;\n }\n\n if (this.statements.strategy === 'joined') {\n this.statements.join = this.statements.join || [];\n this.statements.join.push({\n joinAlias: joinAlias,\n joinTable: joinTableName,\n joinSchema: joinSchema || 'public',\n joinWhere: joinWhere,\n joinProperty: relationShip.propertyKey as string,\n originAlias: alias,\n originSchema: schema,\n originTable: tableName,\n propertyKey: relationShip.propertyKey,\n joinEntity: (relationShip.entity() as Function),\n type: 'LEFT',\n // @ts-ignore\n on,\n originalEntity: relationShip.originalEntity as Function,\n hooks: joinHooks,\n })\n } else {\n\n this.statements.selectJoin = this.statements.selectJoin || [];\n\n this.statements.selectJoin.push({\n statement: 'select',\n columns: this.originalColumns.filter(column => column.startsWith(`${relationShip.propertyKey as string}`)).map(column => column.split('.')[1]) || [],\n table: `\"${joinSchema || 'public'}\".\"${joinTableName}\"`,\n alias: joinAlias,\n where: joinWhere,\n joinProperty: relationShip.propertyKey as string,\n fkKey: this.getFkKey(relationShip),\n primaryKey: originPrimaryKey,\n originAlias: alias,\n originProperty: relationShip.propertyKey as string,\n joinEntity: (relationShip.entity() as Function),\n originEntity: relationShip.originalEntity as Function,\n hooks: joinHooks,\n })\n }\n return joinWhere;\n }\n\n private getFkKey(relationShip: Relationship<any>): string {\n // se for nullable, deverá retornar o primary key da entidade target\n if (typeof relationShip.fkKey === 'undefined') {\n return 'id'; // TODO: Pegar dinamicamente o primary key da entidade target\n }\n\n // se o fkKey é uma função, ele retornará a propriedade da entidade que é a chave estrangeira\n // precisamos pegar o nome dessa propriedade\n if (typeof relationShip.fkKey === 'string') {\n return relationShip.fkKey;\n }\n\n const match = /\\.(?<propriedade>[\\w]+)/.exec(relationShip.fkKey.toString());\n return match ? match.groups!.propriedade : '';\n }\n\n // private conditionLogicalOperatorToSql<T extends typeof BaseEntity>(conditions: Condition<T>[], operator: 'AND' | 'OR'): string {\n // const sqlParts = conditions.map(cond => this.conditionToSql(cond));\n // return this.addLogicalOperatorToSql(sqlParts, operator);\n // }\n\n\n private getEntity(model: new () => T) {\n const entity = this.entityStorage.get((model as Function));\n this.model = model;\n\n if (!entity) {\n throw new Error('Entity not found');\n }\n\n this.entity = entity;\n }\n\n private transformToModel<T>(model: any, statement: Statement<any>, data: any): T {\n const instance = new model()\n\n instance.$_isPersisted = true;\n const entitiesByAlias: { [key: string]: Function } = {\n [statement.alias!]: instance,\n }\n const entitiesOptions: Map<string, Options> = new Map();\n entitiesOptions.set(statement.alias!, this.entityStorage.get(instance.constructor)!)\n\n if (this.statements.join) {\n this.statements.join.forEach(join => {\n const joinInstance = new (join.joinEntity! as any)();\n joinInstance.$_isPersisted = true;\n entitiesByAlias[join.joinAlias] = joinInstance;\n entitiesOptions.set(join.joinAlias, this.entityStorage.get(joinInstance.constructor)!)\n })\n }\n\n Object.entries(data).forEach(([key, value]) => {\n const [alias, prop] = key.split('_');\n const entity = entitiesByAlias[alias];\n if (!entity) {\n return;\n }\n\n const entityProperty = entitiesOptions.get(alias)!.properties[prop]\n if (entityProperty) {\n if (this.extendsFrom(ValueObject, entityProperty.type.prototype)) {\n // @ts-ignore\n entity[prop] = new entityProperty.type(value);\n return;\n }\n\n // @ts-ignore\n entity[prop] = value;\n }\n });\n\n if (this.statements.join) {\n this.statements.join.forEach(join => {\n const {joinAlias, originAlias, propertyKey} = join;\n const originEntity = entitiesByAlias[originAlias];\n const joinEntity = entitiesByAlias[joinAlias];\n const property = entitiesOptions.get(originAlias)!.relations.find(rel => rel.propertyKey === propertyKey);\n\n if (!originEntity || !joinEntity) {\n return;\n }\n\n // @ts-ignore\n originEntity[propertyKey] = (property.type === Array) ? (originEntity[propertyKey]) ? [...originEntity[propertyKey], joinEntity] : [joinEntity] : joinEntity;\n })\n }\n\n return instance;\n }\n\n /**\n * Retrieves an alias for a given table name.\n *\n * @param {string} tableName - The name of the table.\n * @private\n * @returns {string} - The alias for the table name.\n */\n private getAlias(tableName: string): string {\n const alias = tableName.split('').shift() || '';\n\n let counter = 1;\n let uniqueAlias = `${alias}${counter}`;\n\n while (this.aliases.has(uniqueAlias)) {\n counter++;\n uniqueAlias = `${alias}${counter}`;\n }\n\n this.aliases.add(uniqueAlias);\n return uniqueAlias;\n }\n\n private getColumnsEntity(entity: Function, alias: string): string [] {\n const e = this.entityStorage.get(entity);\n if (!e) {\n throw new Error('Entity not found');\n }\n\n const columns = Object.keys(e.properties).map(key => `${alias}.\"${key}\" as \"${alias}_${key}\"`)\n\n if (e.relations) {\n for (const relation of e.relations) {\n if (relation.relation === 'many-to-one') {\n // @ts-ignore\n columns.push(`${alias}.\"${relation.propertyKey}\" as \"${alias}_${relation.propertyKey}\"`)\n }\n }\n }\n\n return columns;\n }\n\n private withDefaultValues(values: any, entityOptions: Options) {\n const property = Object.entries(entityOptions.properties).filter(([_, value]) => value.options.onInsert);\n const defaultProperties = Object.entries(entityOptions.properties).filter(([_, value]) => value.options.default);\n\n for (const [key, property] of defaultProperties) {\n if (typeof values[key] === 'undefined') {\n if (typeof property.options.default === 'function') {\n values[key] = eval(property.options.default());\n } else {\n values[key] = eval(property.options.default);\n }\n }\n }\n\n property.forEach(([key, property]) => {\n values[key] = property.options.onInsert!();\n this.updatedColumns.push(`${this.statements.alias}.\"${key}\" as \"${this.statements.alias}_${key}\"`)\n });\n\n return values;\n }\n\n private withUpdatedValues(values: any, entityOptions: Options) {\n const property = Object.entries(entityOptions.properties).filter(([_, value]) => value.options.onUpdate);\n\n property.forEach(([key, property]) => {\n values[key] = property.options.onUpdate!();\n this.updatedColumns.push(`${this.statements.alias}.\"${key}\" as \"${this.statements.alias}_${key}\"`)\n });\n\n return values;\n }\n\n private extendsFrom(baseClass, instance) {\n if (!instance) return false;\n let proto = Object.getPrototypeOf(instance);\n while (proto) {\n if (proto === baseClass.prototype) {\n return true;\n }\n proto = Object.getPrototypeOf(proto);\n }\n return false;\n }\n\n public callHook(type: string, model?: any) {\n const hooks = this.statements.hooks?.filter(hook => hook.type === type) || [];\n const instance = model || this.statements.instance;\n\n for (const hook of hooks) {\n instance[hook.propertyName]()\n\n if (!model) {\n this.reflectToValues();\n }\n }\n }\n\n private reflectToValues() {\n for (const key in this.statements.instance as any) {\n if (key.startsWith('$')) {\n continue;\n }\n if (key.startsWith('_')) {\n continue;\n }\n if (this.entity.properties[key]) {\n this.statements.values[key] = this.statements.instance[key];\n continue;\n }\n if (this.entity.relations.find(rel => rel.propertyKey === key)) {\n this.statements.values[key] = this.statements.instance[key];\n }\n }\n }\n}\n\n\nfunction processValuesForInsert<T>(values: Partial<{ [K in keyof T]: ValueOrInstance<T[K]> }>): void {\n for (const value in values) {\n if (extendsFrom(ValueObject, values[value].constructor.prototype)) {\n values[value] = (values[value] as ValueObject<any, any>).getValue();\n continue;\n }\n\n if (values[value] instanceof BaseEntity) {\n // @ts-ignore\n values[value] = (values[value] as BaseEntity).id; // TODO: get primary key\n }\n }\n}\n\nfunction processValuesForUpdate<T>(values: Partial<{ [K in keyof T]: ValueOrInstance<T[K]> }>): void {\n for (const value in values) {\n if (extendsFrom(ValueObject, values[value].constructor.prototype)) {\n values[value] = (values[value] as ValueObject<any, any>).getValue();\n }\n }\n}\n\nfunction extendsFrom(baseClass, instance): boolean {\n let proto = Object.getPrototypeOf(instance);\n while (proto) {\n if (proto === baseClass.prototype) {\n return true;\n }\n proto = Object.getPrototypeOf(proto);\n }\n return false;\n}\n\nfunction upEntity(values: any, entity: Function, moment: 'insert' | 'update' = undefined) {\n const entityStorage = EntityStorage.getInstance();\n const entityOptions = entityStorage.get(entity);\n // @ts-ignore\n const instance = new entity();\n\n if (!entityOptions) {\n throw new Error('Entity not found');\n }\n\n const property = Object.entries(entityOptions.properties)\n const relations = entityOptions.relations;\n\n property.forEach(([key, property]) => {\n if (property.options.onInsert && moment === 'insert') {\n instance[key] = property.options.onInsert!();\n }\n\n if (property.options.onInsert && moment === 'update') {\n instance[key] = property.options.onUpdate!();\n }\n\n if (key in values) {\n instance[key] = values[key];\n }\n })\n\n if (relations) {\n for (const relation of relations) {\n if (relation.relation === 'many-to-one') {\n // @ts-ignore\n instance[relation.propertyKey] = instance[relation.propertyKey];\n }\n }\n }\n\n return instance;\n}",
|
|
305
305
|
"import { ConnectionSettings, DriverInterface } from './driver/driver.interface';\nimport { LoggerService, Service } from '@cheetah.js/core';\nimport { SqlBuilder } from './SqlBuilder';\n\n@Service()\nexport class Orm<T extends DriverInterface = DriverInterface> {\n driverInstance: T;\n static instance: Orm<any>\n public connection: ConnectionSettings<T>\n\n constructor(public logger: LoggerService) {\n Orm.instance = this\n }\n\n static getInstance(): Orm<any> {\n return Orm.instance\n }\n\n public setConnection(connection: ConnectionSettings<T>) {\n this.connection = connection\n // @ts-ignore\n this.driverInstance = new this.connection.driver(connection)\n }\n\n createQueryBuilder<Model>(model: new() => Model): SqlBuilder<Model> {\n return new SqlBuilder<Model>(model)\n }\n\n connect(): Promise<void> {\n return this.driverInstance.connect()\n }\n\n disconnect(): Promise<void> {\n return this.driverInstance.disconnect()\n }\n}",
|
|
306
306
|
"import { Metadata, OnApplicationInit, Service } from '@cheetah.js/core';\nimport { EntityStorage, Property } from './domain/entities';\nimport { ENTITIES, EVENTS_METADATA, PROPERTIES_METADATA, PROPERTIES_RELATIONS } from './constants';\nimport { globbySync } from 'globby';\nimport { Project, SyntaxKind } from 'ts-morph';\nimport { Orm } from './orm';\n\n@Service()\nexport class OrmService {\n private allEntities = new Map<string, { nullables: string[], defaults: { [key: string]: any } }>();\n\n constructor(private orm: Orm, private storage: EntityStorage, entityFile?: string) {\n console.log('Preparing entities...')\n const files = new Project({skipLoadingLibFiles: true}).addSourceFilesAtPaths(entityFile ?? this.getSourceFilePaths())\n files.forEach(file => {\n file.getClasses().forEach(classDeclaration => {\n if (classDeclaration.getDecorator('Entity')) {\n\n const properties = classDeclaration.getProperties();\n const nullables: string[] = [];\n const defaults: { [key: string]: any } = {};\n\n properties.forEach(property => {\n const propertyName = property.getName();\n const isNullable = property.hasQuestionToken();\n const initializer = property.getInitializer();\n if (isNullable) {\n nullables.push(propertyName);\n }\n if (initializer) {\n const initializerKind = initializer.getKind();\n\n switch (initializerKind) {\n case SyntaxKind.StringLiteral:\n defaults[propertyName] = initializer.getText();\n break;\n case SyntaxKind.NumericLiteral:\n defaults[propertyName] = parseFloat(initializer.getText());\n break;\n default:\n defaults[propertyName] = () => initializer.getText();\n break;\n }\n }\n\n this.allEntities.set(classDeclaration.getName() as string, {nullables, defaults});\n });\n }\n });\n })\n }\n\n @OnApplicationInit()\n async onInit(customConfig: any = {}) {\n\n const configFile = globbySync('cheetah.config.ts', {absolute: true});\n if (configFile.length === 0) {\n console.log('No config file found!')\n return;\n }\n\n const config = await import(configFile[0]);\n const setConfig = Object.keys(customConfig).length > 0 ? customConfig : config.default;\n\n this.orm.setConnection(setConfig);\n await this.orm.connect();\n\n if (typeof config.default.entities === 'string') {\n const files = globbySync([config.default.entities, '!node_modules'], {gitignore: true, absolute: true})\n\n for (const file of files) {\n await import(file)\n }\n }\n\n const entities = Metadata.get(ENTITIES, Reflect);\n\n if (!entities) {\n console.log('No entities found!')\n return;\n }\n\n for (const entity of entities) {\n const nullableDefaultEntity = this.allEntities.get(entity.target.name);\n const properties: { [key: string]: Property } = Metadata.get(PROPERTIES_METADATA, entity.target);\n const relationship = Metadata.get(PROPERTIES_RELATIONS, entity.target);\n const hooks = Metadata.get(EVENTS_METADATA, entity.target)\n\n for (const property in properties) {\n if (nullableDefaultEntity?.nullables.includes(property)) {\n properties[property].options.nullable = true;\n }\n if (nullableDefaultEntity?.defaults[property]) {\n properties[property].options.default = nullableDefaultEntity?.defaults[property];\n }\n }\n\n this.storage.add(entity, properties, relationship, hooks);\n }\n console.log('Entities prepared!')\n }\n\n\n private getSourceFilePaths(): string[] {\n const projectRoot = process.cwd(); // Ajuste conforme a estrutura do seu projeto\n\n const getAllFiles = (dir: string): string[] => {\n const patterns = [`${dir}/**/*.(ts|js)`, \"!**/node_modules/**\"];\n\n try {\n return globbySync(patterns, {gitignore: true});\n } catch (error) {\n console.error('Erro ao obter arquivos:', error);\n return [];\n }\n }\n\n // Filtra os arquivos pelo padrão de nomenclatura\n return getAllFiles(projectRoot);\n }\n}",
|
|
307
307
|
"import { Metadata, OnApplicationInit, Service } from '@cheetah.js/core';\nimport { EntityStorage, Property } from './domain/entities';\nimport { ENTITIES, EVENTS_METADATA, PROPERTIES_METADATA, PROPERTIES_RELATIONS } from './constants';\nimport { globbySync } from 'globby';\nimport { Project, SyntaxKind } from 'ts-morph';\nimport { Orm } from './orm';\n\n@Service()\nexport class OrmService {\n private allEntities = new Map<string, { nullables: string[], defaults: { [key: string]: any } }>();\n\n constructor(private orm: Orm, private storage: EntityStorage, entityFile?: string) {\n console.log('Preparing entities...')\n const files = new Project({skipLoadingLibFiles: true}).addSourceFilesAtPaths(entityFile ?? this.getSourceFilePaths())\n files.forEach(file => {\n file.getClasses().forEach(classDeclaration => {\n if (classDeclaration.getDecorator('Entity')) {\n\n const properties = classDeclaration.getProperties();\n const nullables: string[] = [];\n const defaults: { [key: string]: any } = {};\n\n properties.forEach(property => {\n const propertyName = property.getName();\n const isNullable = property.hasQuestionToken();\n const initializer = property.getInitializer();\n if (isNullable) {\n nullables.push(propertyName);\n }\n if (initializer) {\n const initializerKind = initializer.getKind();\n\n switch (initializerKind) {\n case SyntaxKind.StringLiteral:\n defaults[propertyName] = initializer.getText();\n break;\n case SyntaxKind.NumericLiteral:\n defaults[propertyName] = parseFloat(initializer.getText());\n break;\n default:\n defaults[propertyName] = () => initializer.getText();\n break;\n }\n }\n\n this.allEntities.set(classDeclaration.getName() as string, {nullables, defaults});\n });\n }\n });\n })\n }\n\n @OnApplicationInit()\n async onInit(customConfig: any = {}) {\n\n const configFile = globbySync('cheetah.config.ts', {absolute: true});\n if (configFile.length === 0) {\n console.log('No config file found!')\n return;\n }\n\n const config = await import(configFile[0]);\n const setConfig = Object.keys(customConfig).length > 0 ? customConfig : config.default;\n\n this.orm.setConnection(setConfig);\n await this.orm.connect();\n\n if (typeof config.default.entities === 'string') {\n const files = globbySync([config.default.entities, '!node_modules'], {gitignore: true, absolute: true})\n\n for (const file of files) {\n await import(file)\n }\n }\n\n const entities = Metadata.get(ENTITIES, Reflect);\n\n if (!entities) {\n console.log('No entities found!')\n return;\n }\n\n for (const entity of entities) {\n const nullableDefaultEntity = this.allEntities.get(entity.target.name);\n const properties: { [key: string]: Property } = Metadata.get(PROPERTIES_METADATA, entity.target);\n const relationship = Metadata.get(PROPERTIES_RELATIONS, entity.target);\n const hooks = Metadata.get(EVENTS_METADATA, entity.target)\n\n for (const property in properties) {\n if (nullableDefaultEntity?.nullables.includes(property)) {\n properties[property].options.nullable = true;\n }\n if (nullableDefaultEntity?.defaults[property]) {\n properties[property].options.default = nullableDefaultEntity?.defaults[property];\n }\n }\n\n this.storage.add(entity, properties, relationship, hooks);\n }\n console.log('Entities prepared!')\n }\n\n\n private getSourceFilePaths(): string[] {\n const projectRoot = process.cwd(); // Ajuste conforme a estrutura do seu projeto\n\n const getAllFiles = (dir: string): string[] => {\n const patterns = [`${dir}/**/*.(ts|js)`, \"!**/node_modules/**\"];\n\n try {\n return globbySync(patterns, {gitignore: true});\n } catch (error) {\n console.error('Erro ao obter arquivos:', error);\n return [];\n }\n }\n\n // Filtra os arquivos pelo padrão de nomenclatura\n return getAllFiles(projectRoot);\n }\n}",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-entity.js","sourceRoot":"","sources":["../../src/domain/base-entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"base-entity.js","sourceRoot":"","sources":["../../src/domain/base-entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAY,MAAM,YAAY,CAAC;AAErD,MAAM,OAAgB,UAAU;IACtB,UAAU,GAAQ,EAAE,CAAC;IACrB,cAAc,GAAQ,EAAE,CAAC;IACzB,aAAa,GAAY,KAAK,CAAC;IAEvC;QACE,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE;YACrB,GAAG,CAAC,MAAW,EAAE,CAAS,EAAE,QAAa;gBAEvC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;oBACrB,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;oBACrB,OAAO,IAAI,CAAC;iBACb;gBAED,sFAAsF;gBACtF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;oBACzB,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;iBACjC;gBAED,0EAA0E;gBAC1E,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;oBACrC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;iBACrC;gBAED,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;gBAErB,OAAO,IAAI,CAAC;YACd,CAAC;SACF,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,kBAAkB;QAGvB,OAAO,IAAI,UAAU,CAAI,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACK,kBAAkB;QACxB,aAAa;QACb,OAAO,IAAI,UAAU,CAAI,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI,CAEf,KAAqB,EACrB,OAA8B;QAE9B,OAAO,IAAI,CAAC,kBAAkB,EAAK;aAChC,MAAM,CAAC,OAAO,EAAE,MAAa,CAAC;aAC9B,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC;aAClC,IAAI,CAAC,OAAO,EAAE,IAAa,CAAC;aAC5B,KAAK,CAAC,KAAK,CAAC;aACZ,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC;aACrB,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC;aACvB,OAAO,CAAC,OAAO,EAAE,OAAmB,CAAC;aACrC,mBAAmB,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAElB,KAAqB,EACrB,OAAgC;QAEhC,OAAO,IAAI,CAAC,kBAAkB,EAAK;aAChC,MAAM,CAAC,OAAO,EAAE,MAAa,CAAC;aAC9B,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC;aAClC,IAAI,CAAC,OAAO,EAAE,IAAa,CAAC;aAC5B,KAAK,CAAC,KAAK,CAAC;aACZ,qBAAqB,EAAE,CAAC;IAC7B,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,aAAa,CAExB,KAAqB,EACrB,OAAgC;QAEhC,OAAO,IAAI,CAAC,kBAAkB,EAAK;YACjC,aAAa;aACZ,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC;aACvB,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC;aAClC,IAAI,CAAC,OAAO,EAAE,IAAa,CAAC;aAC5B,KAAK,CAAC,KAAK,CAAC;aACZ,OAAO,CAAC,OAAO,EAAE,OAAmB,CAAC;aACrC,2BAA2B,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAKlB,OAA6B;QAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAK;aACzC,MAAM,CAAC,OAAO,CAAC,MAAa,CAAC;aAC7B,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC;aAClC,IAAI,CAAC,OAAO,EAAE,IAAa,CAAC;aAC5B,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC;aACvB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;aACpB,OAAO,CAAC,OAAO,EAAE,OAAmB,CAAC,CAAC;QAEzC,OAAO,OAAO,CAAC,mBAAmB,EAAE,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAEjB,KAAyD;QAEzD,OAAO,IAAI,CAAC,kBAAkB,EAAK;aAChC,MAAM,CAAC,KAAK,CAAC;aACb,2BAA2B,EAAE,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,MAAM,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAA;QAEpC,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC/B,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;YAClB,aAAa;YACb,EAAE,CAAC,KAAK,CAAC,EAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,EAAC,CAAC,CAAA;SACrC;aAAM;YACL,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;SAC3B;QAED,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;QAClB,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;QAChC,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;QAChC,IAAI,CAAC,UAAU,GAAG;YAChB,GAAG,IAAI,CAAC,UAAU;YAClB,GAAG,IAAI,CAAC,cAAc;SACvB,CAAA;QACD,IAAI,CAAC,cAAc,GAAG,EAAE,CAAA;IAC1B,CAAC;IAEM,MAAM;QACX,IAAI,IAAI,GAAQ,EAAE,CAAA;QAClB,IAAI,OAAO,GAAG,aAAa,CAAC,WAAW,EAAE,CAAA;QACzC,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC1C,IAAI,aAAa,GAAG,IAAI,GAAG,CAAmB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;QAEpH,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,gCAAgC;YAChC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;gBAC9C,SAAS;aACV;YAED,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBAC3B,SAAS;aACV;YAED,IAAI,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBACvC,SAAS;aACV;YAED,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;SACtB;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|