@dooboostore/simple-boot-http-server-ssr 1.0.11 → 1.0.13
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/README.MD +24 -209
- package/dist/cjs/bundle-entry.js +36 -0
- package/dist/cjs/bundle-entry.js.map +7 -0
- package/dist/cjs/codes/HttpHeaders.js.map +2 -2
- package/dist/cjs/filters/SSRFilter.js +5 -7
- package/dist/cjs/filters/SSRFilter.js.map +2 -2
- package/dist/cjs/filters/SSRLinkDomDomFilter.js +183 -0
- package/dist/cjs/filters/SSRLinkDomDomFilter.js.map +7 -0
- package/dist/cjs/filters/SSRWorker.js +1 -2
- package/dist/cjs/filters/SSRWorker.js.map +1 -1
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/initializers/JsdomInitializer.js +1 -0
- package/dist/cjs/initializers/JsdomInitializer.js.map +2 -2
- package/dist/cjs/initializers/LinkedomInitializer.js +81 -0
- package/dist/cjs/initializers/LinkedomInitializer.js.map +7 -0
- package/dist/cjs/package.json +2 -0
- package/dist/cjs/proxy/SymbolIntentApiServiceProxy.js +17 -2
- package/dist/cjs/proxy/SymbolIntentApiServiceProxy.js.map +3 -3
- package/dist/esm/bundle-entry.js +9 -0
- package/dist/esm/bundle-entry.js.map +7 -0
- package/dist/esm/codes/HttpHeaders.js.map +2 -2
- package/dist/esm/filters/SSRFilter.js +5 -7
- package/dist/esm/filters/SSRFilter.js.map +2 -2
- package/dist/esm/filters/SSRLinkDomDomFilter.js +160 -0
- package/dist/esm/filters/SSRLinkDomDomFilter.js.map +7 -0
- package/dist/esm/filters/SSRWorker.js +1 -2
- package/dist/esm/filters/SSRWorker.js.map +1 -1
- package/dist/esm/index.js.map +2 -2
- package/dist/esm/initializers/JsdomInitializer.js +1 -0
- package/dist/esm/initializers/JsdomInitializer.js.map +2 -2
- package/dist/esm/initializers/LinkedomInitializer.js +48 -0
- package/dist/esm/initializers/LinkedomInitializer.js.map +7 -0
- package/dist/esm/proxy/SymbolIntentApiServiceProxy.js +18 -3
- package/dist/esm/proxy/SymbolIntentApiServiceProxy.js.map +3 -3
- package/dist/esm-bundle/dooboostore-simple-boot-http-server-ssr.esm.js +11811 -3
- package/dist/esm-bundle/dooboostore-simple-boot-http-server-ssr.esm.js.map +4 -4
- package/dist/{esm → types}/SimpleBootHttpSSRServer.d.ts +1 -1
- package/dist/types/bundle-entry.d.ts +9 -0
- package/dist/types/bundle-entry.d.ts.map +1 -0
- package/dist/types/codes/HttpHeaders.d.ts +45 -0
- package/dist/types/codes/HttpHeaders.d.ts.map +1 -0
- package/dist/{cjs → types}/filters/SSRFilter.d.ts.map +1 -1
- package/dist/{esm/filters/SSRFilter.d.ts → types/filters/SSRLinkDomDomFilter.d.ts} +4 -6
- package/dist/types/filters/SSRLinkDomDomFilter.d.ts.map +1 -0
- package/dist/{esm → types}/index.d.ts.map +1 -1
- package/dist/{cjs → types}/initializers/JsdomInitializer.d.ts.map +1 -1
- package/dist/types/initializers/LinkedomInitializer.d.ts +11 -0
- package/dist/types/initializers/LinkedomInitializer.d.ts.map +1 -0
- package/dist/{cjs → types}/proxy/SymbolIntentApiServiceProxy.d.ts.map +1 -1
- package/dist/umd-bundle/dooboostore-simple-boot-http-server-ssr.umd.js +11803 -6
- package/dist/umd-bundle/dooboostore-simple-boot-http-server-ssr.umd.js.map +4 -4
- package/package.json +36 -23
- package/src/SimpleBootHttpSSRFactory.ts +11 -0
- package/src/SimpleBootHttpSSRServer.ts +21 -0
- package/src/bundle-entry.ts +8 -0
- package/src/codes/HttpHeaders.ts +17 -0
- package/src/codes/Mimes.ts +6 -0
- package/src/codes/index.ts +2 -0
- package/src/decorators/LoadAroundBefore.ts +28 -0
- package/src/decorators/SaveAroundAfter.ts +27 -0
- package/src/decorators/index.ts +2 -0
- package/src/filters/IntentSchemeFilter.ts +66 -0
- package/src/filters/SSRFilter.ts +339 -0
- package/src/filters/SSRLinkDomDomFilter.ts +227 -0
- package/src/filters/SSRWorker.ts +76 -0
- package/{dist/esm/filters/index.d.ts → src/filters/index.ts} +1 -2
- package/src/index.ts +9 -0
- package/src/initializers/JsdomInitializer.ts +85 -0
- package/src/initializers/LinkedomInitializer.ts +69 -0
- package/src/initializers/index.ts +1 -0
- package/src/node_modules/.bin/acorn +17 -0
- package/src/node_modules/.bin/browserslist +17 -0
- package/src/node_modules/.bin/eslint +17 -0
- package/src/node_modules/.bin/jest +17 -0
- package/src/node_modules/.bin/ts-jest +17 -0
- package/src/node_modules/.bin/ts-node +17 -0
- package/src/node_modules/.bin/ts-node-cwd +17 -0
- package/src/node_modules/.bin/ts-node-esm +17 -0
- package/src/node_modules/.bin/ts-node-script +17 -0
- package/src/node_modules/.bin/ts-node-transpile-only +17 -0
- package/src/node_modules/.bin/ts-script +17 -0
- package/src/node_modules/.bin/tsc +17 -0
- package/src/node_modules/.bin/tsserver +17 -0
- package/src/option/HttpSSRServerOption.ts +4 -0
- package/src/option/index.ts +1 -0
- package/src/proxy/IntentSchemeFrontProxy.ts +67 -0
- package/src/proxy/IntentSchemeServerProxy.ts +35 -0
- package/src/proxy/SymbolIntentApiServiceProxy.ts +131 -0
- package/src/proxy/SymbolIntentApiServiceProxyBase.ts +97 -0
- package/{dist/esm/proxy/index.d.ts → src/proxy/index.ts} +1 -2
- package/tsconfig.json +24 -0
- package/dist/cjs/SimpleBootHttpSSRServer.d.ts +0 -9
- package/dist/cjs/codes/HttpHeaders.d.ts +0 -45
- package/dist/cjs/codes/HttpHeaders.d.ts.map +0 -1
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/esm/SimpleBootHttpSSRFactory.d.ts +0 -8
- package/dist/esm/SimpleBootHttpSSRFactory.d.ts.map +0 -1
- package/dist/esm/SimpleBootHttpSSRServer.d.ts.map +0 -1
- package/dist/esm/codes/HttpHeaders.d.ts +0 -45
- package/dist/esm/codes/HttpHeaders.d.ts.map +0 -1
- package/dist/esm/codes/Mimes.d.ts +0 -31
- package/dist/esm/codes/Mimes.d.ts.map +0 -1
- package/dist/esm/codes/index.d.ts +0 -3
- package/dist/esm/codes/index.d.ts.map +0 -1
- package/dist/esm/decorators/LoadAroundBefore.d.ts +0 -2
- package/dist/esm/decorators/LoadAroundBefore.d.ts.map +0 -1
- package/dist/esm/decorators/SaveAroundAfter.d.ts +0 -3
- package/dist/esm/decorators/SaveAroundAfter.d.ts.map +0 -1
- package/dist/esm/decorators/index.d.ts +0 -3
- package/dist/esm/decorators/index.d.ts.map +0 -1
- package/dist/esm/filters/IntentSchemeFilter.d.ts +0 -20
- package/dist/esm/filters/IntentSchemeFilter.d.ts.map +0 -1
- package/dist/esm/filters/SSRFilter.d.ts.map +0 -1
- package/dist/esm/filters/SSRWorker.d.ts +0 -16
- package/dist/esm/filters/SSRWorker.d.ts.map +0 -1
- package/dist/esm/filters/index.d.ts.map +0 -1
- package/dist/esm/index.d.ts +0 -3
- package/dist/esm/initializers/JsdomInitializer.d.ts +0 -11
- package/dist/esm/initializers/JsdomInitializer.d.ts.map +0 -1
- package/dist/esm/initializers/index.d.ts +0 -2
- package/dist/esm/initializers/index.d.ts.map +0 -1
- package/dist/esm/option/HttpSSRServerOption.d.ts +0 -4
- package/dist/esm/option/HttpSSRServerOption.d.ts.map +0 -1
- package/dist/esm/option/index.d.ts +0 -2
- package/dist/esm/option/index.d.ts.map +0 -1
- package/dist/esm/proxy/IntentSchemeFrontProxy.d.ts +0 -4
- package/dist/esm/proxy/IntentSchemeFrontProxy.d.ts.map +0 -1
- package/dist/esm/proxy/IntentSchemeServerProxy.d.ts +0 -4
- package/dist/esm/proxy/IntentSchemeServerProxy.d.ts.map +0 -1
- package/dist/esm/proxy/SymbolIntentApiServiceProxy.d.ts +0 -16
- package/dist/esm/proxy/SymbolIntentApiServiceProxy.d.ts.map +0 -1
- package/dist/esm/proxy/SymbolIntentApiServiceProxyBase.d.ts +0 -13
- package/dist/esm/proxy/SymbolIntentApiServiceProxyBase.d.ts.map +0 -1
- package/dist/esm/proxy/index.d.ts.map +0 -1
- /package/dist/{cjs → types}/SimpleBootHttpSSRFactory.d.ts +0 -0
- /package/dist/{cjs → types}/SimpleBootHttpSSRFactory.d.ts.map +0 -0
- /package/dist/{cjs → types}/SimpleBootHttpSSRServer.d.ts.map +0 -0
- /package/dist/{cjs → types}/codes/Mimes.d.ts +0 -0
- /package/dist/{cjs → types}/codes/Mimes.d.ts.map +0 -0
- /package/dist/{cjs → types}/codes/index.d.ts +0 -0
- /package/dist/{cjs → types}/codes/index.d.ts.map +0 -0
- /package/dist/{cjs → types}/decorators/LoadAroundBefore.d.ts +0 -0
- /package/dist/{cjs → types}/decorators/LoadAroundBefore.d.ts.map +0 -0
- /package/dist/{cjs → types}/decorators/SaveAroundAfter.d.ts +0 -0
- /package/dist/{cjs → types}/decorators/SaveAroundAfter.d.ts.map +0 -0
- /package/dist/{cjs → types}/decorators/index.d.ts +0 -0
- /package/dist/{cjs → types}/decorators/index.d.ts.map +0 -0
- /package/dist/{cjs → types}/filters/IntentSchemeFilter.d.ts +0 -0
- /package/dist/{cjs → types}/filters/IntentSchemeFilter.d.ts.map +0 -0
- /package/dist/{cjs → types}/filters/SSRFilter.d.ts +0 -0
- /package/dist/{cjs → types}/filters/SSRWorker.d.ts +0 -0
- /package/dist/{cjs → types}/filters/SSRWorker.d.ts.map +0 -0
- /package/dist/{cjs → types}/filters/index.d.ts +0 -0
- /package/dist/{cjs → types}/filters/index.d.ts.map +0 -0
- /package/dist/{cjs → types}/index.d.ts +0 -0
- /package/dist/{cjs → types}/initializers/JsdomInitializer.d.ts +0 -0
- /package/dist/{cjs → types}/initializers/index.d.ts +0 -0
- /package/dist/{cjs → types}/initializers/index.d.ts.map +0 -0
- /package/dist/{cjs → types}/option/HttpSSRServerOption.d.ts +0 -0
- /package/dist/{cjs → types}/option/HttpSSRServerOption.d.ts.map +0 -0
- /package/dist/{cjs → types}/option/index.d.ts +0 -0
- /package/dist/{cjs → types}/option/index.d.ts.map +0 -0
- /package/dist/{cjs → types}/proxy/IntentSchemeFrontProxy.d.ts +0 -0
- /package/dist/{cjs → types}/proxy/IntentSchemeFrontProxy.d.ts.map +0 -0
- /package/dist/{cjs → types}/proxy/IntentSchemeServerProxy.d.ts +0 -0
- /package/dist/{cjs → types}/proxy/IntentSchemeServerProxy.d.ts.map +0 -0
- /package/dist/{cjs → types}/proxy/SymbolIntentApiServiceProxy.d.ts +0 -0
- /package/dist/{cjs → types}/proxy/SymbolIntentApiServiceProxyBase.d.ts +0 -0
- /package/dist/{cjs → types}/proxy/SymbolIntentApiServiceProxyBase.d.ts.map +0 -0
- /package/dist/{cjs → types}/proxy/index.d.ts +0 -0
- /package/dist/{cjs → types}/proxy/index.d.ts.map +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../src/
|
|
4
|
-
"sourcesContent": ["// export * from './SimpleBootHttpSSRFactory';\n// export * from './SimpleBootHttpSSRServer';\n// export * from './codes';\n// export * from './decorators';\n// export * from './filters';\n// export * from './initializers';\n// export * from './option';\n// export * from './proxy';\nexport default {\n\n}"],
|
|
5
|
-
"mappings": ";AAQA,IAAO,cAAQ,CAEf;",
|
|
6
|
-
"names": []
|
|
3
|
+
"sources": ["../../../../../node_modules/.pnpm/node-gzip@1.1.2/node_modules/node-gzip/dist/index.js", "../../../simple-boot-http-server/src/codes/HttpHeaders.ts", "../../../simple-boot-http-server/src/codes/Mimes.ts", "../../src/codes/Mimes.ts", "../../src/codes/HttpHeaders.ts", "../../../core/src/reflect/ReflectUtils.ts", "../../../core/src/valid/ValidUtils.ts", "../../../simple-boot/src/decorators/SimDecorator.ts", "../../../simple-boot/src/decorators/MetaDataAtomic.ts", "../../../core/src/types.ts", "../../../core/src/object/ObjectUtils.ts", "../../../simple-boot/src/decorators/aop/AOPDecorator.ts", "../../src/decorators/LoadAroundBefore.ts", "../../src/decorators/SaveAroundAfter.ts", "../../../core/src/expression/Expression.ts", "../../../simple-boot/src/intent/Intent.ts", "../../../simple-boot/src/throwable/SimError.ts", "../../../simple-boot/src/throwable/SimNoSuch.ts", "../../../simple-boot/src/simstance/SimAtomic.ts", "../../../simple-boot/src/decorators/inject/Inject.ts", "../../../simple-boot/src/SimOption.ts", "../../../simple-boot/src/decorators/exception/ExceptionDecorator.ts", "../../../simple-boot/src/proxy/SimProxyHandler.ts", "../../../core/src/entity/Point2D.ts", "../../../core/src/entity/Vector.ts", "../../../core/src/entity/Point3D.ts", "../../../core/src/entity/object/obj/Obj.ts", "../../../core/src/math/MathUtil.ts", "../../../core/src/entity/SizeType.ts", "../../../core/src/entity/Rect.ts", "../../../core/src/convert/ConvertUtils.ts", "../../../simple-boot/src/lifecycle/OnSimCreate.ts", "../../../simple-boot/src/lifecycle/OnSimCreateCompleted.ts", "../../../simple-boot/src/decorators/inject/Injection.ts", "../../../simple-boot/src/throwable/MethodNoSuch.ts", "../../../simple-boot/src/decorators/route/Router.ts", "../../../simple-boot/src/route/RouterModule.ts", "../../../simple-boot/src/route/RouterAction.ts", "../../../core/src/message/Subscriber..ts", "../../../core/src/message/Observable.ts", "../../../core/src/message/Subject.ts", "../../../simple-boot/src/route/RouterManager.ts", "../../../simple-boot/src/SimpleApplication.ts", "../../../simple-boot/src/decorators/SimNoProxy.ts", "../../../core/src/random/RandomUtils.ts", "../../../simple-boot/src/simstance/SimstanceManager.ts", "../../../simple-boot/src/intent/IntentManager.ts", "../../../simple-boot-http-server/src/codes/HttpStatus.ts", "../../src/filters/IntentSchemeFilter.ts", "../../src/initializers/JsdomInitializer.ts", "../../../core/src/queues/AsyncBlockingQueue.ts", "../../../simple-boot-http-server/src/errors/HttpError.ts", "../../../simple-boot-http-server/src/errors/NotFoundError.ts", "../../../core/src/string/StringUtils.ts", "../../../core-web/src/script/ScriptUtils.ts", "../../../core/src/promise/Promises.ts", "../../../core-web/src/element/ElementUtils.ts", "../../../dom-render/src/iterators/Range.ts", "../../../dom-render/src/events/EventManager.ts", "../../../dom-render/src/operators/OperatorExecuter.ts", "../../../dom-render/src/operators/DrPre.ts", "../../../dom-render/src/operators/OperatorExecuterAttrRequire.ts", "../../../dom-render/src/operators/Dr.ts", "../../../dom-render/src/operators/DrIf.ts", "../../../dom-render/src/types/Types.ts", "../../../dom-render/src/components/ComponentSet.ts", "../../../dom-render/src/lifecycle/dr-this/OnDrThisUnBind.ts", "../../../dom-render/src/lifecycle/dr-this/OnDrThisBind.ts", "../../../dom-render/src/operators/DrThis.ts", "../../../dom-render/src/validators/Validator.ts", "../../../dom-render/src/validators/NonPassValidator.ts", "../../../dom-render/src/validators/ValidatorArray.ts", "../../../dom-render/src/operators/DrForm.ts", "../../../dom-render/src/operators/DrInnerText.ts", "../../../dom-render/src/operators/DrInnerHTML.ts", "../../../dom-render/src/operators/DrFor.ts", "../../../dom-render/src/operators/DrForOf.ts", "../../../dom-render/src/operators/DrAppender.ts", "../../../dom-render/src/operators/DrRepeat.ts", "../../../dom-render/src/operators/DrTargetElement.ts", "../../../dom-render/src/operators/DrTargetAttr.ts", "../../../dom-render/src/operators/DrStripElement.ts", "../../../dom-render/src/rawsets/DestroyOptionType.ts", "../../../dom-render/src/rawsets/RawSetType.ts", "../../../dom-render/src/operators/DrThisProperty.ts", "../../../dom-render/src/rawsets/RawSetOperatorType.ts", "../../../core/src/parser/css/CssParser.ts", "../../../dom-render/src/lifecycle/OnCreateRenderData.ts", "../../../dom-render/src/lifecycle/OnCreateRender.ts", "../../../dom-render/src/lifecycle/OnChangeAttrRender.ts", "../../../dom-render/src/lifecycle/OnInitRender.ts", "../../../dom-render/src/lifecycle/OnCreatedThisChild.ts", "../../../dom-render/src/lifecycle/OnDestroyRender.ts", "../../../dom-render/src/operators/DrTargetElementIsElement.ts", "../../../core-web/src/node/NodeUtils.ts", "../../../dom-render/src/rawsets/RawSet.ts", "../../../dom-render/src/decorators/DomRenderNoProxy.ts", "../../../core-web/src/document/DocumentUtils.ts", "../../../dom-render/src/lifecycle/OnBeforeReturnSet.ts", "../../../dom-render/src/lifecycle/OnChildRenderedByProperty.ts", "../../../dom-render/src/lifecycle/OnProxyDomRender.ts", "../../../dom-render/src/lifecycle/OnRawSetRendered.ts", "../../../dom-render/src/DomRenderProxy.ts", "../../../core/src/message/operators/filter.ts", "../../../core/src/message/operators/first.ts", "../../../core/src/message/internal/lastValueFrom.ts", "../../../core/src/message/internal/firstValueFrom.ts", "../../src/filters/SSRFilter.ts", "../../src/filters/SSRWorker.ts", "../../../simple-boot-http-server/src/option/HttpServerOption.ts", "../../src/option/HttpSSRServerOption.ts", "../../src/proxy/IntentSchemeFrontProxy.ts", "../../src/proxy/IntentSchemeServerProxy.ts", "../../../simple-boot/src/alert/AlertAction.ts", "../../../simple-boot/src/alert/Alert.ts", "../../../simple-boot/src/alert/AlertFactory.ts", "../../../simple-boot/src/alert/AlertType.ts", "../../../core/src/message/ReplaySubject.ts", "../../../simple-boot/src/alert/AlertService.ts", "../../../core/src/fetch/Fetcher.ts", "../../../core/src/fetch/HttpFetcher.ts", "../../../core/src/fetch/HttpJsonFetcher.ts", "../../../simple-boot/src/fetch/ApiService.ts", "../../src/proxy/SymbolIntentApiServiceProxy.ts", "../../src/proxy/SymbolIntentApiServiceProxyBase.ts", "../../src/SimpleBootHttpSSRFactory.ts", "../../../simple-boot-http-server/src/SimpleBootHttpServer.ts", "../../../simple-boot-http-server/src/models/RequestResponse.ts", "../../../simple-boot-http-server/src/models/datas/body/ReqFormUrlBody.ts", "../../../simple-boot-http-server/src/models/datas/body/ReqJsonBody.ts", "../../../simple-boot-http-server/src/models/datas/ReqHeader.ts", "../../../core-node/src/file/FileUtils.ts", "../../../core-node/src/convert/ConvertUtils.ts", "../../../simple-boot-http-server/src/codes/HttpMethod.ts", "../../../simple-boot-http-server/src/decorators/MethodMapping.ts", "../../../simple-boot-http-server/src/models/datas/body/ReqMultipartFormBody.ts", "../../../simple-boot/src/decorators/validate/Validation.ts", "../../../simple-boot/src/errors/ValidException.ts", "../../../simple-boot-http-server/src/session/SessionManager.ts", "../../../simple-boot-http-server/src/inject/InjectSituationType.ts", "../../src/SimpleBootHttpSSRServer.ts"],
|
|
4
|
+
"sourcesContent": ["'use strict';\n\nvar zlib = require('zlib');\n\nmodule.exports = {\n gzip: function gzip(input, options) {\n var promise = new Promise(function (resolve, reject) {\n zlib.gzip(input, options, function (error, result) {\n if (!error) resolve(result);else reject(Error(error));\n });\n });\n return promise;\n },\n ungzip: function ungzip(input, options) {\n var promise = new Promise(function (resolve, reject) {\n zlib.gunzip(input, options, function (error, result) {\n if (!error) resolve(result);else reject(Error(error));\n });\n });\n return promise;\n }\n};", "export const HttpHeaders = {\n ContentLength : 'Content-Length',\n ContentType : 'Content-Type',\n ContentEncoding : 'Content-Encoding',\n Accept : 'Accept',\n Authorization : 'Authorization',\n CacheControl : 'Cache-Control',\n Connection : 'Connection',\n Date : 'Date',\n Host : 'Host',\n Pragma : 'Pragma',\n Trailer : 'Trailer',\n TransferEncoding : 'Transfer-Encoding',\n Upgrade : 'Upgrade',\n Via : 'Via',\n Warning : 'Warning',\n AcceptCharset : 'Accept-Charset',\n AcceptEncoding : 'Accept-Encoding',\n AcceptLanguage : 'Accept-Language',\n AccessControlAllowOrigin : 'Access-Control-Allow-Origin',\n AccessControlAllowMethods : 'Access-Control-Allow-Methods',\n AccessControlAllowHeaders : 'Access-Control-Allow-Headers',\n AccessControlExposeHeaders : 'Access-Control-Expose-Headers',\n Expect : 'Expect',\n From : 'From',\n MaxForwards : 'Max-Forwards',\n Referer : 'Referer',\n UserAgent : 'User-Agent',\n Cookie : 'Cookie',\n SetCookie : 'Set-Cookie',\n // SetHeader : 'Set-Header',\n Cookie2 : 'Cookie2',\n SetCookie2 : 'Set-Cookie2',\n Location : 'Location',\n IfModifiedSince : 'If-Modified-Since',\n IfUnmodifiedSince : 'If-Unmodified-Since',\n IfMatch : 'If-Match',\n IfNoneMatch : 'If-None-Match',\n IfRange : 'If-Range',\n Allow : 'Allow',\n Server : 'Server'\n}\nexport type HttpHeadersType = keyof typeof HttpHeaders;", "export enum Mimes {\n ApplicationJson = 'application/json',\n ApplicationOctetStream = 'application/octet-stream',\n ApplicationXml = 'application/xml',\n ApplicationJsonPatch = 'application/json-patch+json',\n ApplicationXWwwFormUrlencoded = 'application/x-www-form-urlencoded',\n TextPlain = 'text/plain',\n TextHtml = 'text/html',\n All = '*/*',\n TextCss = 'text/css',\n TextJavascript = 'text/javascript',\n TextXml = 'text/xml',\n TextXslt = 'text/xslt',\n TextXmlDtd = 'text/xml-dtd',\n TextPlainUtf8 = 'text/plain; charset=utf-8',\n ImagePng = 'image/png',\n ImageGif = 'image/gif',\n ImageJpeg = 'image/jpeg',\n ImageSvg = 'image/svg+xml',\n ImageBmp = 'image/bmp',\n ImageTiff = 'image/tiff',\n ImagePdf = 'application/pdf',\n ImageXBmp = 'image/x-bmp',\n ImageXpixmap = 'image/x-xpixmap',\n ImageXxbm = 'image/x-xbm',\n MultipartFormData = 'multipart/form-data',\n}\n", "import {Mimes as AMimes} from '@dooboostore/simple-boot-http-server/codes/Mimes';\nexport const Mimes = {\n ...AMimes,\n ApplicationJsonPostSimpleBootSsrIntentScheme:'application/json-post+simple-boot-ssr-intent-scheme',\n Intent: 'intent'\n}\n", "import { HttpHeaders as AHttpHeaders } from '@dooboostore/simple-boot-http-server/codes/HttpHeaders';\nimport { Mimes } from './Mimes';\n\nexport const HttpHeaders = {\n ...AHttpHeaders,\n XSimpleBootSsrIntentScheme: 'x-simple-boot-ssr-intent-scheme'\n};\nexport type HttpHeadersType = typeof HttpHeaders;\n\nexport const makeIntentHeaderBySymbol = (symbol: Symbol): HeadersInit => {\n return {\n [HttpHeaders.Accept]: Mimes.ApplicationJsonPostSimpleBootSsrIntentScheme,\n [HttpHeaders.XSimpleBootSsrIntentScheme]: `Symbol.for(${symbol.description})`\n }\n};\n\n\n", "import { ConstructorType } from '../types';\nexport namespace ReflectUtils {\n export const getParameterTypes = (target: any, propertyKey?: string | symbol): ConstructorType<any>[] => {\n // console.log('---------param')\n if (propertyKey) {\n return Reflect.getMetadata('design:paramtypes', target, propertyKey) || [];\n } else {\n return Reflect.getMetadata('design:paramtypes', target) || [];\n }\n }\n\n\n export const getReturnType = (target: any, propertyKey: string | symbol): any => {\n return Reflect.getMetadata('design:returntype', target, propertyKey);\n }\n\n // @Reflect.metadata(\"design:type\", Point)\n export const getType = (target: any, propertyKey?: string | symbol): any => {\n if (propertyKey) {\n return Reflect.getMetadata('design:type', target, propertyKey);\n } else {\n return Reflect.getMetadata('design:type', target);\n }\n }\n\n export const getMetadata = <T = any>(metadataKey: any, target: any, propertyKey?: string | symbol): T | undefined => {\n if (propertyKey) {\n return Reflect.getMetadata(metadataKey, target, propertyKey);\n } else {\n return Reflect.getMetadata(metadataKey, target);\n }\n }\n\n export const getMetadataKeys = (target: any) => {\n return Reflect.getMetadataKeys(target);\n }\n\n export const getOwnMetadata = (metadataKey: any, target: any, propertyKey?: string): number[] | any => {\n if (propertyKey) {\n return Reflect.getOwnMetadata(metadataKey, target, propertyKey);\n } else {\n return Reflect.getOwnMetadata(metadataKey, target);\n }\n }\n\n export const getMetadatas = (target: any) => {\n return ReflectUtils.getMetadataKeys(target).map(it => ReflectUtils.getMetadata(it, target));\n }\n\n export const metadata = (metadataKey: any, data: any) => {\n return Reflect.metadata(metadataKey, data);\n }\n\n export const defineMetadata = (metadataKey: any, value: any, target: any, propertyKey?: string | symbol) => {\n // console.log(\"Reflect:\",Reflect)\n if (propertyKey && Reflect.defineMetadata) {\n Reflect.defineMetadata(metadataKey, value, target, propertyKey);\n } else if (Reflect.defineMetadata) {\n Reflect.defineMetadata(metadataKey, value, target);\n // Reflect.defineMetadata(\"design:paramtypes\", value, target);\n }\n // console.log(\"Reflect:\",Reflect.getMetadata(metadataKey, target))\n // console.log(\"Reflect:\",Reflect.getMetadata('design:paramtypes', target))\n }\n}\n", "import { ConstructorType, FilterFalsy, FilterNullish, NonNullable, Nullable, Nullish, NullOrUndefined } from '../types';\n\nexport namespace ValidUtils {\n\n export const isArrowFunction = (fn: any): fn is Function => {\n // 1. \uD568\uC218\uAC00 \uC544\uB2C8\uBA74 false\n if (typeof fn !== 'function') {\n return false;\n }\n // 2. prototype \uC18D\uC131\uC774 \uC5C6\uC73C\uBA74 \uD654\uC0B4\uD45C \uD568\uC218 (\uB610\uB294 prototype\uC774 \uC5C6\uB294 \uB2E4\uB978 callable)\n // 3. \uD074\uB798\uC2A4\uB294 'class' \uD0A4\uC6CC\uB4DC\uB85C \uC2DC\uC791\uD558\uBBC0\uB85C \uC81C\uC678\n return typeof fn.prototype === 'undefined' && !fn.toString().startsWith('class');\n }\n\n export const isPlainObject = (obj: any): boolean => {\n return obj !== null && typeof obj === 'object' && obj.constructor === Object;\n }\n\n const isConstructorLike = (fn: any): boolean => {\n // 1. \uD568\uC218\uC5EC\uC57C \uD558\uACE0,\n // 2. prototype \uC18D\uC131\uC744 \uAC00\uC838\uC57C \uD568\n return typeof fn === 'function' && typeof fn.prototype !== 'undefined';\n }\n\n\n export const isFrozen = (obj: any): boolean => {\n return Object.isFrozen(obj);\n }\n export const isSealed= (obj: any): boolean => {\n return Object.isSealed(obj)\n }\n export const isFrozenOrSealed = (obj: any): boolean => {\n return ValidUtils.isFrozen(obj) || ValidUtils.isSealed(obj);\n }\n export const isFrozenAndSealed = (obj: any): boolean => {\n return ValidUtils.isFrozen(obj) && ValidUtils.isSealed(obj);\n }\n export const isNotFrozen = (obj: any): boolean => {\n return !Object.isFrozen(obj);\n }\n export const isNotSealed = (obj: any): boolean => {\n return !Object.isSealed(obj)\n }\n export const isNotFrozenOrSealed = (obj: any): boolean => {\n return !ValidUtils.isFrozen(obj) && !ValidUtils.isSealed(obj);\n }\n export const isNotFrozenAndSealed = (obj: any): boolean => {\n return !ValidUtils.isFrozen(obj) || !ValidUtils.isSealed(obj);\n }\n\n export const isNullOrUndefined = (data: unknown): data is (null | undefined) => {\n return data == null || undefined === data;\n}\n\n export const isConstructor = (obj: ConstructorType<any> | ((e: any) => void)): obj is ConstructorType<any> => {\n // \uD568\uC218\uC774\uBA74\uC11C prototype \uC18D\uC131\uC774 \uC788\uACE0 prototype\uC774 \uAC1D\uCCB4\uC778\uC9C0 \uD655\uC778\n return typeof obj === 'function'\n && obj.prototype !== undefined\n && obj.prototype.constructor === obj\n // && Object.getOwnPropertyNames(obj.prototype).length > 1; // constructor \uC678\uC5D0 \uB2E4\uB978 \uC18D\uC131\uC774 \uC788\uB294\uC9C0 \uD655\uC778\n }\n export const isFunction = (obj: ConstructorType<any> | ((e: any) => void)): obj is ((e: any) => void) => {\n return typeof obj === 'function' && !isConstructor(obj);\n }\n export const isNullish = <T = any>(data: T | null | undefined): data is null | undefined => {\n return ValidUtils.isNotNullish(data);\n }\n export const isNotNullish = <T>(data: T | null | undefined): data is NonNullable<T> => {\n if ((Array.isArray(data) || ValidUtils.isString(data))) {\n return data.length > 0;\n }\n\n if (data instanceof Set || data instanceof Map) {\n return data.size > 0;\n }\n\n if (typeof data === 'object' && data !== null) {\n return Object.keys(data).length > 0;\n }\n\n return data !== null && data !== undefined;\n }\n\n export const isNotNullUndefined = <T>(data: T | null | undefined): data is NonNullable<T> => {\n return data !== null && data !== undefined;\n }\n\n export const isNull = (data: any): data is null => {\n return data === null;\n }\n\n export const isUndefined = (data: any): data is undefined => {\n return data === undefined;\n }\n\n export const isArray = (object_o: any): boolean => {\n if (ValidUtils.isNullOrUndefined(object_o)) {\n return false\n } else {\n return Object.prototype.toString.call(object_o).trim() === '[object Array]'\n }\n }\n\n export const isStringNumber = (value: string | number): boolean => {\n if (typeof value === 'number') {\n return !isNaN(value);\n }\n return typeof value === 'string' && value.trim() !== '' && !isNaN(Number(value));\n }\n\n export const isNumber = (object_o: any): boolean => {\n if (ValidUtils.isNullOrUndefined(object_o)) {\n return false\n } else {\n return Object.prototype.toString.call(object_o).trim() === '[object Number]'\n }\n }\n\n export const isIterator = <T>(object_o: any): object_o is Iterable<T> => {\n return object_o != null && typeof object_o[Symbol.iterator] === 'function';\n };\n\n export const isString = (object_o: any): object_o is string => {\n if (ValidUtils.isNullOrUndefined(object_o)) {\n return false\n } else {\n return Object.prototype.toString.call(object_o).trim() === '[object String]'\n }\n }\n\n // export const isFunction = (object_o: any): boolean => {\n // if (ValidUtils.isNullOrUndefined(object_o)) {\n // return false\n // } else {\n // return Object.prototype.toString.call(object_o).trim() === '[object Function]'\n // }\n // // if (typeof object_o === 'function') {\n // // return true;\n // // }else {\n // // return false;\n // // }\n // }\n\n export const isObject = (object_o: any): boolean => {\n if (ValidUtils.isNullOrUndefined(object_o)) {\n return false\n } else {\n return Object.prototype.toString.call(object_o).trim() === '[object Object]'\n }\n }\n\n export const isMap = (object_o: any): boolean => {\n if (ValidUtils.isNullOrUndefined(object_o)) {\n return false\n } else {\n return Object.prototype.toString.call(object_o).trim() === '[object Map]'\n }\n }\n\n\n export const isEmpty = (object_o: any): boolean => {\n if (ValidUtils.isNullOrUndefined(object_o)) {\n return true;\n } else if (ValidUtils.isArray(object_o)) {\n return object_o.length === 0;\n } else if (ValidUtils.isString(object_o)) {\n return object_o.trim().length === 0;\n } else if (ValidUtils.isMap(object_o)) {\n return object_o.size === 0;\n } else if (ValidUtils.isObject(object_o)) {\n return Object.keys(object_o).length === 0;\n } else {\n return false;\n }\n };\n\n\n export const isSet = <T = any>(data: any): data is Set<T> => {\n return data instanceof Set;\n };\n\n export const isNullishFiltered = <T>(value: unknown): value is FilterNullish<T> => {\n if (Array.isArray(value)) {\n return value.every(it => it !== undefined && it !== null);\n }\n return value !== undefined && value !== null;\n };\n\n export const isFalsyFiltered = <T>(value: unknown): value is FilterFalsy<T> => {\n if (Array.isArray(value)) {\n return value.every(it => {\n return it;\n });\n }\n return !!value;\n };\n\n export const includeValue = (obj: object, value: any): boolean => {\n return Object.values(obj).includes(value);\n };\n export const includeKey = (obj: object, key: string): boolean => {\n return Object.keys(obj).includes(key);\n };\n\n /** \uC885\uC131\uC774 \uC788\uB294\uC9C0 \uD655\uC778\uD558\uB294 \uD568\uC218 */\n export const lastConsonantLetter = (value: string): boolean => {\n const lastLetter = value.charCodeAt(value.length - 1);\n return (lastLetter - 0xac00) % 28 > 0;\n };\n\n export const inRange = (value: number, min: number, max: number) => {\n return min <= value && value <= max;\n };\n\n export const isBase64 = (inputString: string) => {\n // data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAA\n // const isValidBase64 = /^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;\n // return isValidBase64.test(base64String);\n\n let base64Data = inputString;\n\n // Data URL \uC811\uB450\uC0AC \uC81C\uAC70 (\uC608: \"data:image/png;base64,\")\n const parts = inputString.split(';base64,');\n if (parts.length > 1) {\n base64Data = parts[1];\n } else {\n // \"data:\"\uB9CC \uC788\uACE0 \";base64,\"\uAC00 \uC5C6\uB294 \uACBD\uC6B0\uB3C4 \uACE0\uB824 (\uC5C4\uBC00\uD788\uB294 base64\uAC00 \uC544\uB2D0 \uC218 \uC788\uC74C)\n if (inputString.startsWith('data:')) {\n // \uC774 \uACBD\uC6B0\uB294 \uC720\uD6A8\uD55C base64\uB85C \uAC04\uC8FC\uD560\uC9C0 \uC815\uCC45\uC5D0 \uB530\uB77C \uB2E4\uB984\n // \uC5EC\uAE30\uC11C\uB294 \uC77C\uB2E8 base64 \uBD80\uBD84\uC774 \uC5C6\uB2E4\uACE0 \uAC00\uC815\uD558\uACE0 false \uCC98\uB9AC\n // return false;\n // \uB610\uB294 \uC811\uB450\uC0AC\uB9CC \uC81C\uAC70\uD558\uACE0 \uB0A8\uC740 \uBD80\uBD84\uC744 \uD14C\uC2A4\uD2B8\uD560 \uC218\uB3C4 \uC788\uC74C\n const commaIndex = inputString.indexOf(',');\n if (commaIndex > -1) {\n base64Data = inputString.substring(commaIndex + 1);\n } else {\n // \uC21C\uC218 base64\uAC00 \uC544\uB2D0 \uAC00\uB2A5\uC131 \uB192\uC74C\n // return false;\n }\n }\n }\n\n\n // Base64 \uC720\uD6A8\uC131 \uAC80\uC0AC \uC815\uADDC\uC2DD\n // - \uBB38\uC790\uC5F4 \uAE38\uC774\uB294 4\uC758 \uBC30\uC218\uC5EC\uC57C \uD568 (\uD328\uB529 \uC81C\uC678)\n // - \uD328\uB529 '='\uB294 \uCD5C\uB300 2\uAC1C\uAE4C\uC9C0 \uBB38\uC790\uC5F4 \uB05D\uC5D0\uB9CC \uC62C \uC218 \uC788\uC74C\n // - \uD328\uB529\uC774 1\uAC1C\uC77C \uACBD\uC6B0, \uADF8 \uC55E \uBB38\uC790\uB294 [A-Za-z0-9+/]\n // - \uD328\uB529\uC774 2\uAC1C\uC77C \uACBD\uC6B0, \uADF8 \uC55E \uB450 \uBB38\uC790\uB294 [A-Za-z0-9+/]\n // \uC870\uAE08 \uB354 \uC5C4\uACA9\uD558\uACE0 \uD6A8\uC728\uC801\uC778 \uC815\uADDC\uC2DD:\n const base64Regex = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;\n\n // \uCD94\uAC00\uC801\uC73C\uB85C, \uC2E4\uC81C base64 \uBB38\uC790\uC5F4\uC740 \uD328\uB529\uC744 \uC81C\uC678\uD55C \uAE38\uC774\uAC00 4\uC758 \uBC30\uC218\uC5EC\uC57C \uD569\uB2C8\uB2E4.\n // \uC815\uADDC\uC2DD\uB9CC\uC73C\uB85C\uB294 \uC774 \uBD80\uBD84\uC744 \uC644\uBCBD\uD788 \uCEE4\uBC84\uD558\uAE30 \uC5B4\uB824\uC6B8 \uC218 \uC788\uC5B4, \uAE38\uC774 \uCCB4\uD06C\uB97C \uCD94\uAC00\uD558\uB294 \uAC83\uC774 \uC88B\uC2B5\uB2C8\uB2E4.\n // \uD558\uC9C0\uB9CC \uD604\uC7AC \uC81C\uACF5\uB41C \uC815\uADDC\uC2DD\uC740 \uC774 \uBD80\uBD84\uC744 \uC5B4\uB290 \uC815\uB3C4 \uACE0\uB824\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4.\n // (([A-Za-z0-9+/]{4})* \uBD80\uBD84\uACFC \uD328\uB529 \uBD80\uBD84)\n\n if (base64Data === '' || base64Data.length % 4 !== 0) {\n // \uBE48 \uBB38\uC790\uC5F4\uC774\uAC70\uB098, \uAE38\uC774\uAC00 4\uC758 \uBC30\uC218\uAC00 \uC544\uB2C8\uBA74 (\uC77C\uBC18\uC801\uC73C\uB85C) \uC720\uD6A8\uD55C base64\uAC00 \uC544\uB2D8.\n // (\uB2E8, \uC77C\uBD80 \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB294 \uD328\uB529\uC774 \uC5C6\uB294 base64\uB3C4 \uD5C8\uC6A9\uD558\uBBC0\uB85C, \uC5C4\uACA9\uD55C \uAE30\uC900\uC5D0 \uB530\uB77C \uB2E4\uB984)\n // \uD604\uC7AC \uC815\uADDC\uC2DD\uC740 \uD328\uB529\uC774 \uC62C\uBC14\uB974\uAC8C \uC801\uC6A9\uB41C \uACBD\uC6B0 \uAE38\uC774\uAC00 4\uC758 \uBC30\uC218\uAC00 \uC544\uB2CC \uACBD\uC6B0\uB3C4 \uD1B5\uACFC\uC2DC\uD0AC \uC218 \uC788\uC74C\n // \uC608: \"QQ\" (\uAE38\uC774 2) -> false, \"QQQ\" (\uAE38\uC774 3) -> false\n // \"QQ==\" (\uAE38\uC774 4) -> true, \"QQQ=\" (\uAE38\uC774 4) -> true\n // \"QQQ\"\uB294 `base64Regex.test(\"QQQ\")`\uB294 false\uC774\uC9C0\uB9CC, `Buffer.from(\"QQQ\", \"base64\").toString(\"base64\")`\uB294 \"QQ==\"\uB97C \uBC18\uD658.\n // \uC5C4\uBC00\uD558\uAC8C\uB294 \uB514\uCF54\uB529 \uC2DC\uB3C4 \uD6C4 \uB2E4\uC2DC \uC778\uCF54\uB529\uD574\uC11C \uC6D0\uBCF8\uACFC \uAC19\uC740\uC9C0 \uBE44\uAD50\uD558\uB294 \uAC83\uC774 \uAC00\uC7A5 \uD655\uC2E4\uD558\uC9C0\uB9CC, \uC131\uB2A5 \uC774\uC288\uAC00 \uC788\uC744 \uC218 \uC788\uC74C.\n }\n\n\n return base64Regex.test(base64Data);\n }\n}\n", "import { ConstructorType, GenericClassDecorator } from '@dooboostore/core/types';\nimport { ReflectUtils } from '@dooboostore/core/reflect/ReflectUtils';\nimport { SimpleApplication } from '../SimpleApplication';\nimport { ValidUtils } from '@dooboostore/core/valid/ValidUtils';\n\nexport enum Lifecycle {\n /**\n * The default registration scope, Each resolve will return the same instance (including resolves from child containers)\n */\n Singleton = 'Singleton',\n /**\n * a new instance will be created with each resolve\n */\n Transient = 'Transient'\n}\n\nexport const sims = new Map<ConstructorType<any> | Function, Set<ConstructorType<any> | Function | any>>();\nexport const containers = new Set<SimpleApplication>();\n\n\nexport type SimConfigProxy = ((ProxyHandler<any> | ConstructorType<any> | Function)) | (ProxyHandler<any> | ConstructorType<any> | Function)[];\nexport type SimConfigUsing = (ConstructorType<any> | Function | object) | ((ConstructorType<any> | Function | object)[]);\n\nexport interface SimConfig {\n symbol?: Symbol | (Symbol[]);\n scheme?: string | (string[]);\n scope?: Lifecycle;\n container?: string | (string[]);\n autoCreate?: boolean;\n proxy?: SimConfigProxy;\n type?: (ConstructorType<any> | Function) | (ConstructorType<any> | Function)[];\n using?: SimConfigUsing;\n}\n\nexport const SimMetadataKey = Symbol('Sim');\n\nconst isNotNullObjetInstance = (target: any) => target != null && target !== undefined && typeof target === 'object';\n\nexport const simProcess = (config: SimConfig, inputTarget: ConstructorType<any> | Function | any) => {\n // default setting\n /*\n // Sim({symbol: TTSymbol, scope: Lifecycle.Transient})(function (){\n // console.log('new TT')\n // return {a: 'name'}\n // })\n // Sim({symbol: TTSymbol, scope: Lifecycle.Transient})(() =>{\n // console.log('new TT')\n // return {a: 'name'}\n // })\n Sim({symbol: TTSymbol, scope: Lifecycle.Transient})({a: 'name'})\n */\n const target = (() => {\n if (typeof inputTarget === 'object') {\n return config.scope === Lifecycle.Singleton ? inputTarget : (ValidUtils.isPlainObject(inputTarget) ? { ...inputTarget }: inputTarget);\n }\n if (ValidUtils.isArrowFunction(inputTarget)) {\n return () => (inputTarget as Function)();\n }\n return inputTarget;\n })();\n\n\n\n\n let targetType: ConstructorType<any> | Function;\n if (isNotNullObjetInstance(target)) {\n targetType = target.constructor;\n } else {\n targetType = target;\n }\n config.scope = config?.scope ?? Lifecycle.Singleton;\n ReflectUtils.defineMetadata(SimMetadataKey, config, targetType);\n const adding = (targetKey: ConstructorType<any> | Function, target: ConstructorType<any> | Function | any = targetKey) => {\n const items = sims.get(targetKey) ?? new Set<ConstructorType<any> | Function | any>();\n items.add(target);\n sims.set(targetKey, items);\n }\n\n\n if (Array.isArray(config?.type)) {\n config?.type.forEach(it => {\n adding(it, target);\n })\n } else if (config.type) {\n adding(config?.type, target);\n } else {\n adding(target)\n }\n // adding(targetType)\n // console.log('----------->', sims)\n}\n// const a = Math.random()+Date.now();\nexport function Sim(target: ConstructorType<any> | Function): void;\nexport function Sim(config: SimConfig): GenericClassDecorator<ConstructorType<any> | Function | any>;\nexport function Sim(configOrTarget: SimConfig | ConstructorType<any> | Function): void | GenericClassDecorator<ConstructorType<any> | Function | any> {\n // console.group('sim')\n // sims.forEach((v,k) => {\n // console.log('sssss->', v, k)\n // })\n // console.groupEnd()\n if (typeof configOrTarget === 'function') {\n simProcess({}, configOrTarget);\n // console.log('---!', Reflect.getMetadata('design:paramtypes', configOrTarget))\n } else {\n return (target: ConstructorType<any> | Function | any) => {\n simProcess(configOrTarget, target);\n }\n }\n}\n\nexport const getSim = (target: ConstructorType<any> | Function | any): SimConfig | undefined => {\n if (target != null && target !== undefined && typeof target === 'object') {\n target = target.constructor;\n }\n try {\n return ReflectUtils.getMetadata(SimMetadataKey, target);\n } catch (e) {\n }\n}\n\nconst PostConstructMetadataKey = Symbol('PostConstruct');\nexport type PostConstructMetaType = {property: string};\nconst postConstructProcess = (target: any, config: PostConstructMetaType) => {\n const metas = getPostConstructs(target) ?? [];\n metas.push(config);\n ReflectUtils.defineMetadata(PostConstructMetadataKey, metas, target);\n}\nexport const PostConstruct = (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {\n postConstructProcess(target, {property: propertyKey});\n}\nexport const getPostConstructs = (target: any): PostConstructMetaType[] => {\n return ReflectUtils.getMetadata(PostConstructMetadataKey, target) ?? [];\n}\n", "export class MetaDataAtomic<T = any, M = any> {\n constructor(public target: T, public metaData: M) {\n }\n}\n\nexport class MetaDataPropertyAtomic<T = any, M = any> extends MetaDataAtomic<T, M> {\n constructor(target: T, metaData: M, public property: string, public parameter?: any) {\n super(target, metaData)\n }\n\n public call(...parameter: any) {\n return (this.target as any)[this.property](...parameter);\n }\n}\n", "export type WithRequiredProperty<Type, Key extends keyof Type> = Type & {\n [Property in Key]-?: Type[Property];\n};\nexport type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;\nexport type KeysWithValsOfType<T, V> = keyof { [P in keyof T as T[P] extends V ? P : never]: P };\nexport type PropType<T> = {\n [P in keyof T]: T[P];\n};\nexport type ArrayElementType<T> = T extends (infer U)[] ? U : never;\nexport type PickMix<T, M, K extends keyof T> = {\n [P in K]: T[P] & M;\n};\nexport type PickArrayElementMix<T, M, K extends keyof T> = {\n [P in K]: (ArrayElementType<T[P]> & M)[];\n};\nexport type ChangeArrayElement<T, M> = T extends (infer U)[] ? M[] : never;\nexport type ChangeArrayElementMix<T, M> = T extends (infer U)[] ? (U & M)[] : never;\nexport type ChangePickArrayElementMix<T, M, K extends keyof T> = Omit<T, K> & PickArrayElementMix<T, M, K>;\n\nexport interface ConstructorType<T> {\n new (...args: any[]): T;\n}\nexport type Method = (...args: any[]) => any;\nexport type GenericClassDecorator<T> = (target: T) => void;\n// declare type ClassDecorator = <TFunction extends Function>(target: TFunction) => TFunction | void;\n// export type ReflectField = PropertyDecorator\n// export type ReflectMethod = MethodDecorator\nexport type MethodParameter = (target: Object, propertyKey: string | symbol, parameterIndex: number) => void;\n\ntype Reverse<TupleType extends any[], ReversedTupleType extends any[] = []> = {\n 0: ReversedTupleType;\n 1: TupleType extends [infer Head, ...infer Tail] ? Reverse<Tail, [Head, ...ReversedTupleType]> : never;\n}[TupleType extends [] ? 0 : 1];\n\n//\ntype UnionToIntersection<U> = (U extends unknown ? (arg: U) => 0 : never) extends (arg: infer I) => 0 ? I : never;\n\n/**\n * LastInUnion<1 | 2> = 2.\n */\ntype LastInUnion<U> =\n UnionToIntersection<U extends unknown ? (x: U) => 0 : never> extends (x: infer L) => 0 ? L : never;\n\n/**\n * UnionToTuple<1 | 2> = [1, 2].\n */\nexport type UnionToTuple<U, Last = LastInUnion<U>> = [U] extends [never]\n ? []\n : [...UnionToTuple<Exclude<U, Last>>, Last];\n\nexport type FilterUndefined<T extends unknown[]> = T extends []\n ? []\n : T extends [infer H, ...infer R]\n ? H extends undefined\n ? FilterUndefined<R>\n : [H, ...FilterUndefined<R>]\n : T;\n\nexport type FilterNever<T extends unknown[]> = T extends []\n ? []\n : T extends [infer H, ...infer R]\n ? H extends never\n ? FilterUndefined<R>\n : [H, ...FilterUndefined<R>]\n : T;\n\nexport type Mutable<T> = {\n -readonly [P in keyof T]: T[P];\n};\nexport type ExtractNotNullish<T> = T extends null | undefined ? never : T;\nexport type FilterNullish<T> = T extends [infer E, ...infer Rest]\n ? [ExtractNotNullish<E>, ...FilterNullish<Rest>]\n : T extends (infer E)[]\n ? ExtractNotNullish<E>[]\n : ExtractNotNullish<T>;\n\nexport type ExtractNotFalsy<T> = T extends false ? never : T;\nexport type FilterFalsy<T> = T extends [infer E, ...infer Rest]\n ? [ExtractNotFalsy<E>, ...FilterFalsy<Rest>]\n : T extends (infer E)[]\n ? ExtractNotFalsy<E>[]\n : ExtractNotFalsy<T>;\nexport type FieldType<T, F> = Record<keyof T, F>;\nexport type FieldUnionType<T, F> = {\n [P in keyof T]: T[P] | F;\n};\n\n\n\nexport type Dictionary<T = any> = Record<string | number, T>;\ntype GetKeys<T> = T extends unknown[]\n ? T extends [] // special case empty tuple => no keys\n ? never\n : '0' extends keyof T // any tuple with at least one element\n ? Exclude<keyof T, keyof []>\n : number // other array\n : keyof T; // not an array\nexport type Stringify<T> = T extends string | number ? `${T}` : never;\nexport type FlattenObjectKeys<T extends Dictionary | any[]> =\n Stringify<GetKeys<T>> extends infer StringKey extends string | number\n ? [StringKey] extends [never]\n ? never\n : StringKey extends keyof T\n ? T[StringKey] extends Dictionary | any[]\n ?\n | StringKey\n | `${StringKey}.${FlattenObjectKeys<T[StringKey]>}`\n | `${StringKey}[${keyof T[StringKey] & number}]`\n | `${StringKey}[${keyof T[StringKey] & number}].${FlattenObjectKeys<T[StringKey][number]>}`\n : StringKey\n : never\n : never;\n\ntype GetType<T, K> = K extends keyof T ? T[K] : K extends `${number}` ? (T extends any[] ? T[number] : never) : never;\nexport type FlattenObjectType<T, Path = Stringify<keyof T>> =\n Stringify<keyof T> extends infer StringKey extends string | number\n ? [StringKey] extends [never]\n ? never\n : Path extends `${infer FirstKey}[${infer Index}].${infer Rest}`\n ? FlattenObjectType<GetType<GetType<T, FirstKey>, Index>, Rest>\n : Path extends `${infer FirstKey}.${infer Rest}`\n ? FlattenObjectType<GetType<T, FirstKey>, Rest>\n : Path extends `${infer FirstKey}[${infer Rest}]`\n ? FlattenObjectType<GetType<T, FirstKey>, Rest>\n : GetType<T, Path>\n : never;\n\nexport type FlattenObject<T extends Dictionary> = {\n [FlattenKey in FlattenObjectKeys<T>]: FlattenObjectType<T, FlattenKey>;\n};\n\nexport type FilterTuple<T extends any[]> = '0' extends keyof T ? never : T;\n\nexport type MaybeArray<T> = T | T[];\nexport type With<T extends MaybeArray<Dictionary>, V extends Dictionary> = T extends (infer U)[] ? Array<U & V> : T & V;\n\nexport type Nullable<T> = T | null;\nexport type Nullish<T> = Nullable<T> | undefined;\nexport type NullableObject<T> = {\n [P in keyof T]: Nullable<T[P]>;\n};\nexport type NullableProperty<T, K extends keyof T> = {\n [P in K]: Nullable<T[P]>;\n};\nexport type NullOrUndefined<T> = null | undefined;\nexport type NotNullOrUndefined<T> = T extends null | undefined ? never : T;\nexport type NonNullable<T> = T extends null | undefined ? never : T;\nexport type NonNullableObject<T> = {\n [P in keyof T]-?: NonNullable<T[P]>;\n};\nexport type NonNullableProperty<T, K extends keyof T> = {\n [P in K]-?: NonNullable<T[P]>;\n};\n\nexport type GroupBy<T extends Dictionary, K extends keyof T> = {\n [P in T[K]]: T[];\n};\n\nexport type InferPromise<T> = T extends Promise<infer U> ? U : never;\n\nexport type JoinKeys<T> = {\n [K in keyof T]: K extends string ? `${K}` | `${K}-${JoinKeys<T[K]>}` : never;\n}[keyof T];\n\nexport type FilteredFirstKeys<T, FIRST extends string> = {\n [K in keyof T as K extends `${FIRST}${string}` ? K : never]: T[K];\n};\nexport type ExcludeFilteredFirstKeys<T, FIRST extends string> = {\n [K in keyof T as K extends `${FIRST}${string}` ? never : K]: T[K];\n};\n\nexport type GetDotPath<T, P extends string> = P extends `${infer K}.${infer R}`\n ? K extends keyof T\n ? GetDotPath<T[K], R>\n : never\n : P extends keyof T\n ? T[P]\n : P extends string\n ? T\n : never;\n\nexport type FlatJoinKey<T, J = '.'> = {\n [P in keyof T as T[P] extends object\n ? // @ts-ignore\n `${P}${J}${keyof FlatJoinDotKey<T[P]>}` | `${P}`\n : // @ts-ignore\n `${P}`]: unknown;\n};\nexport type FlatJoinDotKey<T> = {\n [P in keyof T as T[P] extends object\n ? // @ts-ignore\n `${P}.${keyof FlatJoinDotKey<T[P]>}` | `${P}`\n : // @ts-ignore\n `${P}`]: unknown;\n};\nexport type FlatJoinDotKeyType<T> = keyof FlatJoinDotKey<T>;\nexport type FlatJoinKeyType<T, J> = keyof FlatJoinKey<T, J>;\nexport type FlatJoinDotKeyFieldType<T, D> = FieldType<FlatJoinDotKey<T>,D>;\nexport type FlatJoinDotKeyTypePartial<T, D> = Partial<FieldType<FlatJoinDotKey<T>,D>>;\nexport type FlatJoinDotKeyExcludeStartWithUnderBar<T> = {\n [P in keyof T as T[P] extends any\n ? // @ts-ignore\n P extends `_${string}`\n ? never\n : // @ts-ignore\n `${P}.${keyof FlatJoinDotKeyExcludeStartWithUnderBar<T[P]>}` | `${P}`\n : // @ts-ignore\n `${P}`]: unknown;\n};\nexport type FlatJoinSlashKey<T> = {\n [P in keyof T as T[P] extends object\n ? // @ts-ignore\n `${P}/${keyof FlatJoinDotKey<T[P]>}` | `${P}`\n : // @ts-ignore\n `${P}`]: unknown;\n};\nexport type FlatJoinSlashKeyExcludeStartWithUnderBar<T> = {\n [P in keyof T as T[P] extends any\n ? // @ts-ignore\n P extends `_${string}`\n ? never\n : // @ts-ignore\n `${P}/${keyof FlatJoinSlashKeyExcludeStartWithUnderBar<T[P]>}` | `${P}`\n : // @ts-ignore\n `${P}`]: unknown;\n};\nexport type FlatJoinKeyExcludeStartWith<T, J extends string, E extends string> = {\n [P in keyof T as T[P] extends any\n ? // @ts-ignore\n P extends `${E}${string}`\n ? never\n : // @ts-ignore\n `${P}${J}${keyof FlatJoinSlashKeyExcludeStartWithUnderBar<T[P]>}` | `${P}`\n : // @ts-ignore\n `${P}`]: unknown;\n};\n\n\n// https://amit08255.medium.com/the-most-mind-blowing-thing-ive-learned-in-typescript-930926ce848a\nexport type ParseRoute<T extends string> = T extends `/${infer Segment}/${infer Rest}`\n ? Segment extends `:${infer Param}`\n ? { [K in Param]: string } & ParseRoute<`/${Rest}`>\n : ParseRoute<`/${Rest}`>\n : T extends `/:${infer Param}`\n ? { [K in Param]: string }\n : {}\n// type UserRoute = ParseRoute<'/users/:id/posts/:postId'>\n// type UserRoute = { id: string; postId: string }\n// const user:UserRoute = { id: '1', postId: '2' };\n\n\nexport type ParsePath<T extends string> = T extends `/${infer Segment}/${infer Rest}`\n ? [Segment, ...ParsePath<`/${Rest}`>]\n : T extends `/${infer Segment}`\n ? [Segment]\n : []\n// type ApiRoute = ParsePath<\"/api/users/123\"> // [\"api\", \"users\", \"123\"]\n// type InvalidRoute = ParsePath<\"missing-slash\"> // []\n\n\n\nexport type StringValue<T> = {\n [K in keyof T]: T[K] extends object ? StringValue<T[K]> : string;\n};\n\n\n// index\nexport interface ConstructorType<T> {\n new (...args: any[]): T;\n}\n\n// infer\uC640 \uC870\uAC74\uBD80 \uD0C0\uC785\uC73C\uB85C \uD749\uB0B4\uB0B4\uAE30\n// \uAC00\uB054 \"\uC0C1\uC704 \uD0C0\uC785\"\uC73C\uB85C \uC81C\uC57D\uC744 \uB450\uACE0 \uC2F6\uC744 \uB54C\uB294 \uC870\uAC74\uBD80 \uD0C0\uC785\uC744 \uC501\uB2C8\uB2E4:\n// let fn: Super<HttpResponseError<any>>;\n// fn \uC740 HttpResponseError<any> \uC758 \uC0C1\uC704 \uD0C0\uC785 \uD30C\uB77C\uBBF8\uD130\uB3C4 \uBC1B\uC744 \uC218 \uC788\uC74C\n// type Super<T> = T extends HttpResponseError<infer U> ? HttpResponseError<any> : never;\nexport type Super<T> = (arg: T) => void;\n\n// export type GenericClassDecorator<T> = (target: T) => void;\n// export type MethodParameter = (target: Object, propertyKey: string | symbol, parameterIndex: number) => void;\n// export type ExtractNotFalsy<T> = T extends false ? never : T;\n// export type FilterFalsy<T> = T extends [infer E, ...infer Rest]\n// ? [ExtractNotFalsy<E>, ...FilterFalsy<Rest>]\n// : T extends (infer E)[]\n// ? ExtractNotFalsy<E>[]\n// : ExtractNotFalsy<T>;\n//\n// export type Mutable<T> = {\n// -readonly [P in keyof T]: T[P];\n// };\n// NonNullable\nexport type MethodOnlyFieldPostFix<T, S extends string> = {\n [key in keyof T as `${string & key}${S}`]: T[key] extends (...args: any[]) => any ? T[key] : never;\n};\nexport type MethodOnlyFieldPerFix<T, S extends string> = {\n [key in keyof T as `${S}${string & key}`]: T[key] extends (...args: any[]) => any ? T[key] : never;\n};\n// export const isDefined = <T>(value: T | undefined | null): value is T => value !== undefined && value !== null;\n// export const isDefined = <T>(value: T | undefined | null): value is NonNullable<T> => value !== undefined && value !== null;\nexport const isDefined = <T>(value: T | undefined | null): value is T => value !== undefined && value !== null;\n/*\ndeclare type ClassDecorator = <TFunction extends Function>(target: TFunction) => TFunction | void;\ndeclare type PropertyDecorator = (target: Object, propertyKey: string | symbol) => void;\ndeclare type MethodDecorator = <T>(target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T> | void;\ndeclare type ParameterDecorator = (target: Object, propertyKey: string | symbol, parameterIndex: number) => void;\n */\n\ndeclare global {\n namespace Reflect {\n function metadata(metadataKey: any, target: Object, propertyKey?: string | symbol): any;\n function getMetadata(metadataKey: any, target: Object, propertyKey?: string | symbol): any;\n function defineMetadata(metadataKey: any, value: any, target: Object, propertyKey?: string | symbol): void;\n function getOwnMetadata(metadataKey: any, target: Object, propertyKey?: string | symbol): any;\n function getMetadataKeys(target: Object): any[];\n }\n}\nexport {};\n", "import { ValidUtils } from '../valid/ValidUtils';\nimport type { ConstructorType } from '../types';\nimport { isDefined } from '../types';\n\nexport namespace ObjectUtils {\n\n export const constructorName = (target: any): string | undefined => {\n if (target && target.constructor && target.constructor.name) {\n return target.constructor.name;\n } else if (target && target.name) {\n return target.name;\n }\n\n }\n export const deepCopy = <T = any>(obj: T): T => {\n if (obj instanceof Map) {\n return new Map<any, any>(JSON.parse(JSON.stringify(Array.from(obj.entries())))) as T;\n } else if (obj instanceof Set) {\n return new Set<any>(JSON.parse(JSON.stringify(Array.from(obj.values())))) as T;\n } else if (ValidUtils.isNullOrUndefined(obj)) {\n return obj;\n }\n\n return JSON.parse(JSON.stringify(obj));\n };\n export const allProtoTypeName = (target?: any, filter?: (pathString: string, pathValue: any) => boolean): string[] => {\n let data: string[] = [];\n if (target) {\n const proto = Object.getPrototypeOf(target);\n if (proto && (data = Object.keys(proto) || []).length > 0) {\n data = data.concat(ObjectUtils.allProtoTypeName(proto, filter));\n }\n }\n let result = data.filter(it => it !== 'constructor');\n\n if (filter && target) {\n const proto = Object.getPrototypeOf(target);\n result = result.filter(key => filter(key, proto?.[key]));\n }\n\n return result;\n };\n\n export const uniqueKeys = (obj: (object[]) | object) => {\n const allKeys = Array.from(new Set((Array.isArray(obj) ? obj : [obj]).flatMap(item => Object.keys(item))));\n return allKeys;\n };\n\n export const ownPropertyNames = (target?: any): string[] => {\n const data: string[] = [];\n if (target) {\n if (!target.prototype) {\n const a = Object.getPrototypeOf(target);\n data.push(...Object.getOwnPropertyNames(a));\n } else {\n data.push(...Object.getOwnPropertyNames(Object.getPrototypeOf(target)));\n }\n }\n return data.filter(it => it !== 'constructor');\n };\n\n export const protoTypeName = (target?: any): string[] => {\n let data: string[] = [];\n if (target) {\n const proto = Object.getPrototypeOf(target);\n data = Object.keys(proto) || [];\n }\n return data.filter(it => it !== 'constructor');\n };\n\n export const protoTypes = (target?: any): Function[] => {\n const data: Function[] = [];\n if (target) {\n const proto = Object.getPrototypeOf(target);\n (Object.keys(proto) || []).filter(it => it !== 'constructor').forEach(it => {\n data.push(proto[it]);\n });\n }\n return data;\n };\n\n export const seal = <T>(target: T): T => {\n return Object.seal(target);\n };\n\n /*\n Object.prototype.isPrototypeOf()\n isPrototypeOf() 메소드는 해당 객체가 다른 객체의 프로토타입 체인에 속한 객체인지 확인하기 위해 사용됩니다.\n */\n export const isPrototypeOfTarget = (start: ConstructorType<any> | Function | null | undefined, target: any | null | undefined): boolean => {\n if (start && target) {\n return Object.prototype.isPrototypeOf.call(start.prototype, target);\n } else {\n return false;\n }\n };\n\n export const prototypeOfDepth = (target: any, dest: ConstructorType<any> | Function | null | undefined): object[] => {\n let object: any = target;\n const r: any[] = [];\n if (dest) {\n do {\n object = Object.getPrototypeOf(object);\n if (object?.constructor === dest) {\n break;\n }\n r.push(object);\n } while (object);\n }\n return r;\n };\n\n export const allProtoType = (start: ConstructorType<any> | Function): (ConstructorType<any> | Function)[] => {\n const depth = (target: ConstructorType<any> | Function, bowl: (ConstructorType<any> | Function)[] = []) => {\n if (target.prototype) {\n bowl.push(target);\n depth(Object.getPrototypeOf(target), bowl);\n }\n return bowl;\n };\n const d = depth(start);\n return d;\n // const protos: (ConstructorType<any> | Function)[] = []\n // while (start) {\n // protos.push(start);\n // start = Object.getPrototypeOf(start)\n // }\n // return protos;\n };\n\n export const prototypeOf = (start: any) => {\n return Object.getPrototypeOf(start);\n };\n\n export const prototypeKeyMap = (target: any): Map<Function, string> => {\n const data = new Map<Function, string>();\n if (target) {\n const proto = Object.getPrototypeOf(target);\n (Object.keys(proto) || []).filter(it => it !== 'constructor').forEach(it => {\n data.set(proto[it], it);\n });\n }\n return data;\n };\n\n export const prototypeName = (target: any, fnc: Function): string | undefined => {\n return ObjectUtils.prototypeKeyMap(target).get(fnc);\n };\n\n\n export const pickRandomKey = <T>(target: T): keyof T => {\n\n const keys = Object.keys(target as any) as Array<keyof T>;\n return keys[Math.floor(Math.random() * keys.length)];\n };\n\n export const pickRandomValue = <T>(target: T): T[keyof T] => {\n const keys = Object.keys(target as any) as Array<keyof T>;\n return target[keys[Math.floor(Math.random() * keys.length)]];\n };\n\n export const pickRandomKeyValue = <T>(target: T): { key: keyof T, value: T[keyof T] } => {\n const keys = Object.keys(target as any) as Array<keyof T>;\n const key = keys[Math.floor(Math.random() * keys.length)];\n return { key, value: target[key] };\n };\n\n export const keyValues = <T>(target: T): { key: keyof T, value: T[keyof T] }[] => {\n const keys = Object.keys(target as any) as Array<keyof T>;\n return keys.map(key => ({ key, value: target[key] }));\n };\n\n export const entries = <T>(target: T): [keyof T, T[keyof T]][] => {\n return Object.entries(target as any) as [keyof T, T[keyof T]][];\n }\n\n export const values = <T>(target: T): (T[keyof T])[] => {\n return Object.values(target as any);\n }\n\n export const keys = <T>(target: T): (keyof T)[] => {\n return Object.keys(target as any) as (keyof T)[];\n }\n\n export const keyLength = <T>(target: T): number => {\n return ObjectUtils.keys(target).length;\n };\n\n\n export const toDeleteUndefinedAndNull = <T>(target: T, config?: { deep?: boolean }): T => {\n const cleanValue = (value: any): any => {\n if (Array.isArray(value)) {\n return value.filter(item => item !== undefined && item !== null).map(cleanValue);\n } else if (value && typeof value === 'object') {\n if (config?.deep) {\n return Object.fromEntries(Object.entries(value).filter(([_, v]) => v !== undefined && v !== null).map(([k, v]) => [k, cleanValue(v)])\n );\n } else {\n return Object.fromEntries(\n Object.entries(value).filter(([_, v]) => v !== undefined && v !== null)\n );\n }\n }\n return value;\n };\n\n return cleanValue(target) as T;\n };\n\n\n export namespace Path {\n export const isFunctionScript = (script: string): boolean => {\n return script.trim().startsWith('function');\n }\n\n export const isArrowFunctionScript = (script: string): boolean => {\n return /^\\s*\\([^)]*\\)\\s*=>/.test(script);\n }\n\n export const toOptionalChainPath = (path: string): string => {\n if (!path) {\n return '';\n }\n // Add this check for object literals\n if (path.trim().startsWith('{') && path.trim().endsWith('}')) {\n return path;\n }\n if (isFunctionScript(path) || isArrowFunctionScript(path)) {\n return path;\n }\n \n // Check for ternary operator pattern (? :)\n if (path.includes(' ? ') && path.includes(' : ')) {\n // Handle ternary operator - only convert property access parts, not the ternary operator itself\n const parts = path.split(/(\\s+\\?\\s+|\\s+:\\s+)/);\n const result = parts.map((part, index) => {\n // Only process the first part (before ?) for optional chaining\n if (index === 0) {\n const tokens = part.match(/[^?.[\\]]+|\\[[^\\]]*\\]/g);\n if (tokens && tokens.length > 1) {\n return tokens.join('?.');\n }\n }\n return part;\n });\n return result.join('');\n }\n \n // Handle function calls by processing the entire path with regex replacement\n if (path.includes('(')) {\n // Replace function calls with a placeholder, process the path, then restore function calls\n const functionCallMatches: Array<{original: string, processed: string, placeholder: string}> = [];\n let tempPath = path;\n let counter = 0;\n \n // Find and process function calls with their arguments\n const functionCallRegex = /(\\w+)\\(([^()]*(?:\\([^()]*\\)[^()]*)*)\\)/g;\n let match;\n \n while ((match = functionCallRegex.exec(path)) !== null) {\n const fullMatch = match[0];\n const funcName = match[1];\n const funcArgs = match[2];\n const placeholder = `__FUNC_CALL_${counter}__`;\n \n // Process function arguments recursively\n const processedArgs = funcArgs ? toOptionalChainPath(funcArgs) : '';\n const processedFuncCall = `${funcName}?.(${processedArgs})`;\n \n functionCallMatches.push({\n original: fullMatch,\n processed: processedFuncCall,\n placeholder: placeholder\n });\n \n tempPath = tempPath.replace(fullMatch, placeholder);\n counter++;\n }\n \n // Process the path without function calls\n const tokens = tempPath.match(/[^?.[\\]]+|\\[[^\\]]*\\]/g);\n let processedPath = '';\n if (tokens && tokens.length > 1) {\n processedPath = tokens.join('?.');\n } else {\n processedPath = tempPath;\n }\n \n // Restore function calls\n for (const funcMatch of functionCallMatches) {\n processedPath = processedPath.replace(funcMatch.placeholder, funcMatch.processed);\n }\n \n return processedPath;\n }\n \n // Tokenize the path by '.', '[', ']', and '?' to handle property access and existing optional chaining.\n const tokens = path.match(/[^?.[\\]]+|\\[[^\\]]*\\]/g);\n if (!tokens) {\n return path; // Return original path if no tokens are found (e.g., path is just '.')\n }\n // Join tokens with '?.', effectively creating the optional chain path.\n return tokens.join('?.');\n };\n\n export const removeOptionalChainOperator = (path: string): string => {\n if (!path) {\n return '';\n }\n // Replace all optional chaining operators with standard ones.\n return path.replace(/\\?\\./g, '.').replace(/\\.\\[/g, '[');\n };\n\n const parsePath = (path: string): (string | number)[] => {\n const result: (string | number)[] = [];\n const regex = /\\.([^.\\[]+)|\\[(\\d+)\\]|\\[(['\"])(.*?)\\3\\]/g;\n let match;\n let lastIndex = 0;\n\n const firstMatch = path.match(regex);\n if (firstMatch && (firstMatch?.index??0) > 0) {\n result.push(path.substring(0, firstMatch.index));\n lastIndex = firstMatch.index as number;\n } else if (!firstMatch && path.length > 0) {\n result.push(path);\n return result;\n }\n\n while ((match = regex.exec(path)) !== null) {\n if (match.index > lastIndex) {\n const segment = path.substring(lastIndex, match.index);\n if (segment.startsWith('.')) {\n result.push(segment.substring(1));\n } else {\n result.push(segment);\n }\n }\n\n if (match[1]) {\n result.push(match[1]);\n } else if (match[2]) {\n result.push(parseInt(match[2], 10));\n } else if (match[4]) {\n result.push(match[4]);\n }\n lastIndex = regex.lastIndex;\n }\n\n if (lastIndex < path.length) {\n const remaining = path.substring(lastIndex);\n if (remaining.startsWith('.')) {\n result.push(remaining.substring(1));\n } else {\n result.push(remaining);\n }\n }\n\n return result;\n };\n\n export const to = <T = any>(obj: any) => {\n const destination: T = {} as any;\n Object.entries(obj).forEach(([path, value]) => {\n Path.set(destination, path, value);\n });\n return destination;\n };\n\n export const set = (obj: any, path: string, value: any) => {\n const pathParts = parsePath(path);\n let current = obj;\n\n for (let i = 0; i < pathParts.length; i++) {\n const part = pathParts[i];\n const isLastPart = i === pathParts.length - 1;\n\n if (isLastPart) {\n current[part] = value;\n } else {\n // Ensure current[part] is of the correct type for the next part\n const nextPart = pathParts[i + 1];\n\n if (typeof nextPart === 'number') { // Next part is an array index\n if (!Array.isArray(current[part])) {\n current[part] = [];\n }\n // Fill holes if current[part] is an array and nextPart is a skipped index\n if (Array.isArray(current[part])) {\n while (current[part].length <= nextPart) {\n current[part].push({}); // Fill with empty objects\n }\n }\n } else { // Next part is a string (object property)\n if (typeof current[part] !== 'object' || current[part] === null) {\n current[part] = {};\n }\n }\n current = current[part];\n }\n }\n };\n\n export const get = (obj: any, path: string, defaultValue?: any): any => {\n const pathParts = parsePath(path);\n let current = obj;\n\n for (let i = 0; i < pathParts.length; i++) {\n const part = pathParts[i];\n\n if (current === null || current === undefined) {\n return defaultValue;\n }\n\n // Check if the current object has the property/index\n if (typeof current === 'object' && current !== null && part in current) {\n current = current[part];\n } else {\n // Property/index not found\n return defaultValue;\n }\n }\n\n return current;\n };\n\n export const deletePath = (obj: any, path: string): boolean => {\n const pathParts = parsePath(path);\n if (pathParts.length === 0) {\n return false;\n }\n\n let current = obj;\n\n // Navigate to the parent of the target property\n for (let i = 0; i < pathParts.length - 1; i++) {\n const part = pathParts[i];\n\n if (current === null || current === undefined) {\n return false;\n }\n\n if (typeof current === 'object' && current !== null && part in current) {\n current = current[part];\n } else {\n return false;\n }\n }\n\n // Delete the final property\n const finalPart = pathParts[pathParts.length - 1];\n if (current !== null && typeof current === 'object' && finalPart in current) {\n if (Array.isArray(current) && typeof finalPart === 'number') {\n current.splice(finalPart, 1);\n } else {\n delete current[finalPart];\n }\n return true;\n }\n\n return false;\n };\n\n export const availablePath = (obj: any, filter?: (pathString: string, pathValue: any) => boolean): string[] => {\n const paths: string[] = [];\n\n const formatKey = (key: string | number): string => {\n if (typeof key === 'number') {\n return '[' + key + ']'; // Array index\n }\n // Check if the key is a valid JavaScript identifier.\n // If not, it needs to be quoted.\n // A valid identifier starts with a letter, _, or $, followed by letters, digits, _, or $.\n // This regex checks for characters that are NOT valid in an identifier.\n if (!/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key)) {\n // If it's not a valid identifier, quote it.\n // Use single quotes without escaping for test compatibility\n return \"['\" + key + \"']\";\n }\n return key;\n };\n\n const traverse = (current: any, currentPath: string, visited: Set<any>) => {\n if (current === null || typeof current !== 'object') {\n return;\n }\n\n // Detect circular references\n if (visited.has(current)) {\n return;\n }\n visited.add(current);\n\n if (Array.isArray(current)) {\n current.forEach((item: any, index: number) => {\n const formattedIndex = formatKey(index); // This will be [index]\n const newPath = currentPath ? `${currentPath}${formattedIndex}` : formattedIndex;\n \n // Apply filter if provided\n if (!filter || filter(newPath, item)) {\n paths.push(newPath);\n }\n \n traverse(item, newPath, visited);\n });\n } else {\n Object.keys(current).forEach(key => {\n const formattedKey = formatKey(key);\n let newPath: string;\n\n // If the key needs brackets (special characters), don't add a dot before brackets\n if (formattedKey.startsWith('[')) {\n newPath = currentPath ? `${currentPath}${formattedKey}` : formattedKey;\n } else {\n newPath = currentPath ? `${currentPath}.${formattedKey}` : formattedKey;\n }\n\n // Apply filter if provided\n if (!filter || filter(newPath, current[key])) {\n paths.push(newPath);\n }\n \n traverse(current[key], newPath, visited);\n });\n }\n };\n\n traverse(obj, '', new Set());\n return paths;\n };\n\n /**\n * 스크립트에서 사용되는 변수 경로들을 감지합니다.\n * 프록시를 사용하여 스크립트 실행 중 접근되는 모든 속성 경로를 추적합니다.\n * \n * @param script 분석할 JavaScript 스크립트 문자열\n * @param options 감지 옵션\n * @param options.excludeThis true일 경우 'this' 키워드를 결과에서 제외\n * @returns 스크립트에서 사용된 변수 경로들의 Set\n */\n export const detectPathFromScript = (script: string, options?: { excludeThis?: boolean }): Set<string> => {\n const usingVars = new Set<string>();\n\n class GetDetectProxy implements ProxyHandler<any> {\n public usingVars = usingVars;\n\n constructor(public prefix?: string) {}\n\n set(target: any, p: string | symbol, value: any, receiver: any): boolean {\n return true;\n }\n\n get(target: any, p: string | symbol, receiver: any): any {\n // Symbol 속성들은 무시 (toString, valueOf 등)\n if (typeof p === 'symbol') {\n return this.createSafeProxy(this.prefix);\n }\n\n let items: string | undefined;\n const propStr = String(p);\n \n // 숫자 인덱스 처리\n if (!isNaN(Number(propStr))) {\n items = this.prefix ? `${this.prefix}[${propStr}]` : propStr;\n } \n // 일반 속성 처리\n else {\n items = this.prefix ? `${this.prefix}.${propStr}` : propStr;\n }\n \n // 유효한 변수 경로만 추가\n if (items) {\n this.usingVars.add(items);\n }\n \n return this.createSafeProxy(items);\n }\n\n apply(target: any, thisArg: any, argArray?: any): any {\n // 함수 호출 시에도 안전한 프록시 반환 (체이닝 가능)\n return this.createSafeProxy(this.prefix);\n }\n\n\n\n private createSafeProxy(prefix?: string): any {\n const dummyFunction = () => {};\n const handler = new GetDetectProxy(prefix);\n \n return new Proxy(dummyFunction, {\n get: (target, prop, receiver) => {\n if (prop === Symbol.toPrimitive) {\n return () => '';\n }\n if (prop === 'valueOf') {\n return () => handler.createSafeProxy(prefix);\n }\n if (prop === 'toString') {\n return () => '';\n }\n return handler.get(target, prop, receiver);\n },\n set: handler.set.bind(handler),\n apply: handler.apply.bind(handler)\n });\n }\n }\n\n // 전역 변수들을 안전하게 처리하기 위한 컨텍스트 생성\n const globalContext = {\n window: new Proxy(() => {}, new GetDetectProxy('window')),\n document: new Proxy(() => {}, new GetDetectProxy('document')),\n console: new Proxy(() => {}, new GetDetectProxy('console')),\n // this는 destUser 자체가 됨\n };\n\n const destUser = new Proxy(() => {}, new GetDetectProxy('this'));\n\n try {\n // 전역 컨텍스트와 함께 실행\n const func = new Function('window', 'document', 'console', `\"use strict\"; ${script}; `);\n func.call(destUser, globalContext.window, globalContext.document, globalContext.console);\n // console.log('------->', script);\n } catch (e) {\n console.error('detectPathFromScript error:', script, e);\n }\n\n // excludeThis 옵션이 true면 'this'로 시작하는 경로에서 'this' 제거\n if (options?.excludeThis) {\n const filteredVars = new Set<string>();\n usingVars.forEach(path => {\n if (path === 'this') {\n // 'this' 자체는 제외\n return;\n } else if (path.startsWith('this.')) {\n // 'this.'로 시작하는 경우 'this.' 부분 제거\n filteredVars.add(path.substring(5));\n } else {\n // 그 외는 그대로 추가\n filteredVars.add(path);\n }\n });\n return filteredVars;\n }\n \n return usingVars;\n };\n }\n\n export const toDeleteKey = (obj: any, keys: (null | string)[]) => {\n const target = { ...obj };\n ObjectUtils.deleteKey(target, keys);\n return target;\n }\n export const deleteKey = (obj: any, keys: (null | string)[]) => {\n keys.filter(it => isDefined(it)).forEach(it => {\n delete obj[it];\n })\n }\n\n export namespace Script {\n /**\n * JavaScript 스크립트를 실행하고 결과를 반환합니다.\n * \n * @param script 실행할 스크립트 문자열 또는 {bodyScript, returnScript} 객체\n * @param thisTarget 스크립트 실행 시 this로 바인딩될 객체\n * @returns 스크립트 실행 결과\n */\n export const evaluateReturn = <T = any>(script: string | { bodyScript: string, returnScript: string }, thisTarget: any = {}): T => {\n let bodyScript = '';\n let returnScript = '';\n if (typeof script === 'object') {\n bodyScript = script.bodyScript;\n returnScript = script.returnScript;\n } else {\n returnScript = script;\n }\n return evaluate(`${bodyScript}; return ${returnScript} `, thisTarget) as T;\n };\n\n /**\n * JavaScript 스크립트를 안전하게 실행합니다.\n * \n * @param script 실행할 스크립트 문자열\n * @param thisTarget 스크립트 실행 시 this로 바인딩될 객체\n * @returns 스크립트 실행 결과 또는 undefined (에러 시)\n */\n // @ts-ignore\n export const evaluate = <T = any>(script: string, thisTarget: any = {}): T | undefined => {\n try {\n return Function(`\"use strict\"; ${script} `).bind(thisTarget)() as T;\n } catch (e) {\n console.error('eval error', e);\n console.error(script);\n return undefined;\n }\n };\n }\n\n}", "import { ReflectUtils } from '@dooboostore/core/reflect/ReflectUtils';\nimport { MetaDataPropertyAtomic } from '../MetaDataAtomic';\nimport { ObjectUtils } from '@dooboostore/core/object/ObjectUtils';\nimport { ConstructorType } from '@dooboostore/core/types';\nimport { ReflectMethod } from '../../types/Types';\n\nconst AfterMetadataKey = Symbol('After');\nconst BeforeMetadataKey = Symbol('Before');\nconst AroundMetadataKey = Symbol('Around');\ntype AOPOption = { type?: ConstructorType<any>; property: string };\ntype AroundOption = {\n before?: (obj: any, propertyKey: string, args: any[]) => any[];\n after?: (obj: any, propertyKey: string, args: any[], beforeReturn: any) => any[];\n};\n\n// after\nexport const After = (data: AOPOption) => {\n return ReflectUtils.metadata(AfterMetadataKey, data);\n};\nexport const getAfter = (target: any, propertyKey: string): AOPOption | undefined => {\n return ReflectUtils.getMetadata(AfterMetadataKey, target, propertyKey);\n};\n\nexport const getAfters = (target: any): MetaDataPropertyAtomic<any, AOPOption | undefined>[] => {\n return (\n ObjectUtils.allProtoTypeName(target)\n .map(it => new MetaDataPropertyAtomic<any, AOPOption | undefined>(target, getAfter(target, it), it))\n .filter(it => it.metaData !== undefined) || []\n );\n};\n\nexport const getProtoAfters = (\n target: any,\n propertyKey: string,\n type?: ConstructorType<any>\n): MetaDataPropertyAtomic<any, AOPOption | undefined>[] => {\n return (\n getAfters(target).filter(it => propertyKey === it.metaData?.property && type === it.metaData.type?.prototype) || []\n );\n};\n\n// before\nexport const Before = (data: AOPOption) => {\n return ReflectUtils.metadata(BeforeMetadataKey, data);\n};\n\nexport const getBefore = (target: any, propertyKey: string): AOPOption | undefined => {\n return ReflectUtils.getMetadata(BeforeMetadataKey, target, propertyKey);\n};\n\nexport const getBefores = (target: any): MetaDataPropertyAtomic<any, AOPOption | undefined>[] => {\n return (\n ObjectUtils.allProtoTypeName(target)\n .map(it => new MetaDataPropertyAtomic<any, AOPOption | undefined>(target, getBefore(target, it), it))\n .filter(it => it.metaData !== undefined) || []\n );\n};\n\nexport const getProtoBefores = (\n target: any,\n propertyKey: string,\n type?: ConstructorType<any>\n): MetaDataPropertyAtomic<any, AOPOption | undefined>[] => {\n return (\n getBefores(target).filter(it => propertyKey === it.metaData?.property && type === it.metaData.type?.prototype) || []\n );\n};\n\nexport class AroundForceReturn {\n constructor(public value: any) {}\n}\n// around\nexport const Around = (config: AroundOption): ReflectMethod => {\n return (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {\n ReflectUtils.defineMetadata(AroundMetadataKey, config, target, propertyKey);\n\n const method = descriptor.value;\n descriptor.value = function (...args: any[]) {\n // console.log('check method')\n\n let before: any = undefined;\n let r: any = undefined;\n if (config.before) {\n try {\n before = config.before?.(this, propertyKey, args);\n } catch (e) {\n if (e instanceof AroundForceReturn) {\n return e.value;\n }\n }\n r = method.apply(this, before);\n } else {\n r = method.apply(this, args);\n }\n\n if (config.after) {\n try {\n r = config.after?.(this, propertyKey, args, r);\n } catch (e) {\n if (e instanceof AroundForceReturn) {\n return e.value;\n }\n }\n }\n return r;\n };\n };\n};\n\nexport const getAround = (target: any, propertyKey: string): AroundOption | undefined => {\n return ReflectUtils.getMetadata(AroundMetadataKey, target, propertyKey);\n};\n", "import { getSim } from '@dooboostore/simple-boot/decorators/SimDecorator';\nimport { AroundForceReturn } from '@dooboostore/simple-boot/decorators/aop/AOPDecorator';\nimport { ReflectUtils } from '@dooboostore/core/reflect/ReflectUtils';\n\nexport const LoadAroundBefore = (obj: any, propertyKey: string, args: any[]) => {\n const simstanceManager = obj._SimpleBoot_simstanceManager;\n const simOption = obj._SimpleBoot_simOption;\n const config = getSim(obj);\n if (simstanceManager && simOption && config?.scheme) {\n const key = config.scheme + '_' + propertyKey;\n const type = ReflectUtils.getReturnType(obj, propertyKey);\n const isHas = (key in (simOption.window.server_side_data ?? {}))\n if (isHas) {\n const data = simOption.window.server_side_data?.[key];\n delete simOption.window.server_side_data?.[key];\n let rdata;\n if (type === Promise) {\n rdata = Promise.resolve(data);\n } else {\n rdata = data;\n }\n throw new AroundForceReturn(rdata);\n } else {\n return args;\n }\n }\n return args;\n}\n", "import { getSim } from '@dooboostore/simple-boot/decorators/SimDecorator';\n\nexport const SaveAroundAfter = (obj: any, propertyKey: string, args: any[], beforeReturn: any) => {\n const simstanceManager = obj._SimpleBoot_simstanceManager;\n const simOption = obj._SimpleBoot_simOption;\n const config = getSim(obj);\n if (simstanceManager && simOption && config?.scheme) {\n if (!simOption.window.server_side_data) {\n simOption.window.server_side_data = {};\n }\n const key = config.scheme+'_'+propertyKey;\n if (beforeReturn instanceof Promise) {\n beforeReturn.then((it) => {\n simOption.window.server_side_data[key] = JSON.stringify(it);\n return it;\n });\n } else {\n simOption.window.server_side_data[key] = JSON.stringify(beforeReturn);\n }\n }\n return beforeReturn;\n}\n\n\nexport const getStorage = (window: Window) => {\n return (window as any).aroundStorage;\n}\n", "import { StringUtils } from '../string/StringUtils';\n\nexport namespace Expression {\n\n // html = html.replace(/\\$\\{[\\s\\S]*?\\}\\$/g, '');\n\n export const bindExpression = (expression: string, bind: { [name: string]: ((arg: any) => any) | any }) => {\n // ${data} wow ${wow:parameter}\n // expression\uC5D0\uC11C ${...} \uD615\uD0DC\uB97C \uBAA8\uB450 \uCC3E\uC544\uC11C \uCC98\uB9AC\n return (expression ?? '').replace(/\\$\\{([\\s\\S.]*?)\\}/g, (_, group) => {\n // \uD30C\uB77C\uBBF8\uD130\uAC00 \uC788\uB294 \uACBD\uC6B0: name:param\n const [name, param] = group.split(':');\n const binder = bind[name];\n if (!binder) return '';\n if (typeof binder === 'function') {\n return binder(bind[param]);\n }\n return binder;\n });\n }\n\n /**\n * @deprecated\n */\n // export namespace Group {\n // export const isExpression = (data: string | null) => {\n // // const reg = /(?:[$#]\\{(?:(([$#]\\{)??[^$#]?[^{]*?)\\}[$#]))/g;\n // const reg = /[$#]\\{([\\s\\S.]*?)\\}[$#]/g;\n // return reg.test(data ?? '');\n // }\n //\n // export const expressionGroups = (data: string | null) => {\n // // const reg = /(?:[$#]\\{(?:(([$#]\\{)??[^$#]*?)\\}[$#]))/g;\n // // const reg = /(?:[$#]\\{(?:(([$#]\\{)??[^$#]?[^{]*?)\\}[$#]))/g;\n // const reg = /[$#]\\{([\\s\\S.]*?)\\}[$#]/g;\n // return StringUtils.regexExec(reg, data ?? '');\n // }\n // }\n export namespace Path {\n export type PathNameData = { [name: string]: string }\n export const pathNameData = (pathName: string, urlExpression: string) => {\n const urls = pathName.split('/');\n const urlExpressions = urlExpression.split('/');\n if (urls.length !== urlExpressions.length) {\n return;\n }\n const data: Path.PathNameData = {}\n for (let i = 0; i < urlExpressions.length; i++) {\n const it = urlExpressions[i];\n const urlit = urls[i];\n // ex) {serialNo:[0-9]+} or {no} ..\n const execResult = /^\\{(.+)\\}$/g.exec(it);\n if (!execResult) {\n if (it !== urlit) {\n return;\n }\n continue;\n }\n // regex check\n const [name, regex] = execResult[1].split(':'); // group1\n if (regex && !new RegExp(regex).test(urlit)) {\n return;\n }\n data[name] = urlit;\n }\n return data;\n }\n }\n}", "import { Expression } from '@dooboostore/core/expression/Expression';\n\nexport enum PublishType {\n DATA_PARAMETERS = 'DATA_PARAMETERS',\n INLINE_DATA_PARAMETERS = 'INLINE_DATA_PARAMETERS',\n}\n\n/* uri struct\n scheme uri example: mymodule://asd/asd/b?a=545&aa=33&wow=wow\n global uri example: ://asd/asd/b?a=545&aa=33&wow=wow\n route uri example: Router(/users/aa/ffw)://asd/asd/b?a=545&aa=33&wow=wow\n Symbol.for uri example: Symbol.for(zzz)://asd/asd/b?a=545&aa=33&wow=wow\n <\uC2A4\uD0B4>://<\uC0AC\uC6A9\uC790\uC774\uB984>:<\uBE44\uBC00\uBC88\uD638>@<\uD638\uC2A4\uD2B8>:<\uD3EC\uD2B8>/<\uACBD\uB85C>?<\uC9C8\uC758>#<\uD504\uB808\uADF8\uBA3C\uD2B8>\n*/\nexport class Intent<T = any, E = any> {\n public publishType?: PublishType;\n public sessionData = new Map<string, any>();\n\n constructor(public uri: string | { symbol: Symbol | Symbol[], uri: `/${string}` }, public data?: T, public event?: E) {\n\n if (typeof uri === 'string') {\n const match = uri.match(/^Symbol\\.for\\((.+)\\):\\/(.*)$/);\n if (match) {\n const symbol = Symbol.for(match[1] as string);\n this.uri = {\n symbol: symbol,\n uri: match[2] as `/${string}`,\n };\n }\n }\n }\n\n get symbols() {\n if (typeof this.uri === 'object') {\n // ensure symbol is always an array\n return Array.isArray(this.uri.symbol) ? this.uri.symbol : [this.uri.symbol];\n }\n return undefined;\n }\n\n get scheme() {\n if (typeof this.uri === 'string') {\n const parts = this.uri.split('://');\n if (parts.length > 1) {\n return parts[0];\n }\n return undefined;\n } else {\n return undefined;\n }\n }\n\n get paths() {\n return (this.pathname.split('/') ?? []);\n }\n\n get fullPath() {\n const uri = typeof this.uri === 'string' ? this.uri : this.uri.uri\n const paths = uri.split('://');\n return paths[paths.length >= 2 ? 1 : 0] ?? '';\n }\n\n get pathname() {\n const paths = this.fullPath.split('?');\n return paths[0];\n }\n\n get query() {\n const paths = this.fullPath.split('?');\n return paths[1] ?? '';\n }\n\n get queryParams(): { [key: string]: string } {\n const param = {} as { [key: string]: string };\n this.query.split('&')?.forEach(it => {\n const a = it.split('=')\n param[a[0]] = a[1];\n })\n return param;\n }\n\n get queryParamsAfterDecodeURI(): { [key: string]: string } {\n const params = this.queryParams;\n for (const key in params) {\n if (params.hasOwnProperty(key)) {\n params[key] = decodeURIComponent(params[key]);\n }\n }\n return params;\n }\n\n getPathnameData(urlExpression: string) {\n return Expression.Path.pathNameData(this.pathname, urlExpression);\n }\n\n \n\n get isSymbolScheme(): boolean {\n return this.symbols !== undefined;\n }\n}\n", "export class SimError {\n message?: string;\n name?: string;\n stack?: string;\n\n constructor(message?: string, name?: string, stack?: string) {\n this.message = message;\n this.name = name;\n this.stack = stack;\n }\n}\n", "import {SimError} from './SimError';\n\nexport class SimNoSuch extends SimError {\n constructor(message?: string, name?: string, stack?: string) {\n super(message, name, stack);\n }\n}\n", "import { ConstructorType } from '@dooboostore/core/types';\nimport { SimConfig, SimMetadataKey } from '../decorators/SimDecorator';\nimport { Carrier, SimstanceManager } from './SimstanceManager';\nimport { ReflectUtils } from '@dooboostore/core/reflect/ReflectUtils';\n\nexport class SimAtomic<T = object> {\n private value?: T | undefined;\n constructor(public type:{targetKeyType: ConstructorType<T> | Function, originalType: ConstructorType<T> | Function, value?: T}, private simstanceManager: SimstanceManager, private config?: {optional?: boolean}) {\n this.value = type.value;\n }\n\n getConfig(): SimConfig | undefined;\n getConfig<C = any>(key: symbol): C | undefined;\n getConfig<C = any>(key: symbol = SimMetadataKey): C | undefined {\n return ReflectUtils.getMetadata(key, this.type.originalType);\n }\n\n getConfigs() {\n return ReflectUtils.getMetadatas(this.type.originalType);\n }\n\n getValue(config?: {newInstanceCarrier?: Carrier, refresh?: boolean}): T | undefined {\n if (config?.refresh) {\n this.value = undefined;\n }\n // console.log('------value?', this.type, this.simstanceManager.storage)\n // return this.simstanceManager.getOrNewSim({target:this.type, newInstanceCarrier: config?.newInstanceCarrier});\n if (!this.value) {\n this.value = this.simstanceManager.getOrNewSim({target: this.type.targetKeyType, originTypeTarget: this.type.originalType, newInstanceCarrier: config?.newInstanceCarrier});\n // const findFirstSim = this.simstanceManager.findFirstSim({type: this.type});\n // if (findFirstSim) {\n // this.value = findFirstSim.getValue(config);\n // } else {\n // this.value = this.simstanceManager.getOrNewSim({target: this.type, newInstanceCarrier: config?.newInstanceCarrier});\n // }\n }\n return this.value;\n // const types = ConvertUtils.flatArray(this.getConfig()?.type);\n // types.push(this.type);\n // for (const typeElement of types) {\n // const instance = this.simstanceManager.getOrNewSim(typeElement, this.type);\n // if (instance) {\n // return instance;\n // }\n // }\n }\n}\n", "import { ConstructorType } from '@dooboostore/core/types';\nimport {MethodParameter} from '../../types/Types'\nimport { ReflectUtils } from '@dooboostore/core/reflect/ReflectUtils';\nimport {ExceptionHandlerSituationType} from '../exception/ExceptionDecorator';\n\nexport enum InjectSituationType {\n INDEX = 'SIMPLE_BOOT_CORE://Inject/INDEX',\n}\n\nexport type SituationType = string | Symbol | ConstructorType<any> | InjectSituationType | ExceptionHandlerSituationType;\n\nexport class SituationTypeContainer {\n public situationType: SituationType;\n public data: any;\n public index?: number;\n\n constructor({situationType, data, index}: { situationType: SituationType, data: any, index?: number }) {\n this.situationType = situationType;\n this.data = data;\n this.index = index;\n }\n}\n\nexport class SituationTypeContainers {\n public containers: SituationTypeContainer[] = [];\n\n constructor(containers?: SituationTypeContainer[]) {\n if (containers) {\n this.containers.push(...containers);\n }\n }\n\n public push(...item: SituationTypeContainer[]) {\n this.containers.push(...item)\n }\n\n get length() {\n return this.containers.length;\n }\n\n find(predicate: (value: SituationTypeContainer, index: number, obj: SituationTypeContainer[]) => unknown, thisArg?: any): SituationTypeContainer | undefined {\n return this.containers.find(predicate);\n }\n}\n\nexport type InjectConfig = {\n scheme?: string;\n symbol?: Symbol;\n type?: ConstructorType<any>;\n situationType?: SituationType;\n argument?: any;\n applyProxy?: { type: ConstructorType<ProxyHandler<any>>, param?: any[] };\n optional?: boolean;\n disabled?: boolean;\n}\n\nexport type SaveInjectConfig = {\n index: number;\n type?: ConstructorType<any>;\n propertyKey?: string | symbol;\n config: InjectConfig;\n}\n\nconst InjectMetadataKey = Symbol('Inject');\nconst injectProcess = (config: InjectConfig, target: Object, propertyKey: string | symbol | undefined, parameterIndex: number) => {\n if (propertyKey && typeof target === 'object') { // <-- object: method\n const otarget = target;\n target = target.constructor;\n const saves = (Reflect.getOwnMetadata(InjectMetadataKey, target, propertyKey) || []) as SaveInjectConfig[];\n const type = ReflectUtils.getParameterTypes(otarget, propertyKey)[parameterIndex];\n saves.push({index: parameterIndex, config: config, propertyKey, type});\n ReflectUtils.defineMetadata(InjectMetadataKey, saves, target, propertyKey);\n } else if (!propertyKey || typeof target === 'function') { // <-- function: constructor\n const existingInjectdParameters = (ReflectUtils.getMetadata(InjectMetadataKey, target) || []) as SaveInjectConfig[]\n const type = ReflectUtils.getParameterTypes(target)[parameterIndex];\n existingInjectdParameters.push({index: parameterIndex, config: config, type});\n ReflectUtils.defineMetadata(InjectMetadataKey, existingInjectdParameters, target);\n }\n}\nexport function Inject(target: Object, propertyKey: string | symbol | undefined, parameterIndex: number): void;\nexport function Inject(config: InjectConfig): ParameterDecorator;\nexport function Inject(configOrTarget: Object | InjectConfig, propertyKey?: string | symbol | undefined, parameterIndex?: number): void | ParameterDecorator {\n if (propertyKey && parameterIndex !== undefined) {\n injectProcess({}, configOrTarget, propertyKey, parameterIndex);\n } else {\n return (target: Object, propertyKey: string | symbol | undefined, parameterIndex: number) => {\n injectProcess(configOrTarget, target, propertyKey, parameterIndex);\n }\n }\n}\n\nexport const getInject = (target: ConstructorType<any> | Function | any, propertyKey?: string | symbol): SaveInjectConfig[] => {\n if (target != null && target !== undefined && typeof target === 'object') {\n target = target.constructor;\n }\n if (propertyKey) {\n const parameters: SaveInjectConfig[] = Reflect.getOwnMetadata(InjectMetadataKey, target, propertyKey);\n return parameters;\n } else {\n return ReflectUtils.getMetadata(InjectMetadataKey, target)??[];\n }\n}\n", "import { ConstructorType } from '@dooboostore/core/types';\nimport { SimConfigUsing } from './decorators/SimDecorator';\nimport { Storage } from '@dooboostore/core/storage/Storage';\nimport { CacheStorage } from './decorators/cache/CacheDecorator';\n\nexport type ProxyHandlerType = { onAfterProxy: <T>(it: T) => T };\nexport type InitOptionType = {\n rootRouter?: ConstructorType<any>,\n container?: string,\n excludeSim?: (ConstructorType<any> | Function)[],\n advice?: ConstructorType<any>[],\n proxy?: ProxyHandlerType,\n using?: SimConfigUsing,\n cache?: CacheConfig,\n};\ntype CacheConfig = {\n ms?: number;\n storage?: CacheStorage;\n enable?: boolean;\n};\n\nexport class SimOption {\n public rootRouter?: ConstructorType<any>\n public container?: string;\n public advice: ConstructorType<any>[];\n public proxy?: ProxyHandlerType;\n // public excludeSim: ((ConstructorType<any> | Function)[]) | ((type: (ConstructorType<any> | Function)) => boolean);\n public using?: SimConfigUsing;\n public cache?: CacheConfig\n\n constructor({rootRouter, container, cache, advice = [], proxy, using}: InitOptionType = {}) {\n this.rootRouter = rootRouter;\n this.container = container;\n this.advice = advice;\n // this.excludeSim = excludeSim;\n this.proxy = proxy;\n this.using = using;\n this.cache = cache;\n }\n\n addAdvicce(advice: ConstructorType<any>) {\n this.advice??= [];\n this.advice.push(advice);\n }\n\n setAdvice(...advice: ConstructorType<any>[]): SimOption {\n this.advice = advice;\n return this;\n }\n}\n", "import { ConstructorType } from '@dooboostore/core/types';\nimport {ReflectMethod} from '../../types/Types';\nimport { ReflectUtils } from '@dooboostore/core/reflect/ReflectUtils';\nimport {ObjectUtils} from '@dooboostore/core/object/ObjectUtils';\n\nexport enum ExceptionHandlerSituationType {\n ERROR_OBJECT = 'SIMPLE_BOOT_CORE://ExceptionHandler/ERROR_OBJECT',\n PARAMETER = 'SIMPLE_BOOT_CORE://ExceptionHandler/PARAMETER',\n}\nexport type ExceptionHandlerConfig = { type?: ConstructorType<any>; throw?: boolean }\nexport type SaveExceptionHandlerConfig = { propertyKey?: string | symbol; method: Function; config: ExceptionHandlerConfig; }\n\nconst ExceptionHandlerMetadataKey = Symbol('ExceptionHandler');\n\nexport const ExceptionHandler = (config: ExceptionHandlerConfig = {}): ReflectMethod => {\n return (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {\n const saveMappingConfigs = (ReflectUtils.getMetadata(ExceptionHandlerMetadataKey, target.constructor) ?? []) as SaveExceptionHandlerConfig[];\n const method = target[propertyKey];\n saveMappingConfigs.push({propertyKey, method, config});\n ReflectUtils.defineMetadata(ExceptionHandlerMetadataKey, saveMappingConfigs, target.constructor);\n ReflectUtils.defineMetadata(ExceptionHandlerMetadataKey, config, target, propertyKey);\n }\n}\n\nexport const getExceptionHandler = (target: any, propertyKey: string): ExceptionHandlerConfig | undefined => {\n return ReflectUtils.getMetadata(ExceptionHandlerMetadataKey, target, propertyKey);\n}\n\nexport const getExceptionHandlers = (target: any): SaveExceptionHandlerConfig[] | undefined => {\n if (target !== null && undefined !== target && typeof target === 'object') {\n target = target.constructor;\n }\n return ReflectUtils.getMetadata(ExceptionHandlerMetadataKey, target);\n}\n\nexport const targetExceptionHandlers = (target: any, error: any): SaveExceptionHandlerConfig[] => {\n const exceptionHandlers = getExceptionHandlers(target);\n const emptyTargets = exceptionHandlers?.filter(it => it.config.type === undefined);\n const targets = exceptionHandlers?.filter(it => ObjectUtils.isPrototypeOfTarget(it.config.type, error));\n const targetSorts = targets?.sort((a, b) => {\n const aPrototypeOfDepth = ObjectUtils.prototypeOfDepth(error, a.config.type);\n const bPrototypeOfDepth = ObjectUtils.prototypeOfDepth(error, b.config.type);\n return aPrototypeOfDepth.length - bPrototypeOfDepth.length\n });\n return (targetSorts ?? []).concat(...emptyTargets ?? []);\n}\n\nexport const targetExceptionHandler = (target: any, error: any, excludeMethods: Function[] = []): SaveExceptionHandlerConfig | undefined => {\n let exceptionHandlers = targetExceptionHandlers(target, error);\n exceptionHandlers = exceptionHandlers?.filter(it => !excludeMethods.includes(it.method));\n if (exceptionHandlers && exceptionHandlers.length > 0) {\n return exceptionHandlers[0];\n } else {\n return undefined;\n }\n}\n", "import {SimstanceManager} from '../simstance/SimstanceManager'\nimport {getProtoAfters, getProtoBefores} from '../decorators/aop/AOPDecorator';\nimport {ObjectUtils} from '@dooboostore/core/object/ObjectUtils';\nimport {SimOption} from '../SimOption';\nimport {ExceptionHandlerSituationType, SaveExceptionHandlerConfig, targetExceptionHandler} from '../decorators/exception/ExceptionDecorator';\nimport { ConstructorType } from '@dooboostore/core/types';\nimport {SituationTypeContainer, SituationTypeContainers} from '../decorators/inject/Inject';\nimport { SimpleApplication } from '../SimpleApplication';\n\nexport class SimProxyHandler implements ProxyHandler<any> {\n constructor(private simpleApplication: SimpleApplication, private simstanceManager: SimstanceManager, private simOption: SimOption) {\n // console.log('SimProxyHandler', simstanceManager, simOption)\n }\n\n // \uC798\uBC1B\uAC8C \uD574\uB1A8\uB124 \u314B\u314B simstanceManager\n public get(target: any, name: string): any {\n if (name === '_SimpleBoot_application') {\n return this.simpleApplication;\n } else if (name === '_SimpleBoot_simstanceManager') {\n return this.simstanceManager;\n }else if (name === '_SimpleBoot_simOption') {\n return this.simOption;\n } else {\n return target[name]\n }\n }\n\n\n\n public set(obj: any, prop: string, value: any, receiver: any): boolean {\n value = this.simstanceManager?.proxy(value)\n obj[prop] = value\n return true\n }\n\n apply(target: Function, thisArg: any, argumentsList?: any[]): any {\n let r;\n try {\n this.aopBefore(thisArg, target);\n try {\n // @ts-ignore\n r = Reflect.apply(target, thisArg, argumentsList);\n // r = target.apply(thisArg, argumentsList);\n // eslint-disable-next-line no-useless-catch\n } catch (e) {\n throw e;\n } finally {\n this.aopAfter(thisArg, target);\n }\n } catch (e: Error | any) {\n console.error(e);\n const inHandlers = this.getExceptionHandler(e, thisArg, target);\n if (inHandlers.length > 0 && inHandlers[0]) {\n const inHandler = inHandlers[0];\n this.executeExceptionHandler(e, inHandler, argumentsList);\n } else {\n throw e;\n }\n }\n return r\n }\n\n private executeExceptionHandler(e: any, inHandler: { thisArg: any; config: SaveExceptionHandlerConfig }, argumentsList?: any[]) {\n const otherStorage = new Map<ConstructorType<any>, any>();\n otherStorage.set(e.constructor, e);\n const situationErrorTypeContainer = new SituationTypeContainer({\n situationType: ExceptionHandlerSituationType.ERROR_OBJECT,\n data: e\n });\n const situationParameterTypeContainer = new SituationTypeContainer({\n situationType: ExceptionHandlerSituationType.PARAMETER,\n data: argumentsList\n });\n otherStorage.set(SituationTypeContainers, new SituationTypeContainers([situationErrorTypeContainer, situationParameterTypeContainer]));\n argumentsList?.forEach(it => {\n otherStorage.set(it.constructor, it);\n });\n try {\n this.simstanceManager.executeBindParameterSim({\n target: inHandler.thisArg,\n targetKey: inHandler.config.propertyKey\n }, otherStorage);\n } catch (es) {\n e = es;\n }\n if (inHandler.config.config.throw) {\n const exceptionHandler = this.getExceptionHandler(e, inHandler.thisArg, inHandler.config.method);\n if ((exceptionHandler?.length ?? 0) > 0) {\n this.executeExceptionHandler(e, exceptionHandler[0], argumentsList);\n }\n }\n }\n\n private getExceptionHandler(e: any, thisArg: any, target: Function) {\n const globalConfigSets = this.simOption.advice.map(it => this.simstanceManager?.getOrNewSim({target:it})).filter(it => it).map(it => {\n return {thisArg: it, config: targetExceptionHandler(it, e, [target])}\n }) ?? [];\n const thisConfigSet = {thisArg: thisArg, config: targetExceptionHandler(thisArg, e, [target])}\n const inHandlers = [thisConfigSet, ...globalConfigSets].filter(it => it && it.config) as { thisArg: any, config: SaveExceptionHandlerConfig }[];\n return inHandlers;\n }\n\n private aopBefore(obj: any, protoType: Function) {\n const propertyName = ObjectUtils.prototypeName(obj, protoType);\n if (propertyName && obj) {\n getProtoBefores(obj, propertyName).forEach(it => {\n it.call(obj, protoType, propertyName)\n })\n\n for (let i = 0; i < this.simOption.advice.length; i++) {\n const sim = this.simstanceManager?.getOrNewSim({target:this.simOption.advice[i]});\n const protoBefores = getProtoBefores(sim, propertyName, Object.getPrototypeOf(obj));\n protoBefores.forEach(it => {\n it.call(obj, protoType, propertyName)\n })\n }\n }\n }\n\n private aopAfter(obj: any, protoType: Function) {\n const propertyName = ObjectUtils.prototypeName(obj, protoType);\n if (propertyName) {\n getProtoAfters(obj, propertyName).forEach(it => {\n it.call(obj, protoType, propertyName)\n })\n\n for (let i = 0; i < this.simOption.advice.length; i++) {\n const sim = this.simstanceManager?.getOrNewSim({target:this.simOption.advice[i]});\n const protoBefores = getProtoAfters(sim, propertyName, Object.getPrototypeOf(obj));\n protoBefores.forEach(it => {\n it.call(obj, protoType, propertyName)\n })\n }\n }\n }\n\n has(target: any, key: PropertyKey): boolean {\n if (key === '_SimpleBoot_isProxy') {\n return true\n }\n return key in target\n }\n}\n", "import { Vector } from './Vector';\n\nexport class Point2D {\n public x: number;\n public y: number;\n\n constructor(data: {x?: number, y?: number});\n constructor(x?: number, y?: number);\n constructor(x?: number | {x?: number, y?: number} | Vector , y?: number) {\n if (typeof x === 'object') {\n this.x = x.x ?? 0;\n this.y = x.y ?? 0;\n } else {\n this.x = x ?? 0;\n this.y = y ?? 0;\n }\n }\n\n copy() {\n return new Point2D(this.x, this.y);\n }\n}\n", "// https://p5js.org/ko/\nimport { Point3D } from './Point3D';\nimport { Point2D } from './Point2D';\n\nexport class Vector {\n public x: number;\n public y: number;\n public z: number;\n\n constructor(data: Point3D);\n constructor(data: {x?: number, y?: number, z?: number});\n constructor(x?: number, y?: number, z?: number);\n constructor(x?: number | {x?: number, y?: number, z?: number} | Point3D, y?: number, z?: number) {\n if (x instanceof Point3D) {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z;\n } else if (typeof x === 'object') {\n this.x = x.x ?? 0;\n this.y = x.y ?? 0;\n this.z = x.z ?? 0;\n } else {\n this.x = x ?? 0;\n this.y = y ?? 0;\n this.z = z ?? 0;\n }\n }\n\n\n public set(v: number | Vector | Point3D, y: number = 0, z: number = 0) {\n if (v instanceof Vector || v instanceof Point3D) {\n this.set(v.x || 0, v.y || 0, v.z || 0);\n } else {\n this.x = v;\n this.y = y;\n this.z = z;\n }\n return this;\n }\n\n public get() {\n return new Vector(this.x, this.y, this.z);\n }\n\n // \uD53C\uD0C0\uACE0\uB77C\uC2A4\uC758 \uC815\uB9AC\uB294 a\uC758 \uC81C\uACF1 \uB354\uD558\uAE30 b \uC758 \uC81C\uACF1\uC740 c \uC758 \uC81C\uACF1\uACFC \uAC19\uB2E4\uB294 \uAC83\uC744 \uC815\uC758\uD569\uB2C8\uB2E4.\n public mag(): number {\n const x = this.x;\n const y = this.y;\n const z = this.z;\n return Math.sqrt(x * x + y * y + z * z); // \uC758 \uC81C\uACF1\uADFC\uC744 \uB9AC\uD134\uD558\uBA74 \uAE38\uC774\uAC00 \uBC18\uD658\uB41C\uB2E4.\n }\n\n public add(v: number | Vector | Point3D, y: number = 0, z: number = 0) {\n if (v instanceof Vector || v instanceof Point3D) {\n this.x += v.x;\n this.y += v.y;\n this.z += v.z;\n } else {\n this.x += v;\n this.y += y;\n this.z += z;\n }\n }\n\n public toAdd(v1: Vector|Point3D, v2: Vector|Point3D): Vector {\n return new Vector(v1.x + v2.x, v1.y + v2.y, v1.x + v2.y);\n }\n\n // public static add(v1: Vector, v2: Vector): Vector {\n // return new Vector(v1.x + v2.x, v1.y + v2.y, v1.x + v2.y);\n // }\n\n public sub(v: number | Vector |Point3D, y = 0, z = 0) {\n if (v instanceof Vector || v instanceof Point3D) {\n this.x -= v.x;\n this.y -= v.y;\n this.z -= v.z;\n } else {\n this.x -= v;\n this.y -= y;\n this.z -= z;\n }\n }\n\n public toSub(v2: Vector | Point3D): Vector {\n const v1 = this;\n return new Vector(v1.x - v2.x, v1.y - v2.y, v1.z - v2.z);\n }\n\n //\n // public static sub(v1: Vector, v2: Vector): Vector {\n // return new Vector(v1.x - v2.x, v1.y - v2.y, v1.z - v2.z);\n // }\n\n public mult(v: number | Vector | Point3D) {\n if (v instanceof Vector || v instanceof Point3D) {\n this.x *= v.x;\n this.y *= v.y;\n this.z *= v.z;\n } else {\n this.x *= v;\n this.y *= v;\n this.z *= v;\n }\n return this;\n }\n\n public toMult(v2: Vector | Point3D): Vector {\n const v1 = this;\n return new Vector(v1.x *= v2.x, v1.y *= v2.y, v1.z *= v2.z);\n }\n\n // public static mult(v1: Vector, v2: Vector) {\n // return new Vector(v1.x *= v2.x, v1.y *= v2.y, v1.z *= v2.z);\n // }\n\n public div(v: number | Vector | Point3D) {\n if (v instanceof Vector || v instanceof Point3D) {\n this.x /= v.x;\n this.y /= v.y;\n this.z /= v.z;\n } else {\n this.x /= v;\n this.y /= v;\n this.z /= v;\n }\n return this;\n }\n\n public toDiv( d: number): Vector {\n const v = this;\n const rv = v.get();\n rv.x /= d;\n rv.y /= d;\n rv.z /= d;\n return rv;\n }\n\n // public static div(v: Vector, d: number): Vector {\n // const rv = v.get();\n // rv.x /= d;\n // rv.y /= d;\n // rv.z /= d;\n // return rv;\n // }\n\n public dist(v: Vector | Point3D): number {\n const dx = this.x - v.x,\n dy = this.y - v.y,\n dz = this.z - v.z;\n return Math.sqrt(dx * dx + dy * dy + dz * dz);\n }\n\n public toDist(v2: Vector | Point3D): number {\n const v1 = this;\n const dx = v1.x - v2.x,\n dy = v1.y - v2.y,\n dz = v1.z - v2.z;\n return Math.sqrt(dx * dx + dy * dy + dz * dz);\n }\n\n // public static dist(v1: Vector, v2: Vector): number {\n // const dx = v1.x - v2.x,\n // dy = v1.y - v2.y,\n // dz = v1.z - v2.z;\n // return Math.sqrt(dx * dx + dy * dy + dz * dz);\n // }\n\n public dot(v: number | Vector | Point3D, y: number, z: number): number {\n if (v instanceof Vector || v instanceof Point3D) {\n return this.x * v.x + this.y * v.y + this.z * v.z;\n }\n ;\n return this.x * v + this.y * y + this.z * z;\n }\n\n public cross(v: Vector | Point3D): Vector {\n const x = this.x,\n y = this.y,\n z = this.z;\n return new Vector(y * v.z - v.y * z, z * v.x - v.z * x, x * v.y - v.x * y);\n }\n\n public normalize() {\n const m = this.mag();\n if (m > 0) this.div(m);\n }\n\n public limit(high: number) {\n if (this.mag() > high) {\n this.normalize();\n this.mult(high);\n }\n }\n\n public heading2D() {\n return -Math.atan2(-this.y, this.x);\n }\n\n public random2D() {\n return this.fromAngle(Math.random() * (2 * Math.PI));\n }\n\n public fromAngle(angle: number, length = 1) {\n return new Vector(length * Math.cos(angle), length * Math.sin(angle), 0);\n };\n\n public fromAngles(theta: number, phi: number, length = 1) {\n const cosPhi = Math.cos(phi);\n const sinPhi = Math.sin(phi);\n const cosTheta = Math.cos(theta);\n const sinTheta = Math.sin(theta);\n\n return new Vector(\n length * sinTheta * sinPhi,\n -length * cosTheta,\n length * sinTheta * cosPhi\n );\n };\n\n public array(): number[] {\n return [this.x, this.y, this.z];\n }\n\n public toPoint3D(): Point3D {\n return new Point3D(this.x, this.y, this.z);\n }\n\n public toPoint2D(): Point2D {\n return new Point2D(this.x, this.y);\n }\n\n public copy(): Vector {\n return new Vector(this.x, this.y, this.z);\n }\n\n public toString(): string {\n return '[' + this.x + ', ' + this.y + ', ' + this.z + ']';\n }\n\n}\n", "import { Vector } from './Vector';\nimport { Point2D } from './Point2D';\n\nexport class Point3D extends Point2D {\n public z: number;\n\n constructor(data: Vector);\n constructor(data: {x?: number, y?: number, z?: number});\n constructor(x?: number, y?: number, z?: number);\n constructor(x?: number | {x?: number, y?: number, z?: number} | Vector, y?: number, z?: number) {\n if (x instanceof Vector) {\n super(x.x, x.y);\n this.z = x.z;\n } else if (typeof x === 'object') {\n super({x: x.x ?? 0, y: x.y ?? 0})\n this.z = x.z ?? 0;\n } else {\n super(x,y)\n this.z = z ?? 0;\n }\n }\n\n copy() {\n return new Point3D(this.x, this.y, this.z);\n }\n}\n", "import { Vector } from '../../Vector';\nimport { Rect } from '../../Rect';\n\ntype Transaform = [number, number, number, number, number, number];\n\ntype Color = {\n r?: number,\n g?: number,\n b?: number,\n a?: number\n};\n\nexport class Obj<T = any> extends Vector {\n\n public volume = 0; // \uBD80\uD53C\n public mass = 0; // \uC9C8\uB7C9\n public e = 0; // \uD0C4\uC131\n public rotate = 0; // \uD68C\uC804\n public width = 0; // \uB108\uBE44\n public height = 0; // \uB192\uC774\n public data?: T;\n // public age = 0; // \uC0DD\uC131\uB41C \uC2DC\uAC04 \uAC00\uC911\uCE58\n // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/transform\n /*\n a, d: \uAC00\uB85C/\uC138\uB85C \uC2A4\uCF00\uC77C\n b, c: \uAE30\uC6B8\uC774\uAE30(skew)\n e, f: \uC774\uB3D9(translate)\n --------------\n a, b, c, d, e, f\n */\n public transform: Transaform = [1, 0, 0, 1, 0, 0];\n public color: Color = {\n r: 0,\n g: 0,\n b: 0,\n a: 255\n };\n public id?: string;\n\n // public data?: T;\n\n\n constructor(data?: {\n x?: number,\n y?: number,\n z?: number,\n volume?: number,\n mass?: number,\n e?: number,\n rotate?: number,\n width?: number,\n height?: number,\n transform?: Transaform,\n color?: Color,\n data?: T,\n }) {\n super();\n this.updateObjWithDefaults(data);\n }\n\n\n copyObj() {\n return new Obj({\n x: this.x,\n y: this.y,\n z: this.z,\n volume: this.volume,\n mass: this.mass,\n e: this.e,\n rotate: this.rotate,\n width: this.width,\n height: this.height,\n transform: [...this.transform],\n color: {...this.color},\n data: {...this.data}\n });\n }\n\n updateObjWithDefaults(data?: {\n x?: number,\n y?: number,\n z?: number,\n volume?: number,\n mass?: number,\n e?: number,\n rotate?: number,\n width?: number,\n height?: number,\n transform?: Transaform,\n color?: Color,\n data?: T,\n }) {\n if (data) {\n this.x = data.x ?? this.x;\n this.y = data.y ?? this.y;\n this.z = data.z ?? this.z;\n this.volume = data.volume ?? this.volume;\n this.mass = data.mass ?? this.mass;\n this.e = data.e ?? this.e;\n this.rotate = data.rotate ?? this.rotate;\n this.width = data.width ?? this.width;\n this.height = data.height ?? this.height;\n this.transform = [...(data.transform ?? this.transform)];\n this.color = {...(data.color ?? this.color)};\n const t = data.data ?? this.data;\n this.data = t?{...t}:undefined;\n }\n }\n\n setObj(data?: {\n x?: number,\n y?: number,\n z?: number,\n volume?: number,\n mass?: number,\n e?: number,\n rotate?: number,\n width?: number,\n height?: number,\n transform?: Transaform,\n color?: Color,\n data?: T,\n }) {\n if (data) {\n this.x = data.x??0;\n this.y = data.y??0;\n this.z = data.z??0;\n this.volume = data.volume??0;\n this.mass = data.mass??0;\n this.e = data.e??0;\n this.rotate = data.rotate??0;\n this.width = data.width??0;\n this.height = data.height??0;\n this.transform = [...(data.transform??[1, 0, 0, 1, 0, 0])];\n this.color = { ...(data.color??{r:0,g:0,b:0,a:255})};\n const data1 = data.data;\n this.data = data1 ? { ...data1} : undefined;\n }\n }\n\n toRect(): Rect {\n return new Rect(this.x, this.y, this.width, this.height);\n }\n\n // constructor(canvas: HTMLCanvasElement, context: CanvasRenderingContext2D, public avaliablePlace: Rectangle = new Rectangle(new Point(0, 0), new Point(0, 0))) {\n // super(canvas, context);\n // }\n\n\n // get centerPoint(): Point {\n // return new Point();\n // }\n}\n", "import { Point3D } from '../entity/Point3D';\nimport { Vector } from '../entity/Vector';\nimport { Obj } from '../entity/object/obj/Obj';\nimport { Point2D } from '../entity/Point2D';\n\nexport namespace MathUtil {\n export type BezierConfig = { p1x: number | 'random', p1y: number | 'random', p2x: number | 'random', p2y: number | 'random' } | [number | 'random', number | 'random', number | 'random', number | 'random'];\n export const getMinByObjectArray = (objectArray: Array<any>, varName: string) => {\n let min;\n if (varName && objectArray && objectArray.length > 0) {\n min = objectArray[0][varName];\n for (let i = 1; i < objectArray.length; i++) {\n min = Math.min(min, objectArray[i][varName]);\n }\n }\n return min;\n };\n\n export const hypot = (...data: number[]) => {\n // 2\uCC28\uC6D0 \uC608\uC2DC\n // Math.hypot(3, 4); // \uACB0\uACFC: 5 (3\u00B2 + 4\u00B2 = 9 + 16 = 25, \u221A25 = 5)\n\n// 3\uCC28\uC6D0 \uC608\uC2DC\n// Math.hypot(3, 4, 5); // \uACB0\uACFC: 7.0710678118654755\n\n return Math.hypot(...data);\n }\n\n // \uD53C\uD0C0\uACE0\uB77C\uC2A4 \uC815\uB9AC \uD568\uC218\n export const pythagorean = (a: number, b: number): number => {\n /*\n \uD53C\uD0C0\uACE0\uB77C\uC2A4 \uC815\uB9AC\n a^2 + b^2 = c^2\n c = \u221A(a^2 + b^2)\n */\n // return Math.sqrt(start * start + end * end);\n return Math.sqrt(a * a + b * b);\n };\n\n export const getMaxByObjectArray = (objectArray: Array<any>, varName: string) => {\n let max;\n if (varName && objectArray && objectArray.length > 0) {\n max = objectArray[0][varName];\n for (let i = 1; i < objectArray.length; i++) {\n max = Math.max(max, objectArray[i][varName]);\n }\n }\n return max;\n };\n\n export const sum = (array: number[]) => {\n return array.reduce((acc, curr) => acc + curr, 0);\n }\n\n export const avg = (array: number[]) => {\n return array.length > 0 ? MathUtil.sum(array) / array.length : 0;\n }\n\n export const minMax = (data: number, minMax: { min: number, max: number }) => {\n return Math.min(Math.max(data, minMax.min), minMax.max);\n }\n export const max = (array: number[]) => {\n return array.length > 0 ? Math.max(...array) : undefined;\n };\n\n export const min = (array: number[]) => {\n return array.length > 0 ? Math.min(...array) : undefined;\n };\n\n export const getSumByObjectArray = (objectArray: Array<any>, varName: string) => {\n let sum = 0;\n if (varName && objectArray && objectArray.length > 0) {\n for (let i = 0; i < objectArray.length; i++) {\n sum += objectArray[i][varName];\n }\n }\n return sum;\n };\n\n\n export type AngleUnitType = 'degreeAngle' | 'ratio' | 'percent';\n /**\n * Converts value to radians based on given type.\n * @param data - The value to convert to radians\n * @param option - Conversion type configuration\n * @param option.type - Type of conversion:\n * 'degreeAngle' - Converts from degrees to radians\n * 'ratio' - Multiplies value by 2\u03C0 (input range 0-1)\n * 'percent' - Converts percentage to 2\u03C0 ratio (input range 0-100)\n * @returns The converted value in radians\n * @example\n * // Convert 180 degrees to radians (3.14...)\n * radians(180, {type: 'degreeAngle'})\n *\n * // Convert 0.5 ratio to radians (3.14...)\n * radians(0.5, {type: 'ratio'})\n *\n * // Convert 50% to radians (3.14...)\n * radians(50, {type: 'percent'})\n */\n export const radians = (data: number, {type = 'degreeAngle'}: {type?: AngleUnitType}): number => {\n /*\n radian\n * 1.57..: 90\uB3C4, PI/2\n * 3.14..: 180\uB3C4, PI\n * 4.71..: 270\uB3C4, PI + PI/2\n * 6.28..: 360\uB3C4, PI * 2\n */\n if (type === 'ratio') {\n return (data * 2) * Math.PI;\n } else if (type === 'percent') {\n return ((data / 100) * 2) * Math.PI;\n } else {\n // return data * Math.PI / 180;\n return data / 180 * Math.PI;\n }\n };\n\n export const degrees = (data: number, {type = 'degreeAngle'}: {type?: AngleUnitType}): number => {\n if (type === 'ratio') {\n return data * 360;\n } else if (type === 'percent') {\n return (data / 100) * 360;\n } else {\n return data * 180 / Math.PI;\n }\n };\n // static createCanvas(w, h) {\n // let canvas = document.createElement('canvas');\n // canvas.width = w;\n // canvas.height = h;\n // return canvas;\n // }\n //\n // static copyCanvas(canvas) {\n // let newCanvas = document.createElement('canvas');\n // newCanvas.width = canvas.width;\n // newCanvas.height = canvas.height;\n // context = newCanvas.getContext('2d');\n // context.drawImage(canvas, 0, 0);\n // return newCanvas;\n // }\n\n /**\n 1. \uBE44\uC728\uC758 \uAC1C\uB150\n \uBE44\uC728(Ratio): \uB450 \uC591\uC758 \uC0C1\uB300\uC801\uC778 \uD06C\uAE30\uB97C \uBE44\uAD50\uD55C \uAC12\uC73C\uB85C, \uC77C\uBC18\uC801\uC73C\uB85C \uBD84\uC218\uB098 \uC18C\uC218\uB85C \uD45C\uD604\uB429\uB2C8\uB2E4. \uC608\uB97C \uB4E4\uC5B4, \"2:3\" \uBE44\uC728\uC740 \uB450 \uC218\uC758 \uBE44\uAC00 2 \uB300 3\uC774\uB77C\uB294 \uB73B\uC774\uBA70, \uC774\uB294 2/3\uB85C\uB3C4 \uB098\uD0C0\uB0BC \uC218 \uC788\uC2B5\uB2C8\uB2E4.\n \uB2E8\uC704 \uBE44\uC728(Normalized Ratio): \uD55C \uAC12\uC744 \uAE30\uC900\uC73C\uB85C \uB2E4\uB978 \uAC12\uC744 \uC870\uC815\uD55C \uBE44\uC728\uC744 \uC758\uBBF8\uD569\uB2C8\uB2E4. \uC5EC\uAE30\uC11C\uB294 \uB108\uBE44(w)\uB97C 1\uB85C \uC815\uADDC\uD654(normalize)\uD558\uC5EC \uB192\uC774(h)\uC758 \uC0C1\uB300\uC801 \uAC12\uC744 \uAD6C\uD558\uB294 \uAC83\uC774 \uBAA9\uD45C\uC785\uB2C8\uB2E4.\n \uC774\uBBF8\uC9C0 \uBE44\uC728: \uC774\uBBF8\uC9C0\uC758 \uB108\uBE44\uC640 \uB192\uC774 \uBE44\uC728\uC740 \uBCF4\uD1B5 \"w:h\" \uD615\uC2DD\uC73C\uB85C \uD45C\uD604\uB418\uBA70, \uC774 \uBE44\uC728\uC744 \uC720\uC9C0\uD558\uBA74\uC11C \uD06C\uAE30\uB97C \uC870\uC815\uD560 \uB54C \uC720\uC6A9\uD569\uB2C8\uB2E4.\n 2. \uACC4\uC0B0 \uBC29\uBC95\n \uC8FC\uC5B4\uC9C4 \uB370\uC774\uD130:\n\n \uB108\uBE44(w) = 1652 \uD53D\uC140\n \uB192\uC774(h) = 421 \uD53D\uC140\n \uBAA9\uD45C: \uB108\uBE44\uB97C 1\uB85C \uBCF4\uC558\uC744 \uB54C \uB192\uC774\uC758 \uAC12 \uAD6C\uD558\uAE30\n \uB2E8\uACC4\uBCC4 \uACC4\uC0B0\n \uC6D0\uB798 \uBE44\uC728 \uAD6C\uD558\uAE30:\n \uC774\uBBF8\uC9C0\uC758 \uBE44\uC728\uC740 w:h = 1652:421\uC785\uB2C8\uB2E4.\n \uC774\uB97C \uBD84\uC218\uB85C \uD45C\uD604\uD558\uBA74 1652 / 421\uC785\uB2C8\uB2E4.\n \uB108\uBE44\uB97C 1\uB85C \uC815\uADDC\uD654:\n \uB108\uBE44\uB97C 1\uB85C \uB9CC\uB4E4\uAE30 \uC704\uD574, \uC6D0\uB798 \uB108\uBE44(1652)\uB97C 1\uB85C \uB098\uB204\uACE0, \uC774\uB97C \uB192\uC774\uC5D0\uB3C4 \uB3D9\uC77C\uD558\uAC8C \uC801\uC6A9\uD569\uB2C8\uB2E4.\n \uC815\uADDC\uD654\uB41C \uB192\uC774 = \uC6D0\uB798 \uB192\uC774(h) \u00F7 \uC6D0\uB798 \uB108\uBE44(w)\n \uC218\uC2DD: h' = h / w (\uC5EC\uAE30\uC11C h'\uB294 \uC815\uADDC\uD654\uB41C \uB192\uC774)\n \uACC4\uC0B0 \uC801\uC6A9:\n \uC815\uADDC\uD654\uB41C \uB192\uC774 = 421 / 1652\n \uACC4\uC0B0: 421 \u00F7 1652 \u2248 0.25485 (\uC18C\uC218\uC810 \uC57D 5\uC790\uB9AC\uAE4C\uC9C0)\n \uACB0\uACFC \uD574\uC11D:\n \uB108\uBE44\uAC00 1\uC77C \uB54C \uB192\uC774\uB294 \uC57D 0.25485\uC785\uB2C8\uB2E4. \uC774\uB294 \uB192\uC774\uAC00 \uB108\uBE44\uC758 \uC57D 25.485%\uC5D0 \uD574\uB2F9\uD568\uC744 \uC758\uBBF8\uD569\uB2C8\uB2E4.\n \uAC80\uC99D\n \uC6D0\uB798 \uBE44\uC728\uC744 \uC720\uC9C0\uD558\uB824\uBA74, \uC815\uADDC\uD654\uB41C \uAC12\uC744 \uC5ED\uC73C\uB85C \uC801\uC6A9\uD574 \uC6D0\uB798 \uAC12\uC744 \uBCF5\uC6D0\uD560 \uC218 \uC788\uC5B4\uC57C \uD569\uB2C8\uB2E4.\n \uC815\uADDC\uD654\uB41C \uBE44\uC728(0.25485)\uC744 1652\uC5D0 \uACF1\uD558\uBA74: 1652 * 0.25485 \u2248 421, \uC774\uB294 \uC6D0\uB798 \uB192\uC774\uC640 \uC77C\uCE58\uD558\uBBC0\uB85C \uACC4\uC0B0\uC774 \uC62C\uBC14\uB984.\n 3. \uC218\uC2DD \uC815\uB9AC\n \uC77C\uBC18\uC801\uC778 \uC815\uADDC\uD654 \uC218\uC2DD:\n \uC815\uADDC\uD654\uB41C \uB192\uC774(h') = h / w\n \uC815\uADDC\uD654\uB41C \uB108\uBE44(w') = w / w = 1 (\uAE30\uC900\uAC12)\n \uC774 \uBB38\uC81C \uC801\uC6A9:\n h' = 421 / 1652 \u2248 0.25485\n 4. \uB300\uC548: \uBE44\uC728\uB85C \uD45C\uD604\n \uBE44\uC728\uC744 \"1:\uBE44\uC728\uAC12\" \uD615\uC2DD\uC73C\uB85C \uD45C\uD604\uD558\uB824\uBA74, \uB192\uC774\uB97C \uB108\uBE44\uB85C \uB098\uB208 \uAC12\uC744 \uADF8\uB300\uB85C \uC0AC\uC6A9.\n \uACB0\uACFC: 1 : 0.25485 \uB610\uB294 \uC57D 1 : 0.255 (\uC18C\uC218\uC810 \uBC18\uC62C\uB9BC).\n 5. \uCD94\uAC00 \uAC1C\uB150\n \uBE44\uB840\uC2DD: \uC774\uBBF8\uC9C0 \uD06C\uAE30\uB97C \uC870\uC815\uD560 \uB54C \uBE44\uC728\uC744 \uC720\uC9C0\uD558\uB824\uBA74, w1 / h1 = w2 / h2\uB97C \uB9CC\uC871\uD574\uC57C \uD569\uB2C8\uB2E4. \uC5EC\uAE30\uC11C w2 = 1\uB85C \uC124\uC815\uD55C \uACBD\uC6B0, h2 = h1 / w1\uC774 \uB429\uB2C8\uB2E4.\n \uC2E4\uC81C \uC801\uC6A9: \uC6F9 \uB514\uC790\uC778\uC774\uB098 \uADF8\uB798\uD53D\uC5D0\uC11C \uC774\uBBF8\uC9C0\uB97C \uB9AC\uC0AC\uC774\uC9D5\uD560 \uB54C, \uC6D0\uBCF8 \uBE44\uC728(1652:421)\uC744 \uC720\uC9C0\uD558\uB824\uBA74 \uC774 \uC815\uADDC\uD654\uB41C \uAC12\uC744 \uC0AC\uC6A9\uD574 \uB192\uC774\uB97C \uACC4\uC0B0.\n <script>\n const w = 1652;\n const h = 421;\n const normalizedHeight = h / w;\n console.log(`\uC815\uADDC\uD654\uB41C \uB192\uC774: ${normalizedHeight.toFixed(5)}`); // 0.25485\n console.log(`\uC6D0\uB798 \uBE44\uC728 \uD655\uC778: ${w * normalizedHeight} \u2248 ${h}`); // \uC57D 421\n </script>\n */\n export const ratio = (numerator: number, denominator: number, multiplier: number = 1): number => {\n // numerator(\uBD84\uC790) : denominator(\uBD84\uBAA8) = multiplier : x\n // x = multiplier * denominator / numerator\n return multiplier * (denominator / numerator)\n // a:b = c:x \uBE44\uB840\uC2DD\uC744 \uC774\uC6A9\uD574 x \uAC12\uC744 \uAD6C\uD568\n // ax = bc\n // x = bc/a\n }\n //end - start \uB05D\uACFC \uC2DC\uC791\uC758 \uC0AC\uC774\uAE38\uC774\uB97C \uCDE8\uB4DD\uD55C\uB2E4.\n export const getBetweenLength = (start: number, end: number) => {\n return end - start;\n };\n\n //\uC804\uCCB4\uAC12\uC5D0\uC11C \uC77C\uBD80\uAC12\uC740 \uBA87 \uD37C\uC13C\uD2B8? \uACC4\uC0B0\uBC95 \uACF5\uC2DD tot\uC5D0\uC11C data\uB294 \uBA87%\uC778\uAC00.\n export const getPercentByTotal = (tot: number, data: number) => {\n /*\n \uC804\uCCB4\uAC12\uC5D0\uC11C \uC77C\uBD80\uAC12\uC740 \uBA87 \uD37C\uC13C\uD2B8? \uACC4\uC0B0\uBC95 \uACF5\uC2DD\n \uC77C\uBD80\uAC12 \u00F7 \uC804\uCCB4\uAC12 X 100\n \uC608\uC81C) 300\uC5D0\uC11C 105\uB294 \uBA87\uD37C\uC13C\uD2B8?\n \uB2F5: 35%\n */\n return (data / tot) * 100;\n };\n export const getRatioByTotal = (tot: number, data: number) => {\n return (data / tot)\n };\n\n //\uC804\uCCB4\uAC12\uC758 \uBA87 \uD37C\uC13C\uD2B8\uB294 \uC5BC\uB9C8? \uACC4\uC0B0\uBC95 \uACF5\uC2DD tot\uC5D0\uC11C wantPercent\uB294 \uBA87\uC778\uAC00?\n export const getValueByTotalInPercent = (tot: number, wantPercent: number) => {\n /*\n \uC804\uCCB4\uAC12 X \uD37C\uC13C\uD2B8 \u00F7 100\n \uC608\uC81C) 300\uC758 35\uD37C\uC13C\uD2B8\uB294 \uC5BC\uB9C8?\n \uB2F5) 105\n */\n return (tot * wantPercent) / 100;\n };\n export const getValueByTotalInRatio = (tot: number, ratio: number) => {\n return (tot * ratio);\n };\n\n //\uC22B\uC790\uB97C \uBA87 \uD37C\uC13C\uD2B8 \uC99D\uAC00\uC2DC\uD0A4\uB294 \uACF5\uC2DD tot\uC5D0\uC11C wantPercent\uC744 \uC99D\uAC00 \uC2DC\uD0A8\uB2E4\n export const getValuePercentUp = (tot: number, wantPercent: number) => {\n /*\n \uC22B\uC790\uB97C \uBA87 \uD37C\uC13C\uD2B8 \uC99D\uAC00\uC2DC\uD0A4\uB294 \uACF5\uC2DD\n \uC22B\uC790 X (1 + \uD37C\uC13C\uD2B8 \u00F7 100)\n \uC608\uC81C) 1548\uC744 66\uD37C\uC13C\uD2B8 \uC99D\uAC00\uD558\uBA74?\n \uB2F5) 2569.68\n */\n return tot * (1 + wantPercent / 100);\n };\n\n export const getValueRatioUp = (tot: number, ratio: number) => {\n return tot * (1 + ratio);\n }\n\n //\uC22B\uC790\uB97C \uBA87 \uD37C\uC13C\uD2B8 \uAC10\uC18C\uD558\uB294 \uACF5\uC2DD tot\uC5D0\uC11C wantPercent\uC744 \uC99D\uAC10 \uC2DC\uD0A8\uB2E4\n export const getValuePercentDown = (tot: number, wantPercent: number) => {\n /*\n \uC22B\uC790\uB97C \uBA87 \uD37C\uC13C\uD2B8 \uAC10\uC18C\uD558\uB294 \uACF5\uC2DD\n \uC22B\uC790 X (1 - \uD37C\uC13C\uD2B8 \u00F7 100)\n \uC608\uC81C) 1548\uC744 66\uD37C\uC13C\uD2B8 \uAC10\uC18C\uD558\uBA74?\n \uB2F5) 526.32\n */\n return tot * (1 - wantPercent / 100);\n };\n\n export const getValueRatioDown = (tot: number, ratio: number) => {\n return tot * (1 - ratio);\n }\n\n\n //\uBC14\uB840\uC2DD\n // A:B = C:X => 30:50 = 33 : x\n // 30X = 50*33\n // X = BC / 30\n\n\n // Bezier\n // https://cubic-bezier.com/#.17,.67,.83,.67\n // https://matthewlein.com/tools/ceaser\n // https://easings.net/ko#\n // (0.250, 0.250, 0.750, 0.750); /* linear */\n export const beziers = (points: (Point3D | { x: number; y: number, z: number })[], frame: number) => {\n const datas = new Array(frame).fill(undefined);\n for (let i = 0; i < datas.length; i++) {\n datas[i] = MathUtil.bezier(points, frame, i);\n }\n return datas;\n };\n\n // \uCC98\uC74C\uC810\uC740 \uD3EC\uD568\uB418\uC9C0 \uC54A\uB294\uB2E4, \uB05D\uC810\uC740 \uD3EC\uD568\uB41C\uB2E4.\n export const bezier = (points: (Point3D | { x: number; y: number, z: number })[], frame: number, idx: number): Vector => {\n if (points && points.length > 0) {\n const pv = points.map(it => new Vector(it.x, it.y, it.z));\n const steps: Vector[] = [];\n pv.reduce((a, b) => {\n const step = a.toSub(b).div(frame).mult(idx + 1);\n steps.push(a.toSub(step));\n return b;\n });\n\n if (steps.length <= 1) {\n return steps[0];\n }\n return MathUtil.bezier(steps.map(it => new Point3D(it)), frame, idx);\n } else {\n return new Vector();\n }\n };\n\n // \uC2DC\uC791\uC810\uACFC \uB05D\uC810\uC740 \uD3EC\uD568\uD558\uC9C0 \uC54A\uB294\uB2E4.\n export function cubicBezier(position: { start: number; end: number; }, frameConfig: { frame: number; }, bezierConfig: BezierConfig): number[];\n export function cubicBezier(position: { start: Obj; end: Obj; }, frameConfig: { frame: number; }, bezierConfig: BezierConfig): Obj[];\n export function cubicBezier(position: { start: Point3D; end: Point3D; }, frameConfig: { frame: number; }, bezierConfig: BezierConfig): Point3D[];\n export function cubicBezier(\n position: {\n start: number; // \uC2DC\uC791 \uAC12\n end: number; // \uB05D \uAC12\n } | {\n start: Point3D; // \uC2DC\uC791 \uAC12\n end: Point3D; // \uB05D \uAC12\n } | {\n start: Obj; // \uC2DC\uC791 \uAC12\n end: Obj; // \uB05D \uAC12\n },\n frameConfig: {\n // includeStartEnd?: boolean,\n frame: number; // \uD504\uB808\uC784 \uC218 (\uBC30\uC5F4 \uD06C\uAE30)\n },\n bezierConfig: BezierConfig\n ): number[] | Point3D[] | Obj[] {\n\n\n if (position.start instanceof Obj && position.end instanceof Obj) {\n const x = MathUtil.cubicBezier({start: position.start.x, end: position.end.x}, frameConfig, bezierConfig);\n const y = MathUtil.cubicBezier({start: position.start.y, end: position.end.y}, frameConfig, bezierConfig);\n const z = MathUtil.cubicBezier({start: position.start.z, end: position.end.z}, frameConfig, bezierConfig);\n const v = MathUtil.cubicBezier({start: position.start.volume, end: position.end.volume}, frameConfig, bezierConfig);\n const m = MathUtil.cubicBezier({start: position.start.mass, end: position.end.mass}, frameConfig, bezierConfig);\n const e = MathUtil.cubicBezier({start: position.start.e, end: position.end.e}, frameConfig, bezierConfig);\n const r = MathUtil.cubicBezier({start: position.start.rotate, end: position.end.rotate}, frameConfig, bezierConfig);\n const w = MathUtil.cubicBezier({start: position.start.width, end: position.end.width}, frameConfig, bezierConfig);\n const h = MathUtil.cubicBezier({start: position.start.height, end: position.end.height}, frameConfig, bezierConfig);\n const t0 = MathUtil.cubicBezier({start: position.start.transform[0], end: position.end.transform[0]}, frameConfig, bezierConfig);\n const t1 = MathUtil.cubicBezier({start: position.start.transform[1], end: position.end.transform[1]}, frameConfig, bezierConfig);\n const t2 = MathUtil.cubicBezier({start: position.start.transform[2], end: position.end.transform[2]}, frameConfig, bezierConfig);\n const t3 = MathUtil.cubicBezier({start: position.start.transform[3], end: position.end.transform[3]}, frameConfig, bezierConfig);\n const t4 = MathUtil.cubicBezier({start: position.start.transform[4], end: position.end.transform[4]}, frameConfig, bezierConfig);\n const t5 = MathUtil.cubicBezier({start: position.start.transform[5], end: position.end.transform[5]}, frameConfig, bezierConfig);\n const colorR = MathUtil.cubicBezier({start: position.start.color.r ?? 0, end: position.end.color.r ?? 0}, frameConfig, bezierConfig);\n const colorG = MathUtil.cubicBezier({start: position.start.color.g ?? 0, end: position.end.color.g ?? 0}, frameConfig, bezierConfig);\n const colorB = MathUtil.cubicBezier({start: position.start.color.b ?? 0, end: position.end.color.b ?? 0}, frameConfig, bezierConfig);\n const colorA = MathUtil.cubicBezier({start: position.start.color.a ?? 255, end: position.end.color.a ?? 255}, frameConfig, bezierConfig);\n const objs = x.map((x, idx) => {\n const obj = new Obj({x, y: y[idx], z: z[idx]});\n obj.volume = v[idx];\n obj.mass = m[idx];\n obj.e = e[idx];\n obj.rotate = r[idx];\n obj.width = w[idx];\n obj.height = h[idx];\n obj.transform = [t0[idx], t1[idx], t2[idx], t3[idx], t4[idx], t5[idx]];\n obj.color = {r: colorR[idx], g: colorG[idx], b: colorB[idx], a: colorA[idx]};\n return obj;\n });\n return objs;\n } else if (position.start instanceof Point3D && position.end instanceof Point3D) {\n const x = MathUtil.cubicBezier({start: position.start.x, end: position.end.x}, frameConfig, bezierConfig);\n const y = MathUtil.cubicBezier({start: position.start.y, end: position.end.y}, frameConfig, bezierConfig);\n const z = MathUtil.cubicBezier({start: position.start.z, end: position.end.z}, frameConfig, bezierConfig);\n return x.map((x, idx) => new Point3D(x, y[idx], z[idx]));\n }\n\n\n const {start, end} = position as { start: number, end: number };\n\n // ----\n\n const {frame} = frameConfig;\n let {p1x, p1y, p2x, p2y} = Array.isArray(bezierConfig) ? {p1x: bezierConfig[0], p1y: bezierConfig[1], p2x: bezierConfig[2], p2y: bezierConfig[3]} : bezierConfig;\n p1x = p1x === 'random' ? Math.random() : p1x;\n p1y = p1y === 'random' ? Math.random() : p1y;\n p2x = p2x === 'random' ? Math.random() : p2x;\n p2y = p2y === 'random' ? Math.random() : p2y;\n\n const result: number[] = [];\n const totalChange = end - start;\n\n // console.log('----222->',totalChange);\n\n // 3\uCC28 \uBCA0\uC9C0\uC5B4 \uACE1\uC120 \uACF5\uC2DD\n const bezier = (t: number): number => {\n const t2 = Number(t * t);\n const t3 = Number(t2 * t);\n const mt = Number(1 - t);\n const mt2 = Number(mt * mt);\n const mt3 = Number(mt2 * mt);\n\n return mt3 * 0 + 3 * mt2 * t * Number(p1y) + 3 * mt * t2 * Number(p2y) + t3 * 1;\n };\n\n // frame \uC218\uB9CC\uD07C \uACC4\uC0B0, \uC2DC\uC791\uC810, \uB05D\uC810 \uC81C\uC678\n const targetFrame = frame + 1;\n for (let i = 1; i < targetFrame; i++) {\n // const t = frame <= 1 ? 1 : (i + 1) / frame;\n // const t = frame <= 1 ? 1 : (i + 1) / frame;\n const t = i / targetFrame;\n const progress = bezier(t);\n // console.log('pppppppp', progress);\n const value = start + totalChange * progress;\n result.push(value);\n }\n\n return result;\n\n }\n\n export const diff = (a: number, b: number) => {\n return Math.abs(a - b);\n };\n\n /*\n > \uD22C\uC601\uBD80\uBD84? \uC800\uBD80\uBD84 \uD575\uC2EC\uBD80\uBD84 \uB354 \uC790\uC138\uD558\uAC8C \uC54C\uB824\uC904\uB798\n\n\u2726 \uB124, \uADF8\uB7FC\uC694. \uC774 \uBD80\uBD84\uC774 \uAE30\uD558\uD559\uC801\uC73C\uB85C \uC5B4\uB5A4 \uC758\uBBF8\uB97C \uAC00\uC9C0\uB294\uC9C0 \uADF8\uB9BC\uACFC \uD568\uAED8 \uBA38\uB9BF\uC18D\uC73C\uB85C \uC0C1\uC0C1\uD558\uBA70 \uC774\uD574\uD558\uBA74\n \uC27D\uC2B5\uB2C8\uB2E4.\n\n \uD575\uC2EC \uC544\uC774\uB514\uC5B4: \uADF8\uB9BC\uC790 \uB0B4\uB9AC\uAE30 (Projection)\n\n \uAC00\uC7A5 \uAC04\uB2E8\uD55C \uBE44\uC720\uB294 \uADF8\uB9BC\uC790\uC785\uB2C8\uB2E4.\n\n\n * `\uC120\uBD84 vw`: \uB545\uC5D0 \uB193\uC5EC\uC788\uB294 \uB9C9\uB300\uAE30\uB77C\uACE0 \uC0C1\uC0C1\uD574 \uBCF4\uC138\uC694. (v\uB294 \uC2DC\uC791\uC810, w\uB294 \uB05D\uC810)\n * `\uC810 p`: \uACF5\uC911\uC5D0 \uB5A0 \uC788\uB294 \uB9C8\uC6B0\uC2A4 \uCEE4\uC11C\uB77C\uACE0 \uC0C1\uC0C1\uD574 \uBCF4\uC138\uC694.\n * \uBAA9\uD45C: \uB9C8\uC6B0\uC2A4 \uCEE4\uC11C(p)\uC5D0\uC11C \uB9C9\uB300\uAE30(vw)\uAE4C\uC9C0 \uAC00\uC7A5 \uAC00\uAE4C\uC6B4 \uC9C0\uC810\uC744 \uCC3E\uB294 \uAC83.\n\n\n \uAC00\uC7A5 \uAC00\uAE4C\uC6B4 \uC9C0\uC810\uC740 p\uC5D0\uC11C \uB9C9\uB300\uAE30\uB85C \uC218\uC9C1\uC73C\uB85C \uC120\uC744 \uB0B4\uB838\uC744 \uB54C \uB9CC\uB098\uB294 \uC810\uC785\uB2C8\uB2E4. \uB9C8\uCE58 p \uBC14\uB85C \uC704\uC5D0 \uC190\uC804\uB4F1\uC744\n \uCF1C\uC11C \uB9C9\uB300\uAE30\uC5D0 \uADF8\uB9BC\uC790\uB97C \uB9CC\uB4DC\uB294 \uAC83\uACFC \uAC19\uC2B5\uB2C8\uB2E4. \uC774 \uADF8\uB9BC\uC790\uAC00 \uB5A8\uC5B4\uC9C0\uB294 \uC9C0\uC810\uC774 \uBC14\uB85C \uD22C\uC601(projection)\uC785\uB2C8\uB2E4.\n\n ---\n\n \uCF54\uB4DC \uC0C1\uC138 \uBD84\uC11D\n\n\n let t = ((p.x - v.x) * (w.x - v.x) + (p.y - v.y) * (w.y - v.y)) / l2;\n\n \uC774 \uD55C \uC904\uC758 \uCF54\uB4DC\uB294 \uBC14\uB85C \uADF8 '\uADF8\uB9BC\uC790\uAC00 \uB9C9\uB300\uAE30\uC758 \uC5B4\uB514\uC5D0 \uB5A8\uC5B4\uC9C0\uB294\uAC00'\uB97C \uACC4\uC0B0\uD558\uB294 \uACFC\uC815\uC785\uB2C8\uB2E4. \uC5EC\uAE30\uC11C t\uB294\n \uBE44\uC728\uC744 \uC758\uBBF8\uD569\uB2C8\uB2E4.\n\n 1. \uBCA1\uD130(Vector)\uB85C \uC0DD\uAC01\uD558\uAE30\n\n\n \uCF54\uB4DC\uB97C \uC774\uD574\uD558\uAE30 \uC704\uD574 \uB450 \uAC1C\uC758 \uBCA1\uD130\uB97C \uC0DD\uAC01\uD574\uC57C \uD569\uB2C8\uB2E4.\n\n\n * \uBCA1\uD130 1 (`vw`): \uB9C9\uB300\uAE30 \uC790\uCCB4\uC758 \uBC29\uD5A5\uACFC \uAE38\uC774\uB97C \uB098\uD0C0\uB0B4\uB294 \uBCA1\uD130\uC785\uB2C8\uB2E4.\n * w.x - v.x (x\uBC29\uD5A5)\n * w.y - v.y (y\uBC29\uD5A5)\n * \uBCA1\uD130 2 (`vp`): \uB9C9\uB300\uAE30 \uC2DC\uC791\uC810\uC5D0\uC11C \uB9C8\uC6B0\uC2A4 \uCEE4\uC11C\uAE4C\uC9C0\uC758 \uBCA1\uD130\uC785\uB2C8\uB2E4.\n * p.x - v.x (x\uBC29\uD5A5)\n * p.y - v.y (y\uBC29\uD5A5)\n\n\n 2. \uBD84\uC790: \uBCA1\uD130 \uB0B4\uC801 (Dot Product)\n\n ((p.x - v.x) * (w.x - v.x) + (p.y - v.y) * (w.y - v.y))\n\n\n \uC774 \uBD80\uBD84\uC740 \uB450 \uBCA1\uD130 vp\uC640 vw\uC758 \uB0B4\uC801(dot product)\uC744 \uACC4\uC0B0\uD558\uB294 \uACF5\uC2DD\uC785\uB2C8\uB2E4. \uBCA1\uD130 \uB0B4\uC801\uC740 \uB450 \uBCA1\uD130\uAC00 \uC5BC\uB9C8\uB098\n \"\uAC19\uC740 \uBC29\uD5A5\uC744 \uBC14\uB77C\uBCF4\uACE0 \uC788\uB294\uC9C0\"\uB97C \uB098\uD0C0\uB0B4\uB294 \uC218\uCE58\uC785\uB2C8\uB2E4.\n\n\n * \uB450 \uBCA1\uD130\uAC00 \uC11C\uB85C \uC218\uC9C1\uC774\uBA74 \uB0B4\uC801\uC740 0\uC785\uB2C8\uB2E4.\n * \uB450 \uBCA1\uD130\uAC00 \uAC19\uC740 \uBC29\uD5A5\uC744 \uBCFC\uC218\uB85D \uB0B4\uC801 \uAC12\uC740 \uCEE4\uC9D1\uB2C8\uB2E4.\n\n \uAE30\uD558\uD559\uC801\uC73C\uB85C, `vp` \uBCA1\uD130\uB97C `vw` \uBCA1\uD130 \uC704\uB85C \uD22C\uC601(\uADF8\uB9BC\uC790)\uC2DC\uCF30\uC744 \uB54C\uC758 \uAE38\uC774\uC640 \uAD00\uB828\uC774 \uC788\uC2B5\uB2C8\uB2E4.\n\n 3. \uBD84\uBAA8: l2\n\n\n l2\uB294 \uC55E\uC5D0\uC11C \uACC4\uC0B0\uD588\uB4EF\uC774 \uB9C9\uB300\uAE30 \uBCA1\uD130 vw\uC758 \uAE38\uC774\uC758 \uC81C\uACF1\uC785\uB2C8\uB2E4.\n\n 4. t\uC758 \uC758\uBBF8: \uBE44\uC728\n\n \uACB0\uAD6D t\uB294 \uB2E4\uC74C\uACFC \uAC19\uC774 \uACC4\uC0B0\uB429\uB2C8\uB2E4.\n\n t = (\uBCA1\uD130 vp\uC640 vw\uC758 \uB0B4\uC801) / (\uBCA1\uD130 vw\uC758 \uAE38\uC774 \uC81C\uACF1)\n\n\n \uC774 t \uAC12\uC774 \uBC14\uB85C \uD22C\uC601\uB41C \uADF8\uB9BC\uC790 \uC9C0\uC810\uC774 \uB9C9\uB300\uAE30 \uC2DC\uC791\uC810 `v`\uB85C\uBD80\uD130 \uC5BC\uB9C8\uB098 \uB5A8\uC5B4\uC838 \uC788\uB294\uC9C0\uB97C \uB098\uD0C0\uB0B4\uB294 \uBE44\uC728\uC774\n \uB429\uB2C8\uB2E4.\n\n\n * `t = 0`: \uADF8\uB9BC\uC790\uAC00 \uC815\uD655\uD788 \uB9C9\uB300\uAE30 \uC2DC\uC791\uC810 v\uC5D0 \uB5A8\uC5B4\uC9D1\uB2C8\uB2E4.\n * `t = 1`: \uADF8\uB9BC\uC790\uAC00 \uC815\uD655\uD788 \uB9C9\uB300\uAE30 \uB05D\uC810 w\uC5D0 \uB5A8\uC5B4\uC9D1\uB2C8\uB2E4.\n * `t = 0.5`: \uADF8\uB9BC\uC790\uAC00 \uC815\uD655\uD788 \uB9C9\uB300\uAE30 \uD55C\uAC00\uC6B4\uB370\uC5D0 \uB5A8\uC5B4\uC9D1\uB2C8\uB2E4.\n * `t < 0` (\uC608: `t = -0.2`): p\uAC00 v\uC758 \"\uB4A4\uCABD\"\uC5D0 \uC788\uC5B4\uC11C, \uADF8\uB9BC\uC790\uAC00 \uB9C9\uB300\uAE30 \uC2DC\uC791\uC810 \uC774\uC804\uC5D0 \uB5A8\uC5B4\uC9D1\uB2C8\uB2E4.\n (\uB9C9\uB300\uAE30\uB97C \uBB34\uD55C\uD55C \uC9C1\uC120\uC73C\uB85C \uBD24\uC744 \uB54C)\n * `t > 1` (\uC608: `t = 1.5`): p\uAC00 w\uC758 \"\uC55E\uCABD\"\uC5D0 \uC788\uC5B4\uC11C, \uADF8\uB9BC\uC790\uAC00 \uB9C9\uB300\uAE30 \uB05D\uC810\uC744 \uC9C0\uB098\uC11C \uB5A8\uC5B4\uC9D1\uB2C8\uB2E4.\n (\uB9C9\uB300\uAE30\uB97C \uBB34\uD55C\uD55C \uC9C1\uC120\uC73C\uB85C \uBD24\uC744 \uB54C)\n\n \uACB0\uB860\n\n\n \uC774 t \uAC12\uC744 \uACC4\uC0B0\uD558\uB294 \uAC83\uC774 \uD575\uC2EC\uC778 \uC774\uC720\uB294, \uB9C8\uC6B0\uC2A4 \uD3EC\uC778\uD130(p)\uC640 \uAC00\uC7A5 \uAC00\uAE4C\uC6B4 \uC810\uC774 \uB9C9\uB300\uAE30 \uB0B4\uBD80\uC5D0 \uC788\uB294\uC9C0,\n \uC544\uB2C8\uBA74 \uC591\uCABD \uB05D\uC810 \uC911 \uD558\uB098\uC778\uC9C0 \uD310\uB2E8\uD560 \uC218 \uC788\uB294 \uAE30\uC900\uC744 \uC81C\uACF5\uD558\uAE30 \uB54C\uBB38\uC785\uB2C8\uB2E4.\n\n\n * t\uAC00 0\uACFC 1 \uC0AC\uC774\uC5D0 \uC788\uB2E4\uBA74, \uAC00\uC7A5 \uAC00\uAE4C\uC6B4 \uC810\uC740 \uB9C9\uB300\uAE30 \uC704\uC758 '\uADF8\uB9BC\uC790' \uC9C0\uC810\uC785\uB2C8\uB2E4.\n * t\uAC00 0\uBCF4\uB2E4 \uC791\uB2E4\uBA74, \uAC00\uC7A5 \uAC00\uAE4C\uC6B4 \uC810\uC740 \uB9C9\uB300\uAE30\uC758 \uC2DC\uC791\uC810 v\uC785\uB2C8\uB2E4.\n * t\uAC00 1\uBCF4\uB2E4 \uD06C\uB2E4\uBA74, \uAC00\uC7A5 \uAC00\uAE4C\uC6B4 \uC810\uC740 \uB9C9\uB300\uAE30\uC758 \uB05D\uC810 w\uC785\uB2C8\uB2E4.\n\n\n \uC774\uAC83\uC774 \uBC14\uB85C \uB2E4\uC74C \uCF54\uB4DC \uB77C\uC778 t = Math.max(0, Math.min(1, t));\uAC00 t\uB97C 0\uACFC 1 \uC0AC\uC774\uB85C \uC81C\uD55C\uD558\uB294 \uC774\uC720\uC785\uB2C8\uB2E4.\n \uC774\uB85C\uC368 \uAC00\uC7A5 \uAC00\uAE4C\uC6B4 \uC810\uC774 \uD56D\uC0C1 \uC120\uBD84 \uC704(\uC591 \uB05D\uC810 \uD3EC\uD568)\uC5D0 \uC788\uB3C4\uB85D \uBCF4\uC7A5\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.\n */\nexport const distSqToLineSegment = (p: Point2D, v: Point2D, w: Point2D): number => {\n const l2 = (v.x - w.x) ** 2 + (v.y - w.y) ** 2;\n if (l2 === 0) return (p.x - v.x) ** 2 + (p.y - v.y) ** 2;\n let t = ((p.x - v.x) * (w.x - v.x) + (p.y - v.y) * (w.y - v.y)) / l2;\n t = Math.max(0, Math.min(1, t));\n const projection = { x: v.x + t * (w.x - v.x), y: v.y + t * (w.y - v.y) };\n return (p.x - projection.x) ** 2 + (p.y - projection.y) ** 2;\n };\n // static bezirePointToPointVector(point: {point1: Point, point2?: Point, point3?: Point, point4?: Point}) {\n // if (!point.point2) {\n // point.point2 = point.point1;\n // }\n // if (!point.point3) {\n // point.point3 = point.point2;\n // }\n // if (!point.point4) {\n // point.point4 = point.point3;\n // }\n // return {\n // point1: new PointVector(point.point1.x, point.point1.y, point.point1.z),\n // point2: new PointVector(point.point2.x, point.point2.y, point.point2.z),\n // point3: new PointVector(point.point3.x, point.point3.y, point.point3.z),\n // point4: new PointVector(point.point4.x, point.point4.y, point.point4.z),\n // }\n // }\n // static bezier(point: {point1: Point, point2?: Point, point3?: Point, point4?: Point}, frame: number, idx: number) {\n // const pointVector = MathUtil.bezirePointToPointVector(point);\n //\n // const point12Step = PointVector.sub(pointVector.point1, pointVector.point2).div(frame).mult(idx + 1);\n // const point23Step = PointVector.sub(pointVector.point2, pointVector.point3).div(frame).mult(idx + 1);\n // const point34Step = PointVector.sub(pointVector.point3, pointVector.point4).div(frame).mult(idx + 1);\n //\n // pointVector.point1.sub(point12Step);\n // pointVector.point2.sub(point23Step);\n // pointVector.point3.sub(point34Step);\n //\n // const point12MoveStep = PointVector.sub(pointVector.point1, pointVector.point2).div(frame);\n // const point23MoveStep = PointVector.sub(pointVector.point2, pointVector.point3).div(frame);\n // // const point34MoveStep = PointVector.sub(point3, point4).div(frame); // \uB354\uC774\uC0C1\uAC08\uACF3\uC5C6\uC74C\n //\n // const cnt = idx + 1;\n // const point12MovePoint = point12MoveStep.mult(cnt)\n // const point23MovePoint = point23MoveStep.mult(cnt);\n // const combinationPoint1MovePoint = PointVector.sub(pointVector.point1, point12MovePoint); //new PointVector(point1.x - point12MovePoint.x, point1.y - point12MovePoint.y);\n // const combinationPoint2MovePoint = PointVector.sub(pointVector.point2, point23MovePoint); // new PointVector(point2.x - point23MovePoint.x, point2.y - point23MovePoint.y);\n //\n // const finalPointMoveStep = PointVector.sub(combinationPoint1MovePoint, combinationPoint2MovePoint).div(frame);\n // const finalPointMovePoint = finalPointMoveStep.mult(cnt);\n // const final = PointVector.sub(combinationPoint1MovePoint, finalPointMovePoint);\n // return final;\n // }\n //\n // static beziers(point: {point1: Point, point2?: Point, point3?: Point, point4?: Point}, frame: number) {\n // const pointVector = MathUtil.bezirePointToPointVector(point);\n // const frames = new Array(frame).fill(undefined) as PointVector[];\n // for (let i = 0; i < frame; i++) {\n // frames[i] = MathUtil.bezier(point, frame, i);\n // // pointVector.point1.sub(point12Step);\n // // pointVector.point2.sub(point23Step);\n // // pointVector.point3.sub(point34Step);\n // //\n // // const point12MoveStep = PointVector.sub(pointVector.point1, pointVector.point2).div(frame);\n // // const point23MoveStep = PointVector.sub(pointVector.point2, pointVector.point3).div(frame);\n // // // const point34MoveStep = PointVector.sub(point3, point4).div(frame); // \uB354\uC774\uC0C1\uAC08\uACF3\uC5C6\uC74C\n // //\n // // const cnt = i + 1;\n // // const point12MovePoint = point12MoveStep.mult(cnt)\n // // const point23MovePoint = point23MoveStep.mult(cnt);\n // // const combinationPoint1MovePoint = PointVector.sub(pointVector.point1, point12MovePoint); //new PointVector(point1.x - point12MovePoint.x, point1.y - point12MovePoint.y);\n // // const combinationPoint2MovePoint = PointVector.sub(pointVector.point2, point23MovePoint); // new PointVector(point2.x - point23MovePoint.x, point2.y - point23MovePoint.y);\n // //\n // // const finalPointMoveStep = PointVector.sub(combinationPoint1MovePoint, combinationPoint2MovePoint).div(frame);\n // // const finalPointMovePoint = finalPointMoveStep.mult(cnt);\n // // const final = PointVector.sub(combinationPoint1MovePoint, finalPointMovePoint);\n // }\n // return frames;\n // }\n\n\n// interface Point {\n// x: number;\n// y: number;\n// }\n//\n// interface BezierPathOptions {\n// /**\n// * \uC81C\uC5B4\uC810\uC744 \uC5BC\uB9C8\uB098 \uBA40\uB9AC \uB458\uC9C0 \uACB0\uC815\uD558\uB294 \uAC12\uC785\uB2C8\uB2E4. (\uAE30\uBCF8\uAC12: 0.25)\n// * 0 \uC774\uBA74 \uAC70\uC758 \uC9C1\uC120\uC5D0 \uAC00\uAE5D\uACE0, \uAC12\uC774 \uCEE4\uC9C8\uC218\uB85D \uACE1\uC120\uC758 \uD718\uC5B4\uC9D0\uC774 \uCEE4\uC9D1\uB2C8\uB2E4.\n// * \uC74C\uC218 \uAC12\uC744 \uC8FC\uBA74 \uBC18\uB300 \uBC29\uD5A5\uC73C\uB85C \uD729\uB2C8\uB2E4.\n// */\n// controlPointOffsetFactor?: number;\n//\n// /**\n// * \uC810\uB4E4\uC758 \uBD84\uD3EC\uB97C \uC870\uC808\uD558\uB294 \uAC00\uC18D\uB3C4 \uACC4\uC218\uC785\uB2C8\uB2E4. (\uAE30\uBCF8\uAC12: 1)\n// * 1: \uB4F1\uAC04\uACA9 (\uC120\uD615)\n// * > 1: \uC2DC\uC791 \uBD80\uBD84\uC5D0 \uC810\uB4E4\uC774 \uBAA8\uC774\uACE0 \uB05D\uC73C\uB85C \uAC08\uC218\uB85D \uAC04\uACA9\uC774 \uB113\uC5B4\uC9D0 (\uAC00\uC18D, ease-in)\n// * < 1: \uB05D \uBD80\uBD84\uC5D0 \uC810\uB4E4\uC774 \uBAA8\uC774\uACE0 \uC2DC\uC791 \uBD80\uBD84\uC758 \uAC04\uACA9\uC774 \uB113\uC5B4\uC9D0 (\uAC10\uC18D, ease-out)\n// * \uC608: 2\uB294 \uC81C\uACF1 \uAC00\uC18D, 0.5\uB294 \uC81C\uACF1\uADFC \uAC10\uC18D.\n// */\n// accelerationFactor?: number;\n// }\n//\n// /**\n// * 2\uCC28 \uBCA0\uC9C0\uC5D0 \uACE1\uC120 \uC704\uC758 \uD2B9\uC815 t \uAC12\uC5D0\uC11C\uC758 \uC810 \uC88C\uD45C\uB97C \uACC4\uC0B0\uD569\uB2C8\uB2E4.\n// * B(t) = (1-t)^2 * P0 + 2 * (1-t) * t * P1 + t^2 * P2\n// * @param t \uB9E4\uAC1C\uBCC0\uC218 (0\uC5D0\uC11C 1 \uC0AC\uC774)\n// * @param p0 \uC2DC\uC791\uC810\n// * @param p1 \uC81C\uC5B4\uC810\n// * @param p2 \uB05D\uC810\n// * @returns \uACC4\uC0B0\uB41C \uC810\uC758 \uC88C\uD45C\n// */\n// function quadraticBezier(t: number, p0: Point, p1: Point, p2: Point): Point {\n// const mt = 1 - t; // (1-t)\n// const mt2 = mt * mt; // (1-t)^2\n// const t2 = t * t; // t^2\n//\n// const x = mt2 * p0.x + 2 * mt * t * p1.x + t2 * p2.x;\n// const y = mt2 * p0.y + 2 * mt * t * p1.y + t2 * p2.y;\n//\n// return { x, y };\n// }\n//\n// /**\n// * \uCD9C\uBC1C\uC810\uACFC \uB3C4\uCC29\uC810 \uC0AC\uC774\uB97C \uC787\uB294 2\uCC28 \uBCA0\uC9C0\uC5D0 \uACE1\uC120\uC744 \uB530\uB77C \uC774\uB3D9\uD560 \uC88C\uD45C\uB4E4\uC744 \uACC4\uC0B0\uD569\uB2C8\uB2E4.\n// * @param startPoint \uCD9C\uBC1C\uC810 \uC88C\uD45C { x, y }\n// * @param endPoint \uB3C4\uCC29\uC810 \uC88C\uD45C { x, y }\n// * @param options \uBCA0\uC9C0\uC5D0 \uACE1\uC120 \uBC0F \uC810 \uBD84\uD3EC \uC635\uC158\n// * @param numberOfSteps \uC0DD\uC131\uD560 \uC911\uAC04 \uC774\uB3D9 \uC88C\uD45C\uC758 \uAC1C\uC218 (\uC774\uB3D9 \uACBD\uB85C\uC0C1\uC758 \uC810 \uAC1C\uC218)\n// * @returns \uACC4\uC0B0\uB41C \uC88C\uD45C\uB4E4\uC758 \uBC30\uC5F4 (startPoint\uB294 \uD3EC\uD568\uD558\uC9C0 \uC54A\uACE0, endPoint\uB294 \uD3EC\uD568)\n// */\n// function getPointsOnBezierPath(\n// startPoint: Point,\n// endPoint: Point,\n// options: BezierPathOptions = {}, // \uAE30\uBCF8\uAC12 \uBE48 \uAC1D\uCCB4\n// numberOfSteps: number\n// ): Point[] {\n// // --- \uC635\uC158 \uAE30\uBCF8\uAC12 \uC124\uC815 ---\n// const controlPointOffsetFactor = options.controlPointOffsetFactor ?? 0.25; // \uAE30\uBCF8\uAC12 0.25\n// const accelerationFactor = options.accelerationFactor ?? 1; // \uAE30\uBCF8\uAC12 1 (\uC120\uD615)\n//\n// // --- \uC785\uB825\uAC12 \uC720\uD6A8\uC131 \uAC80\uC0AC ---\n// if (numberOfSteps <= 0) {\n// console.warn(\"numberOfSteps\uB294 0\uBCF4\uB2E4 \uCEE4\uC57C \uD569\uB2C8\uB2E4.\");\n// return []; // \uBE48 \uBC30\uC5F4 \uBC18\uD658 \uB610\uB294 \uC5D0\uB7EC \uCC98\uB9AC\n// }\n//\n// const points: Point[] = [];\n// const p0 = startPoint;\n// const p2 = endPoint;\n//\n// // --- \uC81C\uC5B4\uC810(P1) \uC790\uB3D9 \uACC4\uC0B0 ---\n// const midX = (p0.x + p2.x) / 2;\n// const midY = (p0.y + p2.y) / 2;\n//\n// const deltaX = p2.x - p0.x;\n// const deltaY = p2.y - p0.y;\n//\n// const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n//\n// let p1: Point;\n//\n// if (distance === 0) {\n// // \uC2DC\uC791\uC810\uACFC \uB05D\uC810\uC774 \uAC19\uC73C\uBA74 \uC81C\uC5B4\uC810\uB3C4 \uAC19\uC740 \uC704\uCE58\uB85C \uC124\uC815 (\uC9C1\uC120 \uC774\uB3D9 \uC5C6\uC74C)\n// p1 = { ...p0 };\n// // \uC774 \uACBD\uC6B0, \uBAA8\uB4E0 \uACC4\uC0B0\uB41C \uC810\uC740 \uC2DC\uC791/\uB05D \uC810\uACFC \uB3D9\uC77C\uD558\uAC8C \uB429\uB2C8\uB2E4.\n// // \uC694\uCCAD\uC5D0 \uB530\uB77C \uBE48 \uBC30\uC5F4\uC744 \uBC18\uD658\uD558\uAC70\uB098, \uB05D\uC810\uC744 numberOfSteps\uB9CC\uD07C \uBC18\uD658\uD560 \uC218\uB3C4 \uC788\uC2B5\uB2C8\uB2E4.\n// // \uC5EC\uAE30\uC11C\uB294 \uACC4\uC0B0 \uB85C\uC9C1\uC744 \uADF8\uB300\uB85C \uB450\uC5B4 \uB3D9\uC77C\uD55C \uC810\uC774 \uBC18\uBCF5 \uC0DD\uC131\uB418\uB3C4\uB85D \uD569\uB2C8\uB2E4.\n// } else {\n// // \uC2DC\uC791\uC810\uC5D0\uC11C \uB05D\uC810\uC73C\uB85C\uC758 \uBCA1\uD130\uC5D0 \uC218\uC9C1\uC778 \uBC29\uD5A5 \uBCA1\uD130 \uACC4\uC0B0 (\uC2DC\uACC4 \uBC18\uB300 \uBC29\uD5A5 90\uB3C4 \uD68C\uC804)\n// const perpX = -deltaY / distance;\n// const perpY = deltaX / distance;\n//\n// // \uC911\uAC04 \uC9C0\uC810\uC5D0\uC11C \uC218\uC9C1 \uBC29\uD5A5\uC73C\uB85C \uC635\uC158\uC5D0 \uB530\uB77C \uC81C\uC5B4\uC810 \uC704\uCE58 \uACC4\uC0B0\n// const offset = distance * controlPointOffsetFactor;\n// p1 = {\n// x: midX + perpX * offset,\n// y: midY + perpY * offset,\n// };\n// }\n//\n// // --- \uACE1\uC120 \uC0C1\uC758 \uC810 \uACC4\uC0B0 ---\n// for (let i = 1; i <= numberOfSteps; i++) {\n// // 1. \uAE30\uBCF8 \uD30C\uB77C\uBBF8\uD130 u \uACC4\uC0B0 (0 < u <= 1)\n// const u = i / numberOfSteps;\n// // 2. \uAC00\uC18D\uB3C4 \uC801\uC6A9\uB41C \uD30C\uB77C\uBBF8\uD130 t \uACC4\uC0B0\n// const t = Math.pow(u, accelerationFactor);\n// // 3. \uBCA0\uC9C0\uC5D0 \uACE1\uC120 \uC704\uC758 \uC810 \uACC4\uC0B0\n// const pointOnCurve = quadraticBezier(t, p0, p1, p2);\n// points.push(pointOnCurve);\n// }\n//\n// return points; // \uACC4\uC0B0\uB41C \uC911\uAC04 \uC88C\uD45C\uB4E4\uC758 \uBC30\uC5F4 \uBC18\uD658\n// }\n//\n// // --- \uC0AC\uC6A9 \uC608\uC2DC ---\n// const start: Point = { x: 4, y: 10 };\n// const end: Point = { x: 50, y: 20 };\n// const steps = 10; // 10\uAC1C\uC758 \uC911\uAC04 \uC9C0\uC810 \uACC4\uC0B0\n//\n// // \uC608\uC2DC 1: \uAE30\uBCF8 \uC635\uC158 (\uC57D\uAC04\uC758 \uACE1\uC120, \uB4F1\uAC04\uACA9)\n// const path1 = getPointsOnBezierPath(start, end, {}, steps);\n// console.log(\"\uAE30\uBCF8 \uC635\uC158 \uACBD\uB85C:\", path1.map(p => `(${p.x.toFixed(1)}, ${p.y.toFixed(1)})`).join(\" -> \"));\n//\n// // \uC608\uC2DC 2: \uB354 \uB9CE\uC774 \uD718\uC5B4\uC9C0\uAC8C (offset \uC99D\uAC00), \uAC00\uC18D \uD6A8\uACFC \uCD94\uAC00 (acceleration > 1)\n// const path2 = getPointsOnBezierPath(start, end, { controlPointOffsetFactor: 0.6, accelerationFactor: 2 }, steps);\n// console.log(\"\uAC15\uD55C \uACE1\uC120 + \uAC00\uC18D \uACBD\uB85C:\", path2.map(p => `(${p.x.toFixed(1)}, ${p.y.toFixed(1)})`).join(\" -> \"));\n//\n// // \uC608\uC2DC 3: \uBC18\uB300 \uBC29\uD5A5\uC73C\uB85C \uD718\uAC8C (offset \uC74C\uC218), \uAC10\uC18D \uD6A8\uACFC \uCD94\uAC00 (acceleration < 1)\n// const path3 = getPointsOnBezierPath(start, end, { controlPointOffsetFactor: -0.3, accelerationFactor: 0.5 }, steps);\n// console.log(\"\uBC18\uB300 \uACE1\uC120 + \uAC10\uC18D \uACBD\uB85C:\", path3.map(p => `(${p.x.toFixed(1)}, ${p.y.toFixed(1)})`).join(\" -> \"));\n\n export const rotatePoint = (point: Point2D, center: Point2D, angleInRadians: number): Point2D => {\n // Translate point to origin so that center is the origin\n const translatedX = point.x - center.x;\n const translatedY = point.y - center.y;\n\n // Rotate point\n const rotatedX = translatedX * Math.cos(angleInRadians) - translatedY * Math.sin(angleInRadians);\n const rotatedY = translatedX * Math.sin(angleInRadians) + translatedY * Math.cos(angleInRadians);\n\n // Translate point back\n return new Point2D(rotatedX + center.x, rotatedY + center.y);\n }\n}\n", "export type SizeType = {\n width: number;\n height: number;\n};\n\nexport const isSizeType = (obj: any): obj is SizeType =>\n !!obj &&\n typeof obj.width === 'number' &&\n typeof obj.height === 'number';", "import { Point2D } from './Point2D';\nimport { MathUtil } from '../math/MathUtil';\nimport AngleUnitType = MathUtil.AngleUnitType;\nimport { isSizeType, SizeType } from './SizeType';\nimport { Point2DType } from './Point2DType';\n\ntype ValueLinkControl<T> = { value: T, noLink: boolean | Rect };\nconst isValueLinkControl = <T = any>(data: any): data is ValueLinkControl<T> => {\n return typeof data === 'object' && 'value' in data && 'noLink' in data;\n // return data.value !== undefined && data.noLink !== undefined && typeof data.value === 'object' && typeof data.noLink === 'boolean';\n}\n\nexport class Rect {\n private _start: Point2D;\n private _width: number\n private _height: number\n private linkRects?: Set<Rect>;\n\n constructor(size: SizeType);\n constructor(point: Point2DType, endPoint: Point2DType);\n constructor(point: Point2D, endPoint: Point2D);\n constructor(point: Point2D, width?: number, height?: number);\n constructor(x: number, y: number, width?: number, height?: number);\n constructor(xOrPoint: number | Point2D | { x: number, y: number } | SizeType, yOrPointOrWidth?: number | Point2D | { x: number, y: number }, widthOrHeight = 0, heightOrUndefined = 0) {\n if (isSizeType(xOrPoint)) {\n this._start = new Point2D(0, 0);\n this._width = xOrPoint.width;\n this._height = xOrPoint.height;\n } else if (typeof xOrPoint === 'object' && typeof yOrPointOrWidth === 'object') {\n this._start = xOrPoint instanceof Point2D ? xOrPoint : new Point2D(xOrPoint.x, xOrPoint.y);\n this.end = yOrPointOrWidth instanceof Point2D ? yOrPointOrWidth : new Point2D(yOrPointOrWidth.x, yOrPointOrWidth.y);\n } else if (typeof xOrPoint === 'object' && typeof yOrPointOrWidth === 'number') {\n this._start = xOrPoint instanceof Point2D ? xOrPoint : new Point2D(xOrPoint.x, xOrPoint.y);\n this._width = yOrPointOrWidth;\n this._height = widthOrHeight\n } else if (typeof xOrPoint === 'number' && typeof yOrPointOrWidth === 'number') {\n this._start = new Point2D(xOrPoint, yOrPointOrWidth);\n this._width = widthOrHeight;\n this._height = heightOrUndefined;\n }\n }\n\n\n private valueLinkControl<T>(value: T | ValueLinkControl<T>) {\n let v: T;\n let noLink: boolean | Rect = false;\n if (isValueLinkControl(value)) {\n v = value.value;\n noLink = value.noLink;\n } else {\n v = value;\n }\n return {value: v, noLink};\n }\n\n get width(): number {\n return this._width;\n }\n\n get height(): number {\n return this._height;\n }\n\n get start(): Point2D {\n return this._start.copy();\n }\n\n ////////////////////\n\n set width(width: number) {\n this.setWidth(width);\n }\n\n public setWidth(width: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(width);\n const percentDiff = MathUtil.getPercentByTotal(this._width, value);\n this._width = value;\n this.applyWidthPercentLinks({value: percentDiff, noLink});\n }\n\n\n set height(height: number) {\n this.setHeight(height);\n }\n\n public setHeight(height: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(height);\n const percentDiff = MathUtil.getPercentByTotal(this._height, value);\n this._height = value;\n this.applyHeightPercentLinks({value: percentDiff, noLink});\n }\n\n set start(inputValue: Point2D) {\n let {value, noLink} = this.valueLinkControl(inputValue);\n const percentDiff = new Point2D({x: MathUtil.getPercentByTotal(this._start.x, value.x), y: MathUtil.getPercentByTotal(this._start.y, value.y)});\n this._start = value;\n this.applyStartPercentLinks({value: percentDiff, noLink});\n }\n\n // \uC5B8\uC81C\uC4F0\uB294\uAC70\uC9C0 \u3161\u3161?\n setWidthFromEnd(inputValue: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(inputValue);\n const percentDiff = MathUtil.getPercentByTotal(this.start.x, value);\n this._start.x = this.end.x - value;\n this.applyStartXPercentLinks({value: percentDiff, noLink});\n }\n\n set widthFromEnd(inputValue: number) {\n this.setWidthFromEnd(inputValue);\n }\n\n // \uC5B8\uC81C\uC4F0\uB294\uAC70\uC9C0 \u3161\u3161?\n setHeightFromEnd(inputValue: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(inputValue);\n const diff = this.end.y - value;\n const percentDiff = MathUtil.getPercentByTotal(this.start.y, diff);\n this._start.y = diff;\n this.applyStartYPercentLinks({value: percentDiff, noLink});\n }\n\n set heightFromEnd(inputValue: number) {\n this.setHeightFromEnd(inputValue);\n }\n\n setWidthFromCenter(inputValue: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(inputValue);\n const diff = this.center.x - (value / 2);\n const percentDiff = MathUtil.getPercentByTotal(this.start.x, diff);\n this._start.x = diff;\n this.applyStartXPercentLinks(percentDiff);\n }\n\n set widthFromCenter(inputValue: number) {\n this.setWidthFromCenter(inputValue);\n }\n\n setHeightFromCenter(inputValue: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(inputValue);\n const diff = this.center.y - (value / 2);\n const percentDiff = MathUtil.getPercentByTotal(this.start.y, diff);\n this._start.y = diff;\n this.applyStartYPercentLinks(percentDiff);\n }\n\n set heightFromCenter(inputValue: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(inputValue);\n const diff = this.center.y - (value / 2);\n const percentDiff = MathUtil.getPercentByTotal(this.start.y, diff);\n this._start.y = diff;\n this.applyStartYPercentLinks(percentDiff);\n }\n\n set x(inputValue: number) {\n this.setX(inputValue);\n }\n\n public setX(inputValue: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(inputValue);\n const diff = value - this._start.x;\n const percentDiff = MathUtil.getPercentByTotal(this.width, diff);\n this._start.x = value;\n this.applyStartXPercentLinks({value: percentDiff, noLink});\n }\n\n set y(inputValue: number) {\n this.setY(inputValue);\n }\n\n public setY(inputValue: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(inputValue);\n const diff = value - this._start.y;\n const percentDiff = MathUtil.getPercentByTotal(this.height, diff);\n this._start.y = value;\n this.applyStartYPercentLinks({value: percentDiff, noLink});\n }\n\n ////////////////////////////\n\n applyWidthPercentLinks(widthPercent: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(widthPercent);\n if (this.linkRects && (typeof noLink === 'boolean' ? !noLink : true)) {\n Array.from(this.linkRects.values()).filter(it => {\n return typeof noLink === 'boolean' ? true : it !== noLink;\n }).forEach(it => {\n it.setWidthByWidthPercent({value: value, noLink: this});\n })\n }\n }\n\n applyHeightPercentLinks(heightPercent: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(heightPercent);\n if (this.linkRects && (typeof noLink === 'boolean' ? !noLink : true)) {\n Array.from(this.linkRects.values()).filter(it => {\n return typeof noLink === 'boolean' ? true : it !== noLink;\n }).forEach(it => {\n it.setHeightByHeightPercent({value: value, noLink: this});\n })\n }\n }\n\n applyStartPercentLinks(startPercent: Point2D | ValueLinkControl<Point2D>) {\n let {value, noLink} = this.valueLinkControl(startPercent);\n this.applyStartXPercentLinks({value: value.x, noLink});\n this.applyStartYPercentLinks({value: value.y, noLink});\n }\n\n applyStartXPercentLinks(xPercent: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(xPercent);\n if (this.linkRects && (typeof noLink === 'boolean' ? !noLink : true)) {\n Array.from(this.linkRects.values()).filter(it => {\n return typeof noLink === 'boolean' ? true : it !== noLink;\n }).forEach(it => {\n it.addXByWidthPercent({value: value, noLink: this});\n })\n }\n }\n\n applyStartYPercentLinks(yPercent: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(yPercent);\n if (this.linkRects && (typeof noLink === 'boolean' ? !noLink : true)) {\n Array.from(this.linkRects.values()).filter(it => {\n return typeof noLink === 'boolean' ? true : it !== noLink;\n }).forEach(it => {\n it.addYByHeightPercent({value: value, noLink: this});\n })\n }\n }\n\n hasLink(rect: Rect) {\n return this.linkRects?.has(rect)\n }\n\n isLinked() {\n return !!this.linkRects?.size;\n }\n\n addLink(...rect: Rect[]) {\n this.linkRects ??= new Set<Rect>();\n rect.filter(it => !this.linkRects?.has(it)).forEach(it => {\n this.linkRects?.add(it);\n it.addLink(this);\n })\n }\n\n setLinks(rects: Rect[]) {\n this.unLinkAll();\n this.addLink(...rects);\n }\n\n unLinkAll() {\n if (this.linkRects) {\n Array.from(this.linkRects.values()).forEach(it => {\n this.unLink(it);\n })\n this.linkRects.clear();\n }\n }\n\n unLink(rect: Rect | ValueLinkControl<Rect>) {\n let {value, noLink} = this.valueLinkControl(rect);\n if (this.linkRects) {\n this.linkRects.delete(value);\n }\n if (!noLink)\n value.unLink({value: this, noLink: this});\n }\n\n addWidthPercent(wPercent: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(wPercent);\n this.setWidth({value: this.width + MathUtil.getValueByTotalInPercent(this.width, value), noLink});\n }\n\n addHeightPercent(hPercent: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(hPercent);\n this.setHeight({value: this.height + MathUtil.getValueByTotalInPercent(this.height, value), noLink});\n }\n\n addWidthRatio(wRatio: number) {\n this.width = this.width + MathUtil.getValueByTotalInRatio(this.width, wRatio);\n }\n\n addHeightRatio(hRatio: number) {\n this.height = this.height + MathUtil.getValueByTotalInRatio(this.height, hRatio);\n }\n\n addXPercent(wPercent: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(wPercent);\n this.setX({value: this.x + MathUtil.getValueByTotalInPercent(this.width, value), noLink});\n }\n\n addYPercent(hPercent: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(hPercent);\n this.setY({value: this.y + MathUtil.getValueByTotalInPercent(this.height, value), noLink});\n }\n\n addXRatio(wRatio: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(wRatio);\n this.setX({value: this.x + MathUtil.getValueByTotalInRatio(this.width, value), noLink});\n }\n\n addYRatio(hRatio: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(hRatio);\n this.setY({value: this.y + MathUtil.getValueByTotalInRatio(this.height, value), noLink});\n }\n\n ////////////\n\n set endX(value: number) {\n const diff = value - this.x;\n this.width = diff;\n }\n\n set endXPercent(endXPercent: number) {\n this.endX = MathUtil.getValueByTotalInPercent(this.width, endXPercent);\n }\n\n set endYPercent(endYPercent: number) {\n this.endY = MathUtil.getValueByTotalInPercent(this.height, endYPercent);\n }\n\n set endY(value: number) {\n this.height = value - this.y;\n }\n\n set end(value: Point2D) {\n this.width = value.x - this.x;\n this.height = value.y - this.y;\n }\n\n get x(): number {\n return this.start.x;\n }\n\n get y(): number {\n return this.start.y;\n }\n\n get endX(): number {\n return this.end.x;\n }\n\n get endY(): number {\n return this.end.y;\n }\n\n to(startPoint: Point2D) {\n const r = this.copy();\n r.start = startPoint;\n return r;\n }\n\n toRotate(r: number, {rotatePoint = this.center, type = 'degreeAngle'}: { rotatePoint?: { x: number, y: number }, type?: AngleUnitType }): Point2D[] {\n const angle = MathUtil.radians(r, {type});\n const centerPoint = rotatePoint instanceof Point2D ? rotatePoint : new Point2D(rotatePoint.x, rotatePoint.y);\n\n const points = [\n this.leftTop,\n this.rightTop,\n this.rightBottom,\n this.leftBottom\n ];\n\n return points.map(p => MathUtil.rotatePoint(p, centerPoint, angle));\n }\n\n get center(): Point2D {\n return new Point2D(this.start.x + (this.width / 2), this.start.y + (this.height / 2));\n }\n\n get end(): Point2D {\n return new Point2D(this.start.x + this.width, this.start.y + this.height);\n }\n\n get leftTop(): Point2D {\n return this.start.copy();\n }\n\n get leftBottom(): Point2D {\n return new Point2D(this.start.x, this.end.y);\n }\n\n get rightTop(): Point2D {\n return new Point2D(this.end.x, this.start.y);\n }\n\n get rightBottom(): Point2D {\n return this.end;\n }\n\n public copy(): Rect {\n return new Rect(this.x, this.y, this.width, this.height);\n }\n\n /////////////////\n\n getWidthPercent(width: number) {\n return MathUtil.getPercentByTotal(this.width, width);\n }\n\n getWidthRatio(width: number) {\n return MathUtil.getRatioByTotal(this.width, width);\n }\n\n getWidthByPercent(percent: number) {\n return MathUtil.getValueByTotalInPercent(this.width, percent);\n }\n\n getWidthByRatio(percent: number) {\n return MathUtil.getValueByTotalInRatio(this.width, percent);\n }\n\n getHeightPercent(height: number) {\n return MathUtil.getPercentByTotal(this.height, height);\n }\n\n getHeightRatio(height: number) {\n return MathUtil.getRatioByTotal(this.height, height);\n }\n\n getHeightByPercent(percentY: number) {\n return MathUtil.getValueByTotalInPercent(this.height, percentY);\n }\n\n getHeightByRatio(ratio: number) {\n return MathUtil.getValueByTotalInRatio(this.height, ratio);\n }\n\n getXPercent(x: number) {\n return MathUtil.getPercentByTotal(this.width, x - this.x)\n }\n\n getXRatio(x: number) {\n return MathUtil.getRatioByTotal(this.width, x - this.x)\n }\n\n getXByPercent(xPercent: number) {\n return this.x + MathUtil.getValueByTotalInPercent(this.width, xPercent);\n }\n\n getXByRatio(ratio: number) {\n return this.x + MathUtil.getValueByTotalInRatio(this.width, ratio);\n }\n\n getYPercent(y: number) {\n return MathUtil.getPercentByTotal(this.height, y - this.y);\n }\n\n getYRatio(y: number) {\n return MathUtil.getRatioByTotal(this.height, y - this.y);\n }\n\n getYByPercent(yPercent: number) {\n return this.y + MathUtil.getValueByTotalInPercent(this.height, yPercent);\n }\n\n getYByRatio(ratio: number) {\n return this.y + MathUtil.getValueByTotalInRatio(this.height, ratio);\n }\n\n getPercent(point: { x: number, y: number }): Point2D {\n return new Point2D(\n this.getXPercent(point.x),\n this.getYPercent(point.y),\n );\n }\n\n /**\n * \uC8FC\uC5B4\uC9C4 width\uC5D0 \uB9DE\uCDB0 \uBE44\uC728\uC5D0 \uB530\uB77C height\uB97C \uC2A4\uCF00\uC77C\uB9C1\uD558\uC5EC \uC0C8\uB85C\uC6B4 Rect\uB97C \uBC18\uD658\uD569\uB2C8\uB2E4.\n * @param width \uC0C8\uB85C\uC6B4 width \uAC12\n * @returns \uBE44\uC728\uC5D0 \uB9DE\uAC8C height\uAC00 \uC870\uC815\uB41C Rect\n */\n toScaleByWidth(width: number): Rect {\n const ratio = this.height / this.width;\n return new Rect(this.x, this.y, width, width * ratio);\n }\n /**\n * \uC8FC\uC5B4\uC9C4 height\uC5D0 \uB9DE\uCDB0 \uBE44\uC728\uC5D0 \uB530\uB77C width\uB97C \uC2A4\uCF00\uC77C\uB9C1\uD558\uC5EC \uC0C8\uB85C\uC6B4 Rect\uB97C \uBC18\uD658\uD569\uB2C8\uB2E4.\n * @param height \uC0C8\uB85C\uC6B4 height \uAC12\n * @returns \uBE44\uC728\uC5D0 \uB9DE\uAC8C width\uAC00 \uC870\uC815\uB41C Rect\n */\n toScaleByHeight(height: number): Rect {\n const ratio = this.width / this.height;\n return new Rect(this.x, this.y, height * ratio, height);\n }\n\n toRatio(point: Rect | { x: number, y: number, w: number, h: number }): Rect {\n return new Rect(\n this.getXRatio(point.x),\n this.getYRatio(point.y),\n this.getWidthRatio(point instanceof Rect ? point.width : point.w),\n this.getHeightRatio(point instanceof Rect ? point.height : point.h),\n );\n }\n\n getRatio(point: { x: number, y: number }) {\n return new Point2D(\n this.getXRatio(point.x),\n this.getYRatio(point.y),\n );\n }\n\n getByPercent(percent: { x: number, y: number }): Point2D {\n return new Point2D(\n this.getXByPercent(percent.x),\n this.getYByPercent(percent.y),\n );\n }\n\n getByRatio(ratio: { x: number, y: number }) {\n return new Point2D(\n this.getXByRatio(ratio.x),\n this.getYByRatio(ratio.y),\n );\n }\n\n getDiffX(x: number) {\n return x - this.x;\n }\n\n getDiffY(y: number) {\n return y - this.y;\n }\n\n getDiffLeft(x: number) {\n this.getDiffX(x);\n }\n\n getDiffTop(y: number) {\n this.getDiffY(y);\n }\n\n getDiffRight(x: number) {\n return x - this.end.x;\n }\n\n getDiffBottom(y: number) {\n return y - this.end.y;\n }\n\n getDiffWidth(width: number) {\n return width - this.width;\n }\n\n getDiffHeight(height: number) {\n return height - this.height;\n }\n\n toDiff(rect: Rect) {\n return new Rect(\n rect.x - this.x,\n rect.y - this.y,\n rect.width - this.width,\n rect.height - this.height,\n );\n }\n\n setXByWidthPercent(wPercent: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(wPercent);\n this.setX({value: MathUtil.getValueByTotalInPercent(this.width, value), noLink});\n }\n\n set xByWidthPercent(wPercent: number) {\n this.setXByWidthPercent(wPercent);\n }\n\n setXByWidthRatio(wRatio: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(wRatio);\n this.setX({value: MathUtil.getValueByTotalInRatio(this.width, value), noLink});\n }\n\n set xByWidthRatio(wRatio: number) {\n this.setXByWidthRatio(wRatio);\n }\n\n setYByHeightPercent(hPercent: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(hPercent);\n this.setY({value: MathUtil.getValueByTotalInPercent(this.height, value), noLink});\n }\n\n set yByHeightPercent(hPercent: number) {\n this.setYByHeightPercent(hPercent);\n }\n\n setYByHeightRatio(ratio: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(ratio);\n this.setY({value: MathUtil.getValueByTotalInRatio(this.height, value), noLink});\n }\n\n set yByHeightRatio(ratio: number) {\n this.setYByHeightRatio(ratio);\n }\n\n addXByWidthPercent(wPercent: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(wPercent);\n this.setX({value: this.x + MathUtil.getValueByTotalInPercent(this.width, value), noLink});\n }\n\n addXByWidthRatio(wRatio: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(wRatio);\n this.setX({value: this.x + MathUtil.getValueByTotalInRatio(this.width, value), noLink});\n }\n\n addYByHeightPercent(hPercent: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(hPercent);\n this.setY({value: this.y + MathUtil.getValueByTotalInPercent(this.height, value), noLink});\n }\n\n addYByHeightRatio(ratio: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(ratio);\n this.setY({value: this.y + MathUtil.getValueByTotalInRatio(this.height, value), noLink});\n }\n\n setWidthByWidthPercent(wPercent: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(wPercent);\n this.setWidth({value: MathUtil.getValueByTotalInPercent(this.width, value), noLink});\n }\n\n set widthByWidthPercent(wPercent: number) {\n this.setWidthByWidthPercent(wPercent);\n }\n\n setWidthByWidthRatio(wRatio: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(wRatio);\n this.setWidth({value: MathUtil.getValueByTotalInRatio(this.width, value), noLink});\n }\n\n set widthByWidthRatio(wRatio: number) {\n this.setWidthByWidthRatio(wRatio);\n }\n\n setHeightByHeightPercent(hPercent: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(hPercent);\n this.setHeight({value: MathUtil.getValueByTotalInPercent(this.height, value), noLink});\n }\n\n set heightByHeightPercent(hPercent: number) {\n this.setHeightByHeightPercent(hPercent);\n }\n\n setHeightByHeightRatio(hRatio: number | ValueLinkControl<number>) {\n let {value, noLink} = this.valueLinkControl(hRatio);\n this.setHeight({value: MathUtil.getValueByTotalInRatio(this.height, value), noLink});\n }\n\n set heightByHeightRatio(hRatio: number) {\n this.setHeightByHeightRatio(hRatio);\n }\n\n // getWidthHeightPercentByPoint(point: Point2D): Point2D {\n // return new Point2D(this.getWidthPercent(point.x),this.getHeightPercent(point.y));\n // }\n //\n // getByPercent(point: Point2D): Point2D {\n // return new Point2D(this.getWidthByPercent(point.x),this.getHeightByPercent(point.y));\n // }\n\n ///////\n\n public copyByPercent(percent: number): Rect;\n public copyByPercent(percentX: number, percentY?: number): Rect ;\n public copyByPercent(percentOrX: number, percentY?: number): Rect {\n return new Rect(this.x, this.y,\n MathUtil.getValueByTotalInPercent(this.width, percentOrX),\n MathUtil.getValueByTotalInPercent(this.height, percentY ?? percentOrX)\n );\n }\n\n public copyByRatio(ratio: number): Rect;\n public copyByRatio(ratioX: number, ratioY?: number): Rect ;\n public copyByRatio(ratioOrX: number, ratioY?: number): Rect {\n return new Rect(this.x, this.y,\n MathUtil.getValueByTotalInRatio(this.width, ratioOrX),\n MathUtil.getValueByTotalInRatio(this.height, ratioY ?? ratioOrX)\n );\n }\n\n public isIn(data: { x: number, y: number }): boolean;\n public isIn(data: Point2D): boolean;\n public isIn(data: Rect): boolean\n public isIn(data: Point2D | Rect | { x: number, y: number }): boolean {\n if (data instanceof Rect) {\n return this.isIn(data.start) && this.isIn(data.end);\n } else {\n return data.x >= this.start.x && data.x <= this.end.x && data.y >= this.start.y && data.y <= this.end.y;\n }\n }\n\n public isOut(data: Point2D): boolean;\n public isOut(data: Rect): boolean;\n public isOut(data: Point2D | Rect) {\n if (data instanceof Rect) {\n return !this.isOverlap(data);\n } else {\n return !this.isIn(data);\n }\n }\n\n public isOverlap(data: Point2D): boolean;\n public isOverlap(data: Rect): boolean;\n public isOverlap(data: Point2D | Rect) {\n if (data instanceof Rect) {\n /*\n \uC0C8\uB85C\uC6B4 \uB85C\uC9C1\uC740 \uBC18\uB300\uB85C \"\uACB9\uCE58\uC9C0 \uC54A\uB294 \uC870\uAC74\"\uC744 \uCC3E\uACE0, \uADF8 \uC870\uAC74\uC5D0 \uD574\uB2F9\uD558\uC9C0 \uC54A\uC73C\uBA74 \"\uACB9\uCE5C\uB2E4\"\uACE0 \uD310\uB2E8\uD558\uB294\n \uBC29\uC2DD\uC785\uB2C8\uB2E4. \uC774 \uBC29\uBC95\uC774 \uD6E8\uC52C \uAC04\uB2E8\uD558\uACE0 \uBAA8\uB4E0 \uACBD\uC6B0\uB97C \uCC98\uB9AC\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.\n\n \uB450 \uC0AC\uAC01\uD615(A\uC640 B)\uC774 \uACB9\uCE58\uC9C0 \uC54A\uC73C\uB824\uBA74, \uB2E4\uC74C \uB124 \uAC00\uC9C0 \uC870\uAC74 \uC911 \uD558\uB098\uB77C\uB3C4 \uB9CC\uC871\uD574\uC57C \uD569\uB2C8\uB2E4.\n 1. A\uAC00 B\uC758 \uC644\uC804\uD788 \uC67C\uCABD\uC5D0 \uC788\uC744 \uB54C\n * A\uC758 \uC624\uB978\uCABD \uB05D(this.endX)\uC774 B\uC758 \uC67C\uCABD \uC2DC\uC791(data.x)\uBCF4\uB2E4 \uC67C\uCABD\uC5D0 \uC788\uB294 \uACBD\uC6B0\n * \uCF54\uB4DC: this.endX < data.x\n\n\n 2. A\uAC00 B\uC758 \uC644\uC804\uD788 \uC624\uB978\uCABD\uC5D0 \uC788\uC744 \uB54C\n * A\uC758 \uC67C\uCABD \uC2DC\uC791(this.x)\uC774 B\uC758 \uC624\uB978\uCABD \uB05D(data.endX)\uBCF4\uB2E4 \uC624\uB978\uCABD\uC5D0 \uC788\uB294 \uACBD\uC6B0\n * \uCF54\uB4DC: this.x > data.endX\n\n\n 3. A\uAC00 B\uC758 \uC644\uC804\uD788 \uC704\uCABD\uC5D0 \uC788\uC744 \uB54C\n * A\uC758 \uC544\uB798\uCABD \uB05D(this.endY)\uC774 B\uC758 \uC704\uCABD \uC2DC\uC791(data.y)\uBCF4\uB2E4 \uC704\uCABD\uC5D0 \uC788\uB294 \uACBD\uC6B0\n * \uCF54\uB4DC: this.endY < data.y\n\n\n 4. A\uAC00 B\uC758 \uC644\uC804\uD788 \uC544\uB798\uCABD\uC5D0 \uC788\uC744 \uB54C\n * A\uC758 \uC704\uCABD \uC2DC\uC791(this.y)\uC774 B\uC758 \uC544\uB798\uCABD \uB05D(data.endY)\uBCF4\uB2E4 \uC544\uB798\uCABD\uC5D0 \uC788\uB294 \uACBD\uC6B0\n * \uCF54\uB4DC: this.y > data.endY\n */\n const noOverlap = this.endX < data.x ||\n this.x > data.endX ||\n this.endY < data.y ||\n this.y > data.endY;\n return !noOverlap;\n // return (\n // this.isOverlap(data.leftTop) ||\n // this.isOverlap(data.rightTop) ||\n // this.isOverlap(data.rightBottom) ||\n // this.isOverlap(data.leftBottom)) ||\n // (\n // data.start.x < this.x && data.start.y < this.y &&\n // data.end.x > this.end.x && data.end.y > this.end.y\n // );\n } else {\n return this.isIn(data);\n }\n }\n\n public toString(): string {\n return `x:${this.x}, y:${this.y}, width: ${this.width}, height: ${this.height}`;\n }\n\n}\n", "import { ValidUtils } from '../valid/ValidUtils';\nimport { FieldType, FilterTuple } from '../types';\nimport { Point2D } from '../entity/Point2D';\nimport { Point3D } from '../entity/Point3D';\nimport { Rect } from '../entity/Rect';\nimport { ObjectUtils } from '../object/ObjectUtils';\nimport { IOS3166_1_Code } from '../code/IOS3166_1';\n\nexport namespace ConvertUtils {\n export type RGBA = { r?: number, g?: number, b?: number, a?: number };\n export type MinMaxCenterAvgDiff<T> = { min: T, max: T, center: T, avg: T };\n export type ToURLSearchParamsParams = { [key: string]: any } | URLSearchParams | [string, unknown][] | string;\n export const objToGetURL = (obj: any): string => {\n return Object.keys(obj).reduce((prev, key, i) => (\n `${prev}${i !== 0 ? '&' : ''}${key}=${obj[key]}`\n ), '');\n };\n\n export const mapToJson = (map: Map<string, any>): string => {\n return JSON.stringify(\n Array.from(\n map.entries()\n ).reduce((o: any, [key, value]) => {\n o[key] = value;\n return o;\n }, {}));\n };\n\n export const jsonToMap = (jsonStr: any): Map<string, string> => {\n return new Map(JSON.parse(jsonStr));\n };\n\n\n export const decodeURIString = (data: string) => {\n return decodeURIComponent(data);\n }\n\n export const objToStrMap = (obj: any): Map<string, string> => {\n const strMap = new Map();\n for (const k of Object.keys(obj)) {\n strMap.set(k, obj[k]);\n }\n return strMap;\n };\n\n export const jsonToStrMap = (jsonStr: string) => {\n return ConvertUtils.objToStrMap(JSON.parse(jsonStr));\n };\n\n export const strToObject = (message: string): any => {\n return JSON.parse(message);\n };\n\n export const objToJson = (obj: any): string => {\n return JSON.stringify(obj);\n };\n\n export const objToMap = (obj: any): Map<string, any> => {\n const mp = new Map<string, any>();\n Object.keys(obj).forEach((k) => {\n mp.set(k, obj[k]);\n });\n return mp;\n };\n\n export const mapToObj = (map: Map<string, any>): any => {\n const obj = {} as any;\n map.forEach((v, k) => {\n obj[k] = v;\n });\n return obj;\n };\n\n export const snakeToCamelCase = (str: string): string => {\n return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());\n }\n export const camelToSnakeCase = (str: string): string => {\n return str.replace(/([a-z])([A-Z])/g, '$1_$2').toLowerCase();\n };\n\n export function toFormData (obj: any) {\n const formData = new FormData();\n for (const key in obj)\n formData.append(key, obj[key]);\n return formData;\n }\n\n export function toObject<T>(obj: URLSearchParams, config: { firstValue: true }): FieldType<T, string>;\n export function toObject(obj: URLSearchParams): { [key: string]: string | string[] };\n export function toObject<T>(obj: FormData): T;\n export function toObject<T>(obj: [string, unknown][]): T;\n export function toObject<T>(obj: Iterable<any>): T;\n export function toObject(obj: any): any;\n export function toObject(obj: URLSearchParams | FormData |any, config?: { firstValue: boolean }): any {\n if (obj instanceof URLSearchParams) {\n const robj = {} as any;\n obj.forEach((v, k) => {\n if (config?.firstValue && robj[k] === undefined) {\n robj[k] = v;\n } else if (!config?.firstValue) {\n if (robj[k]) {\n if (Array.isArray(robj[k])) {\n robj[k].push(v);\n } else {\n robj[k] = [robj[k], v];\n }\n } else {\n robj[k] = v;\n }\n }\n })\n return robj;\n } else if(obj instanceof FormData) {\n // new Map().entries()\n // Object.entries({})\n // obj = Object.fromEntries(obj.entries());\n const formDataToObject = (formData: any) => {\n const obj: any = {};\n // FormData\uC758 \uBAA8\uB4E0 \uD0A4\uB97C \uC21C\uD68C\n for (const key of formData.keys()) {\n const values = formData.getAll(key); // \uB3D9\uC77C \uD0A4\uC758 \uBAA8\uB4E0 \uAC12 \uAC00\uC838\uC624\uAE30\n // \uAC12\uC774 \uD558\uB098\uBA74 \uB2E8\uC77C \uAC12\uC73C\uB85C, \uC5EC\uB7EC \uAC1C\uBA74 \uBC30\uC5F4\uB85C \uC800\uC7A5\n obj[key] = values.length > 1 ? values : values[0];\n }\n return obj;\n }\n return formDataToObject(obj);\n } else if (obj && typeof obj[Symbol.iterator] === 'function') {\n return Object.fromEntries(obj);\n } else if (Array.isArray(obj)) {\n return Object.fromEntries(obj);\n }else {\n // console.log(Object.prototype.toString.call(obj));\n if (ValidUtils.isMap(obj)) {\n const map = obj as Map<string, any>;\n obj = ConvertUtils.mapToObj(map);\n }\n if (ValidUtils.isArray(obj)) {\n const arr = obj as any[];\n for (let i = 0; i < arr.length; i++) {\n arr[i] = ConvertUtils.toObject(arr[i]);\n }\n }\n\n if (ValidUtils.isObject(obj)) {\n for (const property in obj) {\n obj[property] = ConvertUtils.toObject(obj[property]);\n }\n }\n\n return obj;\n }\n };\n\n export const toArray = <T>(data?: T | T[] | Set<T>): T[] => {\n if (data instanceof Set) {\n return Array.from(data.values());\n }\n\n const datas = (Array.isArray(data) ? data : (data ? [data] : []));\n return datas;\n }\n export const flatArray = <T>(...data: (T | Iterable<T>)[]): T[] => {\n const datas = data.flatMap<T>((item) => (item instanceof Object && Symbol.iterator in item ? Array.from(item) : [item]));\n return datas;\n };\n\n export const iteratorToArray = <T>(it: any): T[] => {\n return Array.from(it) as T[];\n };\n\n export const toJson = (obj: any): string => {\n const at = ConvertUtils.toObject(obj);\n return JSON.stringify(at);\n };\n\n export const concatenateToAttribute = (object_o: any) => {\n return ConvertUtils.concatenateToString(object_o, '=', ' ', '\\'');\n };\n\n export const concatenateToParameter = (object_o: any) => {\n return ConvertUtils.concatenateToString(object_o, '=', '&', '');\n };\n\n export const concatenateToString = (object_o: any, unionString_s = '=', spilString_s = ' ', pairString_s = '') => {\n const results: any[] = [];\n for (const property in object_o) {\n const value = object_o[property];\n if (value) {\n results.push(property.toString() + unionString_s + pairString_s + value + pairString_s);\n }\n }\n\n return results.join(spilString_s);\n };\n\n export const specialCharsToEscape = (data: string): string => {\n return data.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n };\n\n export const decodeHTMLEscape = (data: string): string => {\n // HTML \uC5D4\uD2F0\uD2F0 \uC774\uC2A4\uCF00\uC774\uD504\uB97C \uB514\uCF54\uB4DC\uD569\uB2C8\uB2E4.\n return data.replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(///g, '/');\n }\n\n export function escapeHTML(htmlString: string, option?: { targets?: string[] }): string {\n if (!htmlString) return '';\n \n // HTML escape map - \uC21C\uC11C \uC911\uC694: & \uB97C \uBA3C\uC800 \uCC98\uB9AC\uD574\uC57C \uD568\n // https://dev-handbook.tistory.com/23\n const escapeMap: Record<string, string> = {\n '&': '&', // \uBC18\uB4DC\uC2DC \uBA3C\uC800 \uCC98\uB9AC\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''', // or ' (\uD558\uC9C0\uB9CC HTML4\uC5D0\uC11C\uB294 ' \uAD8C\uC7A5)\n '/': '/',\n '`': '`',\n '=': '=',\n '{': '{',\n '}': '}',\n '#': '#',\n '$': '$',\n '\\n': ' ', // newline\n '\\r': ' ', // carriage return\n '\\t': '	', // tab\n '\\u00A0': ' ', // non-breaking space\n '\u00A2': '¢',\n '\u00A3': '£',\n '\u00A5': '¥',\n '\u20AC': '€',\n '\u00A9': '©',\n '\u00AE': '®',\n '\u2122': '™',\n '\u00B0': '°',\n '\u00B1': '±',\n '\u00D7': '×',\n '\u00F7': '÷',\n '\u2212': '−',\n '\u2022': '•',\n '\u2026': '…',\n '\u2190': '←',\n '\u2192': '→',\n '\u2191': '↑',\n '\u2193': '↓',\n '\u2194': '↔',\n };\n\n // targets \uC635\uC158\uC774 \uC788\uC73C\uBA74 \uD574\uB2F9 \uBB38\uC790\uB9CC \uD544\uD130\uB9C1\n const targetsSet = option?.targets ? new Set(option.targets) : null;\n const filteredEscapeMap = targetsSet \n ? Object.fromEntries(Object.entries(escapeMap).filter(([key]) => targetsSet.has(key)))\n : escapeMap;\n\n // & \uAC00 targets\uC5D0 \uD3EC\uD568\uB418\uC5B4 \uC788\uAC70\uB098 targets\uAC00 \uC5C6\uC73C\uBA74 & \uB97C \uBA3C\uC800 \uCC98\uB9AC\n const shouldEscapeAmpersand = !targetsSet || targetsSet.has('&');\n \n // \uC774\uC2A4\uCF00\uC774\uD504\uD560 \uBB38\uC790\uB4E4\uB85C \uC815\uADDC\uC2DD \uD328\uD134 \uC0DD\uC131\n const charsToEscape = Object.keys(filteredEscapeMap).filter(char => char !== '&');\n if (charsToEscape.length === 0 && !shouldEscapeAmpersand) {\n return htmlString; // \uC774\uC2A4\uCF00\uC774\uD504\uD560 \uBB38\uC790\uAC00 \uC5C6\uC73C\uBA74 \uC6D0\uBCF8 \uBC18\uD658\n }\n\n // \uC815\uADDC\uC2DD \uC0DD\uC131 (\uD2B9\uC218 \uBB38\uC790 \uC774\uC2A4\uCF00\uC774\uD504 \uD544\uC694)\n const escapedChars = charsToEscape.map(char => {\n // \uC815\uADDC\uC2DD\uC5D0\uC11C \uD2B9\uBCC4\uD55C \uC758\uBBF8\uB97C \uAC00\uC9C4 \uBB38\uC790\uB4E4\uC744 \uC774\uC2A4\uCF00\uC774\uD504\n return char.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }).join('');\n\n let result = htmlString;\n \n // & \uB97C \uBA3C\uC800 \uCC98\uB9AC (\uC635\uC158\uC5D0 \uD3EC\uD568\uB41C \uACBD\uC6B0)\n if (shouldEscapeAmpersand) {\n result = result.replace(/&/g, '&');\n }\n \n // \uB098\uBA38\uC9C0 \uBB38\uC790 \uCC98\uB9AC\n if (escapedChars.length > 0) {\n const regex = new RegExp(`[${escapedChars}]`, 'g');\n result = result.replace(regex, (match) => {\n return filteredEscapeMap[match] || match;\n });\n }\n\n return result;\n }\n\n export const copyObject = <T extends Record<string, any>>(obj: T, update: Partial<T> = {}): T => {\n return {...obj, ...update};\n };\n\n export const copyArrayWithAddition = <T extends unknown[]>(arr: FilterTuple<T>, update?: T): T => {\n return [...arr, ...(update || [])] as T;\n };\n\n export const hexToInt = (hex: string): number => {\n if (hex.startsWith('#')) {\n hex = hex.slice(1);\n }\n if (hex.length === 3) {\n hex = hex.split('').map((c) => c + c).join('');\n }\n return parseInt(hex, 16);\n };\n\n\n // export const toHex = (val: number): string => {\n // const hex = Math.floor(val).toString(16).toUpperCase();\n // return (hex.length === 1 ? '0' + hex : hex);\n // };\n\n export const toHex = (num: number): string => {\n if (num < 0) {\n num = 0xFFFFFFFF + num + 1;\n }\n num = Number(num.toFixed(0));\n return num.toString(16).padStart(2, '0').toUpperCase();\n };\n\n export const toHexColor = (rgba: RGBA): string => {\n const r = ConvertUtils.toHex(rgba.r ?? 0);\n const g = ConvertUtils.toHex(rgba.g ?? 0);\n const b = ConvertUtils.toHex(rgba.b ?? 0);\n const a = ConvertUtils.toHex(rgba.a ?? 255);\n return `#${r}${g}${b}${a}`;\n };\n\n export const avgColor = (color: RGBA[]): RGBA => {\n const sum = color.reduce((acc: Required<RGBA>, c) => {\n acc.r += c.r ?? 0;\n acc.g += c.g ?? 0;\n acc.b += c.b ?? 0;\n acc.a += c.a ?? 0;\n return acc;\n }, {r: 0, g: 0, b: 0, a: 0}) as Required<RGBA>;\n const avg = {r: Math.floor(sum.r / color.length), g: Math.floor(sum.g / color.length), b: Math.floor(sum.b / color.length), a: Math.floor(sum.a / color.length)};\n return avg;\n };\n\n export const toRGBA = (hex?: string | null): RGBA => {\n hex ??= '#000000FF';\n const hexColor = hex.replace('#', '');\n const r = parseInt(hexColor.slice(0, 2) || '0', 16);\n const g = parseInt(hexColor.slice(2, 4) || '0', 16);\n const b = parseInt(hexColor.slice(4, 6) || '0', 16);\n const a = hexColor.length > 6 ? parseInt(hexColor.slice(6, 8) || '0', 16) : 255;\n return {r, g, b, a};\n };\n\n export const minMaxCenterAvg = <T extends { [key: string]: number }>(obj: T[]): { [key in keyof T]?: MinMaxCenterAvgDiff<number> & {diff: number} } => {\n const result: { [key in keyof T]: { min: number, max: number, center: number, diff: number, avg: number } } = {} as any;\n\n const allKeys = ObjectUtils.uniqueKeys(obj);\n for (const key of allKeys) {\n const values = obj.map(item => item[key]);\n const min = Math.min(...values);\n const max = Math.max(...values);\n const center = (min + max) / 2;\n const avg = values.reduce((sum, val) => sum + val, 0) / values.length;\n\n result[key as keyof T] = {min, max, center, avg, diff: max - min};\n }\n\n return result;\n }\n\n export const minMaxCenterRectAvg2D = (point2Ds: (Point2D | { x: number, y: number })[]): MinMaxCenterAvgDiff<Point2D> & { minMaxRect: Rect } => {\n const min = new Point2D(Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);\n const max = new Point2D(Number.MIN_SAFE_INTEGER, Number.MIN_SAFE_INTEGER);\n let sum = new Point2D(0, 0);\n point2Ds.forEach((p) => {\n min.x = Math.min(min.x, p.x);\n min.y = Math.min(min.y, p.y);\n max.x = Math.max(max.x, p.x);\n max.y = Math.max(max.y, p.y);\n sum.x += p.x;\n sum.y += p.y;\n });\n const center = new Point2D((min.x + max.x) / 2, (min.y + max.y) / 2);\n const avg = new Point2D(sum.x / point2Ds.length, sum.y / point2Ds.length);\n const minMaxRect = new Rect(min.x, min.y, max.x - min.x, max.y - min.y);\n return {min, max, center, avg, minMaxRect};\n };\n\n\n export const minMaxCenterAvg3D = (point3Ds: (Point3D | { x: number, y: number, z: number })[]): MinMaxCenterAvgDiff<Point3D> => {\n const min = new Point3D(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\n const max = new Point3D(Number.MIN_VALUE, Number.MIN_VALUE, Number.MIN_VALUE);\n let sum = new Point3D(0, 0, 0);\n point3Ds.forEach((p) => {\n min.x = Math.min(min.x, p.x);\n min.y = Math.min(min.y, p.y);\n min.z = Math.max(min.z, p.z);\n max.x = Math.max(max.x, p.x);\n max.y = Math.max(max.y, p.y);\n max.z = Math.max(max.z, p.y);\n sum.x += p.x;\n sum.y += p.y;\n sum.z += p.z;\n });\n const center = new Point3D((min.x + max.x) / 2, (min.y + max.y) / 2, (min.z + max.z) / 2);\n const avg = new Point3D(sum.x / point3Ds.length, sum.y / point3Ds.length, sum.z / point3Ds.length);\n return {min, max, center, avg};\n };\n\n export const roundRectRadiiToFullRadii = (radii?: [number] | [number, number] | [number, number, number] | [number, number, number, number]) => {\n if (!radii) {\n return [0, 0, 0, 0];\n }\n if (radii.length === 1) {\n return [radii[0] ?? 0, radii[0] ?? 0, radii[0] ?? 0, radii[0] ?? 0];\n } else if (radii.length === 2) {\n return [radii[0] ?? 0, radii[1] ?? 0, radii[0] ?? 0, radii[1] ?? 0];\n } else if (radii.length === 3) {\n return [radii[0] ?? 0, radii[1] ?? 0, radii[2] ?? 0, radii[1] ?? 0];\n } else {\n return radii;\n }\n };\n\n\n export const toArrayDirectionChange = <T>(array: T[][]) => {\n // \uC785\uB825 \uBC30\uC5F4\uC774 \uBE44\uC5B4\uC788\uAC70\uB098 \uCCAB \uBC88\uC9F8 \uD589\uC774 \uBE44\uC5B4\uC788\uC73C\uBA74 \uBE48 \uBC30\uC5F4 \uBC18\uD658\n if (!array || array.length === 0 || !array[0] || array[0].length === 0) {\n return [];\n }\n const result: T[][] = [];\n const numCols = array[0].length; // \uAE30\uC900 \uC5F4 \uAC1C\uC218 (\uCCAB \uD589 \uAE30\uC900)\n const numRows = array.length; // \uD589 \uAC1C\uC218\n\n for (let i = 0; i < numCols; i++) {\n const newRow: T[] = [];\n for (let j = 0; j < numRows; j++) {\n // \uB9CC\uC57D jagged array \uAC00\uB2A5\uC131\uC744 \uC5C4\uACA9\uD788 \uB2E4\uB8E8\uB824\uBA74 \uC5EC\uAE30\uC11C array[j].length > i \uC778\uC9C0 \uD655\uC778 \uD544\uC694\n // \uD558\uC9C0\uB9CC T[][] \uD0C0\uC785 \uC2DC\uADF8\uB2C8\uCC98\uB294 \uBCF4\uD1B5 rectangular array\uB97C \uAE30\uB300\uD568\n newRow.push(array[j][i]);\n }\n result.push(newRow);\n }\n return result;\n }\n\n // groupBy \uD568\uC218 \uAD6C\uD604\n export const groupByMap = <T, K>(array: T[], keySelector: (item: T) => K): Map<K, T[]> => {\n return array.reduce((map, item) => {\n const key = keySelector(item);\n const group = map.get(key) || [];\n group.push(item);\n map.set(key, group);\n return map;\n }, new Map<K, T[]>());\n }\n export const groupByObject = <T, K extends string | number | symbol>(\n array: T[],\n keySelector: (item: T) => K\n ): Record<K, T[]> => {\n// groupByMap \uD638\uCD9C\n const map = groupByMap(array, keySelector);\n // Map\uC744 Record\uB85C \uBCC0\uD658\n return Object.fromEntries(map) as Record<K, T[]>;\n }\n\n\n\n export const toURLSearchParams = (data: ToURLSearchParamsParams): URLSearchParams =>{\n const searchParams = new URLSearchParams();\n if (typeof data === 'string') {\n new URLSearchParams(data).forEach((value, key) => {\n searchParams.append(key, value);\n });\n } else if (typeof data === 'object') {\n const forTarget = data instanceof URLSearchParams ? data.entries() : (Array.isArray(data) ? data : Object.entries(data));\n for (const [k, v] of Array.from(forTarget)) {\n if (Array.isArray(v)) {\n v.forEach(it => searchParams.append(k, it));\n } else {\n searchParams.append(k, v as any);\n }\n }\n }\n return searchParams;\n }\n // export const RelativeHumanReadableTimeLabels = {\n // [IOS3166_1_Code.KOR]: {\n // justNow: '\uBC29\uAE08 \uC804',\n // minutesAgo: '\uBD84 \uC804',\n // hoursAgo: '\uC2DC\uAC04 \uC804',\n // daysAgo: '\uC77C \uC804',\n // }\n //\n // }\n // export type RelativeHumanReadableTimeLabel = {\n // justNow: string,\n // minutesAgo: string,\n // hoursAgo: string,\n // daysAgo: string,\n // };\n // export type RelativeHumanReadableTimeConfig = {\n // label: RelativeHumanReadableTimeLabel;\n // }\n // export const formatRelativeHumanReadableTime = (date: Date | string | number, config: RelativeHumanReadableTimeConfig): string => {\n // if (!(date instanceof Date)) {\n // date = new Date(date);\n // }\n // const now = new Date();\n // const diffMs = now.getTime() - date.getTime();\n // const diffMinutes = Math.floor(diffMs / (1000 * 60));\n // const diffHours = Math.floor(diffMinutes / 60);\n //\n // if (diffMinutes < 1) return config.label.justNow;\n // if (diffMinutes < 60) return `${diffMinutes}${config.label.minutesAgo}`;\n // if (diffHours < 24) return `${diffHours}${}`;\n // return `${Math.floor(diffHours / 24)}\uC77C \uC804`;\n // }\n\n /**\n * \uBB38\uC790\uC5F4 JSON\uC744 \uD0A4-\uAC12 \uC30D \uBC30\uC5F4\uB85C \uBCC0\uD658\uD569\uB2C8\uB2E4.\n *\n * @param {string} stringJson - JSON \uD615\uC2DD\uC758 \uBB38\uC790\uC5F4 (\uC608: \"{value: this.child.obj.name}\")\n * @return {Array<{ key: string, value: string }>} \uD0A4-\uAC12 \uC30D \uBC30\uC5F4\n */\n export const stringJsonToKeyPairs = (stringJson: string) => {\n return Array.from(stringJson.matchAll(/(\\w+):\\s*([^,}]+)/g)).map(match => ({key: match[1], value: match[2]}))\n }\n\n // const formDataToFormDataEntryValueObj = <T = { [key: string]: FormDataEntryValue | FormDataEntryValue[] }>(\n // data: FormData | HTMLFormElement\n // ): T => {\n // if (typeof HTMLFormElement !== 'undefined' && data instanceof HTMLFormElement) {\n // data = new FormData(data);\n // }\n // const obj: any = {};\n // data.forEach((value, key) => {\n // if (Array.isArray(obj[key])) {\n // obj[key].push(value);\n // } else if (obj[key] !== undefined || !isNaN(obj[key])) {\n // obj[key] = [obj[key], value];\n // } else {\n // obj[key] = value;\n // }\n // });\n // return obj;\n // }\n\n}\n", "export interface OnSimCreate {\n onSimCreate(): void;\n}\nexport const isOnSimCreate = (obj: any): obj is OnSimCreate => {\n return typeof obj?.onSimCreate === 'function';\n}", "export interface OnSimCreateCompleted<T = any> {\n onSimCreateProxyCompleted(proxyThis: T): void;\n}\nexport const isOnSimCreateProxyCompleted = (obj: any): obj is OnSimCreateCompleted => {\n return typeof obj?.onSimCreateProxyCompleted === 'function';\n}\n\n", "\nimport { ReflectUtils } from '@dooboostore/core/reflect/ReflectUtils';\nimport {ReflectMethod} from '../../types/Types';\n\nexport type InjectionConfig = {}\n\nconst InjectionMetadataKey = Symbol('Injection');\nexport function Injection(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function Injection(config?: InjectionConfig): ReflectMethod;\nexport function Injection(configOrTarget?: InjectionConfig | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): void | ReflectMethod {\n if (propertyKey && descriptor) {\n const target = configOrTarget;\n ReflectUtils.defineMetadata(InjectionMetadataKey, {}, target, propertyKey);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n const config = configOrTarget;\n ReflectUtils.defineMetadata(InjectionMetadataKey, config ?? {}, target, propertyKey);\n }\n }\n}\n\nexport const getInjection = (target: any, propertyKey: string | symbol): InjectionConfig | undefined => {\n return ReflectUtils.getMetadata(InjectionMetadataKey, target, propertyKey);\n}\n", "import {SimError} from './SimError';\n\nexport class MethodNoSuch extends SimError {\n constructor(message?: string, name?: string, public propertyKeys?: symbol | string, stack?: string) {\n super(message, name, stack);\n }\n}\n", "import { ConstructorType, GenericClassDecorator } from '@dooboostore/core/types';\nimport { ReflectMethod} from '../../types/Types';\nimport { ReflectUtils } from '@dooboostore/core/reflect/ReflectUtils';\nimport {RouteFilter} from '../../route/RouteFilter';\n\nexport type Filterss = (RouteFilter | ConstructorType<RouteFilter>)[];\nexport type Filters = RouteFilter | ConstructorType<RouteFilter> | Filterss;\nexport type RoteAndFilter = {filters: Filters, target: ConstructorType<Object>};\nexport type RouteTargetMethod = {target: ConstructorType<Object>, propertyKeys: (string|symbol)[], filters?: Filterss}\nexport type RouteProperty = ConstructorType<Object> | RoteAndFilter | [ConstructorType<Object> | RoteAndFilter, any] | RouteTargetMethod | string | Symbol;\nexport type Route = {[name: string]: RouteProperty};\nexport interface RouterConfig {\n path?: string;\n route?: Route;\n routers?: ConstructorType<Object>[];\n filters?: Filters;\n}\n\nexport const RouterMetadataKey = Symbol('Router');\nexport const routerProcess = (config: RouterConfig, target: ConstructorType<any> | Function) => {\n getRoutes(target)?.forEach(it => {\n config.route = (config.route ?? {});\n const paths = Array.isArray(it.config.path) ? it.config.path : [it.config.path];\n for (const path of paths) {\n if (config.route[path]) {\n const route = config.route[path] as RouteTargetMethod;\n route.propertyKeys.push(it.propertyKey);\n route.filters = route.filters ?? [];\n if (Array.isArray(it.config.filters)) {\n route.filters.push(...it.config.filters)\n } else if (it.config.filters) {\n route.filters.push(it.config.filters)\n }\n } else {\n config.route[path] = {target, propertyKeys: [it.propertyKey], filters: it.config.filters} as RouteTargetMethod;\n }\n }\n });\n ReflectUtils.defineMetadata(RouterMetadataKey, config, target);\n}\nexport function Router(target: ConstructorType<any> | Function): void;\nexport function Router(config: RouterConfig): GenericClassDecorator<ConstructorType<any> | Function>;\nexport function Router(configOrTarget: RouterConfig | ConstructorType<any> | Function): void | GenericClassDecorator<ConstructorType<any> | Function> {\n if (typeof configOrTarget === 'function') {\n const routerConfig: RouterConfig = {\n path: ''\n }\n routerProcess(routerConfig, configOrTarget);\n } else {\n return (target: ConstructorType<any> | Function) => {\n configOrTarget.path = configOrTarget.path ?? '';\n routerProcess(configOrTarget, target);\n }\n }\n}\n\nexport const getRouter = (target: ConstructorType<any> | Function | any): RouterConfig | undefined => {\n if (target != null && typeof target === 'object') {\n target = target.constructor;\n }\n try { return ReflectUtils.getMetadata(RouterMetadataKey, target); } catch (e) {}\n}\n\ntype RouteConfig = { path: string | string[], filters?: Filters }\nexport type SaveRouteConfig = { propertyKey: string | symbol; method: Function; config: RouteConfig; }\nexport const RouteMetadataKey = Symbol('RouteMetadataKey');\n\nexport const Route = (config: RouteConfig): ReflectMethod => {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n const saveRouteConfigs = (ReflectUtils.getMetadata(RouteMetadataKey, target.constructor) ?? []) as SaveRouteConfig[];\n const method = target[propertyKey];\n saveRouteConfigs.push({propertyKey, method, config});\n ReflectUtils.defineMetadata(RouteMetadataKey, saveRouteConfigs, target.constructor);\n ReflectUtils.defineMetadata(RouteMetadataKey, config, target, propertyKey);\n };\n}\n\nexport const getRoute = (target: any, propertyKey: string | symbol): RouteConfig | undefined => {\n return ReflectUtils.getMetadata(RouteMetadataKey, target, propertyKey);\n}\n\nexport const getRoutes = (target: any): SaveRouteConfig[] | undefined => {\n if (target !== null && undefined !== target && typeof target === 'object') {\n target = target.constructor;\n }\n return ReflectUtils.getMetadata(RouteMetadataKey, target);\n}\n", "import { ConstructorType, isDefined } from '@dooboostore/core/types';\nimport { SimAtomic } from '../simstance/SimAtomic';\nimport { Intent } from '../intent/Intent';\nimport { SimstanceManager } from '../simstance/SimstanceManager';\nimport { getInjection } from '../decorators/inject/Injection';\nimport { MethodNoSuch } from '../throwable/MethodNoSuch';\nimport { getRoute, getRouter, getRoutes } from '../decorators/route/Router';\nimport { Expression } from '@dooboostore/core/expression/Expression';\n\nexport class RouterModule<R = SimAtomic, M = any> {\n private _pathData?: Expression.Path.PathNameData;\n private _data?: any;\n private _intent?: Intent;\n private _propertyKeys?: (string | symbol)[];\n private _path?: string;\n\n public get path(): string | undefined {\n return this._path;\n }\n\n public set path(value: string | undefined) {\n this._path = value;\n }\n\n public get data(): any {\n return this._data;\n }\n\n public set data(value: any) {\n this._data = value;\n }\n\n public get intent(): Intent | undefined {\n return this._intent;\n }\n\n public set intent(value: Intent | undefined) {\n this._intent = value;\n }\n\n public get propertyKeys(): (string | symbol)[] | undefined {\n return this._propertyKeys;\n }\n\n public set propertyKeys(value: (string | symbol)[] | undefined) {\n this._propertyKeys = value;\n }\n\n public get pathData(): Expression.Path.PathNameData | undefined {\n return this._pathData;\n }\n\n public set pathData(value: Expression.Path.PathNameData | undefined) {\n this._pathData = value;\n }\n\n\n constructor(private simstanceManager: SimstanceManager, public router?: R, public module?: { targetKeyType?: ConstructorType<any> | Function, originalType: ConstructorType<any> | Function }, public routerChains: R[] = []) {\n }\n\n getRouterPath(join = '') {\n return this.getRouterPaths().map(it => it ?? '').join(join)\n }\n\n getRouterPaths() {\n return this.routerChains.map(it => getRouter(it instanceof SimAtomic ? it.type.targetKeyType : it)?.path);\n }\n\n getRouterPathData(pathName: string) {\n return Expression.Path.pathNameData(pathName, this.getRouterPath());\n }\n\n getModuleInstance<T = M>(): T | undefined ;\n getModuleInstance<T = M>(propertyKey?: string | symbol, instanceBind: boolean | any = true): T | undefined {\n const instance = this.simstanceManager.getOrNewSim<T>({target: this.module?.targetKeyType, originTypeTarget: this.module?.originalType});\n if (propertyKey && this.propertyKeys && this.propertyKeys.includes(propertyKey)) {\n let instanceElement = (instance as any)[propertyKey];\n if (instanceBind && typeof instanceBind === 'boolean') {\n instanceElement = instanceElement.bind(instance);\n } else if (instanceBind && typeof instanceBind === 'object') {\n instanceElement = instanceElement.bind(instanceBind);\n }\n return instanceElement;\n } else {\n return instance;\n }\n }\n\n executeModuleProperty(propertyKey: string | symbol, ...param: any[]): any {\n const target = this.getModuleInstance() as any;\n if (propertyKey) {\n const config = getInjection(target, propertyKey);\n if (config) {\n const other = new Map<any, any>();\n param.forEach(it => other.set(it.constructor, it));\n return this.simstanceManager.executeBindParameterSim({target, targetKey: propertyKey}, other)\n } else {\n if (target[propertyKey]) {\n return target[propertyKey]?.(...param);\n } else {\n throw new MethodNoSuch(`${propertyKey.toString()} noSuch`, propertyKey.toString(), propertyKey)\n }\n }\n }\n }\n\n get firstRouteChain() {\n return this.routerChains[0];\n }\n\n get firstRouteChainValue() {\n return (this.firstRouteChain as unknown as SimAtomic<any>).getValue();\n }\n\n get lastRouteChain() {\n return this.routerChains[this.routerChains.length - 1];\n }\n\n get lastRouteChainValue() {\n return (this.lastRouteChain as unknown as SimAtomic<any>).getValue();\n }\n\n hasActivateInLastRoute(obj: any) {\n return this.lastRouteChainValue?.hasActivate(obj) === true;\n }\n\n get queryParams(): { [key: string]: string } | undefined {\n if (this.intent) {\n return this.intent.queryParams;\n }\n }\n\n get queryParamsAfterDecodeURI(): { [key: string]: string } | undefined {\n if (this.intent) {\n return this.intent.queryParamsAfterDecodeURI;\n }\n }\n}\n", "import { RoutingDataSet } from '../route/RouterManager';\n\nexport namespace RouterAction {\n export interface CanActivate {\n canActivate(url: RoutingDataSet, data?: any): Promise<void>;\n }\n export const isCanActivate = (obj: any): obj is CanActivate => {\n return typeof obj?.canActivate === 'function';\n };\n\n export interface OnRouting {\n onRouting(r: RoutingDataSet): Promise<void>;\n }\n\n export const isOnRouting = (obj: any): obj is OnRouting => {\n return typeof obj?.onRouting === 'function';\n };\n\n export interface HasActivate {\n hasActivate(checkObj: any): boolean;\n }\n\n export const isHasActivate = (obj: any): obj is HasActivate => {\n return typeof obj?.hasActivate === 'function';\n };\n}\n", "import { Subscription } from './Subscription';\nimport { Observer } from './Observer';\n\nexport class Subscriber<T, E = any> implements Subscription, Observer<T, E>{\n closed = false;\n constructor(private destination: Observer<T, E>) {\n }\n next(value: T): void {\n if (this.closed) {\n return;\n }\n this.destination.next(value);\n }\n error(err: E): void {\n if (this.closed) {\n return;\n }\n this.closed = true;\n this.destination.error(err);\n this.unsubscribe();\n }\n complete(): void {\n if (this.closed) {\n return;\n }\n this.closed = true;\n this.destination.complete();\n this.unsubscribe();\n }\n unsubscribe(): void {\n this.closed = true;\n }\n\n}", "import { Subscription } from './Subscription';\nimport { CompleteCallBack, ErrorCallBack, ObserverCallBack, Subscribable } from './Subscribable';\nimport { Observer } from './Observer';\nimport { Subscriber } from './Subscriber.';\n\nexport type OperatorFunction<T, R> = (source: Observable<T, any>) => Observable<R, any>;\n\nexport class Observable<T, E = any> implements Subscribable<T, E> {\n private _producerFunction: ((subscriber: Subscriber<T, E>) => (Subscription | (() => void) | void)) | undefined;\n\n constructor(producerFunction?: (subscriber: Subscriber<T, E>) => (Subscription | (() => void) | void)) {\n this._producerFunction = producerFunction;\n }\n\n subscribe(observer: Partial<Observer<T, E>>): Subscription;\n subscribe(d: ObserverCallBack<T>, e?: ErrorCallBack, c?: CompleteCallBack): Subscription;\n subscribe(observer: Partial<Observer<T, E>> | ObserverCallBack<T>, e?: ErrorCallBack, c?: CompleteCallBack): Subscription {\n\n const partialObserver: Partial<Observer<T, E>> = {\n next: typeof observer === 'object' ? observer.next : observer,\n error: typeof observer === 'object' ? observer.error : e,\n complete: typeof observer === 'object' ? observer.complete : c\n }\n\n // Create a new internal subscriber for this specific subscription\n const internalSubscriber = new Subscriber({\n next: (data: T) => {\n partialObserver.next?.(data);\n },\n error: (e: E) => {\n partialObserver.error?.(e);\n },\n complete: () => {\n partialObserver.complete?.();\n }\n }\n );\n\n let teardownLogic: Subscription | (() => void) | void;\n if (this._producerFunction) {\n teardownLogic = this._producerFunction(internalSubscriber);\n }\n\n let closed = false;\n return {\n get closed() {\n return closed;\n },\n unsubscribe: () => {\n // console.log('unsubscribe-->', teardownLogic)\n // Execute the teardown logic returned by the producer function\n if (typeof teardownLogic === 'function') {\n teardownLogic();\n } else if (teardownLogic && typeof teardownLogic.unsubscribe === 'function') {\n teardownLogic.unsubscribe();\n }\n closed = true;\n }\n }\n }\n\n toPromise(): Promise<T | undefined> {\n return new Promise((resolve, reject) => {\n let lastValue: T | undefined;\n let subscription: Subscription;\n\n subscription = this.subscribe({\n next: (value: T) => {\n lastValue = value;\n },\n error: (err: E) => {\n reject(err);\n subscription.unsubscribe();\n },\n complete: () => {\n resolve(lastValue);\n subscription.unsubscribe();\n }\n });\n });\n }\n\n pipe(): Observable<T, E>;\n pipe<A>(op1: OperatorFunction<T, A>): Observable<A, any>;\n pipe<A, B>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>): Observable<B, any>;\n pipe<A, B, C>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>): Observable<C, any>;\n pipe<A, B, C, D>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>): Observable<D, any>;\n pipe<A, B, C, D, E>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>): Observable<E, any>;\n pipe<A, B, C, D, E, F>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>): Observable<F, any>;\n pipe<A, B, C, D, E, F, G>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>): Observable<G, any>;\n pipe<A, B, C, D, E, F, G, H>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>): Observable<H, any>;\n pipe<A, B, C, D, E, F, G, H, I>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>): Observable<I, any>;\n pipe<A, B, C, D, E, F, G, H, I, J>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>): Observable<J, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>): Observable<K, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>): Observable<L, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>): Observable<M, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>): Observable<N, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>): Observable<O, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>): Observable<P, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>): Observable<Q, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>): Observable<R, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>): Observable<S, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>): Observable<U, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>): Observable<V, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>): Observable<W, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>): Observable<X, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>): Observable<Y, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>): Observable<Z, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z, AA>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>, op26: OperatorFunction<Z, AA>): Observable<AA, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z, AA, AB>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>, op26: OperatorFunction<Z, AA>, op27: OperatorFunction<AA, AB>): Observable<AB, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z, AA, AB, AC>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>, op26: OperatorFunction<Z, AA>, op27: OperatorFunction<AA, AB>, op28: OperatorFunction<AB, AC>): Observable<AC, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z, AA, AB, AC, AD>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>, op26: OperatorFunction<Z, AA>, op27: OperatorFunction<AA, AB>, op28: OperatorFunction<AB, AC>, op29: OperatorFunction<AC, AD>): Observable<AD, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z, AA, AB, AC, AD, AE>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>, op26: OperatorFunction<Z, AA>, op27: OperatorFunction<AA, AB>, op28: OperatorFunction<AB, AC>, op29: OperatorFunction<AC, AD>, op30: OperatorFunction<AD, AE>): Observable<AE, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>, op26: OperatorFunction<Z, AA>, op27: OperatorFunction<AA, AB>, op28: OperatorFunction<AB, AC>, op29: OperatorFunction<AC, AD>, op30: OperatorFunction<AD, AE>, op31: OperatorFunction<AE, AF>): Observable<AF, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>, op26: OperatorFunction<Z, AA>, op27: OperatorFunction<AA, AB>, op28: OperatorFunction<AB, AC>, op29: OperatorFunction<AC, AD>, op30: OperatorFunction<AD, AE>, op31: OperatorFunction<AE, AF>, op32: OperatorFunction<AF, AG>): Observable<AG, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>, op26: OperatorFunction<Z, AA>, op27: OperatorFunction<AA, AB>, op28: OperatorFunction<AB, AC>, op29: OperatorFunction<AC, AD>, op30: OperatorFunction<AD, AE>, op31: OperatorFunction<AE, AF>, op32: OperatorFunction<AF, AG>, op33: OperatorFunction<AG, AH>): Observable<AH, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>, op26: OperatorFunction<Z, AA>, op27: OperatorFunction<AA, AB>, op28: OperatorFunction<AB, AC>, op29: OperatorFunction<AC, AD>, op30: OperatorFunction<AD, AE>, op31: OperatorFunction<AE, AF>, op32: OperatorFunction<AF, AG>, op33: OperatorFunction<AG, AH>, op34: OperatorFunction<AH, AI>): Observable<AI, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>, op26: OperatorFunction<Z, AA>, op27: OperatorFunction<AA, AB>, op28: OperatorFunction<AB, AC>, op29: OperatorFunction<AC, AD>, op30: OperatorFunction<AD, AE>, op31: OperatorFunction<AE, AF>, op32: OperatorFunction<AF, AG>, op33: OperatorFunction<AG, AH>, op34: OperatorFunction<AH, AI>, op35: OperatorFunction<AI, AJ>): Observable<AJ, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>, op26: OperatorFunction<Z, AA>, op27: OperatorFunction<AA, AB>, op28: OperatorFunction<AB, AC>, op29: OperatorFunction<AC, AD>, op30: OperatorFunction<AD, AE>, op31: OperatorFunction<AE, AF>, op32: OperatorFunction<AF, AG>, op33: OperatorFunction<AG, AH>, op34: OperatorFunction<AH, AI>, op35: OperatorFunction<AI, AJ>, op36: OperatorFunction<AJ, AK>): Observable<AK, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>, op26: OperatorFunction<Z, AA>, op27: OperatorFunction<AA, AB>, op28: OperatorFunction<AB, AC>, op29: OperatorFunction<AC, AD>, op30: OperatorFunction<AD, AE>, op31: OperatorFunction<AE, AF>, op32: OperatorFunction<AF, AG>, op33: OperatorFunction<AG, AH>, op34: OperatorFunction<AH, AI>, op35: OperatorFunction<AI, AJ>, op36: OperatorFunction<AJ, AK>, op37: OperatorFunction<AK, AL>): Observable<AL, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>, op26: OperatorFunction<Z, AA>, op27: OperatorFunction<AA, AB>, op28: OperatorFunction<AB, AC>, op29: OperatorFunction<AC, AD>, op30: OperatorFunction<AD, AE>, op31: OperatorFunction<AE, AF>, op32: OperatorFunction<AF, AG>, op33: OperatorFunction<AG, AH>, op34: OperatorFunction<AH, AI>, op35: OperatorFunction<AI, AJ>, op36: OperatorFunction<AJ, AK>, op37: OperatorFunction<AK, AL>, op38: OperatorFunction<AL, AM>): Observable<AM, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>, op26: OperatorFunction<Z, AA>, op27: OperatorFunction<AA, AB>, op28: OperatorFunction<AB, AC>, op29: OperatorFunction<AC, AD>, op30: OperatorFunction<AD, AE>, op31: OperatorFunction<AE, AF>, op32: OperatorFunction<AF, AG>, op33: OperatorFunction<AG, AH>, op34: OperatorFunction<AH, AI>, op35: OperatorFunction<AI, AJ>, op36: OperatorFunction<AJ, AK>, op37: OperatorFunction<AK, AL>, op38: OperatorFunction<AL, AM>, op39: OperatorFunction<AM, AN>): Observable<AN, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>, op26: OperatorFunction<Z, AA>, op27: OperatorFunction<AA, AB>, op28: OperatorFunction<AB, AC>, op29: OperatorFunction<AC, AD>, op30: OperatorFunction<AD, AE>, op31: OperatorFunction<AE, AF>, op32: OperatorFunction<AF, AG>, op33: OperatorFunction<AG, AH>, op34: OperatorFunction<AH, AI>, op35: OperatorFunction<AI, AJ>, op36: OperatorFunction<AJ, AK>, op37: OperatorFunction<AK, AL>, op38: OperatorFunction<AL, AM>, op39: OperatorFunction<AM, AN>, op40: OperatorFunction<AN, AO>): Observable<AO, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>, op26: OperatorFunction<Z, AA>, op27: OperatorFunction<AA, AB>, op28: OperatorFunction<AB, AC>, op29: OperatorFunction<AC, AD>, op30: OperatorFunction<AD, AE>, op31: OperatorFunction<AE, AF>, op32: OperatorFunction<AF, AG>, op33: OperatorFunction<AG, AH>, op34: OperatorFunction<AH, AI>, op35: OperatorFunction<AI, AJ>, op36: OperatorFunction<AJ, AK>, op37: OperatorFunction<AK, AL>, op38: OperatorFunction<AL, AM>, op39: OperatorFunction<AM, AN>, op40: OperatorFunction<AN, AO>, op41: OperatorFunction<AO, AP>): Observable<AP, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>, op26: OperatorFunction<Z, AA>, op27: OperatorFunction<AA, AB>, op28: OperatorFunction<AB, AC>, op29: OperatorFunction<AC, AD>, op30: OperatorFunction<AD, AE>, op31: OperatorFunction<AE, AF>, op32: OperatorFunction<AF, AG>, op33: OperatorFunction<AG, AH>, op34: OperatorFunction<AH, AI>, op35: OperatorFunction<AI, AJ>, op36: OperatorFunction<AJ, AK>, op37: OperatorFunction<AK, AL>, op38: OperatorFunction<AL, AM>, op39: OperatorFunction<AM, AN>, op40: OperatorFunction<AN, AO>, op41: OperatorFunction<AO, AP>, op42: OperatorFunction<AP, AQ>): Observable<AQ, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>, op26: OperatorFunction<Z, AA>, op27: OperatorFunction<AA, AB>, op28: OperatorFunction<AB, AC>, op29: OperatorFunction<AC, AD>, op30: OperatorFunction<AD, AE>, op31: OperatorFunction<AE, AF>, op32: OperatorFunction<AF, AG>, op33: OperatorFunction<AG, AH>, op34: OperatorFunction<AH, AI>, op35: OperatorFunction<AI, AJ>, op36: OperatorFunction<AJ, AK>, op37: OperatorFunction<AK, AL>, op38: OperatorFunction<AL, AM>, op39: OperatorFunction<AM, AN>, op40: OperatorFunction<AN, AO>, op41: OperatorFunction<AO, AP>, op42: OperatorFunction<AP, AQ>, op43: OperatorFunction<AQ, AR>): Observable<AR, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>, op26: OperatorFunction<Z, AA>, op27: OperatorFunction<AA, AB>, op28: OperatorFunction<AB, AC>, op29: OperatorFunction<AC, AD>, op30: OperatorFunction<AD, AE>, op31: OperatorFunction<AE, AF>, op32: OperatorFunction<AF, AG>, op33: OperatorFunction<AG, AH>, op34: OperatorFunction<AH, AI>, op35: OperatorFunction<AI, AJ>, op36: OperatorFunction<AJ, AK>, op37: OperatorFunction<AK, AL>, op38: OperatorFunction<AL, AM>, op39: OperatorFunction<AM, AN>, op40: OperatorFunction<AN, AO>, op41: OperatorFunction<AO, AP>, op42: OperatorFunction<AP, AQ>, op43: OperatorFunction<AQ, AR>, op44: OperatorFunction<AR, AS>): Observable<AS, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>, op26: OperatorFunction<Z, AA>, op27: OperatorFunction<AA, AB>, op28: OperatorFunction<AB, AC>, op29: OperatorFunction<AC, AD>, op30: OperatorFunction<AD, AE>, op31: OperatorFunction<AE, AF>, op32: OperatorFunction<AF, AG>, op33: OperatorFunction<AG, AH>, op34: OperatorFunction<AH, AI>, op35: OperatorFunction<AI, AJ>, op36: OperatorFunction<AJ, AK>, op37: OperatorFunction<AK, AL>, op38: OperatorFunction<AL, AM>, op39: OperatorFunction<AM, AN>, op40: OperatorFunction<AN, AO>, op41: OperatorFunction<AO, AP>, op42: OperatorFunction<AP, AQ>, op43: OperatorFunction<AQ, AR>, op44: OperatorFunction<AR, AS>, op45: OperatorFunction<AS, AT>): Observable<AT, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>, op26: OperatorFunction<Z, AA>, op27: OperatorFunction<AA, AB>, op28: OperatorFunction<AB, AC>, op29: OperatorFunction<AC, AD>, op30: OperatorFunction<AD, AE>, op31: OperatorFunction<AE, AF>, op32: OperatorFunction<AF, AG>, op33: OperatorFunction<AG, AH>, op34: OperatorFunction<AH, AI>, op35: OperatorFunction<AI, AJ>, op36: OperatorFunction<AJ, AK>, op37: OperatorFunction<AK, AL>, op38: OperatorFunction<AL, AM>, op39: OperatorFunction<AM, AN>, op40: OperatorFunction<AN, AO>, op41: OperatorFunction<AO, AP>, op42: OperatorFunction<AP, AQ>, op43: OperatorFunction<AQ, AR>, op44: OperatorFunction<AR, AS>, op45: OperatorFunction<AS, AT>, op46: OperatorFunction<AT, AU>): Observable<AU, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>, op26: OperatorFunction<Z, AA>, op27: OperatorFunction<AA, AB>, op28: OperatorFunction<AB, AC>, op29: OperatorFunction<AC, AD>, op30: OperatorFunction<AD, AE>, op31: OperatorFunction<AE, AF>, op32: OperatorFunction<AF, AG>, op33: OperatorFunction<AG, AH>, op34: OperatorFunction<AH, AI>, op35: OperatorFunction<AI, AJ>, op36: OperatorFunction<AJ, AK>, op37: OperatorFunction<AK, AL>, op38: OperatorFunction<AL, AM>, op39: OperatorFunction<AM, AN>, op40: OperatorFunction<AN, AO>, op41: OperatorFunction<AO, AP>, op42: OperatorFunction<AP, AQ>, op43: OperatorFunction<AQ, AR>, op44: OperatorFunction<AR, AS>, op45: OperatorFunction<AS, AT>, op46: OperatorFunction<AT, AU>, op47: OperatorFunction<AU, AV>): Observable<AV, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV, AW>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>, op26: OperatorFunction<Z, AA>, op27: OperatorFunction<AA, AB>, op28: OperatorFunction<AB, AC>, op29: OperatorFunction<AC, AD>, op30: OperatorFunction<AD, AE>, op31: OperatorFunction<AE, AF>, op32: OperatorFunction<AF, AG>, op33: OperatorFunction<AG, AH>, op34: OperatorFunction<AH, AI>, op35: OperatorFunction<AI, AJ>, op36: OperatorFunction<AJ, AK>, op37: OperatorFunction<AK, AL>, op38: OperatorFunction<AL, AM>, op39: OperatorFunction<AM, AN>, op40: OperatorFunction<AN, AO>, op41: OperatorFunction<AO, AP>, op42: OperatorFunction<AP, AQ>, op43: OperatorFunction<AQ, AR>, op44: OperatorFunction<AR, AS>, op45: OperatorFunction<AS, AT>, op46: OperatorFunction<AT, AU>, op47: OperatorFunction<AU, AV>, op48: OperatorFunction<AV, AW>): Observable<AW, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV, AW, AX>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>, op26: OperatorFunction<Z, AA>, op27: OperatorFunction<AA, AB>, op28: OperatorFunction<AB, AC>, op29: OperatorFunction<AC, AD>, op30: OperatorFunction<AD, AE>, op31: OperatorFunction<AE, AF>, op32: OperatorFunction<AF, AG>, op33: OperatorFunction<AG, AH>, op34: OperatorFunction<AH, AI>, op35: OperatorFunction<AI, AJ>, op36: OperatorFunction<AJ, AK>, op37: OperatorFunction<AK, AL>, op38: OperatorFunction<AL, AM>, op39: OperatorFunction<AM, AN>, op40: OperatorFunction<AN, AO>, op41: OperatorFunction<AO, AP>, op42: OperatorFunction<AP, AQ>, op43: OperatorFunction<AQ, AR>, op44: OperatorFunction<AR, AS>, op45: OperatorFunction<AS, AT>, op46: OperatorFunction<AT, AU>, op47: OperatorFunction<AU, AV>, op48: OperatorFunction<AV, AW>, op49: OperatorFunction<AW, AX>): Observable<AX, any>;\n pipe<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV, AW, AX, AY>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, op10: OperatorFunction<I, J>, op11: OperatorFunction<J, K>, op12: OperatorFunction<K, L>, op13: OperatorFunction<L, M>, op14: OperatorFunction<M, N>, op15: OperatorFunction<N, O>, op16: OperatorFunction<O, P>, op17: OperatorFunction<P, Q>, op18: OperatorFunction<Q, R>, op19: OperatorFunction<R, S>, op20: OperatorFunction<S, U>, op21: OperatorFunction<U, V>, op22: OperatorFunction<V, W>, op23: OperatorFunction<W, X>, op24: OperatorFunction<X, Y>, op25: OperatorFunction<Y, Z>, op26: OperatorFunction<Z, AA>, op27: OperatorFunction<AA, AB>, op28: OperatorFunction<AB, AC>, op29: OperatorFunction<AC, AD>, op30: OperatorFunction<AD, AE>, op31: OperatorFunction<AE, AF>, op32: OperatorFunction<AF, AG>, op33: OperatorFunction<AG, AH>, op34: OperatorFunction<AH, AI>, op35: OperatorFunction<AI, AJ>, op36: OperatorFunction<AJ, AK>, op37: OperatorFunction<AK, AL>, op38: OperatorFunction<AL, AM>, op39: OperatorFunction<AM, AN>, op40: OperatorFunction<AN, AO>, op41: OperatorFunction<AO, AP>, op42: OperatorFunction<AP, AQ>, op43: OperatorFunction<AQ, AR>, op44: OperatorFunction<AR, AS>, op45: OperatorFunction<AS, AT>, op46: OperatorFunction<AT, AU>, op47: OperatorFunction<AU, AV>, op48: OperatorFunction<AV, AW>, op49: OperatorFunction<AW, AX>, op50: OperatorFunction<AX, AY>): Observable<AY, any>;\n pipe(...operators: OperatorFunction<any, any>[]): Observable<any, any> {\n if (operators.length === 0) {\n return this as any;\n }\n return operators.reduce((prev, operator) => operator(prev), this as any);\n }\n}", "import { Observer } from './Observer';\nimport { Observable, OperatorFunction } from './Observable';\nimport { Subscription } from './Subscription';\nimport { CompleteCallBack, ErrorCallBack, ObserverCallBack, Subscribable } from './Subscribable';\n\nexport class Subject<T, E = any> extends Observable<T, E> implements Observer<T, E> {\n private _observers = new Set<Partial<Observer<T, E>>>();\n private _isStopped = false;\n private _hasError = false;\n private _error: E | undefined;\n\n constructor() {\n // Call parent Observable constructor with our own subscribe logic\n super((subscriber) => {\n return this._subscribeToSubject(subscriber);\n });\n }\n\n protected _subscribeToSubject(subscriber: any): Subscription {\n const partialObserver: Partial<Observer<T, E>> = {\n next: subscriber.next.bind(subscriber),\n error: subscriber.error.bind(subscriber),\n complete: subscriber.complete.bind(subscriber)\n };\n\n if (this._isStopped) {\n if (this._hasError) {\n partialObserver.error?.(this._error!);\n } else {\n partialObserver.complete?.();\n }\n return { closed: true, unsubscribe: () => {} }; // Already stopped, return dummy subscription\n }\n\n this._observers.add(partialObserver);\n\n let closed = false;\n\n return {\n get closed() {\n return closed;\n },\n unsubscribe: () => {\n this._observers.delete(partialObserver);\n closed = true;\n }\n };\n }\n\n next(data: T): void {\n if (this._isStopped) {\n return; // Subject is stopped, no more emissions\n }\n this._observers.forEach(observer => {\n observer.next?.(data)\n });\n }\n\n error(err: E): void {\n if (this._isStopped) {\n return; // Subject is stopped, no more errors\n }\n this._hasError = true;\n this._error = err;\n this._isStopped = true; // Subject stops after error\n this._observers.forEach(observer => observer.error?.(err));\n this._observers.clear(); // Clear observers after error\n }\n\n complete(): void {\n if (this._isStopped) {\n return; // Subject is stopped, no more completions\n }\n this._isStopped = true; // Subject stops after completion\n this._observers.forEach(observer => observer.complete?.());\n this._observers.clear(); // Clear observers after completion\n }\n\n\n\n asObservable(): Observable<T, E> {\n // Returns a new Observable that wraps this Subject's subscribe method.\n // This hides the next/error/complete methods from the consumer.\n return new Observable<T, E>(subscriber => {\n return this._subscribeToSubject(subscriber);\n });\n }\n}", "import { Intent } from '../intent/Intent';\nimport { ConstructorType } from '@dooboostore/core/types';\nimport { RouterModule } from './RouterModule';\nimport { Route, RouterConfig, RouterMetadataKey } from '../decorators/route/Router';\nimport { SimAtomic } from '../simstance/SimAtomic';\nimport { SimstanceManager } from '../simstance/SimstanceManager';\nimport { RouteFilter } from './RouteFilter';\nimport { Sim } from '../decorators/SimDecorator';\nimport { Expression } from '@dooboostore/core/expression/Expression';\nimport { RouterAction } from '../route/RouterAction';\nimport { SimOption } from '../SimOption';\nimport { Subject } from '@dooboostore/core/message/Subject';\n\nexport type RoutingOption = { router?: ConstructorType<any> | any, find?: { router: 'last' | 'first' } };\nexport type RoutingDataSet = {\n intent: Intent, routerModule: RouterModule, routerManager: RouterManager\n}\n\n@Sim\nexport class RouterManager {\n public activeRouterModule?: RouterModule<SimAtomic, any>;\n private subject = new Subject<RoutingDataSet>()\n constructor(private simstanceManager: SimstanceManager, private simOption: SimOption) {\n }\n\n // @SimNoProxy\n get observable() {\n // this.subject.asObservable\n return this.subject.asObservable();\n }\n\n public routingMap(option?: RoutingOption & {prefix?: string}): { [key: string]: string | any } {\n const targetRouter = option?.router ?? this.simOption.rootRouter;\n if (!targetRouter) {\n throw new Error('no router');\n }\n const map = {} as { [key: string]: string | any };\n if (targetRouter) {\n const targetType = (typeof targetRouter === 'object') ? targetRouter.constructor : targetRouter;\n const targetValue = (typeof targetRouter === 'object') ? targetRouter : undefined;\n const routerAtomic = new SimAtomic({targetKeyType: targetType, originalType: targetType, value: targetValue}, this.simstanceManager);\n const routerData = routerAtomic.getConfig<RouterConfig>(RouterMetadataKey);\n if (routerData) {\n const currentPrefix = (option?.prefix??'') + routerData.path;\n // Add the current router's path if it has a default route\n if (routerData.route && routerData.route['']) {\n map[currentPrefix] = routerData.route[''];\n }\n if (routerData.route) {\n Object.entries(routerData.route).forEach(([key, value]) => {\n map[currentPrefix + key] = value;\n });\n }\n routerData.routers?.forEach(it => {\n Object.assign(map, this.routingMap({...option, router: it, prefix: currentPrefix}));\n })\n }\n }\n return map;\n }\n\n /** 일반적인 lifecycle 타지않는 그냥 find.. 의미가없을듯.\n * @deprecated\n */\n public async routings<R = SimAtomic, M = any>(intent: Intent, option?: RoutingOption): Promise<RouterModule<R, M>[]> {\n const targetRouter = option?.router ?? this.simOption.rootRouter;\n if (!targetRouter) {\n throw new Error('no router');\n }\n const targetType = (typeof targetRouter === 'object') ? targetRouter.constructor : targetRouter;\n const targetValue = (typeof targetRouter === 'object') ? targetRouter : undefined;\n\n const routerAtomic = new SimAtomic({targetKeyType: targetType, originalType: targetType, value: targetValue}, this.simstanceManager);\n const allMatches = this._collectAllMatchingModules(routerAtomic, intent, []);\n\n // Priority 1: Exact path match with a module\n const exactModuleMatches = allMatches.filter(rm => rm.path === intent.pathname && rm.module);\n if (exactModuleMatches.length > 0) {\n exactModuleMatches.forEach(it => this.subject.next(({intent, routerManager: this, routerModule: it})))\n return exactModuleMatches as RouterModule<R, M>[];\n }\n\n // Priority 2: Exact path match without a module (if no module matches found)\n const exactPathMatches = allMatches.filter(rm => rm.path === intent.pathname);\n if (exactPathMatches.length > 0) {\n exactPathMatches.forEach(it => this.subject.next(({intent, routerManager: this, routerModule: it})))\n return exactPathMatches as RouterModule<R, M>[];\n }\n\n return [] as RouterModule<R, M>[];\n }\n\n public async routing<R = SimAtomic, M = any>(intent: string, option?: RoutingOption): Promise<RouterModule<R, M>> ;\n public async routing<R = SimAtomic, M = any>(intent: Intent, option?: RoutingOption): Promise<RouterModule<R, M>> ;\n public async routing<R = SimAtomic, M = any>(intent: Intent | string, option?: RoutingOption): Promise<RouterModule<R, M>> {\n if (typeof intent === 'string') {\n intent = new Intent(intent);\n }\n const targetRouter = option?.router ?? this.simOption.rootRouter;\n\n if (!targetRouter) {\n throw new Error('no router');\n }\n // await new Promise((r)=> setTimeout(r, 0)); // <-- 이거 넣어야지 두번불러지는게 없어지는듯? 뭐지 event loop 변경된건가?\n const targetType = (typeof targetRouter === 'object') ? targetRouter.constructor : targetRouter;\n const targetValue = (typeof targetRouter === 'object') ? targetRouter : undefined;\n\n const routerAtomic = new SimAtomic({targetKeyType: targetType, originalType: targetType, value: targetValue}, this.simstanceManager);\n const rootRouter = routerAtomic.getValue()!;\n const executeModuleResult = this.getExecuteModule(routerAtomic, intent, [], option);\n if (executeModuleResult) {\n const [executeModule, routerChains] = executeModuleResult;\n executeModule.routerChains = routerChains;\n this.activeRouterModule = executeModule;\n const routingDataSet: RoutingDataSet = {intent, routerModule: executeModule, routerManager: this};\n\n // --- 라우팅 경로(Chain)에 있는 모든 라우터의 라이프사이클 훅 호출 ---\n // 최종 목적지에 도달하기까지 거쳐온 모든 중간 라우터들(예: RootRouter -> UserRouter)을 순회하며\n // 각 라우터의 canActivate와 onRouting을 호출합니다.\n // 이를 통해 각 단계에서 라우팅을 검사하거나 공통 작업을 수행할 수 있습니다.\n if (routerChains.length > 0) {\n for (let i = 0; i < routerChains.length; i++) {\n const current = routerChains[i];\n const next = routerChains[i + 1];\n const value = current.getValue()! as any;\n if (RouterAction.isCanActivate(value) && next) {\n await value.canActivate(routingDataSet, next.getValue());\n }\n if (RouterAction.isOnRouting(value) && next) {\n await value.onRouting(routingDataSet);\n }\n }\n }\n this.activeRouterModule = executeModule;\n\n const moduleInstance = executeModule.getModuleInstance();\n\n // --- Case 1: 부분 일치 (라우터는 찾았지만, 특정 모듈은 찾지 못한 경우) ---\n // URL이 라우터의 경로와는 일치하지만, 그 안의 특정 `route` 항목과는 일치하지 않을 때 발생합니다.\n // 이 경우, 일치한 마지막 라우터의 라이프사이클 훅을 호출합니다.\n if (!executeModule?.module) {\n const routerChain = executeModule.routerChains[executeModule.routerChains.length - 1];\n const value = routerChain?.getValue() as any;\n if (RouterAction.isCanActivate(value)) {\n await value.canActivate(routingDataSet, moduleInstance);\n }\n if (RouterAction.isOnRouting(value)) {\n await value.onRouting(routingDataSet);\n }\n } \n // --- Case 2: 완전 일치 (라우터와 특정 모듈을 모두 찾은 경우) ---\n // 표준 성공 케이스입니다.\n // 모듈을 포함하는 라우터와 모듈 인스턴스 자체의 라이프사이클 훅을 호출합니다.\n else { // find page\n const value = executeModule.router?.getValue()! as any;\n if (RouterAction.isCanActivate(value)) {\n await value.canActivate(routingDataSet, moduleInstance);\n }\n if (RouterAction.isOnRouting(value)) {\n await value.onRouting(routingDataSet);\n }\n // 가지고있는 선택된 Route도 isRouting이면\n if (moduleInstance && RouterAction.isOnRouting(moduleInstance)) {\n await moduleInstance.onRouting(routingDataSet);\n }\n }\n\n const find = this.activeRouterModule as RouterModule<any, any>;\n this.subject.next({intent: intent, routerModule: find, routerManager: this});\n return find;\n } else {\n const empty = await this._handleNotFoundRouting(rootRouter, intent);\n this.subject.next({intent: intent, routerModule: empty, routerManager: this});\n return empty;\n }\n }\n\n /**\n * URL과 일치하는 라우트를 찾지 못했을 경우를 처리합니다.\n * \"Not Found\" 상태를 나타내는 비어있는 RouterModule 객체를 생성하여 반환합니다.\n * 이 과정에서 rootRouter의 라이프사이클을 호출하여 공통 레이아웃등을 처리할 수 있습니다.\n * @param rootRouter 앱의 최상위 라우터 인스턴스\n * @param intent 확인에 실패한 원본 Intent 객체\n * @private\n */\n private async _handleNotFoundRouting(rootRouter: any, intent: Intent): Promise<RouterModule<any, any>> {\n /*\n * 이전 원본 로직 (참고용)\n * const routers: SimAtomic[] = []; 로 인해 if문이 항상 false가 되어 실제로는 동작하지 않았음.\n *\n * const routers: SimAtomic[] = [];\n * const routerModule = new RouterModule(this.simstanceManager, rootRouter, undefined, routers);\n * const routingDataSet = {intent, routerModule: routerModule, routerManager: this};\n * if (routers.length && routers.length > 0) {\n * for (let i = 0; i < routers.length; i++) {\n * const current = routers[i];\n * const next = routers[i + 1];\n * const value = current.getValue()! as any;\n * // console.log('routerAction!!!!!!!!!3')\n * if (RouterAction.isCanActivate(value)) {\n * await value.canActivate(routingDataSet, next?.getValue() ?? null);\n * }\n * if (RouterAction.isOnRouting(value)) {\n * await value.onRouting(routingDataSet);\n * }\n * }\n * }\n * this.activeRouterModule = routerModule;\n * return this.activeRouterModule as RouterModule<any, any>;\n */\n const routerModule = new RouterModule(this.simstanceManager, rootRouter, undefined, []);\n const routingDataSet: RoutingDataSet = {intent, routerModule: routerModule, routerManager: this};\n\n const value = rootRouter;\n if (RouterAction.isCanActivate(value)) {\n await value.canActivate(routingDataSet, null);\n }\n if (RouterAction.isOnRouting(value)) {\n await value.onRouting(routingDataSet);\n }\n\n this.activeRouterModule = routerModule;\n return this.activeRouterModule;\n }\n\n\n private getExecuteModule(router: SimAtomic, intent: Intent, parentRouters: SimAtomic[], option?: RoutingOption): [RouterModule, SimAtomic[]] | undefined {\n const path = intent.pathname;\n const routerConfig = router.getConfig<RouterConfig>(RouterMetadataKey);\n if (routerConfig) {\n // filter\n\n const filters: (RouteFilter | ConstructorType<any>)[] = [];\n if (Array.isArray(routerConfig.filters)) {\n filters.push(...routerConfig.filters);\n } else if (routerConfig.filters) {\n filters.push(routerConfig.filters);\n }\n const noAccept = filters.some(it => (typeof it === 'function' ? this.simstanceManager.getOrNewSim({target: it}) : it)?.isAccept(intent) === false);\n if (noAccept) {\n return;\n }\n\n const routerStrings = parentRouters.map(it => it.getConfig<RouterConfig>(RouterMetadataKey)?.path || '');\n const isRoot = this.isRootUrl(routerConfig.path, routerStrings, path)\n // console.log('----------routerConfig.path', routerConfig.path, 'isRoot', isRoot, 'routerStrings', routerStrings, 'path', path);\n if (isRoot) {\n const currentParentRouters = [...parentRouters, router];\n // first find child routers\n if (routerConfig.routers && routerConfig.routers.length > 0) {\n let bestMatchModule: [RouterModule<SimAtomic, any>, SimAtomic[]] | undefined = undefined;\n let bestMatchLength = -1;\n\n for (const child of routerConfig.routers) {\n const routerAtomic = new SimAtomic({targetKeyType: child, originalType: child}, this.simstanceManager);\n const executeModule = this.getExecuteModule(routerAtomic, intent, currentParentRouters, option)\n\n if (executeModule) {\n const [rm, chains] = executeModule;\n const currentMatchLength = rm.path?.length || 0;\n if (currentMatchLength > bestMatchLength) {\n bestMatchLength = currentMatchLength;\n bestMatchModule = executeModule;\n } else if (currentMatchLength === bestMatchLength) {\n if (option?.find?.router === 'last') {\n bestMatchModule = executeModule;\n }\n }\n }\n }\n if (bestMatchModule) {\n return bestMatchModule;\n }\n }\n // second find my child routers\n const module = this.findRouterOrModule(router, routerConfig, routerStrings, intent)\n if (module) {\n return [module, currentParentRouters];\n }\n }\n }\n }\n // path: 지금 내 라우터의 path, parentRoots: 부모router path들, url: 사용자가 원하는 full intent url\n private isRootUrl(path: string | undefined, parentRoots: string[], url: string): boolean {\n const searchString = parentRoots.join('') + (path || '');//현재까지 경로 내포함\n if (searchString === '/') {\n return true;\n }\n const searchs = searchString.split('/');\n const urls = url.split('/')\n const trimmedUrls = urls.slice(0, searchs.length).join('/');\n // console.log('!!searchString', searchString, 'url', trimmedUrls);\n return !!Expression.Path.pathNameData(trimmedUrls, searchString);\n // return url.startsWith(searchString)\n }\n\n private _collectAllMatchingModules(router: SimAtomic, intent: Intent, parentRouters: SimAtomic[]): RouterModule[] {\n const matches: RouterModule[] = [];\n const path = intent.pathname;\n const routerConfig = router.getConfig<RouterConfig>(RouterMetadataKey);\n\n if (routerConfig) {\n const filters: (RouteFilter | ConstructorType<any>)[] = [];\n if (Array.isArray(routerConfig.filters)) {\n filters.push(...routerConfig.filters);\n } else if (routerConfig.filters) {\n filters.push(routerConfig.filters);\n }\n const noAccept = filters.some(it => (typeof it === 'function' ? this.simstanceManager.getOrNewSim({target: it}) : it)?.isAccept(intent) === false);\n if (noAccept) {\n return matches;\n }\n\n const routerStrings = parentRouters.map(it => it.getConfig<RouterConfig>(RouterMetadataKey)?.path || '');\n const isRoot = this.isRootUrl(routerConfig.path, routerStrings, path)\n\n if (isRoot) {\n const currentParentRouters = [...parentRouters, router];\n\n // Collect matches from child routers\n if (routerConfig.routers && routerConfig.routers.length > 0) {\n for (const child of routerConfig.routers) {\n const routerAtomic = new SimAtomic({targetKeyType:child, originalType: child}, this.simstanceManager);\n matches.push(...this._collectAllMatchingModules(routerAtomic, intent, currentParentRouters));\n }\n }\n\n // Collect matches from current router's routes or the router itself\n const module = this.findRouterOrModule(router, routerConfig, routerStrings, intent);\n if (module) {\n module.routerChains = currentParentRouters;\n matches.push(module);\n }\n }\n }\n return matches;\n }\n\n private findRouterOrModule(router: SimAtomic, routerData: RouterConfig, parentRoots: string[], intent: Intent): RouterModule | undefined {\n // 1. Try to find an exact route module match\n const module = this.findRouting(router, routerData, parentRoots, intent);\n if (module?.module) {\n module.intent = intent;\n return module;\n }\n\n // 2. If no exact module, check if the intent path matches the router's path\n const urlRoot = parentRoots.join('') + (routerData.path || '');\n if (this.isRootUrl(routerData.path, parentRoots, intent.pathname)) {\n const rm = new RouterModule(this.simstanceManager, router);\n rm.intent = intent;\n rm.path = urlRoot;\n rm.pathData = intent.getPathnameData(urlRoot);\n return rm;\n }\n return undefined;\n }\n\n private findRouting(router: SimAtomic, routerData: RouterConfig, parentRoots: string[], intent: Intent): RouterModule | undefined {\n // console.log('findRouting', routerData.route);\n const urlRoot = parentRoots.join('') + routerData.path\n if (routerData.route) {\n for (const it of Object.keys(routerData.route).filter(it => !it.startsWith('_'))) {\n const path = urlRoot + it;\n const pathnameData = intent.getPathnameData(path);\n if (pathnameData) {\n try {\n const dataSet = this.findRouteProperty(routerData.route, it, intent);\n const rm = new RouterModule(this.simstanceManager, router, dataSet.child);\n rm.data = dataSet.data;\n rm.path = path;\n rm.pathData = pathnameData;\n rm.propertyKeys = dataSet.propertyKeys;\n return rm;\n } catch (e) {\n }\n }\n }\n }\n }\n\n private findRouteProperty(route: Route, propertyName: string, intent: Intent): { child?: {targetKeyType? : ConstructorType<any> | Function, originalType: ConstructorType<any> | Function}, data?: any, propertyKeys?: (string | symbol)[] } {\n let child: {targetKeyType? : ConstructorType<any> | Function, originalType: ConstructorType<any> | Function} | undefined;\n let data: any;\n let propertyKeys: undefined | (string | symbol)[];\n const routeElement = route[propertyName];\n if (typeof routeElement === 'function') {\n child = {targetKeyType: routeElement, originalType: routeElement};\n } else if (typeof routeElement === 'symbol') {\n child = this.simstanceManager.findLastSim(routeElement)?.type;\n } else if (typeof routeElement === 'string') {\n return this.findRouteProperty(route, routeElement, intent)\n } else if (Array.isArray(routeElement)) {\n const r = routeElement?.[0];\n if (typeof r === 'object' && 'filters' in r && 'target' in r) {\n const filters: (RouteFilter | ConstructorType<any>)[] = [];\n if (Array.isArray(r.filters)) {\n filters.push(...r.filters);\n } else if (r.filters) {\n filters.push(r.filters);\n }\n const noAccept = filters.some(it => (typeof it === 'function' ? this.simstanceManager.getOrNewSim({target: it}) : it)?.isAccept(intent) === false);\n if (!noAccept) {\n child = {targetKeyType: r.target, originalType: r.target};\n }\n } else {\n child = {targetKeyType: r, originalType:r};\n }\n data = routeElement?.[1];\n } else if (typeof routeElement === 'object' && 'target' in routeElement && 'propertyKeys' in routeElement) { // RouteTargetMethod\n const noAccept = routeElement.filters?.filter(it => it).some(it => (typeof it === 'function' ? this.simstanceManager.getOrNewSim({target: it}) : it)?.isAccept(intent) === false);\n if (!noAccept) {\n child = {targetKeyType: routeElement.target, originalType: routeElement.target};\n propertyKeys = routeElement.propertyKeys as (string | symbol)[];\n }\n } else if (typeof routeElement === 'object' && 'filters' in routeElement && 'target' in routeElement) {\n const filters: (RouteFilter | ConstructorType<any>)[] = [];\n if (Array.isArray(routeElement.filters)) {\n filters.push(...routeElement.filters);\n } else if (routeElement.filters) {\n filters.push(routeElement.filters);\n }\n const noAccept = filters.some(it => (typeof it === 'function' ? this.simstanceManager.getOrNewSim({target: it}) : it)?.isAccept(intent) === false);\n if (!noAccept) {\n child = {targetKeyType: routeElement.target, originalType:routeElement.target};\n }\n }\n return {\n child,\n data,\n propertyKeys\n }\n }\n}\n", "import { SimstanceManager } from './simstance/SimstanceManager';\nimport { SimOption } from './SimOption';\nimport { IntentManager, isRouterPublishType, RouterPublishType } from './intent/IntentManager';\nimport { RouterManager, RoutingOption } from './route/RouterManager';\nimport { Intent } from './intent/Intent';\nimport { ConstructorType, GenericClassDecorator } from '@dooboostore/core/types';\nimport { RouterModule } from './route/RouterModule';\nimport { SimAtomic } from './simstance/SimAtomic';\nimport { SimNoSuch } from './throwable/SimNoSuch';\nimport { containers, Sim, SimConfig } from './decorators/SimDecorator';\n\nexport class SimpleApplication {\n public simstanceManager: SimstanceManager;\n public intentManager: IntentManager;\n public routerManager: RouterManager;\n // public rootRouter?: ConstructorType<any>;\n\n // constructor();\n // constructor(option: SimOption);\n // constructor(rootRouter?: ConstructorType<Object> | Function);\n // constructor(rootRouter?: ConstructorType<Object> | Function, option?: SimOption);\n // constructor(rootRouter?: (ConstructorType<Object> | Function) | SimOption, option = new SimOption()) {\n constructor(public option: SimOption = new SimOption()) {\n // if (option.rootRouter instanceof SimOption) {\n // option = rootRouter;\n // } else if (typeof option.rootRouter === 'function') {\n // this.rootRouter = rootRouter;\n // }\n\n this.simstanceManager = new SimstanceManager(this, option);\n // this.simstanceManager.setStoreSet(SimpleApplication, this);\n this.simstanceManager.setStoreSet(SimstanceManager, this.simstanceManager);\n // cacheManager\uB294 \uC0AC\uC6A9\uC790\uAC00 \uBD88\uB7EC\uB2E4 \uC0AC\uC6A9\uD560\uB54C \uB728\uB3C4\uB85D. \uBBF8\uB9AC \uCD94\uAC00\uC548\uD574\uC900\uB2E4.\n this.routerManager = this.simstanceManager.proxy(new RouterManager(this.simstanceManager, option));\n this.intentManager = this.simstanceManager.proxy(new IntentManager(this.simstanceManager, this.routerManager,option));\n this.simstanceManager.setStoreSet(IntentManager, this.intentManager);\n this.simstanceManager.setStoreSet(RouterManager, this.routerManager);\n containers.add(this);\n }\n\n public getSimstanceManager() {\n return this.simstanceManager;\n }\n\n public getIntentManager() {\n return this.intentManager;\n }\n\n public getRouterManager() {\n return this.routerManager;\n }\n\n public run(otherInstanceSim?: Map<ConstructorType<any> | Function | SimConfig, any>) {\n this.simstanceManager.run(otherInstanceSim);\n return this;\n // return this.simstanceManager;\n }\n\n public simAtomic<T>(type: ConstructorType<T> | Function | Symbol) {\n if (typeof type === 'symbol') {\n return this.simstanceManager.findFirstSim(type);\n } else if (typeof type === 'function') {\n return this.simstanceManager.findFirstSim({type:type});\n // return new SimAtomic<T>(type, this.simstanceManager);\n }\n }\n public simAtomics<T>(type: ConstructorType<T> | Function | Symbol) {\n if (typeof type === 'symbol') {\n return this.simstanceManager.findSims(type) ?? [];\n } else if (typeof type === 'function') {\n return this.simstanceManager.findSims({type}) ?? [];\n } else {\n return [];\n }\n }\n\n public getInstance<T>(type: ConstructorType<T>) {\n const i = this.sim<T>(type);\n if (i) {\n return i;\n } else {\n throw new SimNoSuch('SimNoSuch: no simple instance(getInstance) ' + 'name:' + type?.prototype?.constructor?.name + ',' + type)\n }\n }\n\n public sim<T>(type: ConstructorType<T> | Function | Symbol): T | undefined {\n return this.simAtomic<T>(type)?.getValue();\n }\n public sims<T>(type: ConstructorType<T> | Function | Symbol) {\n return this.simAtomics(type).map(it => it.getValue())\n }\n\n public addSim(target: ConstructorType<any> | Function): void;\n public addSim(config: SimConfig, target: ConstructorType<any> | Function | any): GenericClassDecorator<ConstructorType<any> | Function>;\n public addSim(configOrTarget: SimConfig | ConstructorType<any> | Function, target?: ConstructorType<any> | Function | any): void | GenericClassDecorator<ConstructorType<any> | Function> {\n const r: any = Sim(configOrTarget as any);\n if (typeof r === 'function' && target) {\n r(target);\n }\n }\n\n\n public publishIntent(i: string, data?: any): Promise<any[]>;\n public publishIntent(i: RouterPublishType): Promise<any[]>;\n public publishIntent(i: Intent): Promise<any[]>;\n public publishIntent(i: Intent | string | RouterPublishType, data?: any): Promise<any[]> {\n if (i instanceof Intent) {\n return this.intentManager.publish(i);\n } else if (isRouterPublishType(i)) {\n return this.intentManager.publish(i, data);\n } else {\n return this.intentManager.publish(i, data);\n }\n }\n\n public routing<R = SimAtomic, M = any>(i: string, option?: RoutingOption): Promise<RouterModule<R, M>>;\n public routing<R = SimAtomic, M = any>(i: { path: string, data?: any }, option?: RoutingOption): Promise<RouterModule<R, M>>;\n public routing<R = SimAtomic, M = any>(i: Intent, option?: RoutingOption): Promise<RouterModule<R, M>>;\n public routing<R = SimAtomic, M = any>(i: { path: string, data?: any } | string | Intent, option?: RoutingOption): Promise<RouterModule<R, M>> {\n if (i instanceof Intent) {\n return this.routerManager.routing<R, M>(i, option);\n } else if (typeof i === 'string') {\n const intent = new Intent(i);\n return this.routerManager.routing<R, M>(intent, option);\n } else {\n const intent = new Intent(i.path, i.data);\n return this.routerManager.routing<R, M>(intent, option);\n }\n }\n}\n", "export const SimNoProxyKey = Symbol('Sim:NoProxy');\nexport const SimNoProxy = (target: any, propertyKey?: string | symbol) => {\n // \uD074\uB798\uC2A4 \uB370\uCF54\uB808\uC774\uD130\uB85C \uC0AC\uC6A9\uB41C \uACBD\uC6B0\n if (propertyKey === undefined) {\n // target\uC740 \uD074\uB798\uC2A4 \uC0DD\uC131\uC790\n Reflect.defineMetadata(SimNoProxyKey, true, target);\n return;\n }\n\n // \uD504\uB85C\uD37C\uD2F0 \uB370\uCF54\uB808\uC774\uD130\uB85C \uC0AC\uC6A9\uB41C \uACBD\uC6B0\n // target\uC740 \uD504\uB85C\uD1A0\uD0C0\uC785, propertyKey\uB294 \uD504\uB85C\uD37C\uD2F0 \uC774\uB984\n Reflect.defineMetadata(SimNoProxyKey, true, target, propertyKey);\n};\n\nexport const getSimNoProxy = (target: any, propertyKey?: string | symbol) => {\n try {\n // if (ValidUtils.isNotNullUndefined(target)) {\n // \uD074\uB798\uC2A4 \uB370\uCF54\uB808\uC774\uD130\n if (propertyKey === undefined) {\n return Reflect.getMetadata(SimNoProxyKey, target);\n }\n // \uD504\uB85C\uD37C\uD2F0 \uB370\uCF54\uB808\uC774\uD130\n return Reflect.getMetadata(SimNoProxyKey, target, propertyKey);\n } catch (e) {\n return undefined;\n }\n // } else {\n // return undefined;\n // }\n};\n\nexport const isSimNoProxy = (target: any, propertyKey?: string | symbol) => {\n if (target === null || target === undefined) {\n return false;\n }\n return getSimNoProxy(target, propertyKey) === true;\n};\n", "import { ValidUtils } from '../valid/ValidUtils';\n\nexport namespace RandomUtils {\n // export const readonly d = ''\n\n // export const getUniqueNumbers = (max: number, length: number) => {\n // max = Math.max(max, 0);\n // length = Math.max(Math.min(max, length), 0);\n // const array: number[] = [];\n // while (array.length < length) {\n // const num = Math.floor(Math.random() * max);\n // if (!array.includes(num)) array.push(num);\n // }\n // return array;\n // };\n\n export const uniqueInts = (min: number, max: number, count: number) => {\n const result: number[] = [];\n if (count > max - min) {\n throw new Error('Count is greater than the range of unique integers');\n }\n while (result.length < count) {\n const randomInt = RandomUtils.int(min, max);\n if (!result.includes(randomInt)) {\n result.push(randomInt);\n }\n }\n return result;\n }\n\n\n export const chance = (percentage: number): boolean => {\n if (percentage < 0 || percentage > 1) {\n throw new Error('Percentage must be between 0 and 1');\n }\n return Math.random() < percentage;\n };\n // max\uB294 \uD3EC\uD568\uD558\uC9C0 \uC54A\uC74C\n export const int = (min?: number, max?: number) => {\n return Math.floor(RandomUtils.float(min, max));\n }\n\n // ex) 0,5 0~<5 <5\uB294 \uD3EC\uD568\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uC18C\uC218\uC810\uD3EC\uD568\n export const float = (min?: number, max?: number) => {\n if (ValidUtils.isNullOrUndefined(min)) {\n return Math.random();\n } else if (!ValidUtils.isNullOrUndefined(min) && ValidUtils.isNullOrUndefined(max)) {\n return Math.random() * (min || 0);\n } else {\n return Math.random() * ((max || 0) - (min || 0)) + (min || 0);\n }\n };\n\n export const uuid = (format: string = 'xxxx-xxxx-xxxx-xxxx'): string => {\n return format.replace(/[xy]/g, function(c) {\n const r = Math.random() * 16 | 0;\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n\n\n export const uuid4 = (): string => {\n // // return uuid of form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\n let uuid = '';\n let ii;\n for (ii = 0; ii < 32; ii += 1) {\n switch (ii) {\n case 8:\n case 20:\n uuid += '-';\n uuid += ((Math.random() * 16) | 0).toString(16);\n break;\n case 12:\n uuid += '-';\n uuid += '4';\n break;\n case 16:\n uuid += '-';\n uuid += ((Math.random() * 4) | 8).toString(16);\n break;\n default:\n uuid += ((Math.random() * 16) | 0).toString(16);\n }\n }\n return uuid;\n };\n\n export const hex = (): string => {\n const letters = '0123456789ABCDEF'.split('');\n let hex = '';\n for (let i = 0; i < 6; i++) {\n hex += letters[Math.floor(Math.random() * 16)];\n }\n return hex;\n };\n\n\n export const rgb = (): string => {\n const letters = '0123456789ABCDEF'.split('');\n let color = '#';\n for (let i = 0; i < 6; i++) {\n color += letters[Math.floor(Math.random() * 16)];\n }\n return color;\n };\n\n export const rgba = (): string => {\n const letters = '0123456789ABCDEF'.split('');\n let color = '#';\n for (let i = 0; i < 8; i++) {\n color += letters[Math.floor(Math.random() * 16)];\n }\n return color;\n };\n // (Math.random().toString(36)+'00000000000000000').slice(2, 10) + Date.now()\n\n export const alphabet = (len: number): string => {\n const letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');\n let color = '';\n for (let i = 0; i < len; i++) {\n color += letters[Math.floor(Math.random() * letters.length)];\n }\n return color;\n };\n}\n", "import { ConstructorType, isDefined } from '@dooboostore/core/types';\nimport { SimNoSuch } from '../throwable/SimNoSuch';\nimport { getPostConstructs, getSim, Lifecycle, SimConfig, simProcess, sims } from '../decorators/SimDecorator';\nimport { ObjectUtils } from '@dooboostore/core/object/ObjectUtils';\nimport { SimAtomic } from './SimAtomic';\nimport { ReflectUtils } from '@dooboostore/core/reflect/ReflectUtils';\nimport {\n getInject,\n SaveInjectConfig,\n SituationTypeContainer,\n SituationTypeContainers\n} from '../decorators/inject/Inject';\nimport { SimOption } from '../SimOption';\nimport { SimProxyHandler } from '../proxy/SimProxyHandler';\nimport { ConvertUtils } from '@dooboostore/core/convert/ConvertUtils';\nimport { Runnable } from '@dooboostore/core/runs/Runnable';\nimport { isOnSimCreate } from '../lifecycle/OnSimCreate';\nimport { isOnSimCreateProxyCompleted } from '../lifecycle/OnSimCreateCompleted';\nimport { SimpleApplication } from '../SimpleApplication';\nimport { isSimNoProxy } from '../decorators/SimNoProxy';\nimport { RandomUtils } from '@dooboostore/core/random/RandomUtils';\n\nexport type FirstCheckMaker = (\n obj: { target: Object; targetKey?: string | symbol },\n token: ConstructorType<any>,\n idx: number,\n saveInjectConfig?: SaveInjectConfig\n) => any | undefined;\nexport type Carrier = { newInstances: any[]; depth: number };\nexport class SimstanceManager implements Runnable<void, Map<ConstructorType<any> | Function, any>> {\n private _storage = new Map<ConstructorType<any> | Function, Map<ConstructorType<any> | Function, undefined | any>>();\n private simProxyHandler: SimProxyHandler;\n private name='simstanceManager-'+RandomUtils.uuid4()\n // private otherInstanceSim?: Map<ConstructorType<any> | Function, any>;\n\n constructor(\n private simpleApplication: SimpleApplication,\n private option: SimOption\n ) {\n this.setStoreSet(SimpleApplication, this.simpleApplication);\n this.setStoreSet(SimstanceManager, this);\n this.setStoreSet((option as any).constructor, option);\n this.setStoreSet(SimOption, option);\n this.simProxyHandler = new SimProxyHandler(this.simpleApplication, this, option);\n }\n\n get storage() {\n return this._storage;\n }\n\n getSimAtomics(): SimAtomic[] {\n const r: SimAtomic[] = [];\n Array.from(this.storage.entries()).forEach(([targetKeyType, targetMap]) => {\n // Array.from(targetMap).forEach(it => {\n r.push(\n ...Array.from(Array.from(targetMap.keys())).map(\n sit => new SimAtomic({ targetKeyType, originalType: sit }, this)\n )\n );\n // });\n });\n return r;\n }\n\n getSimConfig(schemeOrSymbol: string | Symbol | undefined): SimAtomic<any>[] {\n const newVar =\n this.getSimAtomics().filter(it => {\n const config = it?.getConfig();\n const symbols = ConvertUtils.flatArray(config?.symbol);\n const schemes = ConvertUtils.flatArray(config?.scheme);\n if (typeof schemeOrSymbol === 'symbol') {\n return schemeOrSymbol && it && symbols.includes(schemeOrSymbol);\n } else if (typeof schemeOrSymbol === 'string') {\n return schemeOrSymbol && it && schemes.includes(schemeOrSymbol);\n } else {\n return false;\n }\n }) || [];\n return newVar;\n }\n\n findSims<T = any>(symbol: Symbol): SimAtomic<T>[];\n findSims<T = any>(data: { scheme?: string; type?: ConstructorType<any> | Function }): SimAtomic<T>[];\n findSims<T = any>(data: { scheme?: string; type?: ConstructorType<any> | Function } | Symbol): SimAtomic<T>[] {\n let r: SimAtomic<T>[] = [];\n if (data) {\n const simAtomics = this.getSimAtomics();\n r = simAtomics.filter(it => {\n let b = false;\n const config = it.getConfig();\n // console.log('-=--', config)\n const symbols = ConvertUtils.flatArray(config?.symbol).filter(isDefined);\n const schemes = ConvertUtils.flatArray(config?.scheme).filter(isDefined);\n if (typeof data === 'symbol') {\n b = symbols.includes(data);\n } else {\n const { scheme, type } = data as { scheme?: string; type?: ConstructorType<any> | Function };\n b = (scheme ? schemes.includes(scheme) : true) && (type ? it.type.targetKeyType === type : true);\n // if (type) {\n // const configTypes = ConvertUtils.flatArray(config?.type).filter(isDefined);\n // const match = configTypes.includes(type)\n // if (match) {\n // b = true;\n // }\n // }\n }\n return b;\n }) as unknown as SimAtomic<T>[];\n }\n return r;\n }\n\n findFirstSim<T = any>(symbol: Symbol): SimAtomic<T> | undefined;\n findFirstSim<T = any>(data: { scheme?: string; type?: ConstructorType<any> | Function }): SimAtomic<T> | undefined;\n findFirstSim<T = any>(\n data: { scheme?: string; type?: ConstructorType<any> | Function } | Symbol\n ): SimAtomic<T> | undefined {\n if (typeof data === 'symbol') {\n return this.findSims(data)[0];\n } else {\n return this.findSims(data as { scheme?: string; type?: ConstructorType<any> })[0];\n }\n }\n\n findLastSim<T = any>(symbol: Symbol): SimAtomic<T> | undefined;\n findLastSim<T = any>(data: { scheme?: string; type?: ConstructorType<any> }): SimAtomic<T> | undefined;\n findLastSim<T = any>(data: { scheme?: string; type?: ConstructorType<any> } | Symbol): SimAtomic<T> | undefined {\n if (typeof data === 'symbol') {\n return this.findSims(data).reverse()[0];\n } else {\n return this.findSims(data as { scheme?: string; type?: ConstructorType<any> }).reverse()[0];\n }\n }\n\n flatStoreSets() {\n return new Map(\n Array.from(this.storage.values())\n .map(it => Array.from(it.entries()))\n .flat()\n );\n }\n\n getStoreSets<T>(targetKey: ConstructorType<T> | Function): { type: ConstructorType<T> | Function; instance?: T }[] {\n const map = this.storage.get(targetKey);\n const datas = (Array.from(map?.entries?.() ?? []) ?? []).reverse();\n return datas.map(it => ({ type: it[0], instance: it[1] }));\n }\n\n getStoreSet<T>(\n targetKey: ConstructorType<T> | Function,\n target?: ConstructorType<any> | Function\n ): { type: ConstructorType<T> | Function; instance?: T } | undefined {\n const find = this.getStoreSets(targetKey).find(it => it.type === target);\n // console.log('getStoreSet', targetKey, target, find)\n if (!find?.instance) {\n const type = target ?? targetKey;\n const flatStoreSets = this.flatStoreSets();\n const data = flatStoreSets.get(type);\n // console.log('--->target?', target, targetKey, type, data);\n if (data) {\n this.setStoreSet(targetKey, data, type);\n }\n return { type: type, instance: data };\n } else {\n return find;\n }\n // return find ?? this.getStoreSets(targetKey)[0];\n }\n\n getStoreInstance<T>(targetKey: ConstructorType<T>, target?: ConstructorType<any>) {\n return this.getStoreSet(targetKey, target)?.instance;\n }\n\n getOrNewSim<T>({\n target,\n originTypeTarget = target,\n newInstanceCarrier\n }: {\n target?: ConstructorType<T> | Function;\n newInstanceCarrier?: Carrier;\n originTypeTarget?: ConstructorType<T> | Function;\n }): T | undefined {\n if (target) {\n const registed = this.getStoreSet(target, originTypeTarget);\n if (registed?.type && !registed?.instance) {\n return this.resolve({ targetKey: target, target: originTypeTarget, newInstanceCarrier: newInstanceCarrier });\n }\n return registed?.instance;\n }\n }\n\n setStoreSet(\n targetKey: ConstructorType<any> | Function,\n obj: any,\n target: ConstructorType<any> | Function = targetKey\n ): void {\n const itemMap = this.storage.get(targetKey) ?? new Map<ConstructorType<any> | Function, any>();\n itemMap.set(target, obj);\n this.storage.set(targetKey, itemMap);\n }\n\n registerStore(targetKey: ConstructorType<any> | Function, regTyps: Set<ConstructorType<any> | Function | any>): void {\n const itemMap = this.storage.get(targetKey) ?? new Map<ConstructorType<any> | Function, any>();\n regTyps.forEach(it => {\n const { type, value } = (\n typeof it === 'object' ? { type: it.constructor, value: it } : { type: it, value: undefined }\n ) as { type: ConstructorType<any> | Function; value: any };\n if (!itemMap.has(type)) {\n itemMap.set(type, value);\n }\n });\n this.storage.set(targetKey, itemMap);\n }\n\n // \uC9C4\uC785\uC810\n resolve<T>({\n target,\n targetKey,\n newInstanceCarrier = { newInstances: [], depth: 0 }\n }: {\n targetKey: ConstructorType<any> | Function;\n target?: ConstructorType<any> | Function;\n newInstanceCarrier?: Carrier;\n }): T {\n // console.group('resolve')\n const registed = this.getStoreSet(targetKey, target);\n if (registed?.instance) {\n return registed.instance;\n }\n\n // console.log('resolve--', targetKey, target, registed?.instance);\n if (this.storage.has(targetKey) && undefined === registed?.instance) {\n newInstanceCarrier.depth++;\n const newSim = this.newSim({\n target: registed?.type ?? targetKey,\n newInstanceCarrier: newInstanceCarrier,\n simCreateAfter: data => {\n // console.log('resolve--newSim', targetKey, target, data);\n if (getSim(registed?.type ?? target ?? targetKey)?.scope === Lifecycle.Singleton) {\n this.setStoreSet(targetKey, data, target);\n // console.log('-----------set', targetKey, data, target, this.storage.get(targetKey))\n }\n }\n });\n newInstanceCarrier.depth--;\n // \uD55C\uADF8\uB8F9\uC774 \uB05D\uB0AC\uC744\uB54C\n if (newInstanceCarrier.depth === 0) {\n newInstanceCarrier.newInstances.forEach(it => {\n this.callBindPostConstruct(it);\n });\n }\n // console.log('%c *************************','color: blue', registed?.type ?? targetKey ,newInstanceCarrier, newInstanceCarrier?.newInstances.length)\n // console.dir(newInstanceCarrier, {depth:10});\n // console.table(newInstanceCarrier);\n if (isOnSimCreate(newSim)) {\n newSim.onSimCreate();\n }\n // console.groupEnd();\n return newSim;\n }\n console.log('simstanceManager', this._storage, this.name)\n const simNoSuch = new SimNoSuch(\n 'SimNoSuch: no simple instance(resolve) ' + 'name:' + targetKey?.prototype?.constructor?.name + ',' + targetKey\n );\n console.error(simNoSuch);\n // console.groupEnd();\n throw simNoSuch;\n }\n\n public newSim<T = any>({\n target,\n simCreateAfter,\n otherStorage,\n newInstanceCarrier\n }: {\n target: ConstructorType<T> | Function;\n simCreateAfter?: (data: T) => void;\n newInstanceCarrier?: Carrier;\n otherStorage?: Map<ConstructorType<any>, any>;\n }): T {\n // @ts-ignore TODO: \uC5EC\uAE30\uC11C \uC0DD\uC131\n const r = new target(\n ...this.getParameterSim({ target: target, otherStorage: otherStorage, newInstanceCarrier: newInstanceCarrier })\n );\n let p = this.proxy(r);\n const config = getSim(target);\n if (config?.proxy) {\n const proxys = (Array.isArray(config.proxy) ? config.proxy : [config.proxy]).filter(isDefined);\n proxys.forEach(it => {\n // console.log('proxy-----------------', p)\n if (typeof it === 'object') {\n p = new Proxy(p, it);\n } else {\n const simConfig = getSim(it);\n p = new Proxy(p, simConfig ? this.getOrNewSim({ target: it }) : this.newSim({ target: it }));\n }\n // console.log('proxy-pp----------------', p)\n });\n }\n newInstanceCarrier?.newInstances.push(p);\n // \uC21C\uD658\uCC38\uC870 \uB9C9\uAE30\uC704\uD55C \uCF5C\uBC31 \uCC98\uB9AC\n simCreateAfter?.(p);\n if (isOnSimCreateProxyCompleted(p)) {\n p.onSimCreateProxyCompleted(p);\n }\n // this.callBindPostConstruct(p);\n return p;\n }\n\n public callBindPostConstruct(obj: any) {\n // const set = new Set(ObjectUtils.getAllProtoTypeName(obj));\n // console.log('callBindPostConstruct', obj, set, ObjectUtils.getAllProtoTypeName(obj));\n // set.forEach(it => {\n // const postConstruct = getPostConstruct(obj, it);\n // if (postConstruct) {\n // (obj as any)[it](...this.getParameterSim({target: obj, targetKey: it}))\n // }\n // })\n const postConstruct = getPostConstructs(obj);\n postConstruct.forEach(it => {\n (obj as any)[it.property](...this.getParameterSim({ target: obj, targetKey: it.property }));\n });\n }\n\n public async executeBindParameterSimPromise(\n {\n target,\n targetKey,\n firstCheckMaker\n }: { target: Object; targetKey?: string | symbol; firstCheckMaker?: FirstCheckMaker[] },\n otherStorage?: Map<ConstructorType<any>, any>\n ) {\n let value = this.executeBindParameterSim({ target, targetKey, firstCheckMaker }, otherStorage);\n if (value instanceof Promise) {\n value = await value;\n }\n return value;\n }\n\n public executeBindParameterSim(\n {\n target,\n targetKey,\n firstCheckMaker\n }: { target: Object; targetKey?: string | symbol; firstCheckMaker?: FirstCheckMaker[] },\n otherStorage?: Map<ConstructorType<any>, any>\n ) {\n const binds = this.getParameterSim({ target, targetKey, firstCheckMaker, otherStorage });\n if (typeof target === 'object' && targetKey) {\n const targetMethod = (target as any)[targetKey];\n return targetMethod?.bind(target)?.(...binds);\n } else if (typeof target === 'function' && !targetKey) {\n return new (target as ConstructorType<any>)(...binds);\n }\n }\n\n public getParameterSim({\n target,\n targetKey,\n firstCheckMaker,\n otherStorage,\n newInstanceCarrier\n }: {\n target: Object;\n targetKey?: string | symbol;\n firstCheckMaker?: FirstCheckMaker[];\n newInstanceCarrier?: Carrier;\n otherStorage?: Map<ConstructorType<any>, any>;\n }): any[] {\n const paramTypes = ReflectUtils.getParameterTypes(target, targetKey);\n // const paramNames = FunctionUtils.getParameterNames(target, targetKey);\n // const a = ReflectUtils.getType(target, 'user');\n let injections: any[] = [];\n const injects = getInject(target, targetKey);\n // const da = JSON.stringify(this.storage);\n // this.storage map to json String\n\n injections = paramTypes.map((token: ConstructorType<any>, idx: number) => {\n const saveInject = injects?.find(it => it.index === idx);\n if (saveInject?.config.disabled) {\n return undefined;\n }\n for (const f of firstCheckMaker ?? []) {\n const firstCheckObj = f({ target, targetKey }, token, idx, saveInject);\n if (undefined !== firstCheckObj) {\n return firstCheckObj;\n }\n }\n if (saveInject) {\n const inject = saveInject.config;\n let obj = otherStorage?.get(token);\n // console.log('vvvvv----->', obj, token, inject);\n if (token === Array && (inject.type || inject.scheme || inject.symbol)) {\n const p: any[] = [];\n if (inject.type) {\n p.push(\n ...this.getStoreSets(inject.type)\n .map(it =>\n this.resolve({ targetKey: inject.type!, target: it.type, newInstanceCarrier: newInstanceCarrier })\n )\n .reverse()\n );\n }\n if (inject.symbol) {\n p.push(\n ...this.getSimConfig(inject.symbol).map(it => it.getValue({ newInstanceCarrier: newInstanceCarrier }))\n );\n }\n if (inject.scheme) {\n p.push(\n ...this.getSimConfig(inject.scheme).map(it => it.getValue({ newInstanceCarrier: newInstanceCarrier }))\n );\n }\n return p;\n }\n\n // situational\n if (inject.situationType && otherStorage) {\n // TODO: \uC65C other\uC5D0\uC11C \uAC00\uC838\uC624\uB294\uAC78\uAE4C?\n const situations = otherStorage.get(SituationTypeContainers) as SituationTypeContainers;\n const situation = otherStorage.get(SituationTypeContainer) as SituationTypeContainer;\n if (inject.situationType === situation?.situationType) {\n obj = situation.data;\n } else if (situations && situations.length > 0) {\n const find = situations.find(a => {\n if (a.index !== undefined) {\n return a.situationType === inject.situationType && a.index === idx;\n } else {\n return a.situationType === inject.situationType;\n }\n });\n if (find) {\n obj = find.data;\n }\n }\n }\n\n if (!obj) {\n const findLastSim = inject.symbol\n ? this.findLastSim(inject.symbol)\n : this.findLastSim({ scheme: inject.scheme, type: inject.type });\n try {\n obj = findLastSim\n ? this.resolve<any>({\n targetKey: findLastSim?.type.targetKeyType ?? token,\n newInstanceCarrier: newInstanceCarrier\n })\n : this.resolve<any>({ targetKey: token, newInstanceCarrier: newInstanceCarrier });\n } catch (e) {\n // Inject optional \uCC98\uB9AC\n if (inject.optional) {\n return undefined;\n } else {\n throw e;\n }\n }\n }\n\n if (inject.applyProxy && obj) {\n if (inject.applyProxy.param) {\n obj = new Proxy(obj, new inject.applyProxy.type(...inject.applyProxy.param));\n } else {\n obj = new Proxy(obj, new inject.applyProxy.type());\n }\n }\n return obj;\n } else if (token) {\n // TODO: \uC65C other\uC5D0\uC11C \uAC00\uC838\uC624\uB294\uAC78\uAE4C? -> \uC640\uBD80\uC5D0\uC11C \uC804\uB2EC\uD574\uC8FC\uB294\uAC78 \uBA3C\uC800 \uCC98\uB9AC \uD574\uC8FC\uAE30\uC704\uD574 \uCD94\uCE21\n // console.log('oooooooooooooooo', token, otherStorage)\n return otherStorage?.get(token) ?? this.resolve<any>({ targetKey: token, newInstanceCarrier });\n }\n return undefined;\n });\n return injections;\n }\n\n public proxy<T = any>(target: T): T {\n try {\n const noProxy = isSimNoProxy(target);\n if (!noProxy && target !== null && getSim(target) && typeof target === 'object' && !('_SimpleBoot_isProxy' in target)) {\n for (const key in target) {\n if (!isSimNoProxy(target, key)) {\n target[key] = this.proxy(target[key]);\n }\n }\n\n // function apply proxy\n const protoTypeName = ObjectUtils.ownPropertyNames(target);\n protoTypeName\n .filter(it => typeof (target as any)[it] === 'function')\n .filter(it => !isSimNoProxy(target, it))\n .filter(it => !('_SimpleBoot_isProxy' in target[it]))\n .forEach(it => {\n (target as any)[it] = new Proxy((target as any)[it], this.simProxyHandler!);\n });\n\n if (this.simProxyHandler) {\n target = new Proxy(target, this.simProxyHandler);\n }\n }\n\n if (this.option.proxy) {\n target = this.option.proxy.onAfterProxy(target);\n }\n return target;\n } catch (e) {\n console.log('sim proxy error');\n throw e;\n }\n }\n\n run(otherInstanceSim: Map<ConstructorType<any> | Function | SimConfig, any> = new Map()) {\n // this.otherInstanceSim = new Map();\n for (const [k, v] of Array.from(otherInstanceSim.entries())) {\n if (typeof k === 'object') {\n // \uBA85\uD655\uD558\uAC8C instance\uB97C \uB118\uAE34\uAC70\uB2C8 \uD0C0\uC785\uC73C\uB85C \uCC98\uB9AC\uC548\uD558\uAE30 \uC704\uD574 \uC784\uC758 \uD0C0\uC785\uC73C\uB85C \uCC98\uB9AC\uD55C\uB2E4.\n simProcess(k, v);\n } else {\n simProcess({ type: k }, v);\n }\n // this.otherInstanceSim.set(type, v);\n // it => ({type: it[0], value: it[1], action: this.setStoreSet.bind(this)})\n }\n // this.otherInstanceSim = otherInstanceSim;\n // const types = Array.from(this.otherInstanceSim?.entries()).map(it => ({type: it[0], value: it[1], action: this.setStoreSet.bind(this)}));\n // types.push(...Array.from(sims.entries()).map(it => ({type: it[0], value: it[1], action: this.registerStore.bind(this)})));\n const myContainers = ConvertUtils.flatArray(this.option.container).filter(isDefined);\n // console.log('simstanceManager run!!', Array.from(sims.entries()));\n // Array.from(sims.entries()).map(it => ({type: it[0], value: it[1], action: this.registerStore.bind(this)}))\n Array.from(sims.entries()).forEach(([type, value]) => {\n const targetContainers = ConvertUtils.flatArray(getSim(type)?.container).filter(isDefined);\n let isInclude = false;\n if (myContainers.length <= 0 && targetContainers.length <= 0) {\n isInclude = true;\n } else if (targetContainers.length <= 0) {\n isInclude = true;\n } else {\n isInclude = myContainers.some(it => targetContainers.includes(it));\n }\n\n this.registerStore(type, value);\n // const isInclude = (myContainers.length <= 0 || targetContainers.length <= 0) ? true : myContainers.some(it => targetContainers.includes(it));\n // const isInclude = (targetContainers.length <= 0) ? true : (myContainers.length > 0 ? true : (myContainers.some(it => targetContainers.includes(it))));\n // const isInclude = (myContainers.length <= 0 || targetContainers.length <= 0) ? true : (myContainers.some(it => containers.includes(it)));\n // if (typeof this.option.excludeSim === 'function' && this.option.excludeSim(type)) {\n // if (isInclude) {\n // it.action(type, it.value);\n // }\n // } else if (Array.isArray(this.option.excludeSim) && !this.option.excludeSim.includes(type)) {\n // if (isInclude) {\n // it.action(type, it.value);\n // }\n // }\n });\n\n this.callBindPostConstruct(this);\n\n // auto start run\n this.getSimAtomics().forEach(it => {\n if (it.getConfig()?.autoCreate) {\n // console.log('autoStart---?', it.type);\n it.getValue();\n }\n });\n }\n}\n", "import { Intent, PublishType } from './Intent';\nimport { SimstanceManager } from '../simstance/SimstanceManager';\nimport { Sim } from '../decorators/SimDecorator';\nimport { SimAtomic } from '../simstance/SimAtomic';\nimport { Subject } from '@dooboostore/core/message/Subject';\nimport { RouterManager } from '../route/RouterManager';\nimport { RouterMetadataKey, RouterConfig } from '../decorators/route/Router';\nimport { ConstructorType } from '@dooboostore/core/types';\nimport { SimOption } from '../SimOption';\n\nexport type RouterPublishType = { router: `Router(${string}):${string}`; rootRouter: ConstructorType<any> };\nexport const isRouterPublishType = (it: any): it is RouterPublishType =>\n typeof it === 'object' &&\n typeof it.router === 'string' &&\n typeof it.rootRouter === 'function';\n\n@Sim\nexport class IntentManager {\n private subject = new Subject<Intent>();\n constructor(\n private simstanceManager: SimstanceManager,\n private routerManager: RouterManager,\n private simOption: SimOption\n ) {}\n\n get observable() {\n return this.subject.asObservable();\n }\n public async publish(it: string, data?: any): Promise<any[]>;\n public async publish(it: RouterPublishType, data?: any): Promise<any[]>;\n public async publish(it: Intent): Promise<any[]>;\n public async publish(it: Intent | string | RouterPublishType, data?: any): Promise<any[]> {\n const target: SimAtomic<any> | any[] = [];\n const rootRouter = isRouterPublishType(it) ? it.rootRouter : this.simOption.rootRouter;\n it = isRouterPublishType(it) ? it.router : it;\n\n const routerMatch = typeof it === 'string' && it.match(/^Router\\((.+)\\):\\/(.*)$/); // Escaped parentheses and slash, no quotes\n if (routerMatch && typeof it === 'string') {\n const routerBasePath = routerMatch[1];\n const actualPath = routerMatch[2];\n const routerModule = await this.routerManager.routing(routerBasePath,{router:rootRouter});\n const instance = routerModule.getModuleInstance();\n if (instance) {\n target.push(instance);\n }\n it = new Intent(actualPath, data);\n } else if (typeof it === 'string') {\n it = new Intent(it, data);\n }\n\n let intent = it as Intent;\n const r: any[] = [];\n\n if (!routerMatch) {\n if (intent.symbols) {\n target.push(...intent.symbols.map(sym => this.simstanceManager.findSims(sym)).flat());\n } else if (intent.scheme) {\n target.push(...this.simstanceManager.getSimConfig(intent.scheme));\n } else {\n target.push(...this.simstanceManager.getSimAtomics());\n }\n }\n const targetInstances = target.map(it => {\n if (it instanceof SimAtomic) {\n return it.getValue();\n } else {\n return it;\n }\n });\n\n this.subject.next(it);\n\n targetInstances.forEach(data => {\n let orNewSim = data;\n if (orNewSim) {\n if (intent.paths.length > 0) {\n let callthis = orNewSim;\n let lastProp = '';\n intent.paths\n .filter(i => i)\n .forEach(i => {\n callthis = orNewSim;\n orNewSim = orNewSim?.[i];\n lastProp = i;\n });\n if (orNewSim && typeof orNewSim === 'function') {\n if (PublishType.DATA_PARAMETERS === intent.publishType) {\n r.push(orNewSim.call(callthis, intent.data));\n } else if (PublishType.INLINE_DATA_PARAMETERS === intent.publishType) {\n r.push(orNewSim.call(callthis, ...intent.data));\n } else {\n r.push(orNewSim.call(callthis, intent));\n }\n } else if (orNewSim) {\n callthis[lastProp] = intent.data;\n r.push(callthis[lastProp]);\n }\n } else {\n if (PublishType.DATA_PARAMETERS === intent.publishType) {\n r.push(orNewSim?.intentSubscribe?.(intent.data));\n } else if (PublishType.INLINE_DATA_PARAMETERS === intent.publishType) {\n r.push(orNewSim?.intentSubscribe?.(...intent.data));\n } else {\n r.push(orNewSim?.intentSubscribe?.(intent));\n }\n }\n }\n });\n return r;\n }\n}\n", "export enum HttpStatus {\n Ok = 200,\n\n /**\n * HTTP 301 Moved Permanently \uB9AC\uB514\uB809\uC158 \uC0C1\uD0DC \uC751\uB2F5 \uCF54\uB4DC\uB294 \uC694\uCCAD\uD55C \uB9AC\uC18C\uC2A4\uAC00 Location \uD5E4\uB354\uC5D0 \uC8FC\uC5B4\uC9C4 URL\uB85C \uC644\uC804\uD788 \uC62E\uACA8\uC84C\uB2E4\uB294 \uAC83\uC744 \uB098\uD0C0\uB0C5\uB2C8\uB2E4. \uBE0C\uB77C\uC6B0\uC800\uB294 \uC774 \uD398\uC774\uC9C0\uB85C \uB9AC\uB514\uB809\uD2B8\uD558\uACE0, \uAC80\uC0C9 \uC5D4\uC9C4\uC740 \uD574\uB2F9 \uB9AC\uC18C\uC2A4\uB85C \uC5F0\uACB0\uB418\uB294 \uB9C1\uD06C\uB97C \uAC31\uC2E0\uD569\uB2C8\uB2E4.\n */\n MovedPermanently = 301,\n /**\n * https://developer.mozilla.org/ko/docs/Web/HTTP/Reference/Status/302\n * HTTP(HyperText Transfer Protocol) 302 Found \uB9AC\uB514\uB809\uC158 \uC0C1\uD0DC \uC751\uB2F5 \uCF54\uB4DC\uB294 \uC694\uCCAD\uD55C \uB9AC\uC18C\uC2A4\uAC00 Location \uD5E4\uB354\uC5D0 \uC9C0\uC815\uB41C URL\uB85C \uC77C\uC2DC\uC801\uC73C\uB85C \uC774\uB3D9\uB418\uC5C8\uC74C\uC744 \uB098\uD0C0\uB0C5\uB2C8\uB2E4. \uBE0C\uB77C\uC6B0\uC800\uB294 \uC774 \uD398\uC774\uC9C0\uB85C \uB9AC\uB514\uB809\uC158\uB418\uC9C0\uB9CC \uAC80\uC0C9 \uC5D4\uC9C4\uC740 \uB9AC\uC18C\uC2A4\uC5D0 \uB300\uD55C \uB9C1\uD06C\uB97C \uC5C5\uB370\uC774\uD2B8\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4('SEO-speak'\uC5D0\uC11C\uB294 'link-juice'\uAC00 \uC0C8 URL\uB85C \uC804\uC1A1\uB418\uC9C0 \uC54A\uB294\uB2E4\uACE0 \uD569\uB2C8\uB2E4).\n * \uBA85\uC138\uC11C\uC5D0\uC11C \uB9AC\uB514\uB809\uC158\uC774 \uC218\uD589\uB420 \uB54C \uBA54\uC11C\uB4DC(\uBC0F \uBCF8\uBB38)\uAC00 \uBCC0\uACBD\uB418\uC9C0 \uC54A\uB3C4\uB85D \uC694\uAD6C\uD558\uB354\uB77C\uB3C4 \uBAA8\uB4E0 \uC0AC\uC6A9\uC790 \uC5D0\uC774\uC804\uD2B8\uAC00 \uC774\uB97C \uC900\uC218\uD558\uB294 \uAC83\uC740 \uC544\uB2D9\uB2C8\uB2E4. \uC5EC\uB7EC\uBD84\uC740 \uC5EC\uC804\uD788 \uC774\uB7EC\uD55C \uC720\uD615\uC758 \uBC84\uADF8\uAC00 \uC788\uB294 \uC18C\uD504\uD2B8\uC6E8\uC5B4\uB97C \uCC3E\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uB530\uB77C\uC11C \uB530\uB77C\uC11C 302 \uCF54\uB4DC\uB294 GET \uB610\uB294 HEAD \uBA54\uC11C\uB4DC\uC5D0 \uB300\uD55C \uC751\uB2F5\uC73C\uB85C\uB9CC \uC124\uC815\uD558\uACE0 \uC774 \uACBD\uC6B0 \uBA54\uC11C\uB4DC \uBCC0\uACBD\uC774 \uBA85\uC2DC\uC801\uC73C\uB85C \uAE08\uC9C0\uB418\uBBC0\uB85C 307 Temporary Redirect \uB97C \uB300\uC2E0 \uC0AC\uC6A9\uD558\uB294 \uAC83\uC774 \uC88B\uC2B5\uB2C8\uB2E4.\n * \uC0AC\uC6A9\uD558\uB358 \uBA54\uC11C\uB4DC\uB97C GET\uC73C\uB85C \uBCC0\uACBD\uD558\uB824\uB294 \uACBD\uC6B0, 303 See Other\uC744 \uB300\uC2E0 \uC0AC\uC6A9\uD558\uC2ED\uC2DC\uC624. PUT \uBA54\uC11C\uB4DC\uC5D0 \uB300\uD55C \uC751\uB2F5\uC744 \uC5C5\uB85C\uB4DC\uB41C \uB9AC\uC18C\uC2A4\uAC00 \uC544\uB2C8\uB77C 'You successfully updown XYZ'\uC640 \uAC19\uC740 \uD655\uC778 \uBA54\uC2DC\uC9C0\uB85C \uC8FC\uACE0 \uC2F6\uC744\uB54C \uC720\uC6A9\uD569\uB2C8\uB2E4.\n */\n Found = 302,\n /**\n * HTTP(HyperText Transfer Protocol) 303 See Other \uB9AC\uB514\uB809\uC158 \uC0C1\uD0DC \uC751\uB2F5 \uCF54\uB4DC\uB294 \uB9AC\uB514\uB809\uC158\uC774 \uC694\uCCAD\uD55C \uB9AC\uC18C\uC2A4 \uC790\uCCB4\uC5D0 \uC5F0\uACB0\uB418\uC9C0 \uC54A\uACE0 \uB2E4\uB978 \uD398\uC774\uC9C0(\uC608: \uD655\uC778 \uD398\uC774\uC9C0, \uC2E4\uC81C \uAC1C\uCCB4 \uD45C\uC2DC(HTTP range-14 \uCC38\uC870) \uB610\uB294 \uC5C5\uB85C\uB4DC \uC9C4\uD589\uB960 \uD398\uC774\uC9C0)\uC5D0 \uC5F0\uACB0\uB428\uC744 \uB098\uD0C0\uB0C5\uB2C8\uB2E4. \uC774 \uC751\uB2F5 \uCF54\uB4DC\uB294 PUT \uB610\uB294 POST\uC758 \uACB0\uACFC\uB85C \uB2E4\uC2DC \uC804\uC1A1\uB418\uB294 \uACBD\uC6B0\uAC00 \uB9CE\uC2B5\uB2C8\uB2E4. \uC774 \uB9AC\uB514\uB809\uC158 \uD398\uC774\uC9C0\uB97C \uD45C\uC2DC\uD558\uB294 \uB370 \uC0AC\uC6A9\uB418\uB294 \uBC29\uBC95\uC740 \uD56D\uC0C1 GET\uC785\uB2C8\uB2E4.\n */\n SeeOther = 303,\n /**\n * \uD074\uB77C\uC774\uC5B8\uD2B8 \uB9AC\uB514\uB809\uC158 \uC751\uB2F5 \uCF54\uB4DC 304 Not Modified \uB294 \uC694\uCCAD\uB41C \uB9AC\uC18C\uC2A4\uB97C \uC7AC\uC804\uC1A1\uD560 \uD544\uC694\uAC00 \uC5C6\uC74C\uC744 \uB098\uD0C0\uB0B8\uB2E4. \uCE90\uC2DC\uB41C \uC790\uC6D0\uC73C\uB85C\uC758 \uC554\uBB35\uC801\uC778 \uB9AC\uB514\uB809\uC158\uC774\uB2E4. \uC774 \uB294 GET \uB098 HEAD \uC694\uCCAD\uCC98\uB7FC \uC694\uCCAD \uBC29\uBC95\uC774 \uC548\uC804 \uD55C \uACBD\uC6B0 \uB610\uB294 \uC694\uCCAD\uC774 \uC870\uAC74\uBD80\uB85C If-None-Match \uB610\uB294 If-Modified-Since \uD5E4\uB354\uB97C \uC0AC\uC6A9\uD560 \uB54C \uC751\uB2F5 \uB41C\uB2E4.\n * \uC774\uC5D0 \uC0C1\uC751\uD558\uB294 200 OK \uC751\uB2F5\uC5D0\uB294 Cache-Control, Content-Location, Date, ETag, Expires, \uADF8\uB9AC\uACE0 Vary \uAC00 \uD3EC\uD568\uB418\uC5B4 \uC788\uC5C8\uC744 \uAC83\uC774\uB2E4.\n */\n NotModified = 304,\n /**\n * HTTP 307 Temporary Redirect \uB9AC\uB2E4\uC774\uB809\uD2B8 \uC0C1\uD0DC \uC751\uB2F5 \uCF54\uB4DC\uB294 \uC694\uCCAD\uD55C \uB9AC\uC18C\uC2A4\uAC00 Location \uD5E4\uB354\uC5D0 \uC8FC\uC5B4\uC9C4 URL \uB85C \uC784\uC2DC\uB85C \uC62E\uACA8\uC84C\uB2E4\uB294 \uAC83\uC744 \uB098\uD0C0\uB0C5\uB2C8\uB2E4.\n * \uC6D0\uB798 \uC694\uCCAD\uD55C \uBA54\uC18C\uB4DC\uC640 Body \uB97C \uC7AC\uC0AC\uC6A9\uD558\uC5EC \uC694\uCCAD\uC744 \uB9AC\uB2E4\uC774\uB809\uD2B8 \uD569\uB2C8\uB2E4. \uC5EC\uAE30\uC11C \uBA54\uC18C\uB4DC\uB97C GET\uC73C\uB85C \uBC14\uAFB8\uAE30 \uC704\uD574\uC11C 303 See Other\uB97C \uC0AC\uC6A9\uD558\uC2DC\uBA74 \uB429\uB2C8\uB2E4. \uC774\uAC83\uC740 PUT\uC694\uCCAD\uC5D0 \uC5C5\uB85C\uB4DC\uB41C \uB9AC\uC18C\uC2A4\uAC00 \uC544\uB2CC \"You successfully uploaded XYZ\"\uC640 \uAC19\uC740 \uD655\uC778\uBA54\uC2DC\uC9C0 \uC751\uB2F5\uC744 \uC81C\uACF5 \uD558\uB294\uB370\uC5D0 \uC720\uC6A9\uD569\uB2C8\uB2E4.\n * 307\uACFC 302\uAC00 \uC720\uC77C\uD558\uAC8C \uB2E4\uB978\uC810\uC740 307\uC740 Method \uC640 Body \uB97C \uBCC0\uACBD\uD558\uC9C0 \uC54A\uACE0 \uB9AC\uB2E4\uC774\uB809\uD2B8 \uC694\uCCAD\uC744 \uD558\uB3C4\uB85D \uBCF4\uC7A5\uD569\uB2C8\uB2E4. 302\uC751\uB2F5\uC73C\uB85C \uC778\uD558\uC5EC \uC77C\uBD80 \uC624\uB798\uB41C \uD074\uB77C\uC774\uC5B8\uD2B8\uB4E4\uC740 \uBA54\uC18C\uB4DC\uB97C GET\uC73C\uB85C \uD2C0\uB9AC\uAC8C \uBCC0\uACBD\uD558\uC600\uC2B5\uB2C8\uB2E4. GET\uC774 \uC544\uB2CC \uB2E4\uB978 \uBA54\uC18C\uB4DC\uC5D0 302\uB3D9\uC791\uC740 \uC6F9\uC5D0\uC11C \uC608\uC0C1\uB418\uC9C0 \uC54A\uC9C0\uB9CC 307 \uB3D9\uC791\uC740 \uC608\uC0C1\uD560\uC218 \uC788\uC2B5\uB2C8\uB2E4. GET \uC694\uCCAD\uC5D0 \uB300\uD574\uC11C\uB294 \uB3D9\uC77C\uD558\uAC8C \uB3D9\uC791 \uD569\uB2C8\uB2E4.\n */\n TemporaryRedirect = 307,\n /**\n * \uD558\uC774\uD37C\uD14D\uC2A4\uD2B8 \uC804\uC1A1 \uD504\uB85C\uD1A0\uCF5C (HTTP) 308 Permanent Redirect \uB9AC\uB514\uB809\uC158 \uC0C1\uD0DC \uC751\uB2F5 \uCF54\uB4DC\uB294 \uC694\uCCAD\uB41C \uB9AC\uC18C\uC2A4\uAC00 Location \uD5E4\uB354\uC5D0 \uC9C0\uC815\uB41C URL\uB85C \uD655\uC2E4\uD788 \uC774\uB3D9\uB418\uC5C8\uC74C\uC744 \uB098\uD0C0\uB0C5\uB2C8\uB2E4. \uBE0C\uB77C\uC6B0\uC800\uAC00 \uC774 \uD398\uC774\uC9C0\uB85C \uB9AC\uB514\uB809\uC158\uB418\uACE0 \uAC80\uC0C9\uC5D4\uC9C4\uC740 \uB9AC\uC18C\uC2A4\uC5D0 \uB300\uD55C \uB9C1\uD06C\uB97C \uC5C5\uB370\uC774\uD2B8\uD569\uB2C8\uB2E4('SEO-speak'\uC5D0\uC11C\uB294 'link-juice'\uAC00 \uC0C8 URL\uB85C \uC804\uC1A1\uB429\uB2C8\uB2E4).\n * \uC694\uCCAD \uBA54\uC11C\uB4DC\uC640 \uBCF8\uBB38\uC740 \uBCC0\uACBD\uB418\uC9C0 \uC54A\uC9C0\uB9CC, 301\uC740 \uB54C\uB54C\uB85C GET \uBA54\uC11C\uB4DC\uB85C \uC798\uBABB \uBCC0\uACBD\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4.\n */\n PermanentRedirect = 308,\n BadRequest = 400,\n Unauthorized = 401,\n Forbidden = 403,\n NotFound = 404,\n InternalServerError = 500,\n NotImplemented = 501,\n BadGateway = 502,\n ServiceUnavailable = 503,\n GatewayTimeout = 504,\n HttpVersionNotSupported = 505\n}\n", "import {Filter} from '@dooboostore/simple-boot-http-server/filters/Filter';\nimport {HttpHeaders} from '../codes/HttpHeaders';\nimport {Intent, PublishType} from '@dooboostore/simple-boot/intent/Intent';\nimport {IntentManager} from '@dooboostore/simple-boot/intent/IntentManager';\nimport {Sim} from '@dooboostore/simple-boot/decorators/SimDecorator';\nimport {HttpStatus} from '@dooboostore/simple-boot-http-server/codes/HttpStatus';\nimport {RequestResponse} from '@dooboostore/simple-boot-http-server/models/RequestResponse';\nimport {SimpleBootHttpServer} from '@dooboostore/simple-boot-http-server/SimpleBootHttpServer';\nimport { Mimes } from '../codes/Mimes';\n\n@Sim\nexport class IntentSchemeFilter implements Filter {\n constructor(private intentManager: IntentManager) {\n // (IntentManager as any).\n // console.log('intent constructor', this.intentManager);\n }\n\n async onInit(app: SimpleBootHttpServer) {\n }\n\n async proceedBefore({rr, app}: {rr: RequestResponse, app: SimpleBootHttpServer, carrier: Map<string, any>}) {\n // const rr = rrr;\n const url = rr.reqUrl;\n const contentLength = Number(rr.reqHeader(HttpHeaders.ContentLength.toLowerCase() ?? '0'));\n const acceptType = rr.reqHeader(HttpHeaders.Accept);\n const contentType = rr.reqHeader(HttpHeaders.ContentType);\n const intentScheme = rr.reqHeader(HttpHeaders.XSimpleBootSsrIntentScheme);\n if (acceptType === Mimes.ApplicationJsonPostSimpleBootSsrIntentScheme && intentScheme) {\n let intent = new Intent(`${intentScheme}:/${url}`);\n intent.publishType = PublishType.INLINE_DATA_PARAMETERS;\n // const responseHeader = {} as any;\n // responseHeader[HttpHeaders.ContentType] = Mimes.ApplicationJson;\n if (contentLength > 0) {\n if (contentType.includes(Mimes.ApplicationJson)) {\n intent.data = [await rr.reqBodyJsonData(), rr];\n } else if (contentType.includes(Mimes.MultipartFormData)) {\n intent.data = [await rr.reqBodyMultipartFormDataObject(), rr];\n }\n const rdatas = await this.intentManager.publish(intent);\n const rdata = rdatas[0];\n const wdata = rdata instanceof Promise ? await rdata : rdata;\n rr.resStatusCode(HttpStatus.Ok);\n rr.resSetHeader(HttpHeaders.ContentType, [Mimes.ApplicationJson])\n await rr.resEnd(wdata ? JSON.stringify(wdata) : undefined);\n } else {\n intent.data = rr.reqUrlSearchParamTuples.length > 0 ? [rr.reqUrlSearchParamsObj, rr] : [rr];\n const rdatas = await this.intentManager.publish(intent);\n const rdata = rdatas[0];\n const wdata = rdata instanceof Promise ? await rdata : rdata;\n // const wdata =undefined;\n rr.resStatusCode(HttpStatus.Ok);\n rr.resSetHeader(HttpHeaders.ContentType, [Mimes.ApplicationJson])\n await rr.resEnd(wdata ? JSON.stringify(wdata) : undefined);\n }\n // console.log('---------3--intent request', rr.req.readable, rr.req.readableLength);\n return false;\n } else {\n return true;\n }\n }\n\n async proceedAfter({rr, app}: {rr: RequestResponse, app: SimpleBootHttpServer, carrier: Map<string, any>}) {\n return true;\n }\n\n}\n", "import * as JSDOM from 'jsdom';\nimport { ReconfigureSettings } from 'jsdom';\nimport fs from 'fs';\nimport path from 'path';\n\nexport class JsdomInitializer {\n constructor(\n private frontDistPath: string,\n private frontDistIndexFileName: string,\n private reconfigureSettings?: ReconfigureSettings\n ) {}\n\n public static loadFile(distPath: string, filePath: string): string {\n return fs.readFileSync(path.join(distPath, filePath), 'utf8');\n }\n\n async run(): Promise<JSDOM.JSDOM> {\n // const indexHTML = fs.readFileSync(path.join(this.frontDistPath, 'index.html'), 'utf8');\n // const indexHTML = JsdomInitializer.loadFile(this.frontDistPath, this.frontDistIndexFileName);\n const pathStr = path.join(this.frontDistPath, this.frontDistIndexFileName);\n\n const jsdom = await JSDOM.JSDOM.fromFile(pathStr, {});\n if (this.reconfigureSettings) {\n jsdom.reconfigure(this.reconfigureSettings);\n }\n // devDependencies\n // \"@types/jsdom\": \"^21.1.2\",\n // \"canvas\": \"^3.1.0\",\n // global setting\n // @ts-ignore\n global.document = jsdom.window.document;\n // @ts-ignore\n global.window = jsdom.window as unknown as Window & typeof globalThis;\n // @ts-ignore\n global.window.requestAnimationFrame = () => {};\n global.window.scrollTo = () => {};\n // const originalPushState = global.window.history.pushState;\n // global.window.history.pushState = (data: any,title: any,path: string) => {\n // console.log('----iida',path)\n // path.replace()\n //\n // let s = `${UrlUtils.origin(global.window.location.href)}${path?`${path}`:''}`;\n // console.log('----da',s)\n // originalPushState.apply(global.window.history, [data, title, s]);\n // }\n // const originalReplaceState = global.window.history.replaceState;\n // global.window.history.replaceState = (data: any,title: any,path: string) => {\n // let s = `${UrlUtils.origin(global.window.location.href)}${path?`${path}`:''}`;\n // originalReplaceState.apply(global.window.history, [data, title, s]);\n // }\n // const dummyResponse = {ok: false, json: () => Promise.resolve({})}; // as Response;\n // global.fetch = (...data: any): Promise<any> => {\n // console.log('dummy fetch')\n // return Promise.resolve(dummyResponse)\n // };\n // @ts-ignore\n global.history = jsdom.window.history;\n global.Event = jsdom.window.Event;\n // @ts-ignore\n global.PopStateEvent = jsdom.window.Event;\n global.IntersectionObserver = jsdom.window.IntersectionObserver;\n // @ts-ignore\n // global.Error = ErrorBase;\n // @ts-ignore\n // global.navigator = jsdom.window.navigator;\n global.NodeFilter = jsdom.window.NodeFilter;\n global.Node = jsdom.window.Node;\n global.DocumentFragment = jsdom.window.DocumentFragment;\n global.HTMLElement = jsdom.window.HTMLElement;\n global.HTMLMetaElement = jsdom.window.HTMLMetaElement;\n global.Element = jsdom.window.Element;\n global.HTMLCanvasElement = jsdom.window.HTMLCanvasElement;\n global.HTMLCanvasElement.prototype.getContext = () => {\n return null;\n };\n global.CanvasRenderingContext2D = jsdom.window.CanvasRenderingContext2D;\n global.CanvasPattern = jsdom.window.CanvasPattern;\n global.CanvasGradient = jsdom.window.CanvasGradient;\n global.Path2D = jsdom.window.Path2D;\n global.ImageData = jsdom.window.ImageData;\n return jsdom;\n }\n}\n//\n// export default new JsdomInitializer();\n", "export class AsyncBlockingQueue<T> {\n private _promises: Promise<T>[];\n private _resolvers: ((t: T) => void)[];\n\n constructor() {\n this._resolvers = [];\n this._promises = [];\n }\n\n private _add() {\n this._promises.push(new Promise(resolve => {\n this._resolvers.push(resolve);\n }));\n }\n\n enqueue(t: T) {\n if (!this._resolvers.length) this._add();\n const resolve = this._resolvers.shift()!;\n resolve(t);\n }\n\n dequeue() {\n if (!this._promises.length) this._add();\n const promise = this._promises.shift()!;\n return promise;\n }\n\n isEmpty() {\n return !this._promises.length;\n }\n\n isBlocked() {\n return !!this._resolvers.length;\n }\n\n get length() {\n return this._promises.length - this._resolvers.length;\n }\n}", "\nexport class HttpError {\n name: string = 'Error'\n message: string;\n stack?: string\n data?: any;\n public status: number;\n\n constructor({status, message = 'HttpError'}: { status: number, message?: string }) {\n // super(message);\n this.message = message;\n this.status = status;\n }\n}\n", "import {HttpError} from './HttpError';\nimport {HttpStatus} from '../codes/HttpStatus';\n\nexport class NotFoundError extends HttpError {\n constructor({status = HttpStatus.NotFound, message = 'Not Found'}: {status?: number, message?: string} = {}) {\n super({status, message});\n }\n}\n", "import { Dictionary } from '../types';\nimport { ValidUtils } from '../valid/ValidUtils';\n\nexport namespace StringUtils {\n export const deleteEnter = (data: string) => {\n return data.replace(/\\r?\\n/g, '')\n }\n\n export const pickEmoji = (data: string) => {\n return data.match(/[\\p{Emoji}]/gu) ?? [];\n }\n\n\n export const regexExec = (regex: RegExp, text: string) => {\n let varExec = regex.exec(text)\n const usingVars: any[] = [];\n while (varExec) {\n usingVars.push(varExec)\n varExec = regex.exec(varExec.input)\n }\n return usingVars;\n }\n\n \n\n export const escapeSpecialCharacterRegExp = (data: string) => {\n return data.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n }\n\n export const trim = (data: string) => data.trim();\n\n export const rsubString = (data_s: string, blen_n: number): string =>\n data_s.substring(data_s.length - blen_n, data_s.length);\n\n export const lsubString = (data_s: string, alen_n: number): string => data_s.substring(0, alen_n);\n\n export const lpad = (fill_s: string, len_n: number, full_s: string): string => {\n while (len_n > full_s.length) {\n full_s = fill_s + full_s;\n }\n return StringUtils.rsubString(full_s, len_n);\n };\n export const rpad = (fill_s: string, len_n: number, full_s: string): string => {\n while (len_n > full_s.length) {\n full_s += fill_s;\n }\n return StringUtils.lsubString(full_s, len_n);\n };\n\n export const lappend = (count_n: number, input_s: string): string => {\n let s = '';\n let i = 0;\n while (i++ < count_n) {\n s += input_s;\n }\n return s;\n };\n\n\n export const unescape = (html: string): string => {\n if (!html) return '';\n\n const htmlEntity: Dictionary<string> = {\n quot: '\"',\n amp: '&',\n apos: \"'\",\n lt: '<',\n gt: '>',\n nbsp: '\\u00A0',\n iexcl: '¡',\n cent: '¢',\n pound: '£',\n curren: '¤',\n yen: '¥',\n brvbar: '¦',\n sect: '§',\n uml: '¨',\n copy: '©',\n ordf: 'ª',\n laquo: '«',\n not: '¬',\n shy: '\\u00AD',\n reg: '®',\n macr: '¯',\n deg: '°',\n plusmn: '±',\n sup2: '²',\n sup3: '³',\n acute: '´',\n micro: 'µ',\n para: '¶',\n middot: '·',\n cedil: '¸',\n sup1: '¹',\n ordm: 'º',\n raquo: '»',\n frac14: '¼',\n frac12: '½',\n frac34: '¾',\n iquest: '¿',\n '#x27': \"'\"\n };\n\n return html.replace(/&((?:(?:[a-z0-9]+|#[0-9]{1,6}|#x[0-9a-fA-F]{1,6});?)+);/gi, (match, entity) => {\n const entities: string[] = entity.toLowerCase().split(';');\n return entities.map(it => (it in htmlEntity ? htmlEntity[it] : match)).join('');\n });\n };\n\n export const executeExpression = (formatString: string, object: Record<string, string | number>) => {\n return formatString.replace(/\\${([^{}]*)}/g, (matched, piece) => String(object[piece] ?? matched));\n };\n\n export const ellipsis = (text: string, length: number) => {\n if (text.length > length) return `${text.slice(0, length)}...`;\n return text;\n };\n\n // type Postposition =\n /**\n * Appends a postposition to the given text based on the provided options.\n * @param {string} text - The text to append the postposition to.\n * @param {object} options - The options for postposition.\n * @param {string} options.vowel - The postposition to append if the text ends with a vowel(모음).\n * @param {string} options.consonant - The postposition to append if the text ends with a consonant(자음).\n * @returns {string} - The text with the appropriate postposition appended.\n */\n export const appendPostposition = (text: string, { vowel, consonant }: {\n vowel: string;\n consonant: string;\n }): string => {\n return `${text}${ValidUtils.lastConsonantLetter(text) ? consonant : vowel}`;\n };\n\n export interface SequentialReplacement {\n regex: RegExp;\n callback: (matched: string) => string;\n }\n\n export const replaceSequentially = (\n text: string,\n replacements: SequentialReplacement[]\n ): string => {\n let remainingText = text;\n let result = '';\n // console.log('Executing replaceSequentially with robust fix');\n\n while (remainingText.length > 0) {\n let bestMatch: {\n index: number;\n match: RegExpExecArray;\n replacement: SequentialReplacement;\n } | null = null;\n\n // Find the earliest match in the remaining text\n for (const replacement of replacements) {\n const newRegex = new RegExp(replacement.regex);\n const match = newRegex.exec(remainingText);\n if (match) {\n if (bestMatch === null || match.index < bestMatch.index) {\n bestMatch = { index: match.index, match, replacement };\n }\n }\n }\n\n if (bestMatch) {\n const { index, match, replacement } = bestMatch;\n const matchedString = match[0];\n\n // Append the text before the match and the replacement\n result += remainingText.substring(0, index);\n result += replacement.callback(matchedString);\n\n // Update remainingText to be the part after the match\n remainingText = remainingText.substring(index + matchedString.length);\n } else {\n // No more matches, append the rest of the text and finish\n result += remainingText;\n break;\n }\n }\n\n return result;\n };\n}\n", "\nimport { ObjectUtils } from '@dooboostore/core/object/ObjectUtils';\n\nexport class ScriptUtils {\n\n /**\n * @deprecated Use ObjectUtils.Script.evalReturn instead\n */\n public static evaluateReturn<T = any>(script: string | { bodyScript: string, returnScript: string }, thisTarget: any = {}): T {\n return ObjectUtils.Script.evaluateReturn(script, thisTarget);\n }\n\n /**\n * @deprecated Use ObjectUtils.Script.eval instead\n */\n public static evaluate<T = any>(script: string, thisTarget: any = {}): T | undefined {\n return ObjectUtils.Script.evaluate(script, thisTarget); // Changed from eval to runScript\n }\n\n /**\n * @deprecated Use ObjectUtils.Script.eval instead\n */\n // public static getVariablePaths(script: string): Set<string> {\n // const usingVars = new Set<string>();\n //\n // class GetDetectProxy implements ProxyHandler<any> {\n // public usingVars = usingVars;\n //\n // constructor(public prefix?: string) {}\n //\n // set(target: any, p: string | symbol, value: any, receiver: any): boolean {\n // return true;\n // }\n //\n // get(target: any, p: string | symbol, receiver: any): any {\n // let items;\n // if (typeof p === 'string' && isNaN(Number(p))) {\n // items = this.prefix ? this.prefix + '.' + p : p;\n // this.usingVars.add(items);\n // } else if (typeof p === 'string' && !isNaN(Number(p))) {\n // items = this.prefix ? this.prefix + '[' + p + ']' : p;\n // this.usingVars.add(items);\n // }\n // return new Proxy(() => {}, new GetDetectProxy(items));\n // }\n // }\n //\n // const destUser = new Proxy(() => {}, new GetDetectProxy());\n //\n // try {\n // // \uB3D9\uC801\uC73C\uB85C \uD568\uC218 \uC0DD\uC131 \uD6C4 bind\n // // const boundFunc = new Function(\"return this.value\").bind(obj);\n // // console.log(boundFunc()); // 42\n //\n // // eslint-disable-next-line no-new-func,no-unused-expressions\n // Function(`\"use strict\"; ${script}; `).bind(destUser)();\n // } catch (e) {\n // console.error(e);\n // }\n // console.log('-------usingV', usingVars)\n // return usingVars;\n // }\n\n\n\n public static loadElement(\n document: Document,\n name: string,\n option: { attribute?: { [key: string]: string }; body?: string; created: (tag: HTMLElement) => void }\n ) {\n return new Promise((resolve, reject) => {\n const tag = document.createElement(name);\n if (option?.body) {\n tag.innerHTML = option.body;\n } else {\n tag.onload = resolve;\n }\n tag.onerror = reject;\n if (option?.attribute) {\n for (const [key, value] of Object.entries(option.attribute)) {\n tag.setAttribute(key, value);\n }\n }\n option.created(tag);\n if (option?.body && tag.parentNode) {\n resolve(tag);\n }\n // document.head.append(tag);\n });\n }\n\n public static loadStyleSheet(document: Document, href: string, attribute: { [key: string]: string } = {}) {\n // const tag = document.createElement('link');\n // tag.type = 'text/css';\n // tag.setAttribute('rel', 'stylesheet');\n // tag.href = href;\n // for (const [key, value] of Object.entries(attribute)) {\n // tag.setAttribute(key, value);\n // }\n // target.append(tag)\n attribute.type = 'text/css';\n attribute.rel = 'stylesheet';\n attribute.href = href;\n return ScriptUtils.loadElement(document, 'link', {\n attribute,\n created: e => {\n document.head.append(e);\n }\n });\n }\n\n public static loadScript(document: Document, src: string, attribute: { [key: string]: string } = {}) {\n attribute.type = attribute?.type ?? 'text/javascript';\n attribute.src = src;\n return ScriptUtils.loadElement(document, 'script', { attribute, created: e => document.head.append(e) });\n }\n public static loadScriptBody(document: Document, body: string, attribute: { [key: string]: string } = {}) {\n attribute.type = attribute?.type ?? 'text/javascript';\n return ScriptUtils.loadElement(document, 'script', { body, attribute, created: e => document.head.append(e) });\n }\n}\n", "import { Subscription } from '../message/Subscription';\nimport { ConstructorType } from '../types';\nimport { ValidUtils } from '../valid/ValidUtils';\n\nexport namespace Promises {\n export const filterCatch = async (promise: Promise<any>, has: ConstructorType<any> | ((e: any) => boolean) | ((ConstructorType<any> | ((e: any) => void))[])) => {\n try {\n await promise;\n return undefined;\n } catch (e) {\n const targetHas = Array.isArray(has) ? has : [has]\n for (let ha of targetHas) {\n if (ValidUtils.isConstructor(ha)) {\n if (e instanceof ha) {\n return e;\n }\n } else {\n if ((ha as Function)(e)) {\n return e;\n }\n }\n }\n throw e;\n }\n return undefined;\n }\n export const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));\n export const sleepReject = (ms: number) => new Promise((resolve, reject) => setTimeout(reject, ms));\n export const settle = async <T, E = unknown>(promise: Promise<T>): Promise<Promises.SettledResult<T, E>> => {\n return Promise.allSettled([promise]).then(results => results[0]);\n };\n export const settles = async <T, E = unknown>(...promises: Promise<T>[]): Promise<Promises.SettledResult<T, E>[]> => {\n return Promise.allSettled(promises);\n };\n export type SettledResult<T, E = unknown> =\n | PromiseFulfilledResult<T>\n | (Omit<PromiseRejectedResult, 'reason'> & { reason: E });\n\n export type LoopConfig = { age: number };\n export type ObservableLoop<T> = {\n subscribe: (callback: {\n then?: (data: T, config: LoopConfig & {duration: number}) => void,\n catch?: (e: any, config: LoopConfig & {duration: number}) => void,\n delayThen?: (config: LoopConfig & { duration: number, isCatch: boolean, data?: T }) => void,\n }) => Subscription;\n }\n export const loop = <T>(config: {\n factory: (config: LoopConfig) => Promise<T>,\n delay?: number,\n loopDelay?: number\n }\n ): ObservableLoop<T> => {\n\n return {\n subscribe: (callback) => {\n\n let stop = false;\n let age = 0;\n const loopExecute = async () => {\n const start = Date.now();\n let end = start;\n age++;\n const executeConfig = {age: age};\n let t: T;\n let isCatch = false;\n try {\n t = await config.factory(executeConfig);\n end = Date.now();\n callback.then?.(t, {...executeConfig, duration: end - start});\n } catch (e) {\n isCatch = true;\n end = Date.now();\n callback.catch?.(e, {...executeConfig, duration: end - start});\n }\n await sleep(config.loopDelay ?? 0);\n // @ts-ignore\n callback.delayThen?.({...executeConfig, duration: end - start, isCatch: isCatch, data: t});\n if (!stop)\n return loopExecute();\n };\n\n setTimeout(() => {\n loopExecute();\n }, config.delay ?? 0);\n\n return {\n get closed() {\n return stop;\n },\n unsubscribe: () => {\n stop = true;\n }\n }\n\n\n }\n }\n }\n export const delayExecute = <T>(value: (() => T) | (() => Promise<T>), delay = 0): Promise<T> => {\n return new Promise<T>(resolve => {\n setTimeout(async () => {\n const t = await value();\n resolve(t);\n }, delay);\n });\n };\n\n export const transaction = <T, B = unknown, A = unknown>(\n promise: Promise<T> | (() => Promise<T>),\n config?: {\n delay?: number;\n before?: () => B;\n after?: () => A;\n then?: (it: T, data: { before?: B }) => void;\n catch?: (e: any, data: { before?: B; after?: A }) => void;\n disabledCatchThrow?: boolean;\n finally?: (data: { before?: B; after?: A; data?: T }) => void;\n }\n ) => {\n const p = typeof promise === 'function' ? promise() : promise;\n let after: A | undefined;\n let before: B | undefined;\n let promiseData: T | undefined;\n new Promise<T>((resolve, reject) => {\n const execute = () => {\n before = config?.before?.();\n p.then(data => {\n resolve(data);\n });\n after = config?.after?.();\n };\n setTimeout(() => {\n execute();\n }, config?.delay ?? 0);\n // if (config?.delay) {\n // } else {\n // setTimeout(() => {\n // execute();\n // },1000);\n // }\n })\n .then(data => {\n promiseData = data;\n config?.then?.(data, {before: before});\n })\n .catch(e => {\n config?.catch?.(e, {before: before, after: after});\n if (!config?.disabledCatchThrow) {\n throw e;\n }\n })\n .finally(() => {\n config?.finally?.({before: before, after: after, data: promiseData});\n });\n };\n\n export const withResolvers = <T>() => {\n let resolve!: (value: T | PromiseLike<T>) => void;\n let reject!: (reason?: any) => void;\n\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n return {promise, resolve, reject};\n }\n\n /**\n * Execute promises in chunks with concurrency limit to prevent network overload\n * @param promiseFactories Array of promise factories (functions that return promises)\n * @param chunkSize Number of promises to execute concurrently\n * @returns Promise that resolves with all results\n */\n export const executeInChunks = async <T>(\n promiseFactories: (() => Promise<T>)[],\n chunkSize: number = 10\n ): Promise<T[]> => {\n const results: T[] = [];\n \n for (let i = 0; i < promiseFactories.length; i += chunkSize) {\n const chunk = promiseFactories.slice(i, i + chunkSize);\n const chunkResults = await Promise.all(chunk.map(factory => factory()));\n results.push(...chunkResults);\n \n // Add small delay between chunks to be extra safe\n if (i + chunkSize < promiseFactories.length) {\n await sleep(100);\n }\n }\n \n return results;\n };\n\n /**\n * Execute promises with concurrency limit using a pool pattern\n * @param promiseFactories Array of promise factories\n * @param concurrency Maximum number of concurrent executions\n * @returns Promise that resolves with all results\n */\n export const executeWithConcurrency = async <T>(\n promiseFactories: (() => Promise<T>)[],\n concurrency: number = 10\n ): Promise<T[]> => {\n const results: T[] = new Array(promiseFactories.length);\n let currentIndex = 0;\n\n const executeNext = async (index: number): Promise<void> => {\n while (currentIndex < promiseFactories.length) {\n const factoryIndex = currentIndex++;\n results[factoryIndex] = await promiseFactories[factoryIndex]();\n }\n };\n\n // Create pool of concurrent workers\n const workers = Array(Math.min(concurrency, promiseFactories.length))\n .fill(0)\n .map((_, i) => executeNext(i));\n\n await Promise.all(workers);\n return results;\n };\n\n /**\n * Execute promises with concurrency limit using race pattern (most efficient)\n * Automatically starts a new promise as soon as one completes\n * @param promiseFactories Array of promise factories\n * @param limit Maximum number of concurrent executions (default: 5)\n * @returns Promise that resolves with all results\n */\n export const executeWithLimit = async <T>(\n promiseFactories: (() => Promise<T>)[],\n limit: number = 5\n ): Promise<T[]> => {\n const results: T[] = new Array(promiseFactories.length);\n const executing: Promise<void>[] = [];\n\n for (const [index, factory] of promiseFactories.entries()) {\n const promise = factory()\n .then(result => {\n results[index] = result;\n })\n .finally(() => {\n executing.splice(executing.indexOf(promise), 1);\n });\n\n executing.push(promise);\n\n if (executing.length >= limit) {\n await Promise.race(executing);\n }\n }\n\n await Promise.all(executing);\n return results;\n };\n\n export namespace Result {\n export type FulfilledType<T> = PromiseFulfilledResult<T>;\n export type RejectType<E = unknown> = Omit<PromiseRejectedResult, 'reason'> & { reason: E };\n export type PendingType = { status: 'pending' };\n export type Type<T, E = unknown> = FulfilledType<T> | RejectType<E> | PendingType;\n\n export type FulfilledState<T> = FulfilledType<T> & { isFulfilled: true; isRejected: false; isPending: false };\n export type RejectState<E = unknown> = RejectType<E> & { isFulfilled: false; isRejected: true; isPending: false };\n export type PendingState = PendingType & { isFulfilled: false; isRejected: false; isPending: true };\n export type UndefinedResultState = { status?: undefined; isFulfilled: false; isRejected: false; isPending: false };\n\n export type State<T, E = unknown> = FulfilledState<T> | RejectState<E> | PendingState;\n export type StateFactory<T, E = unknown> = State<T, E> & { factory: () => StateFactory<T, E> };\n export type PromiseState<T, E = unknown> = State<T, E> & Promise<T>;\n export type PromiseStateFactory<T, E = unknown> = PromiseState<T, E> & { factory: () => PromiseStateFactory<T, E> };\n\n\n export async function awaitWrap<T, E = unknown>(promise: Promise<T>): Promise<State<T, E>>;\n export async function awaitWrap<T, E = unknown>(promise: () => Promise<T>): Promise<StateFactory<T, E>>;\n export async function awaitWrap<T, E = unknown>(promise: Promise<T> | (() => Promise<T>)): Promise<State<T, E> | StateFactory<T, E>> {\n const data = typeof promise === 'function' ? wrap<T, E>(promise) : wrap<T, E>(promise);\n // try {\n\n try {\n await data;\n } catch (e) {\n }\n\n const rData = {\n status: (data as any).status,\n isFulfilled: (data as any).isFulfilled,\n isRejected: (data as any).isRejected,\n isPending: (data as any).isPending,\n value: (data as any).value,\n reason: (data as any).reason,\n } as any;\n if (typeof promise === 'function') {\n rData.factory = () => {\n return awaitWrap(promise);\n }\n return rData;\n } else {\n return rData;\n }\n }\n\n export function wrap<T, E = unknown>(promise: Promise<T>): PromiseState<T, E>;\n export function wrap<T, E = unknown>(promise: () => Promise<T>): PromiseStateFactory<T, E>;\n export function wrap<T, E = unknown>(promise: Promise<T> | (() => Promise<T>)): (PromiseState<T, E>) | PromiseStateFactory<T, E> {\n const promiseResult = (typeof promise === 'function' ? promise() : promise) as State<T, E> & Promise<T>;\n if (typeof promise === 'function') {\n const p = promiseResult as unknown as PromiseStateFactory<T, E> & Promise<T>;\n p.factory = () => {\n return wrap(promise);\n }\n }\n if (promiseResult.status === undefined) {\n const p = promiseResult as unknown as PendingState & Promise<T>;\n p.status = 'pending';\n p.isPending = true;\n p.isFulfilled = false;\n p.isRejected = false;\n p.then(\n result => {\n console.log('result??', result)\n const p = promiseResult as unknown as FulfilledState<T>;\n p.status = 'fulfilled';\n p.isFulfilled = true;\n p.isRejected = false;\n p.isPending = false;\n p.value = result;\n },\n reason => {\n console.log('rejet??', reason)\n const p = promiseResult as unknown as RejectState<E>;\n p.status = 'rejected';\n p.isFulfilled = false;\n p.isRejected = true;\n p.isPending = false;\n p.reason = reason;\n }\n );\n }\n return promiseResult;\n }\n }\n}\n", "import { Promises } from '@dooboostore/core/promise/Promises';\n\nexport namespace ElementUtils {\n export type Attr = {name: string, value: any}\n\n export type LoadImageCallbackType = { onload: (img: HTMLImageElement) => void, onerror: OnErrorEventHandler };\n export type LoadAudioCallbackType = { onload: (img: HTMLAudioElement) => void, onerror: (e: ErrorEvent) => void };\n\n\n export function loadImage(src: string): Promise<HTMLImageElement>;\n export function loadImage(src: string, callback: LoadImageCallbackType): void;\n export function loadImage(src: string, callback?: LoadImageCallbackType): Promise<HTMLImageElement> | void {\n let targetCallback: (img: HTMLImageElement) => void;\n let promise: Promise<HTMLImageElement> | undefined = undefined;\n if (callback) {\n targetCallback = callback.onload;\n } else {\n const r = Promises.withResolvers<HTMLImageElement>();\n promise = r.promise;\n targetCallback = r.resolve;\n }\n const img = new Image();\n // img.crossOrigin = 'Anonymous';\n img.onload = () => {\n targetCallback(img);\n };\n if (callback && callback.onerror) {\n img.onerror = callback.onerror;\n }\n img.src = src;\n return promise;\n }\n\n export function loadAudio(src: string): Promise<HTMLAudioElement>;\n export function loadAudio(src: string, callback: LoadAudioCallbackType): void;\n export function loadAudio(src: string, callback?: LoadAudioCallbackType): Promise<HTMLAudioElement> | void {\n let targetCallback: (audio: HTMLAudioElement) => void;\n let error: (e: any) => void;\n let promise: Promise<HTMLAudioElement> | undefined = undefined;\n if (callback) {\n targetCallback = callback.onload;\n error = callback.onerror;\n } else {\n const r = Promises.withResolvers<HTMLAudioElement>();\n promise = r.promise;\n error = r.reject;\n targetCallback = r.resolve;\n }\n const audio = new Audio('path/to/audio1.mp3');\n audio.addEventListener('canplay', () => {\n targetCallback?.(audio);\n });\n audio.addEventListener('error', (e) => {\n callback?.onerror(e);\n });\n audio.load();\n return promise;\n }\n\n export const toInnerHTML = (documentFragment: DocumentFragment | HTMLElement, config: { document: Document }) => {\n // if (documentFragment) {\n const tempDiv = config.document.createElement('div');\n tempDiv.appendChild(documentFragment.cloneNode(true));\n // console.log('DocumentFragment innerHTML:', tempDiv.innerHTML);\n return tempDiv.innerHTML;\n // }\n }\n // export const fragmentToHTML = (fragment: DocumentFragment, config: { document: Document } = { document }): string => {\n // const tempDiv = config.document.createElement('div');\n // tempDiv.appendChild(fragment.cloneNode(true));\n // return tempDiv.innerHTML;\n // }\n\n export const htmlToFragment = (html: string, config: { document: Document } = { document }): DocumentFragment => {\n const tempDiv = config.document.createElement('div');\n tempDiv.innerHTML = html;\n const fragment = config.document.createDocumentFragment();\n while (tempDiv.firstChild) {\n fragment.appendChild(tempDiv.firstChild);\n }\n return fragment;\n }\n\n\n\n/*\n 17 // originalDiv \uC790\uCCB4\uC640 \uC18D\uC131\uB9CC \uBCF5\uC0AC\uD558\uACE0, childSpan\uC740 \uBCF5\uC0AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\n 18 const shallowCopy = originalDiv.cloneNode(false);\n 19 shallowCopy.id = 'shallowCopyDiv'; // ID \uBCC0\uACBD (\uC911\uBCF5 \uBC29\uC9C0)\n 20 console.log('\\n--- \uC595\uC740 \uBCF5\uC0AC\uBCF8 ---');\n 21 console.log(shallowCopy.outerHTML);\n 22 // \uC608\uC0C1 \uCD9C\uB825: <div id=\"shallowCopyDiv\" data-custom=\"\uC6D0\uBCF8 \uB370\uC774\uD130\"></div>\n 23\n 24 // 2. \uAE4A\uC740 \uBCF5\uC0AC (deep: true)\n 25 // originalDiv\uC640 \uADF8 \uC790\uC2DD\uC778 childSpan\uAE4C\uC9C0 \uBAA8\uB450 \uBCF5\uC0AC\uD569\uB2C8\uB2E4.\n 26 const deepCopy = originalDiv.cloneNode(true);\n 27 deepCopy.id = 'deepCopyDiv'; // ID \uBCC0\uACBD (\uC911\uBCF5 \uBC29\uC9C0)\n 28 console.log('\\n--- \uAE4A\uC740 \uBCF5\uC0AC\uBCF8 ---');\n 29 console.log(deepCopy.outerHTML);\n */\n\n export const replaceWith = (targetElement: Element, replaceElement: Element) => {\n targetElement.replaceWith(replaceElement);\n\n }\n export const nodeList = (documentFragment: DocumentFragment) => {\n return Array.from(documentFragment.childNodes)\n }\n\n export const cloneNodeList = (documentFragment: DocumentFragment) => {\n return Array.from(documentFragment.childNodes).map(node => node.cloneNode(true));\n }\n\n export const querySelector = (e: Element | {start: Element, end: Element}, selector: string) => {\n const elements = ElementUtils.querySelectorAll(e,selector);\n if (elements.length > 0 ) {\n return elements[0];\n } else {\n return null;\n }\n }\n\n export const querySelectorAll = (e: Element | {start: Node, end: Node}, selector: string) => {\n if (e instanceof Element) {\n return Array.from(e.querySelectorAll(selector));\n } else {\n const startNode = e.start;\n const endNode = e.end;\n if (startNode && endNode && startNode.parentNode === endNode.parentNode) {\n const elements: Element[] = [];\n let currentNode: Node | null = startNode.nextSibling;\n while (currentNode && currentNode !== endNode) {\n if (currentNode.nodeType === Node.ELEMENT_NODE) {\n const currentElement = currentNode as Element;\n if (currentElement.matches(selector)) {\n elements.push(currentElement);\n }\n elements.push(...Array.from(currentElement.querySelectorAll(selector)));\n }\n currentNode = currentNode.nextSibling;\n }\n return elements;\n }\n }\n return [];\n }\n\n\nexport const selectorElements = (selector: string, element: Element|Document = document): Element[] => {\n return Array.prototype.slice.call(element.querySelectorAll(selector));\n }\n\nexport const selectorNodes = (selector: string, element: Element|Document = document) => {\n return element.querySelectorAll(selector);\n }\n\nexport const removeAttribute = (result: Element, attrs: string[]) => {\n attrs.forEach(it => {\n result.removeAttribute(it)\n });\n }\n\nexport const setAttribute = (result: Element, attrs: string[]) => {\n attrs.forEach(it => {\n result.setAttribute(it, '')\n });\n }\n\nexport const setAttributeAttr = (result: Element, attrs: Attr[]) => {\n attrs.forEach(it => {\n result.setAttribute(it.name, it.value)\n });\n }\n\nexport const getAttributeToObject = (input: Element): any => {\n const attribute = {} as any;\n input.getAttributeNames().forEach(ait => {\n attribute[ait] = input.getAttribute(ait);\n });\n return attribute;\n }\n\nexport const getStyleToObject = (input: HTMLElement): any => {\n const style = {} as any;\n for (let i = 0; i < input.style.length; i++) {\n const key = input.style[i];\n style[key] = (input.style as any)[key];\n }\n return style;\n }\n}", "// within rangeResult.ts\n// @ts-ignore\nexport class RangeResult implements IteratorResult<number> {\n done: boolean;\n value: number;\n\n constructor(value: number | undefined, done: boolean) {\n this.done = done;\n this.value = value ?? 0;\n }\n}\n\nexport class RangeIterator implements Iterator<number> {\n private _first: number;\n private _current: number;\n private _last: number\n private _step: number\n constructor(first: number, last: number, step: number) {\n this._current = this._first = first;\n this._last = last;\n this._step = step;\n }\n\n next(value?: any): IteratorResult<number> {\n let r: RangeResult;\n if (this._first < this._last && this._current < this._last) {\n r = new RangeResult(this._current, false);\n this._current += this._step\n } else if (this._first < this._last && this._current === this._last) {\n r = new RangeResult(this._current, false);\n this._current += this._step\n } else if (this._first > this._last && this._current > this._last) {\n r = new RangeResult(this._current, false);\n this._current -= this._step\n } else if (this._first > this._last && this._current === this._last) {\n r = new RangeResult(this._current, false);\n this._current -= this._step\n } else if (this._current === this._last) {\n r = new RangeResult(this._current, false);\n this._current -= this._step\n } else {\n r = new RangeResult(undefined, true);\n }\n return r;\n }\n}\n\nexport class Range implements Iterable<number> {\n public readonly isRange = true;\n\n constructor(public first: number, public last: number, public step: number = 1) {\n }\n\n [Symbol.iterator](): Iterator<number> {\n return new RangeIterator(this.first, this.last, this.step);\n }\n\n map<U>(callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any): U[] {\n return Array.from(this).map(callbackfn)\n }\n\n public static range(first: number | string, last?: number, step: number = 1): Range {\n if (typeof first === 'number' && last === undefined) {\n return new Range(0, first, step);\n } else if (typeof first === 'string') {\n const [_first, _last = '0'] = first.split('..');\n const [__last, _step = '1'] = _last.split(',');\n return new Range(Number(_first.trim()), Number(__last.trim()), Number(_step.trim()));\n } else {\n return new Range(first, last ?? 0, step);\n }\n }\n}\n", "import { DomRenderConfig } from '../configs/DomRenderConfig';\nimport { ScriptUtils } from '@dooboostore/core-web/script/ScriptUtils';\nimport { ElementUtils } from '@dooboostore/core-web/element/ElementUtils';\nimport { Range } from '../iterators/Range';\nimport { DomRenderFinalProxy } from '../types/Types';\nimport { getDomRenderConfig } from '../DomRenderProxy';\nimport { ObjectUtils } from '@dooboostore/core/object/ObjectUtils';\n\ntype HandlerInfo = {\n element: HTMLElement;\n attr: string;\n type: 'link' | 'event' | 'event-param';\n priority: number;\n property?: string; // for link type\n};\nexport type NormalAttrDataType = {\n originalAttrValue: string;\n variablePaths: {origin: string, inner: string}[];\n}\nexport class EventManager {\n public static readonly attrPrefix = 'dr-';\n public readonly eventNames = [\n 'click', 'mousedown', 'mouseup', 'dblclick', 'mouseover', 'mouseout', 'mousemove', 'mouseenter', 'mouseleave', 'contextmenu',\n 'keyup', 'keydown', 'keypress', 'toggle',\n 'change', 'input', 'submit', 'resize', 'focus', 'blur',\n 'close', 'cancel'\n ];\n\n private readonly delegatableEventMap: { [key: string]: string } = {\n mouseleave: 'mouseout',\n mouseenter: 'mouseover',\n focus: 'focusin',\n blur: 'focusout',\n };\n private readonly directAttachEvents = new Set(['close']);\n\n public static ownerVariablePathAttrName = EventManager.attrPrefix + 'owner-variable-path';\n\n public static readonly eventParam = EventManager.attrPrefix + 'event';\n public static readonly onInitAttrName = EventManager.attrPrefix + 'on-init';\n public static readonly valueAttrName = EventManager.attrPrefix + 'value';\n public static readonly checkedAttrName = EventManager.attrPrefix + 'checked';\n public static readonly selectedAttrName = EventManager.attrPrefix + 'selected';\n public static readonly readonlyAttrName = EventManager.attrPrefix + 'readonly';\n public static readonly disabledAttrName = EventManager.attrPrefix + 'disabled';\n public static readonly hiddenAttrName = EventManager.attrPrefix + 'hidden';\n public static readonly requiredAttrName = EventManager.attrPrefix + 'required';\n public static readonly openAttrName = EventManager.attrPrefix + 'open';\n\n // link\uB294 \uC4F0\uC9C0 \uC54A\uB294\uAC78 \uCD94\uCC9C\uD55C\uB2E4 \uB77C\uC774\uD504 \uC0AC\uC774\uD074 \uAF2C\uC778\uB2E4 \uB2E4\uB978 \uD504\uB808\uC784\uC6CC\uD06C\uC5D0\uC11C\uB3C4 \uC591\uBC29\uD5A5\uC740 \uC9C0\uC591 \uD55C\uB2E4\n public static linkAttrs = [\n {name: EventManager.attrPrefix + 'value-link', property: 'value', event: 'input'},\n {name: EventManager.attrPrefix + 'hidden-link', property: 'value', event: 'input'},\n {name: EventManager.attrPrefix + 'required-link', property: 'value', event: 'input'},\n {name: EventManager.attrPrefix + 'checked-link', property: 'checked', event: 'change'},\n {name: EventManager.attrPrefix + 'open-link', property: 'open', event: 'toggle'},\n ]\n // @ts-ignore \uD569\uC131\uC774\uBCA4\uD2B8(Synthetic) \uCC98\uB9AC\uD558\uBA74\uC11C \uC758\uBBF8\uAC00 \uC5C6\uC5B4\uC84C\uB2E4\n public static readonly linkTargetMapAttrName = EventManager.attrPrefix + 'link-variables';\n\n public static readonly onRenderedInitAttrName = EventManager.attrPrefix + 'on-rendered-init';\n\n public static readonly attrAttrName = EventManager.attrPrefix + 'attr';\n public static readonly normalAttrMapAttrName = EventManager.attrPrefix + 'normal-attr-map';\n public static readonly styleAttrName = EventManager.attrPrefix + 'style';\n public static readonly classAttrName = EventManager.attrPrefix + 'class';\n\n public static readonly VALUE_VARNAME = '$value';\n public static readonly SCRIPTS_VARNAME = '$scripts';\n public static readonly FAG_VARNAME = '$fag';\n public static readonly RAWSET_VARNAME = '$rawSet';\n public static readonly RENDER_VARNAME = '$render';\n public static readonly NEAR_THIS_VARNAME = '$nearThis';\n public static readonly PARENT_THIS_VARNAME = '$parentThis';\n public static readonly ROOT_OBJECT_VARNAME = '$rootObject';\n public static readonly SCRIPT_UTILS_VARNAME = '$scriptUtils';\n public static readonly RANGE_VARNAME = '$range';\n public static readonly ROUTER_VARNAME = '$router';\n public static readonly INNER_HTML_VARNAME = '$innerHTML';\n public static readonly ELEMENT_VARNAME = '$element';\n public static readonly TARGET_VARNAME = '$target';\n public static readonly EVENT_VARNAME = '$event';\n public static readonly COMPONENT_VARNAME = '$component';\n public static readonly INNERHTML_VARNAME = '$innerHTML';\n public static readonly ATTRIBUTE_VARNAME = '$attribute';\n public static readonly CREATOR_META_DATA_VARNAME = '$creatorMetaData';\n public static readonly PARENT_THIS_PATH_VARNAME = '$parentPath';\n public static readonly CURRENT_THIS_VARNAME = '$currentThis';\n public static readonly CURRENT_THIS_PATH_VARNAME = '$currentThisPath';\n public static readonly NEAR_THIS_PATH_VARNAME = '$nearThisPath';\n public static readonly VARNAMES = [EventManager.SCRIPTS_VARNAME, EventManager.FAG_VARNAME, EventManager.RAWSET_VARNAME, EventManager.RANGE_VARNAME, EventManager.ROUTER_VARNAME, EventManager.ELEMENT_VARNAME, EventManager.TARGET_VARNAME, EventManager.EVENT_VARNAME, EventManager.COMPONENT_VARNAME, EventManager.INNERHTML_VARNAME, EventManager.ATTRIBUTE_VARNAME, EventManager.ATTRIBUTE_VARNAME, EventManager.CREATOR_META_DATA_VARNAME, EventManager.PARENT_THIS_PATH_VARNAME, EventManager.PARENT_THIS_VARNAME];\n\n public static readonly WINDOW_EVENT_POPSTATE = 'popstate';\n public static readonly WINDOW_EVENT_RESIZE = 'resize';\n public static readonly WINDOW_EVENTS = [EventManager.WINDOW_EVENT_POPSTATE, EventManager.WINDOW_EVENT_RESIZE];\n public static readonly noDetectAttr = [EventManager.normalAttrMapAttrName]\n public static readonly attrNames = [\n EventManager.valueAttrName,\n EventManager.checkedAttrName,\n EventManager.selectedAttrName,\n EventManager.readonlyAttrName,\n EventManager.disabledAttrName,\n EventManager.hiddenAttrName,\n EventManager.requiredAttrName,\n EventManager.openAttrName,\n EventManager.attrAttrName,\n EventManager.normalAttrMapAttrName,\n EventManager.styleAttrName,\n EventManager.classAttrName,\n EventManager.attrPrefix + 'window-event-' + EventManager.WINDOW_EVENT_POPSTATE,\n EventManager.attrPrefix + 'window-event-' + EventManager.WINDOW_EVENT_RESIZE,\n EventManager.onInitAttrName,\n ...EventManager.linkAttrs.map(it => it.name),\n this.eventParam\n ];\n readonly bindScript = `\n const ${EventManager.VALUE_VARNAME} = this.__render.value;\n const ${EventManager.SCRIPTS_VARNAME} = this.__render.scripts;\n const ${EventManager.RANGE_VARNAME} = this.__render.range;\n const ${EventManager.ROUTER_VARNAME} = this.__render.router;\n const ${EventManager.ATTRIBUTE_VARNAME} = this.__render.attribute;\n const ${EventManager.ELEMENT_VARNAME} = this.__render.element;\n const ${EventManager.COMPONENT_VARNAME} = this.__render.element.component;\n const ${EventManager.TARGET_VARNAME} = this.__render.target;\n const ${EventManager.EVENT_VARNAME} = this.__render.event;\n `;\n\n constructor(private window: Window) {\n this.eventNames.forEach(it => {\n EventManager.attrNames.push(EventManager.attrPrefix + 'event-' + it);\n });\n EventManager.attrNames.push(EventManager.onRenderedInitAttrName);\n\n if (typeof window !== 'undefined') {\n EventManager.WINDOW_EVENTS.forEach(eventName => {\n window?.addEventListener(eventName, (event) => {\n const targetAttr = `dr-window-event-${eventName}`;\n document.querySelectorAll(`[${targetAttr}]`).forEach(it => {\n const script = it.getAttribute(targetAttr);\n if (script) {\n const obj = this.findComponentInstance(it as HTMLElement);\n const config = getDomRenderConfig(obj);\n ScriptUtils.evaluate(`${this.bindScript} ${script} `, this.createExecutionContext(event, it as HTMLElement, obj, config));\n }\n });\n });\n });\n\n const rootElement = this.window.document;\n const listeningEvents = new Set<string>();\n this.eventNames.forEach(eventName => {\n if (this.directAttachEvents.has(eventName)) {\n return;\n }\n const delegatedEventName = this.delegatableEventMap[eventName] || eventName;\n\n if (listeningEvents.has(delegatedEventName)) {\n return;\n }\n listeningEvents.add(delegatedEventName);\n rootElement.addEventListener(delegatedEventName, this.handleEvent.bind(this), true);\n });\n }\n }\n\n private handleEvent(event: Event) {\n const handlers = this.collectHandlers(event);\n // console.log('handlers', handlers, event);\n for (const handler of handlers) {\n if (event.cancelBubble) {\n break;\n }\n\n const componentInstance = this.findComponentInstance(handler.element);\n if (!componentInstance) {\n continue;\n }\n // console.log('executeHandler', event,handler,componentInstance)\n this.executeHandler(event, handler, componentInstance);\n }\n }\n\n private collectHandlers(event: Event): HandlerInfo[] {\n const handlers: HandlerInfo[] = [];\n const root = this.window.document;\n if (!root) return handlers;\n\n const initialTarget = event.target as Node;\n let currentTarget: HTMLElement | null = (initialTarget.nodeType === 1)\n ? (initialTarget as HTMLElement)\n : initialTarget.parentElement;\n const collectedElements = new Set<HTMLElement>();\n\n const eventMap: { [key: string]: string } = {\n mouseout: 'mouseleave',\n mouseover: 'mouseenter',\n focusout: 'blur',\n focusin: 'focus'\n };\n const mappedEventName = eventMap[event.type] || event.type;\n\n while (currentTarget) {\n if (collectedElements.has(currentTarget)) {\n break;\n }\n\n // Priority 1: Link attributes\n const matchingLinkAttr = EventManager.linkAttrs.find(la => la.event === mappedEventName && currentTarget?.hasAttribute(la.name));\n if (matchingLinkAttr) {\n handlers.push({\n element: currentTarget,\n attr: matchingLinkAttr.name,\n type: 'link',\n priority: 1,\n property: matchingLinkAttr.property\n });\n }\n\n // Priority 2: dr-event-* attributes\n const eventAttr = `${EventManager.attrPrefix}event-${mappedEventName}`;\n if (currentTarget.hasAttribute(eventAttr)) {\n handlers.push({\n element: currentTarget,\n attr: eventAttr,\n type: 'event',\n priority: 2\n });\n }\n\n // Priority 3: dr-event with params\n const eventParamAttr = EventManager.eventParam;\n if (currentTarget.hasAttribute(eventParamAttr)) {\n const bindEvents = currentTarget.getAttribute(`${eventParamAttr}:bind`);\n if (bindEvents && bindEvents.split(',').map(s => s.trim()).includes(mappedEventName)) {\n handlers.push({\n element: currentTarget,\n attr: eventParamAttr,\n type: 'event-param',\n priority: 3\n });\n }\n }\n\n collectedElements.add(currentTarget);\n\n if (currentTarget === root.documentElement) {\n break;\n }\n\n currentTarget = currentTarget.parentElement;\n }\n\n return handlers.sort((a, b) => a.priority - b.priority);\n }\n\n private findComponentInstance(element: HTMLElement | null): any {\n let current = element;\n const root = this.window.document;\n while (current) {\n if ((current as any).obj) {\n return (current as any).obj;\n }\n if (current === root.documentElement) {\n break;\n }\n current = current.parentElement;\n }\n return this.window;\n }\n\n private createExecutionContext(event: Event, element: HTMLElement, componentInstance: any, config: DomRenderConfig | undefined, extraVars = {}) {\n // console.log('---------->', config?.eventVariables)\n return Object.assign(componentInstance, {\n __render: Object.freeze({\n event,\n element,\n target: event.target,\n attribute: ElementUtils.getAttributeToObject(element),\n router: config?.router,\n range: Range.range,\n scripts: EventManager.setBindProperty(config?.scripts, componentInstance),\n ...config?.eventVariables,\n ...extraVars\n })\n });\n }\n\n private executeHandler(event: Event, handler: HandlerInfo, componentInstance: any) {\n const {element, type, attr} = handler;\n const config = getDomRenderConfig(componentInstance);\n\n switch (type) {\n case 'link':\n const varName = element.getAttribute(attr);\n if (!varName || !handler.property) return;\n\n if (attr.includes('leave') || attr.includes('enter') || attr.includes('focus') || attr.includes('blur')) {\n const relatedTarget = (event as MouseEvent).relatedTarget as Node;\n if (relatedTarget && element.contains(relatedTarget)) {\n return;\n }\n }\n\n const ownerVariablePath = element.getAttribute(EventManager.ownerVariablePathAttrName);\n let bindObj = componentInstance;\n if (ownerVariablePath) {\n bindObj = ScriptUtils.evaluateReturn(ownerVariablePath, componentInstance);\n }\n\n const mapScript = element.getAttribute(`${attr}:map`);\n let value = (element as any)[handler.property];\n\n if (mapScript) {\n const context = this.createExecutionContext(event, element, bindObj, config, {value});\n value = ScriptUtils.evaluate(`return ${mapScript}`, context);\n }\n\n if (typeof this.getValue(componentInstance, varName, bindObj) === 'function') {\n this.getValue(componentInstance, varName, bindObj)(value, event);\n } else {\n this.setValue(componentInstance, varName, value);\n }\n break;\n\n case 'event':\n const script = element.getAttribute(attr);\n if (!script) return;\n\n if (attr.endsWith('mouseleave') || attr.endsWith('mouseenter') || attr.endsWith('blur') || attr.endsWith('focus')) {\n const relatedTarget = (event as MouseEvent).relatedTarget as Node;\n if (relatedTarget && element.contains(relatedTarget)) {\n return;\n }\n }\n\n const context = this.createExecutionContext(event, element, componentInstance, config);\n const filterScript = element.getAttribute(`${attr}:filter`);\n let filter = true;\n // \uAC1C\uBC1C\uC790\uAC00 \uC0AC\uC6A9\uC911\uC5D0 \uBB38\uC81C\uAC00 \uBC1C\uC0DD\uB420(\uB514\uBC84\uAE45) \uBC84\uADF8\uB97C \uC720\uBC1C\uD560\uC218\uC788\uB294 \uAE30\uB2A5 \uD750\uB984\uC81C\uC5B4\uAC00 \uC548\uB420\uC218\uC788\uC5B4 \uAE30\uB2A5\uC744 \uC81C\uAC70\uD55C\uB2E4.\n // if (filterScript) {\n // filter = ScriptUtils.eval<boolean>(`${this.getBindScript(config)} return ${filterScript}`, context) ?? false;\n // }\n\n if (filter) {\n ScriptUtils.evaluate(`${this.getBindScript(config)} ${script}`, context);\n }\n\n // \uAC1C\uBC1C\uC790\uAC00 \uC0AC\uC6A9\uC911\uC5D0 \uBB38\uC81C\uAC00 \uBC1C\uC0DD\uB420(\uB514\uBC84\uAE45) \uBC84\uADF8\uB97C \uC720\uBC1C\uD560\uC218\uC788\uB294 \uAE30\uB2A5 \uD750\uB984\uC81C\uC5B4\uAC00 \uC548\uB420\uC218\uC788\uC5B4 \uAE30\uB2A5\uC744 \uC81C\uAC70\uD55C\uB2E4.\n // const hasDispatch = element.hasAttribute(`${attr}:dispatch`);\n // if (hasDispatch) {\n // element.dispatchEvent(new Event(event.type));\n // }\n break;\n\n case 'event-param':\n const paramScript = element.getAttribute(attr);\n if (!paramScript) return;\n\n if (attr.endsWith('mouseleave') || attr.endsWith('mouseenter') || attr.endsWith('blur') || attr.endsWith('focus')) {\n const relatedTarget = (event as MouseEvent).relatedTarget as Node;\n if (relatedTarget && element.contains(relatedTarget)) {\n return;\n }\n }\n\n const attributes = ElementUtils.getAttributeToObject(element);\n const params = {} as any;\n const prefix = attr + ':';\n Object.entries(attributes).filter(([k, v]) => k.startsWith(prefix)).forEach(([k, v]) => {\n params[k.slice(prefix.length)] = v;\n });\n\n const paramContext = this.createExecutionContext(event, element, componentInstance, config, {params});\n ScriptUtils.evaluate(`${this.getBindScript(config)} ${paramScript}`, paramContext);\n break;\n }\n }\n\n public findAttrElements(fragment: DocumentFragment | Element, config?: DomRenderConfig): Set<Element> {\n const elements = new Set<Element>();\n const addAttributes = config?.applyEvents?.map(it => it.attrName) ?? [];\n addAttributes.concat([...EventManager.attrNames]).forEach(attrName => {\n fragment?.querySelectorAll(`[${attrName}]`).forEach(it => {\n elements.add(it);\n });\n });\n return elements;\n }\n\n public applyEvent(obj: any, childNodes: Set<ChildNode> | Set<Element>, config?: DomRenderConfig) {\n childNodes.forEach(node => {\n if (node.nodeType === 1) {\n (node as any).obj = obj;\n }\n });\n\n this.procAttr<HTMLInputElement>(childNodes, EventManager.valueAttrName, (it, attribute) => {\n const script = attribute;\n if (script) {\n const data = ScriptUtils.evaluateReturn(script, obj);\n if (it.value !== data) {\n it.value = data;\n }\n }\n });\n this.procAttr<HTMLInputElement>(childNodes, EventManager.checkedAttrName, (it, attribute) => {\n const script = attribute;\n if (script) {\n const data = ScriptUtils.evaluateReturn(script, obj);\n if (it.checked!== data) {\n it.checked = data;\n }\n }\n });\n this.procAttr<HTMLOptionElement>(childNodes, EventManager.selectedAttrName, (it, attribute) => {\n const script = attribute;\n if (script) {\n const data = ScriptUtils.evaluateReturn(script, obj);\n if (it.selected!== data) {\n it.selected = data;\n }\n }\n });\n this.procAttr<HTMLInputElement>(childNodes, EventManager.readonlyAttrName, (it, attribute) => {\n const script = attribute;\n if (script) {\n const data = ScriptUtils.evaluateReturn(script, obj);\n if (it.readOnly!== data) {\n it.readOnly = data;\n }\n }\n });\n this.procAttr<HTMLInputElement>(childNodes, EventManager.disabledAttrName, (it, attribute) => {\n const script = attribute;\n if (script) {\n const data = ScriptUtils.evaluateReturn(script, obj);\n if (it.disabled!== data) {\n it.disabled = data;\n }\n }\n });\n this.procAttr<HTMLElement>(childNodes, EventManager.hiddenAttrName, (it, attribute) => {\n const script = attribute;\n if (script) {\n const data = ScriptUtils.evaluateReturn(script, obj);\n if (it.hidden!== data) {\n it.hidden = data;\n }\n }\n });\n this.procAttr<HTMLInputElement>(childNodes, EventManager.requiredAttrName, (it, attribute) => {\n const script = attribute;\n if (script) {\n const data = ScriptUtils.evaluateReturn(script, obj);\n if (it.required!== data) {\n it.required = data;\n }\n }\n });\n this.procAttr<HTMLDialogElement>(childNodes, EventManager.openAttrName, (it, attribute) => {\n const script = attribute;\n if (script) {\n const data = ScriptUtils.evaluateReturn(script, obj);\n if (it.open!== data) {\n it.open = data;\n }\n }\n });\n\n this.procAttr(childNodes, EventManager.normalAttrMapAttrName, (it, attribute) => {\n const map = new Map<string, NormalAttrDataType>(JSON.parse(attribute));\n map.forEach((v, k) => {\n\n const variablePaths = v.variablePaths;\n let targetScript = v.originalAttrValue;//typeof v.originalAttrValue === 'string' ? JSON.parse(v.originalAttrValue) : v.originalAttrValue;\n variablePaths.forEach(it => {\n let r = ObjectUtils.Path.toOptionalChainPath(it.inner);\n targetScript = targetScript.replaceAll(it.origin,`\\${${r}}`);\n })\n const data = ObjectUtils.Script.evaluate(`const $element = this.element; return ${'`'+targetScript+'`'} `, Object.assign(obj, {\n __render: Object.freeze({\n element: it,\n attribute: ElementUtils.getAttributeToObject(it)\n })\n }));\n if (data === null) {\n it.removeAttribute(k);\n } else {\n it.setAttribute(k, data);\n }\n });\n });\n\n EventManager.WINDOW_EVENTS.forEach(it => {\n this.procAttr<HTMLInputElement>(childNodes, EventManager.attrPrefix + 'window-event-' + it, (it, attribute) => {\n (it as any).obj = obj;\n });\n });\n\n EventManager.linkAttrs.forEach(linkInfo => {\n this.procAttr<HTMLElement>(childNodes, linkInfo.name, (it, varName) => {\n\n // console.log('ink??????????')\n if (varName) {\n const ownerVariablePathName = it.getAttribute(EventManager.ownerVariablePathAttrName);\n const mapScript = it.getAttribute(`${linkInfo.name}:map`);\n let bindObj = obj;\n if (ownerVariablePathName) {\n bindObj = ScriptUtils.evaluateReturn(ownerVariablePathName, obj);\n }\n const getValue = this.getValue(obj, varName, bindObj);\n if (typeof getValue === 'function' && getValue) {\n let setValue = (it as any)[linkInfo.property];\n if (mapScript) {\n setValue = ScriptUtils.evaluate(`${this.getBindScript(config)} return ${mapScript}`, Object.assign(bindObj, {__render: Object.freeze({element: it, target: bindObj, range: Range.range, value: setValue, scripts: EventManager.setBindProperty(config?.scripts, obj), ...config?.eventVariables})}));\n }\n getValue(setValue);\n } else if (getValue) {\n let setValue = getValue;\n if (mapScript) {\n setValue = ScriptUtils.evaluate(`${this.getBindScript(config)} return ${mapScript}`, Object.assign(bindObj, {__render: Object.freeze({element: it, target: bindObj, range: Range.range, value: setValue, scripts: EventManager.setBindProperty(config?.scripts, obj), ...config?.eventVariables})}));\n }\n if (setValue === null) {\n it.removeAttribute(linkInfo.property);\n } else {\n (it as any)[linkInfo.property] = setValue;\n }\n } else if (getValue === undefined) {\n this.setValue(obj, varName, (it as any)[linkInfo.property]);\n }\n }\n });\n });\n\n this.directAttachEvents.forEach(eventName => {\n const attr = `${EventManager.attrPrefix}event-${eventName}`;\n this.procAttr<HTMLElement>(childNodes, attr, (element, script) => {\n const handler = (event: Event) => {\n const componentInstance = this.findComponentInstance(element);\n if (!componentInstance) return;\n\n const context = this.createExecutionContext(event, element, componentInstance, config);\n const filterScript = element.getAttribute(`${attr}:filter`);\n let filter = true;\n if (filterScript) {\n filter = ScriptUtils.evaluate<boolean>(`${this.getBindScript(config)} return ${filterScript}`, context) ?? false;\n }\n if (filter) {\n ScriptUtils.evaluate(`${this.getBindScript(config)} ${script}`, context);\n }\n };\n element.addEventListener(eventName, handler);\n // TODO: Add logic to remove this listener when the element is destroyed.\n });\n });\n\n this.procAttr<HTMLElement>(childNodes, EventManager.onInitAttrName, (it, attribute) => {\n let script = attribute;\n if (script) {\n script = 'return ' + script;\n }\n if (script) {\n ScriptUtils.evaluate(`${this.getBindScript(config)}; ${script} `, Object.assign(obj, {\n __render: Object.freeze({\n element: it,\n attribute: ElementUtils.getAttributeToObject(it),\n ...config?.eventVariables\n })\n }));\n }\n });\n\n this.onRenderedEvent(obj, childNodes, config);\n this.changeVar(obj, childNodes, undefined, config);\n const elements = Array.from(childNodes).filter(it => it.nodeType === 1).map(it => it as Element);\n elements.forEach(it => {\n config?.applyEvents?.filter(ta => it.getAttribute(ta.attrName) !== null).forEach(ta => ta.callBack(it, it.getAttribute(ta.attrName)!, obj));\n });\n }\n\n public onRenderedEvent(obj: any, childNodes: Set<ChildNode> | Set<Element> | Node[], config?: DomRenderConfig) {\n this.procAttr<HTMLInputElement>(childNodes, EventManager.onRenderedInitAttrName, (it, attribute) => {\n if (!it.isConnected) {\n return;\n }\n let script = attribute;\n if (script) {\n script = 'return ' + script;\n }\n if (script) {\n ScriptUtils.evaluate(`${this.getBindScript(config)}; ${script} `, Object.assign(obj, {\n __render: Object.freeze({\n element: it,\n attribute: ElementUtils.getAttributeToObject(it),\n ...config?.eventVariables\n })\n }));\n }\n });\n }\n\n public changeVar(obj: any, elements: Set<Element> | Set<ChildNode>, varName?: string, config?: DomRenderConfig) {\n // console.log('changeVar', obj, elements, varName)\n this.procAttr(elements, EventManager.styleAttrName, (it, attribute) => {\n let script = attribute;\n if (script) {\n script = 'return ' + script;\n }\n if (EventManager.isUsingThisVar(script, varName) || varName === undefined) {\n const data = ScriptUtils.evaluate(`const $element = this.__render.element; ${script} `, Object.assign(obj, {\n __render: Object.freeze({\n element: it,\n attribute: ElementUtils.getAttributeToObject(it)\n })\n }));\n if (typeof data === 'string') {\n it.setAttribute('style', data);\n } else if (Array.isArray(data)) {\n it.setAttribute('style', data.join(';'));\n } else {\n for (const [key, value] of Object.entries(data)) {\n if (it instanceof HTMLElement) {\n (it.style as any)[key] = String(value);\n }\n }\n }\n }\n });\n\n this.procAttr(elements, EventManager.classAttrName, (it, attribute) => {\n let script = attribute;\n if (script) {\n script = 'return ' + script;\n }\n if (EventManager.isUsingThisVar(script, varName) || varName === undefined) {\n const data = ScriptUtils.evaluate(`const $element = this.element; ${script} `, Object.assign(obj, {\n __render: Object.freeze({\n element: it,\n attribute: ElementUtils.getAttributeToObject(it)\n })\n }));\n\n if (typeof data === 'string') {\n it.setAttribute('class', data);\n } else if (Array.isArray(data)) {\n it.setAttribute('class', data.join(' '));\n } else {\n for (const [key, value] of Object.entries(data)) {\n if (it instanceof HTMLElement) {\n if (value) {\n it.classList.add(key);\n } else {\n it.classList.remove(key);\n }\n }\n }\n }\n }\n });\n }\n\n public procAttr<T extends Element = Element>(elements: Set<Element> | Set<ChildNode> | Node[] = new Set(), attrName: string, callBack: (h: T, value: string, attributes: any) => void) {\n const sets = new Set<Element>();\n elements.forEach(it => {\n if (!it) {\n return;\n }\n if (it.nodeType === 1) {\n const e = it as Element;\n sets.add(e);\n e.querySelectorAll<T>(`[${attrName}]`).forEach(it => {\n sets.add(it);\n });\n }\n });\n sets.forEach(it => {\n const attr = it.getAttribute(attrName);\n const attrs = ElementUtils.getAttributeToObject(it);\n if (attr) {\n callBack(it as T, attr, attrs);\n }\n });\n }\n\n public getValue<T = any>(obj: any, name: string, bindObj?: any): T {\n let r = ObjectUtils.Script.evaluateReturn(name, obj);\n if (typeof r === 'function') {\n r = r.bind(bindObj ?? obj);\n }\n return r;\n }\n\n public setValue(obj: any, name: string, value?: any) {\n name = name.replaceAll('this.', 'this.this.');\n ScriptUtils.evaluate(`${name} = this.value;`, {\n this: obj,\n value: value\n });\n }\n\n public static isUsingThisVar(raws: string | null | undefined, varName: string | null | undefined): boolean {\n if (varName && raws) {\n if (varName.startsWith('this.')) {\n varName = varName.replace(/this\\./, '');\n }\n // TODO: \uD6D4.. \uAF2D\uD544\uC694\uD55C\uAC00..? \uD2B8\uB9AC\uAC70\uB420\uB54C \uC2A4\uD06C\uB9BD\uD2B8\uBCC0\uC218 \uAE4C\uC9C0 \uAC10\uC9C0\uD574\uC57C\uB420\uAE4C?\n EventManager.VARNAMES.forEach(it => {\n // raws = raws!.replace(RegExp(it.replace('$', '\\\\$'), 'g'), `this?.___${it}`);\n raws = raws!.replace(RegExp(it.replace('$', '\\\\$'), 'g'), `this.___${it}`);\n });\n const variablePaths = ObjectUtils.Path.detectPathFromScript(raws ?? '', {excludeThis: true});\n return variablePaths.has(varName);\n }\n return false;\n }\n\n public static setBindProperty(scripts: { [p: string]: any } | undefined, obj: any): { [p: string]: any } | undefined {\n if (scripts) {\n const newScripts = Object.assign({}, scripts);\n for (const [key, value] of Object.entries(newScripts)) {\n if (typeof value === 'function') {\n newScripts[key] = value.bind(obj);\n }\n }\n return newScripts;\n }\n }\n\n getBindScript(config?: DomRenderConfig) {\n if (config?.eventVariables) {\n const bindScript = Object.entries(config.eventVariables).filter(([key, value]) => !this.bindScript.includes(`const ${key}`)).map(([key, value]) => {\n return `const ${key} = this.__render.${key};`;\n }).join(';');\n return this.bindScript + '' + bindScript;\n } else {\n return this.bindScript;\n }\n }\n}\n\n", "import { AttrInitCallBack } from '../rawsets/AttrInitCallBack';\nimport { ElementInitCallBack } from '../rawsets/ElementInitCallBack';\nimport { ComponentSet } from '../components/ComponentSet';\nimport { RawSet } from '../rawsets/RawSet';\nimport { Render } from '../rawsets/Render';\nimport { Attrs } from '../rawsets/Attrs';\nimport { DomRenderConfig } from '../configs/DomRenderConfig';\nimport { ObjectUtils } from '@dooboostore/core/object/ObjectUtils';\n\nexport interface OperatorAround {\n beforeAttr?: (value: string | null | undefined, opratorExecutor: OperatorExecuter) => string | null | undefined,\n before?: (data: any, opratorExecutor: OperatorExecuter) => any,\n after?: (data: any, opratorExecutor: OperatorExecuter) => void,\n}\n\nexport enum ExecuteState {\n EXECUTE,\n NO_EXECUTE,\n STOP\n}\n\nexport type AfterCallBack = {\n onAttrInitCallBacks: AttrInitCallBack[],\n onElementInitCallBacks: ElementInitCallBack[],\n onThisComponentSetCallBacks: ComponentSet[]\n}\nexport type ReturnContainer = { raws: RawSet[], fag: DocumentFragment };\n\nexport type ElementSource = { element: Element, attrs: Attrs, attr?: string | null, attrName?: string | undefined };\n\nexport type Source = { config: DomRenderConfig, operatorAround?: OperatorAround, obj: any };\n\nexport abstract class OperatorExecuter<T = any> {\n constructor(public rawSet: RawSet,\n public render: Render,\n public returnContainer: ReturnContainer,\n public elementSource: ElementSource,\n public source: Source,\n public afterCallBack: AfterCallBack,\n public startingExecute = true) {\n };\n\n async start(): Promise<ExecuteState> {\n let attrValue = this.elementSource.attr;\n // console.log('OperatorExecuter ', attrValue, this);\n if (this.source.operatorAround?.beforeAttr) {\n attrValue = this.source.operatorAround.beforeAttr(attrValue, this) ?? '';\n }\n\n let r = attrValue;\n if (r && this.startingExecute) {\n const optionalPath = ObjectUtils.Path.toOptionalChainPath(attrValue);\n r = ObjectUtils.Script.evaluate(` ${this.render.bindScript}; return ${optionalPath}`, Object.assign(this.source.obj, {__render: this.render}));\n }\n if (this.source.operatorAround?.before) {\n r = this.source.operatorAround?.before(r, this);\n }\n\n const state = await this.execute(r as unknown as T)\n\n this.source.operatorAround?.after?.(r, this);\n return state;\n };\n\n abstract execute(value: T): Promise<ExecuteState>;\n}\n", "import {AfterCallBack, ElementSource, ExecuteState, OperatorExecuter, ReturnContainer, Source} from './OperatorExecuter';\nimport {RawSet} from '../rawsets/RawSet';\nimport {Render} from '../rawsets/Render';\n\nexport class DrPre extends OperatorExecuter<null> {\n constructor(rawSet: RawSet, render: Render, returnContainer: ReturnContainer, elementSource: ElementSource, source: Source, afterCallBack: AfterCallBack) {\n source.operatorAround = undefined;\n super(rawSet, render, returnContainer, elementSource, source, afterCallBack);\n }\n\n async execute(value: null): Promise<ExecuteState> {\n return (value != null) ? ExecuteState.EXECUTE : ExecuteState.NO_EXECUTE;\n }\n}\n", "import {RawSet} from '../rawsets/RawSet';\nimport {Render} from '../rawsets/Render';\nimport {AfterCallBack, ElementSource, ExecuteState, OperatorExecuter, ReturnContainer, Source} from './OperatorExecuter';\n\nexport abstract class OperatorExecuterAttrRequire<T> extends OperatorExecuter<T> {\n constructor(rawSet: RawSet,\n render: Render,\n returnContainer: ReturnContainer,\n elementSource: ElementSource,\n source: Source,\n afterCallBack: AfterCallBack,\n startingExecute = true) {\n super(rawSet, render, returnContainer, elementSource, source, afterCallBack, startingExecute);\n };\n\n async execute(data: T): Promise<ExecuteState> {\n if (!this.elementSource.attr) {\n return ExecuteState.NO_EXECUTE;\n }\n return await this.executeAttrRequire(data);\n }\n\n protected abstract executeAttrRequire(attr: T): Promise<ExecuteState>;\n}\n", "import {OperatorExecuterAttrRequire} from './OperatorExecuterAttrRequire';\nimport {ScriptUtils} from '@dooboostore/core-web/script/ScriptUtils';\nimport {RawSet} from '../rawsets/RawSet';\nimport {Render} from '../rawsets/Render';\nimport {AfterCallBack, ElementSource, ExecuteState, ReturnContainer, Source} from './OperatorExecuter';\n\nexport class Dr extends OperatorExecuterAttrRequire<null> {\n constructor(rawSet: RawSet, render: Render, returnContainer: ReturnContainer, elementSource: ElementSource, source: Source, afterCallBack: AfterCallBack) {\n super(rawSet, render, returnContainer, elementSource, source, afterCallBack);\n }\n\n async executeAttrRequire(data: null): Promise<ExecuteState> {\n const itRandom = RawSet.drItOtherEncoding(this.elementSource.element);\n const vars = RawSet.drVarEncoding(this.elementSource.element, this.elementSource.attrs.drVarOption ?? '');\n const newTemp = this.source.config.window.document.createElement('temp');\n ScriptUtils.evaluate(`\n ${this.render.bindScript}\n const n = $element.cloneNode(true);\n var destIt = ${this.elementSource.attrs.drItOption};\n if (destIt !== undefined) {\n n.getAttributeNames().forEach(it => n.setAttribute(it, n.getAttribute(it).replace(/\\\\#it\\\\#/g, destIt)))\n // console.log('----', n.innerHTML);\n n.innerHTML = n.innerHTML.replace(/\\\\#it\\\\#/g, destIt);\n // console.log('----', n.innerHTML);\n }\n if (this.__render.drStripOption === 'true') {\n Array.from(n.childNodes).forEach(it => this.__fag.append(it));\n } else {\n this.__render.fag.append(n);\n }`, Object.assign(this.source.obj, {\n __render: Object.freeze({\n fag: newTemp,\n drStripOption: this.elementSource.attrs.drStripOption,\n ...this.render\n } as Render)\n }));\n RawSet.drVarDecoding(newTemp, vars);\n RawSet.drItOtherDecoding(newTemp, itRandom);\n const tempalte = this.source.config.window.document.createElement('template');\n tempalte.innerHTML = newTemp.innerHTML;\n this.returnContainer.fag.append(tempalte.content)\n const rr = RawSet.checkPointCreates(this.returnContainer.fag, this.source.obj, this.source.config)\n this.elementSource.element.parentNode?.replaceChild(this.returnContainer.fag, this.elementSource.element);\n this.returnContainer.raws.push(...rr);\n return ExecuteState.EXECUTE;\n }\n}\n", "import { OperatorExecuterAttrRequire } from './OperatorExecuterAttrRequire';\nimport { ScriptUtils } from '@dooboostore/core-web/script/ScriptUtils';\nimport { RawSet } from '../rawsets/RawSet';\nimport { Render } from '../rawsets/Render';\nimport { AfterCallBack, ElementSource, ExecuteState, ReturnContainer, Source } from './OperatorExecuter';\nimport { ObjectUtils } from '@dooboostore/core/object/ObjectUtils';\n\nexport class DrIf extends OperatorExecuterAttrRequire<string> {\n constructor(rawSet: RawSet, render: Render, returnContainer: ReturnContainer, elementSource: ElementSource, source: Source, afterCallBack: AfterCallBack) {\n source.operatorAround = undefined;\n super(rawSet, render, returnContainer, elementSource, source, afterCallBack, false);\n }\n\n async executeAttrRequire(attr: string): Promise<ExecuteState> {\n const itRandom = RawSet.drItOtherEncoding(this.elementSource.element, 'DrIf');\n const vars = RawSet.drVarEncoding(this.elementSource.element, this.elementSource.attrs.drVarOption ?? '');\n const newTemp = this.source.config.window.document.createElement('temp');\n // Object.entries(this.__render.drAttr).filter(([k,v]) => k !== 'drIf' && v).forEach(([k, v]) => n.setAttribute(this.__render.drAttrsOriginName[k], v)); <-- \uC774\uBD80\uBD84\uC740 \uB2E4\uB978 attr\uC5D0\uB3C4 \uC801\uC6A9\uC744 \uD560\uC9C0\uB9D0\uC9C0 \uC0DD\uAC01\uD574\uC57C\uB428 \uC5D8\uB9AC\uBA3C\uD2B8 \uC874\uC7AC\uC720\uBB34\uC5D0 \uB530\uB77C\uC11C \uC801\uC6A9\uC744 \uD560\uC9C0\uB9D0\uC9C0 \uACB0\uC815\uD574\uC57C\uB428\n const keepgoing = ObjectUtils.Script.evaluate(`\n ${this.render.bindScript}\n ${this.elementSource.attrs.drBeforeOption ?? ''}\n if ($rawSet.data === (${ObjectUtils.Path.toOptionalChainPath(attr)})) {\n return false;\n }\n $rawSet.data = ${ObjectUtils.Path.toOptionalChainPath(attr)};\n if($rawSet.data) {\n const n = $element.cloneNode(true);\n Object.entries(this.__render.drAttr).filter(([k,v]) => k !== 'drIf' && v).forEach(([k, v]) => n.setAttribute(this.__render.drAttrsOriginName[k], v));\n var destIt = ${this.elementSource.attrs.drItOption};\n if (destIt !== undefined) {\n // \uC5EC\uAE30\uAC00 ..\uC544\uC8FC \uD5DB\uAC08\uB9AC\uB294\uB370...\n Array.from(n.getAttributeNames()).forEach(it => n.setAttribute(it, n.getAttribute(it).replace(/\\\\#DrIFIt\\\\#/g, destIt)))\n n.innerHTML = n.innerHTML.replace(/\\\\#DrIFIt\\\\#/g, destIt);\n }\n if (this.__render.drStripOption === 'true') {\n Array.from(n.childNodes).forEach(it => this.__render.fag.append(it));\n } else {\n this.__render.fag.append(n);\n }\n }\n ${this.elementSource.attrs.drAfterOption ?? ''};\n return true;\n `, Object.assign(this.source.obj,\n {\n __render: Object.freeze({\n fag: newTemp,\n drAttr: this.elementSource.attrs,\n drAttrsOriginName: RawSet.drAttrsOriginName,\n drStripOption: this.elementSource.attrs.drStripOption,\n ...this.render\n } as Render)\n }\n ));\n // TODO: \uBB50\uC9C0?? \uC9C0\uC6CC\uC57C\uB418\uB294\uAC70 \uC544\uB2CC\uAC00?\n if (keepgoing === false) {\n return ExecuteState.STOP;\n }\n RawSet.drVarDecoding(newTemp, vars);\n RawSet.drItOtherDecoding(newTemp, itRandom);\n // const bypass = (newTemp.innerHTML ?? '').trim().length <= 0;\n const tempalte = this.source.config.window.document.createElement('template');\n tempalte.innerHTML = newTemp.innerHTML;\n this.returnContainer.fag.append(tempalte.content);\n const rr = RawSet.checkPointCreates(this.returnContainer.fag, this.source.obj, this.source.config);\n this.elementSource.element.parentNode?.replaceChild(this.returnContainer.fag, this.elementSource.element);\n this.returnContainer.raws.push(...rr);\n return ExecuteState.EXECUTE;\n }\n}\n", "export class Shield {\n [name: string]: any\n}\nexport class DomRenderFinalProxy<T extends object> implements ProxyHandler<T> {\n set(target: T, p: string | symbol, value: any, receiver: any): boolean {\n (target as any)[p] = value;\n return true;\n }\n\n get(target: T, p: string | symbol, receiver: any): any {\n return (target as any)[p];\n }\n\n public static final<T = any> (obj: T): T {\n (obj as any)._DomRender_isFinal = true;\n return obj;\n }\n\n public static isFinal<T = any> (obj: T) {\n return '_DomRender_isFinal' in (obj as any);\n }\n\n public static unFinal<T = any> (obj: T): T {\n delete (obj as any)._DomRender_isFinal;\n return obj;\n }\n\n has(target: T, p: string | symbol): boolean {\n return p === '_DomRender_isFinal' || p in target;\n }\n}\n\n", "import { DomRenderFinalProxy } from '../types/Types';\n\nexport type ComponentSetConfig = {objPath?: string | null, beforeComponentSet?: ComponentSet};\nexport class ComponentSet<T = any> {\n private _config: ComponentSetConfig;\n private _template?: string;\n private _styles?: string[] | string;\n constructor(public obj: T, source: {template?: string, styles?: (string[]) | string}, config?: ComponentSetConfig) {\n this._template = source.template;\n this._styles = source.styles;\n this._config = DomRenderFinalProxy.final(Object.assign({objPath: 'obj'} as ComponentSetConfig, config))\n }\n get template() {\n return this._template;\n }\n get styles() {\n return this._styles;\n }\n get config() {\n return this._config;\n }\n public setTemplateStyle(set: {template?: string, styles?: string | (string[])}) {\n this._template = set.template;\n this._styles = set.styles;\n }\n}\n", "export interface OnDrThisUnBind {\n onDrThisUnBind(): void;\n}\nexport const isOnDrThisUnBind = (obj: any): obj is OnDrThisUnBind => {\n return typeof obj?.onDrThisUnBind === 'function';\n}", "export interface OnDrThisBind {\n onDrThisBind(): void;\n}\nexport const isOnDrThisBind = (obj: any): obj is OnDrThisBind => {\n return typeof obj?.onDrThisBind === 'function';\n}", "import { OperatorExecuterAttrRequire } from './OperatorExecuterAttrRequire';\nimport { RawSet } from '../rawsets/RawSet';\nimport { ComponentSet } from '../components/ComponentSet';\nimport { ExecuteState } from './OperatorExecuter';\nimport { isOnDrThisUnBind } from '../lifecycle/dr-this/OnDrThisUnBind';\nimport { isOnDrThisBind } from '../lifecycle/dr-this/OnDrThisBind';\nimport { ScriptUtils } from '@dooboostore/core-web/script/ScriptUtils';\nimport { Render } from '../rawsets/Render';\n\nexport class DrThis extends OperatorExecuterAttrRequire<string> {\n async executeAttrRequire(attr: any): Promise<ExecuteState> {\n // const e = this.elementSource;\n // console.log('drThis!!!!!!!!!!!!!', this.elementSource.attrs.drDetectIfOption, this.elementSource.attrs.drIfOption);\n const optionIf = this.elementSource.attrs.drDetectIfOption ?? this.elementSource.attrs.drIfOption;\n const ok = ScriptUtils.evaluate(`\n ${this.render.bindScript}\n try {\n const ok = ${this.elementSource.attrs.drThis};\n const option = ${optionIf};\n if (option!==null) {\n return !!(ok && option); \n }\n // console.log('vv', ${this.elementSource.attrs.drThis}, ${this.elementSource.attrs.drIfOption}, '${this.elementSource.attrs.drIfOption}');\n return !!ok;\n } catch(e) {\n return false;\n }\n `, Object.assign(this.source.obj,\n {\n __render: Object.freeze({\n drAttr: this.elementSource.attrs,\n drAttrsOriginName: RawSet.drAttrsOriginName,\n ...this.render\n } as Render)\n }\n ));\n // console.log('----zxvxcv-----!!!aa!', ok);\n // if (!ok) {\n // this.elementSource.element.remove();\n // return ExecuteState.STOP;\n // }\n\n // console.log('----zxvxcv-----!!!!', attr);\n if (attr && this.elementSource.attrs.drThis && ok) {\n let thisPath = this.elementSource.attrs.drThis;\n // let optionIf = this.elementSource.attrs.drIfOption;\n // console.log('drThis!!!!!!!!!!!!!, ', optionIf)\n if (attr instanceof ComponentSet) {\n // console.log('drThis!!!!!!!!!!->', attr)\n // if (this.rawSet.data) {\n // const destroyOptions = this.elementSource.attrs.drDestroyOption?.split(',') ?? [];\n // debugger;\n // RawSet.destroy((this.rawSet.data as ComponentSet).obj, [], this.source.config, destroyOptions);\n // }\n if (attr.config?.beforeComponentSet?.obj !== attr.obj) {\n if (isOnDrThisUnBind(attr.config.beforeComponentSet?.obj)) {\n attr.config.beforeComponentSet?.obj?.onDrThisUnBind?.();\n }\n }\n // this.rawSet.dataSet ??= {};\n // this.rawSet.dataSet.data = attr;\n if (attr.config?.beforeComponentSet?.obj !== attr.obj) {\n if (isOnDrThisBind(attr.obj)) {\n attr.obj?.onDrThisBind?.();\n }\n }\n // \uC911\uC694: componentSet \uC758 objPath\uB97C \uBCF4\uACE0 \uD310\uB2E8\uD558\uB294 \uC911\uC694\uD55C\uBD80\uBD84\n thisPath = `${this.elementSource.attrs.drThis}${attr.config.objPath ? ('.' + attr.config.objPath) : ''}`;\n // const zthisPath = `${this.elementSource.attrs.drThis}${attr.config.objPath ? ('?.' + attr.config.objPath) : ''}`;\n // console.log('thisPaththisPaththisPath',thisPath)\n this.setThisPath(thisPath);\n const componentBody = await RawSet.drThisCreate(this.rawSet, this.elementSource.element, thisPath, this.elementSource.attrs.drVarOption ?? '', this.elementSource.attrs.drStripOption, this.source.obj, this.source.config, attr);\n if (componentBody) {\n this.returnContainer.fag.append(componentBody)\n this.afterCallBack.onThisComponentSetCallBacks.push(attr);\n }\n\n } else {\n this.setThisPath(thisPath);\n const fragment = await RawSet.drThisCreate(this.rawSet, this.elementSource.element, this.elementSource.attrs.drThis, this.elementSource.attrs.drVarOption ?? '', this.elementSource.attrs.drStripOption, this.source.obj, this.source.config);\n if (fragment) {\n this.returnContainer.fag.append(fragment)\n }\n }\n\n\n // console.log('!!!!!!!!!zzz', Array.from(this.returnContainer.fag.childNodes), this.elementSource.element);\n const rr = RawSet.checkPointCreates(this.returnContainer.fag, this.source.obj, this.source.config)\n this.elementSource.element.parentNode?.replaceChild(this.returnContainer.fag, this.elementSource.element);\n this.returnContainer.raws.push(...rr);\n } else {\n this.elementSource.element.remove();\n }\n return ExecuteState.EXECUTE;\n }\n\n\n setThisPath(thisPath: string) {\n\n // if (this.rawSet.point.start instanceof HTMLMetaElement && this.rawSet.point.end instanceof HTMLMetaElement) {\n\n if (this.rawSet.point.start instanceof this.source.config.window.HTMLMetaElement && this.rawSet.point.end instanceof this.source.config.window.HTMLMetaElement) {\n this.rawSet.point.start.setAttribute('this-path', thisPath)\n this.rawSet.point.end.setAttribute('this-path', thisPath)\n }\n }\n}\n", "\nexport type Valid<T = any, E = Element> = (value?: T, target?: E, event?: Event) => boolean;\nexport type ValidAction<T = any, E = Element> = (valid: boolean, value?: T, target?: E, event?: Event) => void;\n// export interface Valid<T = any, E = Element> {\n// valid(value?: T, target?: E, event?: Event): boolean;\n// }\nexport abstract class Validator<T = any, E = Element> {\n private _target?: E;\n private _event?: Event;\n private _autoValid!: boolean;\n private _autoValidAction!: boolean;\n private _validAction?: ValidAction<T, E>;\n constructor(protected _value?: T, target?: E, event?: Event, autoValid = true, autoValidAction = true) {\n this.setTarget(target);\n this.setEvent(event);\n this.setAutoValid(autoValid)\n this.setAutoValidAction(autoValidAction)\n }\n\n getValidAction(): ValidAction<T, E> | undefined {\n return this._validAction;\n }\n\n setValidAction(value: ValidAction<T, E>) {\n this._validAction = value;\n return this;\n }\n\n getAutoValid() {\n return this._autoValid;\n }\n\n setAutoValid(autoValid: boolean) {\n this._autoValid = autoValid;\n return this;\n }\n\n getAutoValidAction() {\n return this._autoValidAction;\n }\n\n setAutoValidAction(autoValid: boolean) {\n this._autoValidAction = autoValid;\n return this;\n }\n\n getEvent() {\n return this._event;\n }\n\n setEvent(event: Event | undefined) {\n if (event) {\n this._event = this.domRenderFinal(event);\n }\n return this;\n }\n\n getTarget() {\n return this._target;\n }\n\n targetFocus() {\n (this._target as any)?.focus?.();\n }\n\n targetReset() {\n (this._target as any)?.reset?.();\n }\n\n targetDispatchEvent(event: Event) {\n return (this._target as any)?.dispatchEvent(event);\n }\n\n setTarget(target: E | undefined) {\n if (target) {\n this._target = this.domRenderFinal(target);\n }\n return this;\n }\n\n private domRenderFinal(obj: any) {\n (obj as any)._DomRender_isFinal = true;\n return obj\n }\n\n get value(): T | undefined {\n if (this._value === undefined || this._value === null) {\n this._value = (this.getTarget() as any)?.value;\n }\n return this._value;\n }\n\n set value(value: T | undefined) {\n // console.log('---?set?', value, this)\n this._value = value;\n this.tickValue(value);\n }\n\n protected tickValue(value: T | undefined) {\n this.changeValue(value);\n const target = this.getTarget() as any;\n if (target && target?.value !== undefined && target?.value !== null) {\n try {\n target.value = this._value;\n } catch (e) {\n console.error('set value function is blocked ')\n }\n }\n if (this.getAutoValidAction()) {\n this.validAction();\n } else if (this.getAutoValid()) {\n this.valid();\n }\n }\n\n set(value?:T, target?: E, event?: Event) {\n this.setTarget(target);\n this.setEvent(event)\n this.value = value;\n }\n\n changeValue(value: T | undefined) {\n }\n\n get checked(): boolean {\n return (this.getTarget() as any)?.checked ?? false;\n }\n\n set checked(checked: boolean) {\n const target = this.getTarget() as any;\n if (target) {\n target.checked = checked;\n }\n }\n\n get selectedIndex(): number {\n return (this.getTarget() as any)?.selectedIndex ?? -1;\n }\n\n set selectedIndex(selectedIndex: number) {\n const target = this.getTarget() as any;\n if (target) {\n target.selectedIndex = selectedIndex;\n }\n }\n\n public querySelector(selector: string) {\n return (this.getTarget() as unknown as Element)?.querySelector(selector);\n }\n\n public querySelectorALL(selector: string) {\n return (this.getTarget() as unknown as Element)?.querySelectorAll(selector);\n }\n\n public validAction() {\n const valid = this.valid();\n this.getValidAction()?.(valid, this.value, this.getTarget(), this.getEvent());\n return valid;\n }\n\n // public childValidAction() {\n // const valid = this.childValids();\n // this.getValidAction()?.(valid, this.value, this.getTarget(), this.getEvent());\n // return valid;\n // }\n\n public abstract valid(): boolean;\n\n public inValid(): boolean {\n return !this.valid();\n };\n\n public allValid() {\n return this.valid() && this.childInValid();\n }\n\n public allValidAction() {\n return this.validAction() && this.childInValidAction();\n }\n\n public allInValid() {\n return !this.allValid();\n }\n\n public allInValidAction() {\n return !this.allValidAction();\n }\n\n public childValid(): boolean {\n return !this.childInValid();\n }\n\n public childValue(): {[key: string]: any } {\n const data = {} as any;\n this.childValidators().filter(([k, v]) => {\n data[k] = v.value;\n });\n return data;\n }\n\n public childValidAction(): boolean {\n return !this.childInValidAction();\n }\n\n public childInValid(): boolean {\n const inValid = this.childValidators().filter(([k, v]) => !v.valid());\n return inValid.length > 0;\n }\n\n public childInValidValidator(): [string, Validator<any, Element>][] {\n const inValid = this.childValidators().filter(([k, v]) => !v.valid());\n return inValid;\n }\n\n public childInValidAction(): boolean {\n const inValid = this.childValidators().filter(([k, v]) => !v.validAction());\n return inValid.length > 0;\n }\n\n public childValidator(name: string): Validator | undefined {\n return Object.entries(this).find(([k, v]) => ( k === name && (v instanceof Validator)))?.[1];\n }\n\n public childValidators(): [string, Validator][] {\n return Object.entries(this).filter(([k, v]) => (v instanceof Validator));\n }\n\n public childValidValidator(): [string, Validator][] {\n return this.childValidators().filter(it => it[1].valid());\n }\n\n public syncValue() {\n this.value = (this.getTarget() as any)?.value;\n }\n\n public allSyncValue() {\n this.childValidators().forEach(([k, e]) => {\n e.syncValue();\n })\n }\n\n public get length() {\n return (this.value as any)?.length ?? 0;\n }\n}", "import {Validator} from './Validator';\n\nexport class NonPassValidator<T = any, E = Element> extends Validator<T, E> {\n constructor(value?: T, target?: E, event?: Event, autoValid = true) {\n super(value, target, event, autoValid);\n }\n\n valid(): boolean {\n return false;\n }\n}\n", "import {Validator} from './Validator';\nimport {NonPassValidator} from './NonPassValidator';\n\nexport type MakeValidator<T = any, E = Element> = (value: T, target: E, event?: Event) => Validator<T, E>;\n\nexport abstract class ValidatorArray<T = any, E = Element> extends Validator<Validator<T, E>[], E> {\n private _makeValidatorFactory: MakeValidator<T, E> = (value: T, target: E, event?: Event): Validator<T, E> => {\n return new NonPassValidator(value, target, event);\n }\n\n constructor(value?: Validator<T, E>[], target?: E, event?: Event, autoValid = true) {\n super(value, target, event, autoValid);\n }\n\n getMakeValidatorFactory(): MakeValidator<T, E> {\n return this._makeValidatorFactory;\n }\n\n setMakeValidatorFactory(value: MakeValidator<T, E>) {\n this._makeValidatorFactory = value;\n return this;\n }\n\n setArrayValue(target: E, value: T, event?: Event) {\n this.value?.filter(it => {\n if (it.getTarget()) {\n return it.getTarget() === target;\n } else {\n return false;\n }\n }).forEach(it => {\n it.set(value, target, event);\n });\n this.tickValue(this.value)\n }\n\n addValidator(value: T, target: E, event?: Event) {\n if (!this.value) {\n this.value = [];\n }\n if (value instanceof Validator) {\n this.value?.push(value)\n } else {\n this.value?.push(this.makeValidator(value, target, event))\n }\n this.tickValue(this.value)\n }\n\n allChecked(checked: boolean) {\n this.checked = checked;\n this.value?.forEach(it => {\n it.checked = checked;\n })\n }\n\n getValidators() {\n return this._value;\n }\n\n getValidator(e: E) {\n return this.value?.filter(it => it.getTarget() === e)[0]\n }\n\n getValidatorByValue(value: T) {\n const validatorByValue = this.getValidatorByValues(value)[0];\n return validatorByValue;\n }\n\n getValidatorByValues(value: T) {\n return this.value?.filter(it => it.value === value) ?? [];\n }\n\n removeElement(e: E) {\n const value = this.value;\n if (value) {\n this.value = value.filter(it => it.getTarget() !== e);\n }\n }\n\n makeValidator(value: T, target: E, event?: Event): Validator<T, E> {\n return this._makeValidatorFactory(value, target, event);\n };\n}\n", "import {ScriptUtils} from '@dooboostore/core-web/script/ScriptUtils';\nimport {RawSet} from '../rawsets/RawSet';\nimport {Validator} from '../validators/Validator';\nimport {EventManager} from '../events/EventManager';\nimport {ValidatorArray} from '../validators/ValidatorArray';\nimport {Render} from '../rawsets/Render';\nimport {OperatorExecuterAttrRequire} from './OperatorExecuterAttrRequire';\nimport {AfterCallBack, ElementSource, ExecuteState, ReturnContainer, Source} from './OperatorExecuter';\n\nexport class DrForm extends OperatorExecuterAttrRequire<string> {\n constructor(rawSet: RawSet, render: Render, returnContainer: ReturnContainer, elementSource: ElementSource, source: Source, afterCallBack: AfterCallBack) {\n super(rawSet, render, returnContainer, elementSource, source, afterCallBack, false);\n }\n\n async executeAttrRequire(attr: string): Promise<ExecuteState> {\n RawSet.drFormOtherMoveAttr(this.elementSource.element, 'name', 'temp-name', this.source.config);\n const data = ScriptUtils.evaluateReturn(`${attr}`, this.source.obj);\n\n const childs = Array.from(this.elementSource.element.querySelectorAll('[name]'));\n\n const fromName = ScriptUtils.evaluateReturn(this.elementSource.element.getAttribute(`${RawSet.DR_FORM_NAME}:name`) ?? '', this.source.obj);\n const thisName = fromName ?? this.elementSource.element.getAttribute('name');\n // // \uC790\uAE30\uC790\uC2E0\uC774 Input \uB300\uC0C1\uC77C\uB54C\n if (childs.length <= 0 && thisName) {\n childs.push(this.elementSource.element);\n } else {\n if (data instanceof Validator) {\n data.setTarget(this.elementSource.element);\n }\n }\n childs.forEach(it => {\n const eventName = it.getAttribute(`${RawSet.DR_FORM_NAME}:event`) ?? 'change'\n const validatorName = it.getAttribute(`${RawSet.DR_FORM_NAME}:validator`);\n const attrEventName = EventManager.attrPrefix + 'event-' + eventName;\n let varpath = ScriptUtils.evaluateReturn(this.elementSource.element.getAttribute(`${RawSet.DR_FORM_NAME}:name`) ?? '', this.source.obj) ?? it.getAttribute('name');\n if (varpath != null) {\n if (validatorName) {\n ScriptUtils.evaluate(`\n ${this.render.bindScript}\n const validator = typeof ${validatorName} ==='function' ? new ${validatorName}() : ${validatorName};\n ${attr}['${varpath}'] = validator;\n `,\n Object.assign(this.source.obj, {\n __render: Object.freeze({\n drStripOption: this.elementSource.attrs.drStripOption,\n ...this.render\n } as Render)\n }\n ));\n }\n varpath = `${attr}['${varpath}']`;\n const data = ScriptUtils.evaluateReturn(`${varpath}`, this.source.obj);\n if (data instanceof ValidatorArray) {\n it.setAttribute(attrEventName, `${varpath}.setArrayValue($target, $target.value, $event); ${it.getAttribute(attrEventName) ?? ''};`);\n data.addValidator((it as any).value, it);\n } else if (data instanceof Validator) {\n // varpath += (varpath ? '.value' : 'value');\n // varpath = drAttr.drForm + '.' + varpath;\n // it.setAttribute(attrEventName, `${varpath} = $target.value; ${target}=$target; ${event}=$event;`);\n it.setAttribute(attrEventName, `${varpath}.set($target.value, $target, $event); ${it.getAttribute(attrEventName) ?? ''};`);\n data.setTarget(it);\n data.value = (it as any).value;\n } else {\n it.setAttribute(attrEventName, `${varpath} = $target.value;`);\n }\n }\n })\n RawSet.drFormOtherMoveAttr(this.elementSource.element, 'temp-name', 'name', this.source.config);\n this.returnContainer.raws.push(...RawSet.checkPointCreates(this.elementSource.element, this.source.obj, this.source.config));\n return ExecuteState.EXECUTE;\n }\n}\n", "import {OperatorExecuterAttrRequire} from './OperatorExecuterAttrRequire';\nimport {ScriptUtils} from '@dooboostore/core-web/script/ScriptUtils';\nimport {RawSet} from '../rawsets/RawSet';\nimport {Render} from '../rawsets/Render';\nimport {AfterCallBack, ElementSource, ExecuteState, ReturnContainer, Source} from './OperatorExecuter';\nimport {ObjectUtils} from '@dooboostore/core/object/ObjectUtils';\n\nexport class DrInnerText extends OperatorExecuterAttrRequire<string> {\n constructor(rawSet: RawSet, render: Render, returnContainer: ReturnContainer, elementSource: ElementSource, source: Source, afterCallBack: AfterCallBack) {\n super(rawSet, render, returnContainer, elementSource, source, afterCallBack, false);\n }\n\n async executeAttrRequire(attr: string): Promise<ExecuteState> {\n const newTemp = this.source.config.window.document.createElement('temp');\n ObjectUtils.Script.evaluate(` \n ${this.render.bindScript}\n const n = $element.cloneNode(true); \n ${this.elementSource.attrs.drBeforeOption ?? ''}\n n.innerText = ${attr};\n if (this.__render.drStripOption === 'true') {\n Array.from(n.childNodes).forEach(it => this.__render.fag.append(it));\n } else {\n this.__render.fag.append(n);\n }\n ${this.elementSource.attrs.drAfterOption ?? ''}\n `, Object.assign(this.source.obj, {\n __render: Object.freeze({\n drStripOption: this.elementSource.attrs.drStripOption,\n fag: newTemp,\n ...this.render\n } as Render)\n }));\n const tempalte = this.source.config.window.document.createElement('template');\n tempalte.innerHTML = newTemp.innerHTML;\n this.returnContainer.fag.append(tempalte.content);\n const rr = RawSet.checkPointCreates(this.returnContainer.fag, this.source.obj, this.source.config);\n this.elementSource.element.parentNode?.replaceChild(this.returnContainer.fag, this.elementSource.element);\n this.returnContainer.raws.push(...rr);\n return ExecuteState.EXECUTE;\n }\n}\n", "import {OperatorExecuterAttrRequire} from './OperatorExecuterAttrRequire';\nimport {ScriptUtils} from '@dooboostore/core-web/script/ScriptUtils';\nimport {RawSet} from '../rawsets/RawSet';\nimport {Render} from '../rawsets/Render';\nimport {AfterCallBack, ElementSource, ExecuteState, ReturnContainer, Source} from './OperatorExecuter';\n\nexport class DrInnerHTML extends OperatorExecuterAttrRequire<string> {\n constructor(rawSet: RawSet, render: Render, returnContainer: ReturnContainer, elementSource: ElementSource, source: Source, afterCallBack: AfterCallBack) {\n super(rawSet, render, returnContainer, elementSource, source, afterCallBack, false);\n }\n\n async executeAttrRequire(attr: string): Promise<ExecuteState> {\n const newTemp = this.source.config.window.document.createElement('temp');\n ScriptUtils.evaluate(`\n ${this.render.bindScript}\n const n = $element.cloneNode(true);\n ${this.elementSource.attrs.drBeforeOption ?? ''}\n n.innerHTML = ${attr};\n if (this.__render.drStripOption === 'true') {\n Array.from(n.childNodes).forEach(it => this.__render.fag.append(it));\n } else {\n this.__render.fag.append(n);\n }\n ${this.elementSource.attrs.drAfterOption ?? ''}\n `, Object.assign(this.source.obj, {\n __render: Object.freeze({\n drStripOption: this.elementSource.attrs.drStripOption,\n fag: newTemp,\n ...this.render\n // eslint-disable-next-line no-use-before-define\n } as Render)\n }));\n const tempalte = this.source.config.window.document.createElement('template');\n tempalte.innerHTML = newTemp.innerHTML;\n this.returnContainer.fag.append(tempalte.content);\n const rr = RawSet.checkPointCreates(this.returnContainer.fag, this.source.obj, this.source.config);\n this.elementSource.element.parentNode?.replaceChild(this.returnContainer.fag, this.elementSource.element);\n this.returnContainer.raws.push(...rr);\n return ExecuteState.EXECUTE;\n }\n}\n", "import { OperatorExecuterAttrRequire} from './OperatorExecuterAttrRequire';\nimport {ScriptUtils} from '@dooboostore/core-web/script/ScriptUtils';\nimport {RawSet} from '../rawsets/RawSet';\nimport {Render} from '../rawsets/Render';\nimport {AfterCallBack, ElementSource, ExecuteState, ReturnContainer, Source} from './OperatorExecuter';\n\nexport class DrFor extends OperatorExecuterAttrRequire<string> {\n constructor(rawSet: RawSet, render: Render, returnContainer: ReturnContainer, elementSource: ElementSource, source: Source, afterCallBack: AfterCallBack) {\n source.operatorAround = undefined;\n super(rawSet, render, returnContainer, elementSource, source, afterCallBack, false);\n }\n\n async executeAttrRequire(attr: string): Promise<ExecuteState> {\n const itRandom = RawSet.drItOtherEncoding(this.elementSource.element);\n const vars = RawSet.drVarEncoding(this.elementSource.element, this.elementSource.attrs.drVarOption ?? '');\n const newTemp = this.source.config.window.document.createElement('temp');\n // console.log('-----asdad',attr , this.elementSource.attrs.drItOption);\n ScriptUtils.evaluate(`\n ${this.render.bindScript}\n ${this.elementSource.attrs.drBeforeOption ?? ''}\n for(${attr}) {\n const n = this.__render.element.cloneNode(true);\n var destIt = ${this.elementSource.attrs.drItOption};\n if (destIt !== undefined) {\n n.getAttributeNames().forEach(it => n.setAttribute(it, n.getAttribute(it).replace(/\\\\#it\\\\#/g, destIt).replace(/\\\\#nearForIt\\\\#/g, destIt).replace(/\\\\#nearForIndex\\\\#/g, destIt))) \n n.innerHTML = n.innerHTML.replace(/\\\\#it\\\\#/g, destIt).replace(/\\\\#index\\\\#/g, destIt);\n }\n if (this.__render.drStripOption === 'true') {\n Array.from(n.childNodes).forEach(it => this.__render.fag.append(it));\n } else {\n this.__render.fag.append(n);\n }\n }\n ${this.elementSource.attrs.drAfterOption ?? ''}\n `, Object.assign(this.source.obj, {\n __render: Object.freeze({\n fag: newTemp,\n drStripOption: this.elementSource.attrs.drStripOption,\n ...this.render\n })\n }));\n RawSet.drVarDecoding(newTemp, vars);\n RawSet.drItOtherDecoding(newTemp, itRandom);\n const tempalte = this.source.config.window.document.createElement('template');\n tempalte.innerHTML = newTemp.innerHTML;\n this.returnContainer.fag.append(tempalte.content)\n const rr = RawSet.checkPointCreates(this.returnContainer.fag, this.source.obj, this.source.config)\n this.elementSource.element.parentNode?.replaceChild(this.returnContainer.fag, this.elementSource.element);\n this.returnContainer.raws.push(...rr)\n return ExecuteState.EXECUTE;\n }\n}\n", "import { OperatorExecuterAttrRequire } from './OperatorExecuterAttrRequire';\nimport { ScriptUtils } from '@dooboostore/core-web/script/ScriptUtils';\nimport { RawSet } from '../rawsets/RawSet';\nimport { Render } from '../rawsets/Render';\nimport { AfterCallBack, ElementSource, ExecuteState, ReturnContainer, Source } from './OperatorExecuter';\nimport { ObjectUtils } from '@dooboostore/core/object/ObjectUtils';\n\nexport class DrForOf extends OperatorExecuterAttrRequire<string> {\n constructor(rawSet: RawSet, render: Render, returnContainer: ReturnContainer, elementSource: ElementSource, source: Source, afterCallBack: AfterCallBack) {\n source.operatorAround = undefined;\n super(rawSet, render, returnContainer, elementSource, source, afterCallBack, false);\n }\n\n async executeAttrRequire(attr: string): Promise<ExecuteState> {\n // console.log('\uD0C0\uC9C0\uB3C4\uC54A\uB0D0?')\n const itRandom = RawSet.drItOtherEncoding(this.elementSource.element, 'DrForOf');\n const vars = RawSet.drVarEncoding(this.elementSource.element, this.elementSource.attrs.drVarOption ?? '');\n const newTemp = this.source.config.window.document.createElement('temp');\n\n const variableName = this.elementSource.element.getAttribute(RawSet.DR_VARIABLE_NAME_OPTIONNAME);\n const itemVariableName = this.elementSource.element.getAttribute(RawSet.DR_ITEM_VARIABLE_NAME_OPTIONNAME);\n const itemIndexVariableName = this.elementSource.element.getAttribute(RawSet.DR_ITEM_INDEX_VARIABLE_NAME_OPTIONNAME);\n // console.log('----!', this.elementSource.attrs)\n // ScriptUtils.evalReturn()\n ObjectUtils.Script.evaluate(`\n ${this.render.bindScript}\n ${this.elementSource.attrs.drBeforeOption ?? ''}\n var i = -1; \n const forOf = ${ObjectUtils.Path.toOptionalChainPath(attr)};\n const forOfStr = \\`${attr}\\`.trim();\n // console.log('forOf---',forOf);\n if (forOf) {\n for(const it of forOf) {\n i++;\n var destIt = it;\n if (/\\\\[(.*,?)\\\\],/g.test(forOfStr)) {\n if (typeof it === 'string') {\n destIt = it;\n } else {\n destIt = forOfStr.substring(1, forOfStr.length-1).split(',')[i];\n }\n } else if (forOf.isRange) {\n destIt = it;\n } else {\n destIt = forOfStr + '[' + i +']'\n }\n const n = this.__render.element.cloneNode(true);\n Object.entries(this.__render.drAttr).filter(([k,v]) => k !== 'drForOf' && k !== 'drNextOption' && v).forEach(([k, v]) => n.setAttribute(this.__render.drAttrsOriginName[k], v));\n n.getAttributeNames().forEach(it => n.setAttribute(it, n.getAttribute(it).replace(/\\\\#it\\\\#/g, destIt).replace(/\\\\#nearForOfIt\\\\#/g, destIt).replace(/\\\\#it\\\\#/g, destIt).replace(/\\\\#nearForOfIndex\\\\#/g, i)))\n if ('${variableName}') {\n n.getAttributeNames().forEach(it => n.setAttribute(it, n.getAttribute(it).replaceAll('#${variableName}#', forOfStr)));\n }\n if ('${itemVariableName}') {\n n.getAttributeNames().forEach(it => n.setAttribute(it, n.getAttribute(it).replaceAll('#${itemVariableName}#', destIt)));\n }\n if ('${itemIndexVariableName}') {\n n.getAttributeNames().forEach(it => n.setAttribute(it, n.getAttribute(it).replaceAll('#${itemIndexVariableName}#', i)));\n }\n \n const drOptionAttr = n.getAttribute('${RawSet.DR_DETECT_ATTR_OPTIONNAME}');\n if (drOptionAttr) {\n const drOptionAttrResult = $scriptUtils.evaluateReturn(drOptionAttr, this);\n Array.from(Object.entries(drOptionAttrResult??{})).forEach(([k,v])=>{\n if (v === null) {\n n.removeAttribute(k);\n } else {\n n.setAttribute(k,v);\n }\n })\n }\n \n const drOptionFilter = n.getAttribute('${RawSet.DR_DETECT_FILTER_OPTIONNAME}');\n if (drOptionFilter) {\n const drOptionFilterResult = $scriptUtils.evaluateReturn(drOptionFilter, this);\n // console.log('---drforof----', drOptionFilter, drOptionFilterResult)\n if (!drOptionFilterResult) {\n continue;\n }\n }\n\n n.innerHTML = n.innerHTML.replace(/\\\\#it\\\\#/g, destIt).replace(/\\\\#index\\\\#/g, i);\n if ('${variableName}') {\n n.innerHTML = n.innerHTML.replaceAll('#${variableName}#', forOfStr);\n }\n if ('${itemVariableName}') {\n n.innerHTML = n.innerHTML.replaceAll('#${itemVariableName}#', destIt);\n }\n if ('${itemIndexVariableName}') {\n n.innerHTML = n.innerHTML.replaceAll('#${itemIndexVariableName}#', i);\n }\n \n if (this.__render.drStripOption === 'true') {\n Array.from(n.childNodes).forEach(it => this.__render.fag.append(it));\n } else {\n this.__render.fag.append(n);\n }\n \n }\n \n if('${this.elementSource.attrs.drNextOption}' !== 'null') {\n const n = this.__render.element.cloneNode(true);\n Object.entries(this.__render.drAttr).filter(([k,v]) => k !== 'drForOf' && k !== 'drNextOption' && v).forEach(([k, v]) => n.setAttribute(this.__render.drAttrsOriginName[k], v));\n const [name, idx] = '${this.elementSource.attrs.drNextOption}'.split(',');\n n.setAttribute('${RawSet.DR_FOR_OF_NAME}', name + '[' + idx + ']');\n n.setAttribute('${RawSet.DR_NEXT_OPTIONNAME}', name + ',' + (Number(idx) + 1));\n this.__render.fag.append(n);\n }\n }\n ${this.elementSource.attrs.drAfterOption ?? ''}\n `, Object.assign(this.source.obj, {\n __render: Object.freeze({\n drStripOption: this.elementSource.attrs.drStripOption,\n drAttr: this.elementSource.attrs,\n drAttrsOriginName: RawSet.drAttrsOriginName,\n fag: newTemp,\n ...this.render\n // eslint-disable-next-line no-use-before-define\n } as Render)\n }));\n RawSet.drVarDecoding(newTemp, vars);\n RawSet.drItOtherDecoding(newTemp, itRandom);\n const tempalte = this.source.config.window.document.createElement('template');\n tempalte.innerHTML = newTemp.innerHTML;\n this.returnContainer.fag.append(tempalte.content)\n const rr = RawSet.checkPointCreates(this.returnContainer.fag, this.source.obj, this.source.config);\n this.elementSource.element.parentNode?.replaceChild(this.returnContainer.fag, this.elementSource.element);\n // const rrr = rr.flatMap(it => it.render(obj, config));// .flat();\n this.returnContainer.raws.push(...rr)\n return ExecuteState.EXECUTE;\n }\n}\n", "import {OperatorExecuterAttrRequire} from './OperatorExecuterAttrRequire';\nimport {ScriptUtils} from '@dooboostore/core-web/script/ScriptUtils';\nimport {RawSet} from '../rawsets/RawSet';\nimport {Render} from '../rawsets/Render';\nimport {AfterCallBack, ElementSource, ExecuteState, ReturnContainer, Source} from './OperatorExecuter';\n\nexport class DrAppender extends OperatorExecuterAttrRequire<string> {\n constructor(rawSet: RawSet, render: Render, returnContainer: ReturnContainer, elementSource: ElementSource, source: Source, afterCallBack: AfterCallBack) {\n source.operatorAround = undefined;\n super(rawSet, render, returnContainer, elementSource, source, afterCallBack, false);\n }\n\n async executeAttrRequire(attr: string): Promise<ExecuteState> {\n const itRandom = RawSet.drItOtherEncoding(this.elementSource.element);\n const vars = RawSet.drVarEncoding(this.elementSource.element, this.elementSource.attrs.drVarOption ?? '');\n const newTemp = this.source.config.window.document.createElement('temp');\n ScriptUtils.evaluate(`\n try{\n ${this.render.bindScript}\n ${this.elementSource.attrs.drBeforeOption ?? ''}\n const ifWrap = document.createElement('div');\n // ifWrap.setAttribute('${RawSet.DR_STRIP_OPTIONNAME}', 'true');\n // ifWrap.setAttribute('${RawSet.DR_IF_NAME}', '${this.elementSource.attrs.drAppender} && ${this.elementSource.attrs.drAppender}.length > 0');\n const n = this.__render.element.cloneNode(true);\n Object.entries(this.__render.drAttr).filter(([k,v]) => k !== 'drAppender' && v).forEach(([k, v]) => n.setAttribute(this.__render.drAttrsOriginName[k], v));\n const length = ${this.elementSource.attrs.drAppender}.length;\n if (length > 0) {\n n.setAttribute('${RawSet.DR_FOR_OF_NAME}', '${this.elementSource.attrs.drAppender}[' + (length-1) + ']');\n n.setAttribute('${RawSet.DR_NEXT_OPTIONNAME}', '${this.elementSource.attrs.drAppender},' + length);\n } else {\n n.setAttribute('${RawSet.DR_FOR_OF_NAME}', '${this.elementSource.attrs.drAppender}[0]');\n n.setAttribute('${RawSet.DR_NEXT_OPTIONNAME}', '${this.elementSource.attrs.drAppender},' + 1);\n }\n // console.log('appender--->', Array.from(n.getAttributeNames()).map(it=>({name:it,attr: n.getAttribute(it)})));\n // const drOptionThis = n.getAttribute('${RawSet.DR_THIS_OPTIONNAME}');\n // if (drOptionThis) {\n // }\n // ifWrap.append(n);\n // this.__render.fag.append(ifWrap);\n this.__render.fag.append(n);\n ${this.elementSource.attrs.drAfterOption ?? ''}\n }catch(e){}\n `, Object.assign(this.source.obj, {\n __render: Object.freeze({\n drStripOption: this.elementSource.attrs.drStripOption,\n drAttr: this.elementSource.attrs,\n drAttrsOriginName: RawSet.drAttrsOriginName,\n fag: newTemp,\n ...this.render\n // eslint-disable-next-line no-use-before-define\n } as Render)\n }));\n RawSet.drVarDecoding(newTemp, vars);\n RawSet.drItOtherDecoding(newTemp, itRandom);\n const tempalte = this.source.config.window.document.createElement('template');\n tempalte.innerHTML = newTemp.innerHTML;\n this.returnContainer.fag.append(tempalte.content)\n const rr = RawSet.checkPointCreates(this.returnContainer.fag, this.source.obj, this.source.config);\n this.elementSource.element.parentNode?.replaceChild(this.returnContainer.fag, this.elementSource.element);\n // const rrr = rr.flatMap(it => it.render(obj, config));// .flat();\n this.returnContainer.raws.push(...rr)\n return ExecuteState.EXECUTE;\n }\n}\n", "import {OperatorExecuterAttrRequire} from './OperatorExecuterAttrRequire';\nimport {ScriptUtils} from '@dooboostore/core-web/script/ScriptUtils';\nimport {RawSet} from '../rawsets/RawSet';\nimport {EventManager} from '../events/EventManager';\nimport {Render} from '../rawsets/Render';\nimport {AfterCallBack, ElementSource, ExecuteState, ReturnContainer, Source} from './OperatorExecuter';\n\nexport class DrRepeat extends OperatorExecuterAttrRequire<string> {\n constructor(rawSet: RawSet, render: Render, returnContainer: ReturnContainer, elementSource: ElementSource, source: Source, afterCallBack: AfterCallBack) {\n source.operatorAround = undefined;\n super(rawSet, render, returnContainer, elementSource, source, afterCallBack, false);\n }\n\n async executeAttrRequire(attr: string): Promise<ExecuteState> {\n const itRandom = RawSet.drItOtherEncoding(this.elementSource.element);\n const vars = RawSet.drVarEncoding(this.elementSource.element, this.elementSource.attrs.drVarOption ?? '');\n const newTemp = this.source.config.window.document.createElement('temp');\n ScriptUtils.evaluate(`\n ${this.render.bindScript}\n ${this.elementSource.attrs.drBeforeOption ?? ''}\n var i = 0; \n const repeat = ${attr};\n const repeatStr = \\`${attr}\\`;\n let range = repeat;\n if (typeof repeat === 'number') {\n range = ${EventManager.RANGE_VARNAME}(repeat);\n } \n for(const it of range) {\n var destIt = it;\n if (range.isRange) {\n destIt = it;\n } else {\n destIt = repeatStr + '[' + i +']'\n }\n const n = this.__render.element.cloneNode(true);\n n.getAttributeNames().forEach(it => n.setAttribute(it, n.getAttribute(it).replace(/\\\\#it\\\\#/g, destIt).replace(/\\\\#nearRangeIt\\\\#/g, destIt).replace(/\\\\#nearRangeIndex\\\\#/g, destIt)))\n n.innerHTML = n.innerHTML.replace(/\\\\#it\\\\#/g, destIt).replace(/\\\\#index\\\\#/g, destIt);\n \n if (this.__render.drStripOption === 'true') {\n Array.from(n.childNodes).forEach(it => this.__render.fag.append(it));\n } else {\n this.__render.fag.append(n);\n }\n i++;\n }\n ${this.elementSource.attrs.drAfterOption ?? ''}\n `, Object.assign(this.source.obj, {\n __render: Object.freeze({\n fag: newTemp,\n drStripOption: this.elementSource.attrs.drStripOption,\n ...this.render\n })\n }));\n RawSet.drVarDecoding(newTemp, vars);\n RawSet.drItOtherDecoding(newTemp, itRandom);\n const tempalte = this.source.config.window.document.createElement('template');\n tempalte.innerHTML = newTemp.innerHTML;\n this.returnContainer.fag.append(tempalte.content)\n const rr = RawSet.checkPointCreates(this.returnContainer.fag, this.source.obj, this.source.config)\n this.elementSource.element.parentNode?.replaceChild(this.returnContainer.fag, this.elementSource.element);\n this.returnContainer.raws.push(...rr)\n return ExecuteState.EXECUTE;\n }\n}\n", "import { ScriptUtils } from '@dooboostore/core-web/script/ScriptUtils';\nimport { RawSet } from '../rawsets/RawSet';\nimport { CreatorMetaData } from '../rawsets/CreatorMetaData';\nimport {\n AfterCallBack,\n ElementSource,\n ExecuteState,\n OperatorExecuter,\n ReturnContainer,\n Source\n} from './OperatorExecuter';\nimport { Render } from '../rawsets/Render';\nimport { ElementUtils } from '@dooboostore/core-web/element/ElementUtils';\n\ndeclare global {\n interface Window {\n HTMLMetaElement: typeof HTMLMetaElement;\n }\n}\n\n// \uC5EC\uAE30\uC11C \uC0AC\uC6A9\uC790\uAC00 \uB4F1\uB85D\uD55C TargetElement\uAC00 \uB4E4\uC5B4\uAC04\uB2E4.\nexport class DrTargetElement extends OperatorExecuter<void> {\n constructor(\n rawSet: RawSet,\n render: Render,\n returnContainer: ReturnContainer,\n elementSource: ElementSource,\n source: Source,\n afterCallBack: AfterCallBack\n ) {\n source.operatorAround = undefined;\n super(rawSet, render, returnContainer, elementSource, source, afterCallBack, false);\n }\n\n async execute(): Promise<ExecuteState> {\n const targetElement = this.source.config?.targetElements?.find(\n it => it.name.toLowerCase() === this.elementSource.element.tagName.toLowerCase()\n );\n if (targetElement) {\n if (\n this.rawSet.point.start instanceof this.source.config.window.HTMLMetaElement &&\n this.rawSet.point.end instanceof this.source.config.window.HTMLMetaElement\n ) {\n this.rawSet.point.start.setAttribute('this-path', `this.__domrender_components.${this.rawSet.uuid}`);\n this.rawSet.point.end.setAttribute('this-path', `this.__domrender_components.${this.rawSet.uuid}`);\n }\n\n const documentFragment = await targetElement.callBack(\n this.elementSource.element,\n this.source.obj,\n this.rawSet,\n this.elementSource.attrs,\n this.source.config\n );\n if (documentFragment) {\n const detectAction = this.elementSource.element.getAttribute(RawSet.DR_DETECT_NAME);\n // const dictionaryKey = this.elementSource.element.getAttribute(RawSet.DR_DICTIONARY_OPTIONKEYNAME);\n // console.log('dictionaryKey', dictionaryKey);\n // const render = (documentFragment as any).render;\n this.rawSet.dataSet.fragment = documentFragment;\n // if (documentFragment) {\n // const tempDiv = this.source.config.window.document.createElement('div');\n // tempDiv.appendChild(documentFragment.cloneNode(true));\n // console.log('DocumentFragment innerHTML:', tempDiv.innerHTML);\n // }\n\n // this.rawSet.dataSet??={};\n // this.rawSet.dataSet.data = render.component;\n if (detectAction && this.rawSet.dataSet.render) {\n // TODO: \uC5C6\uC5B4\uC838\uC57C\uB420\uB4EF?\n this.rawSet.detect = {\n action: () => {\n const script = `var $component = this.__render.component; var $element = this.__render.element; var $innerHTML = this.__render.innerHTML; var $attribute = this.__render.attribute; ${detectAction} `;\n ScriptUtils.evaluate(\n script,\n Object.assign(this.source.obj, {\n __render: this.rawSet.dataSet.render\n })\n );\n }\n };\n }\n // fag.append(documentFragment)\n\n // console.log('----------1', ElementUtils.toInnerHTML(documentFragment, {document: this.source.config.window.document}));\n // await Promises.sleep(1000)\n let targetFragment = documentFragment;\n if (targetElement.noStrip) {\n // documentFragment.firstElementChild.classList.add(`${this.rawSet.uuid}___DrTargetElement`)\n const fragment = this.source.config.window.document.createDocumentFragment();\n Array.from(documentFragment.firstElementChild?.childNodes || []).forEach(child => {\n // fragment.appendChild(child.cloneNode(true));\n fragment.appendChild(child);\n });\n // fragment.append(documentFragment.firstElementChild);\n targetFragment = fragment;\n }\n // console.log('----------2', ElementUtils.toInnerHTML(targetFragment, {document: this.source.config.window.document}));\n const rr = RawSet.checkPointCreates(targetFragment, this.source.obj, this.source.config);\n rr.forEach((it, index) => {\n\n // const z = ElementUtils.toInnerHTML(it.dataSet.fragment, {document: this.source.config.window.document});\n // console.log('-z--z('+index+')', z, it);\n // it.point.start;\n // // \uC0C8\uB85C\uC6B4 comment element \uCD94\uAC00\n // const comment = this.source.config.window.document.createComment('\uC0C8\uB85C \uB9CC\uB4E0 comment element');\n // it.point.start.parentNode?.insertBefore(comment, it.point.start.nextSibling);\n })\n // for (let rawSet of rr) {\n // await rawSet.render(this.source.obj, this.source.config)\n // }\n // console.log('cccccccccccccccccccccc', rr, typeof Window);\n if (targetElement.noStrip) {\n Array.from(targetFragment.childNodes || []).forEach(child => {\n documentFragment.firstElementChild?.appendChild(child);\n });\n }\n this.elementSource.element.parentNode?.replaceChild(documentFragment, this.elementSource.element);\n this.returnContainer.raws.push(...rr);\n this.afterCallBack.onElementInitCallBacks.push({\n name: targetElement.name.toLowerCase(),\n obj: this.source.obj,\n targetElement,\n creatorMetaData: targetElement.__creatorMetaData as CreatorMetaData\n });\n // console.log('sssssssssssssss', this.source.obj);\n targetElement?.complete?.(this.elementSource.element, this.source.obj, this.rawSet);\n }\n return ExecuteState.EXECUTE;\n }\n return ExecuteState.NO_EXECUTE;\n }\n}\n", "import {RawSet} from '../rawsets/RawSet';\nimport {TargetAttr} from '../configs/TargetAttr';\nimport {AfterCallBack, ElementSource, ExecuteState, OperatorExecuter, ReturnContainer, Source} from './OperatorExecuter';\nimport {Render} from '../rawsets/Render';\n\nexport class DrTargetAttr extends OperatorExecuter<void> {\n constructor(rawSet: RawSet, render: Render, returnContainer: ReturnContainer, elementSource: ElementSource, source: Source, afterCallBack: AfterCallBack) {\n source.operatorAround = undefined;\n super(rawSet, render, returnContainer, elementSource, source, afterCallBack, false);\n }\n\n async execute(): Promise<ExecuteState> {\n const attributeNames = this.elementSource.element.getAttributeNames();\n const targetAttr: TargetAttr | undefined = this.source.config?.targetAttrs?.find(it => attributeNames.includes(it.name));\n if (targetAttr) {\n const attrName = targetAttr.name;\n const attrValue = this.rawSet.getAttributeAndDelete(this.elementSource.element, attrName)\n if (attrValue && attrName && (!this.elementSource.attrs.drForOf && !this.elementSource.attrs.drFor && !this.elementSource.attrs.drRepeat)) {\n const documentFragment = targetAttr.callBack(this.elementSource.element, attrValue, this.source.obj, this.rawSet);\n if (documentFragment) {\n const rr = RawSet.checkPointCreates(documentFragment, this.source.obj, this.source.config)\n this.elementSource.element.parentNode?.replaceChild(documentFragment, this.elementSource.element);\n this.returnContainer.raws.push(...rr);\n this.afterCallBack.onAttrInitCallBacks.push({\n attrName,\n attrValue,\n obj: this.source.obj\n });\n targetAttr?.complete?.(this.elementSource.element, attrValue, this.source.obj, this.rawSet);\n }\n }\n return ExecuteState.EXECUTE;\n }\n return ExecuteState.NO_EXECUTE;\n }\n}\n", "import { OperatorExecuterAttrRequire } from './OperatorExecuterAttrRequire';\nimport { ScriptUtils } from '@dooboostore/core-web/script/ScriptUtils';\nimport { RawSet } from '../rawsets/RawSet';\nimport { Render } from '../rawsets/Render';\nimport { AfterCallBack, ElementSource, ExecuteState, ReturnContainer, Source } from './OperatorExecuter';\n\nexport class DrStripElement extends OperatorExecuterAttrRequire<string> {\n constructor(rawSet: RawSet, render: Render, returnContainer: ReturnContainer, elementSource: ElementSource, source: Source, afterCallBack: AfterCallBack) {\n source.operatorAround = undefined;\n super(rawSet, render, returnContainer, elementSource, source, afterCallBack, false);\n }\n\n async executeAttrRequire(attr: string): Promise<ExecuteState> {\n // const itRandom = RawSet.drItOtherEncoding(this.elementSource.element, 'DrStripElement');\n // const vars = RawSet.drVarEncoding(this.elementSource.element, this.elementSource.attrs.drVarOption ?? '');\n const newTemp = this.source.config.window.document.createElement('temp');\n // Object.entries(this.__render.drAttr).filter(([k,v]) => k !== 'drIf' && v).forEach(([k, v]) => n.setAttribute(this.__render.drAttrsOriginName[k], v)); <-- \uC774\uBD80\uBD84\uC740 \uB2E4\uB978 attr\uC5D0\uB3C4 \uC801\uC6A9\uC744 \uD560\uC9C0\uB9D0\uC9C0 \uC0DD\uAC01\uD574\uC57C\uB428 \uC5D8\uB9AC\uBA3C\uD2B8 \uC874\uC7AC\uC720\uBB34\uC5D0 \uB530\uB77C\uC11C \uC801\uC6A9\uC744 \uD560\uC9C0\uB9D0\uC9C0 \uACB0\uC815\uD574\uC57C\uB428\n ScriptUtils.evaluate(`\n ${this.render.bindScript}\n ${this.elementSource.attrs.drBeforeOption ?? ''}\n const n = $element.cloneNode(true);\n if(${attr}) {\n Array.from(n.childNodes).forEach(it => this.__render.fag.append(it));\n } else {\n this.__render.fag.append(n);\n }\n ${this.elementSource.attrs.drAfterOption ?? ''};\n return true;\n `, Object.assign(this.source.obj,\n {\n __render: Object.freeze({\n fag: newTemp,\n drAttr: this.elementSource.attrs,\n drAttrsOriginName: RawSet.drAttrsOriginName,\n drStripOption: this.elementSource.attrs.drStripOption,\n ...this.render\n } as Render)\n }\n ));\n\n const tempalte = this.source.config.window.document.createElement('template');\n tempalte.innerHTML = newTemp.innerHTML;\n this.returnContainer.fag.append(tempalte.content);\n const rr = RawSet.checkPointCreates(this.returnContainer.fag, this.source.obj, this.source.config);\n this.elementSource.element.parentNode?.replaceChild(this.returnContainer.fag, this.elementSource.element);\n this.returnContainer.raws.push(...rr);\n return ExecuteState.EXECUTE;\n }\n}\n", "export enum DestroyOptionType {\n NO_DESTROY = 'NO_DESTROY',\n NO_MESSENGER_DESTROY = 'NO_MESSENGER_DESTROY'\n}", "export enum RawSetType {\n TEXT = 'TEXT',\n STYLE_TEXT = 'STYLE_TEXT',\n TARGET_ELEMENT = 'TARGET_ELEMENT',\n TARGET_ATTR = 'TARGET_ATTR',\n UNKOWN = 'UNKOWN',\n}", "import {OperatorExecuterAttrRequire} from './OperatorExecuterAttrRequire';\nimport {ScriptUtils} from '@dooboostore/core-web/script/ScriptUtils';\nimport {RawSet} from '../rawsets/RawSet';\nimport {Render} from '../rawsets/Render';\nimport {AfterCallBack, ElementSource, ExecuteState, ReturnContainer, Source} from './OperatorExecuter';\nimport {DomRenderConfig} from '../configs/DomRenderConfig';\n\nexport class DrThisProperty extends OperatorExecuterAttrRequire<string> {\n constructor(rawSet: RawSet, render: Render, returnContainer: ReturnContainer, elementSource: ElementSource, source: Source, afterCallBack: AfterCallBack) {\n source.operatorAround = undefined;\n super(rawSet, render, returnContainer, elementSource, source, afterCallBack, false);\n }\n\n async executeAttrRequire(attr: string): Promise<ExecuteState> {\n const itRandom = RawSet.drItOtherEncoding(this.elementSource.element, 'DrThisProperty');\n const vars = RawSet.drVarEncoding(this.elementSource.element, this.elementSource.attrs.drVarOption ?? '');\n const newTemp = this.source.config.window.document.createElement('temp');\n const dictioanry = ScriptUtils.evaluateReturn(attr, this.source.obj)\n const dictionaryKey = this.elementSource.attrs.drKeyOption ?? '';\n // console.log('--->', attr, dictionaryKey)\n // if (!(dictioanry instanceof Dictionary)) {\n // return ExecuteState.STOP;\n // }\n // await new Promise(resolve => setTimeout(resolve, 1000));\n // console.log('!!!!!!!!!!!!!!', this.rawSet);\n ScriptUtils.evaluate(`\n ${this.render.bindScript}\n ${this.elementSource.attrs.drBeforeOption ?? ''}\n var i = 0; \n const dictionary = ${attr};\n const dictionaryKey = '${dictionaryKey}';\n const dictionaryStr = \\`${attr}\\`.trim();\n // console.log('----@#!@#@!#', this.__render.oldChild);\n if (dictionary) {\n for(const it in dictionary) {\n var destIt = dictionaryStr + '[\"' + it + '\"]';\n const n = this.__render.element.cloneNode(true);\n n.setAttribute('dr-this', destIt);\n n.setAttribute('${RawSet.DR_KEY_OPTIONNAME}', it);\n // n.setAttribute('dr-dictionary-key', it);\n this.__render.fag.append(n);\n i++;\n }\n this.__render.rawset.point.start.setAttribute('${RawSet.DR_HAS_KEYS_OPTIONNAME}',Object.keys(dictionary).join(','));\n }\n ${this.elementSource.attrs.drAfterOption ?? ''}\n `, Object.assign(this.source.obj, {\n __render: Object.freeze({\n drStripOption: this.elementSource.attrs.drStripOption,\n drAttr: this.elementSource.attrs,\n drAttrsOriginName: RawSet.drAttrsOriginName,\n fag: newTemp,\n ...this.render\n } as Render)\n }));\n RawSet.drVarDecoding(newTemp, vars);\n RawSet.drItOtherDecoding(newTemp, itRandom);\n const tempalte = this.source.config.window.document.createElement('template');\n tempalte.innerHTML = newTemp.innerHTML;\n this.returnContainer.fag.append(tempalte.content);\n const rr = RawSet.checkPointCreates(this.returnContainer.fag, this.source.obj, this.source.config);\n this.elementSource.element.parentNode?.replaceChild(this.returnContainer.fag, this.elementSource.element);\n // const rrr = rr.flatMap(it => it.render(obj, config));// .flat();\n this.returnContainer.raws.push(...rr);\n return ExecuteState.EXECUTE;\n }\n\n\n public static append(obj: any, fullPath: string, key: string, rawSet: RawSet, config: DomRenderConfig) {\n const genNode = config.window.document.importNode(rawSet.dataSet.fragment, true);\n // console.log('---> append', rawSet, genNode);\n const rawSets: RawSet[] = [];\n for (const cNode of Array.from(genNode.childNodes.values())) {\n const element = cNode.cloneNode(true) as Element;\n element.removeAttribute(RawSet.DR_THIS_PROPERTY_NAME);\n element.setAttribute(RawSet.DR_THIS_NAME, `this.${fullPath}`);\n element.setAttribute(RawSet.DR_KEY_OPTIONNAME, key);\n // rawSet.point.end.after(element);\n const fg = config.window.document.createDocumentFragment()\n fg.append(element);\n rawSets.push(...RawSet.checkPointCreates(fg, obj, config));\n rawSet.point.end.before(fg);\n const start = (rawSet.point.start as Element);\n const keys = start.getAttribute(RawSet.DR_HAS_KEYS_OPTIONNAME)?.split(',') ?? [];\n keys.push(key);\n start.setAttribute(RawSet.DR_HAS_KEYS_OPTIONNAME, keys.join(','));\n rawSets.forEach(async (it) => await it.render(obj, config));\n }\n return rawSets;\n }\n}\n", "export enum RawSetOperatorType {\n DR_THIS_PROPERTY = 'this-property'\n}", "export interface CssDeclaration {\n [property: string]: string;\n}\n\n// --- Content item types for maintaining order ---\nexport interface CssDeclarationItem {\n type: 'declaration';\n property: string;\n value: string;\n}\n\nexport interface CssRuleItem {\n type: 'rule';\n rule: CssRule;\n}\n\nexport interface CssCommentItem {\n type: 'comment';\n text: string;\n}\n\nexport type CssContentItem = CssDeclarationItem | CssRuleItem | CssCommentItem;\n\n// --- Base CSS Node Class with common functionality ---\nexport abstract class CssNode {\n public content: CssContentItem[]; // Maintains order of declarations and rules\n\n constructor(content: CssContentItem[] = []) {\n this.content = content;\n }\n\n // --- Computed properties for backward compatibility ---\n public get declarations(): CssDeclaration {\n const declarations: CssDeclaration = {};\n this.content.forEach(item => {\n if (item.type === 'declaration') {\n declarations[item.property] = item.value;\n }\n });\n return declarations;\n }\n\n public get children(): CssRule[] {\n return this.content\n .filter(item => item.type === 'rule')\n .map(item => (item as CssRuleItem).rule);\n }\n\n public abstract stringify(indent?: number): string;\n\n // --- Common Manipulation Methods for content ---\n protected _addRules(rulesToAdd: CssRule[], atIndex?: number): this {\n const ruleItems: CssRuleItem[] = rulesToAdd.map(rule => ({ type: 'rule', rule }));\n if (atIndex === undefined) {\n this.content.push(...ruleItems);\n } else {\n // Find the actual content index for the rule at the given children index\n const ruleContentIndices = this.content\n .map((item, idx) => ({ item, idx }))\n .filter(({ item }) => item.type === 'rule')\n .map(({ idx }) => idx);\n\n const insertIndex = atIndex < ruleContentIndices.length ? ruleContentIndices[atIndex] : this.content.length;\n this.content.splice(insertIndex, 0, ...ruleItems);\n }\n return this;\n }\n\n public append(ruleOrCss: CssRule | string): this {\n const rulesToAdd = CssParser._parseInputToRules(ruleOrCss);\n return this._addRules(rulesToAdd);\n }\n\n public prepend(ruleOrCss: CssRule | string): this {\n const rulesToAdd = CssParser._parseInputToRules(ruleOrCss);\n return this._addRules(rulesToAdd, 0);\n }\n\n public insertAt(index: number, ruleOrCss: CssRule | string): this {\n const rulesToAdd = CssParser._parseInputToRules(ruleOrCss);\n return this._addRules(rulesToAdd, index);\n }\n\n public insertBefore(target: CssRule, newRuleOrCss: CssRule | string): this {\n const contentIndex = this.content.findIndex(item =>\n item.type === 'rule' && item.rule === target\n );\n if (contentIndex > -1) {\n const rulesToAdd = CssParser._parseInputToRules(newRuleOrCss);\n const ruleItems: CssRuleItem[] = rulesToAdd.map(rule => ({ type: 'rule', rule }));\n this.content.splice(contentIndex, 0, ...ruleItems);\n }\n return this;\n }\n\n public insertAfter(target: CssRule, newRuleOrCss: CssRule | string): this {\n const contentIndex = this.content.findIndex(item =>\n item.type === 'rule' && item.rule === target\n );\n if (contentIndex > -1) {\n const rulesToAdd = CssParser._parseInputToRules(newRuleOrCss);\n const ruleItems: CssRuleItem[] = rulesToAdd.map(rule => ({ type: 'rule', rule }));\n this.content.splice(contentIndex + 1, 0, ...ruleItems);\n }\n return this;\n }\n\n public replace(target: CssRule, newRuleOrCss: CssRule | string): this {\n const contentIndex = this.content.findIndex(item =>\n item.type === 'rule' && item.rule === target\n );\n if (contentIndex > -1) {\n const rulesToReplace = CssParser._parseInputToRules(newRuleOrCss);\n const ruleItems: CssRuleItem[] = rulesToReplace.map(rule => ({ type: 'rule', rule }));\n this.content.splice(contentIndex, 1, ...ruleItems);\n }\n return this;\n }\n\n public remove(target: CssRule): this {\n const contentIndex = this.content.findIndex(item =>\n item.type === 'rule' && item.rule === target\n );\n if (contentIndex > -1) {\n this.content.splice(contentIndex, 1);\n }\n return this;\n }\n}\n\n// --- Style Rule Class ---\nexport class StyleRule extends CssNode {\n public selector: string;\n\n constructor(selector: string, content: CssContentItem[] = []) {\n super(content);\n this.selector = selector;\n }\n\n public stringify(indent = 0): string {\n const indentStr = ' '.repeat(indent);\n const innerIndentStr = ' '.repeat(indent + 1);\n\n if (this.content.length === 0) {\n return `${indentStr}${this.selector} {}`;\n }\n\n const contentLines: string[] = [];\n\n for (const item of this.content) {\n if (item.type === 'declaration') {\n const kebabProperty = CssParser._camelToKebab(item.property);\n contentLines.push(`${innerIndentStr}${kebabProperty}: ${item.value};`);\n } else if (item.type === 'rule') {\n contentLines.push(item.rule.stringify(indent + 1));\n } else if (item.type === 'comment') {\n contentLines.push(`${innerIndentStr}/* ${item.text} */`);\n }\n }\n\n const innerContent = contentLines.join('\\n');\n return `${indentStr}${this.selector} {\\n${innerContent}\\n${indentStr}}`;\n }\n}\n\n// --- At Rule Class ---\nexport class AtRule extends CssNode {\n public name: string;\n public condition: string;\n\n constructor(name: string, condition: string, content: CssContentItem[] = []) {\n super(content);\n this.name = name;\n this.condition = condition;\n }\n\n public stringify(indent = 0): string {\n const indentStr = ' '.repeat(indent);\n const innerIndentStr = ' '.repeat(indent + 1);\n const prelude = `@${this.name}${this.condition ? ' ' + this.condition : ''}`;\n\n if (this.content.length === 0) {\n return `${indentStr}${prelude};`;\n }\n\n const contentLines: string[] = [];\n\n for (const item of this.content) {\n if (item.type === 'declaration') {\n const kebabProperty = CssParser._camelToKebab(item.property);\n contentLines.push(`${innerIndentStr}${kebabProperty}: ${item.value};`);\n } else if (item.type === 'rule') {\n contentLines.push(item.rule.stringify(indent + 1));\n } else if (item.type === 'comment') {\n contentLines.push(`${innerIndentStr}/* ${item.text} */`);\n }\n }\n\n const innerContent = contentLines.join('\\n');\n return `${indentStr}${prelude} {\\n${innerContent}\\n${indentStr}}`;\n }\n}\n\nexport type CssRule = StyleRule | AtRule;\n\n// --- The main parser class ---\n\nexport class CssParser extends CssNode {\n constructor(css: string = '') {\n const content = CssParser._parseTopLevel(css);\n super(content);\n }\n\n // --- Accessors ---\n public get rules(): Readonly<CssRule[]> {\n return this.children;\n }\n\n // --- Stringify ---\n public stringify(indent = 0): string {\n if (this.content.length === 0) {\n return '';\n }\n\n const contentLines: string[] = [];\n\n for (const item of this.content) {\n if (item.type === 'declaration') {\n const kebabProperty = CssParser._camelToKebab(item.property);\n contentLines.push(`${kebabProperty}: ${item.value};`);\n } else if (item.type === 'rule') {\n contentLines.push(item.rule.stringify(indent));\n } else if (item.type === 'comment') {\n contentLines.push(`/* ${item.text} */`);\n }\n }\n\n return contentLines.join('\\n');\n }\n\n // --- Static parsing method ---\n private static _parseTopLevel(css: string): CssContentItem[] {\n const cleanedCss = CssParser._cleanCss(css);\n\n // Parse top-level content including comments, declarations, and rules\n return CssParser._parseContent(cleanedCss);\n }\n\n // --- Parsing Logic ---\n private static _cleanCss(css: string): string {\n // Don't remove comments - we'll parse them as content items\n return css.trim();\n }\n\n // --- Universal content parser that handles comments, declarations, and rules ---\n private static _parseContent(css: string): CssContentItem[] {\n const content: CssContentItem[] = [];\n let i = 0;\n\n while (i < css.length) {\n // Skip whitespace\n while (i < css.length && /\\s/.test(css[i])) {\n i++;\n }\n if (i >= css.length) break;\n\n // Handle comments\n if (css[i] === '/' && i + 1 < css.length && css[i + 1] === '*') {\n const commentStart = i + 2;\n let commentEnd = css.indexOf('*/', commentStart);\n if (commentEnd === -1) {\n commentEnd = css.length;\n i = css.length;\n } else {\n const commentText = css.substring(commentStart, commentEnd).trim();\n content.push({ type: 'comment', text: commentText });\n i = commentEnd + 2;\n }\n continue;\n }\n\n // Find the next significant token\n const nextBraceIndex = css.indexOf('{', i);\n const nextSemicolonIndex = css.indexOf(';', i);\n const nextCommentIndex = css.indexOf('/*', i);\n\n // Determine what comes first\n const nextTokens = [\n { type: 'brace', index: nextBraceIndex },\n { type: 'semicolon', index: nextSemicolonIndex },\n { type: 'comment', index: nextCommentIndex }\n ].filter(token => token.index !== -1).sort((a, b) => a.index - b.index);\n\n if (nextTokens.length === 0) {\n // No more tokens, parse remaining as declaration if it contains ':'\n const remaining = css.substring(i).trim();\n if (remaining && remaining.includes(':')) {\n const parts = remaining.split(':');\n if (parts.length >= 2) {\n const prop = parts[0].trim();\n const val = parts.slice(1).join(':').trim();\n if (prop && val) {\n content.push({ type: 'declaration', property: prop, value: val });\n }\n }\n }\n break;\n }\n\n const nextToken = nextTokens[0];\n\n if (nextToken.type === 'comment') {\n // Handle comment (already handled above, but just in case)\n i = nextToken.index;\n continue;\n }\n\n if (nextToken.type === 'brace') {\n // This is a rule (selector or at-rule)\n const prelude = css.substring(i, nextToken.index).trim();\n if (prelude) {\n const blockEndIndex = CssParser._findMatchingBrace(css, nextToken.index);\n if (blockEndIndex !== -1) {\n const blockContent = css.substring(nextToken.index + 1, blockEndIndex).trim();\n\n if (prelude.startsWith('@')) {\n // At-rule\n const name = prelude.match(/^@([^\\s]+)/)?.[1] || 'unknown';\n const condition = prelude.replace(/^@[^\\s]+\\s*/, '').trim();\n const childContent = CssParser._parseContent(blockContent);\n content.push({ type: 'rule', rule: new AtRule(name, condition, childContent) });\n } else {\n // Style rule\n const childContent = CssParser._parseContent(blockContent);\n content.push({ type: 'rule', rule: new StyleRule(prelude, childContent) });\n }\n i = blockEndIndex + 1;\n continue;\n }\n }\n }\n\n if (nextToken.type === 'semicolon') {\n // This could be a declaration or at-rule without block\n const statement = css.substring(i, nextToken.index).trim();\n if (statement) {\n if (statement.startsWith('@')) {\n // At-rule without block\n const name = statement.match(/^@([^\\s]+)/)?.[1] || 'unknown';\n const condition = statement.replace(/^@[^\\s]+\\s*/, '').trim();\n content.push({ type: 'rule', rule: new AtRule(name, condition, []) });\n } else if (statement.includes(':')) {\n // Declaration\n const parts = statement.split(':');\n if (parts.length >= 2) {\n const prop = parts[0].trim();\n const val = parts.slice(1).join(':').trim();\n if (prop && val) {\n content.push({ type: 'declaration', property: prop, value: val });\n }\n }\n }\n }\n i = nextToken.index + 1;\n continue;\n }\n\n // Fallback: move to next character\n i++;\n }\n\n return content;\n }\n\n private static _parseBlockContent(css: string): { content: CssContentItem[] } {\n // Use the universal content parser\n return { content: CssParser._parseContent(css) };\n }\n\n private static _parseRules(css: string): CssRule[] {\n const rules: CssRule[] = [];\n let currentIndex = 0;\n css = css.trim();\n\n const recursiveAtRules = ['media', 'supports', 'container', 'scope', 'layer'];\n\n while (currentIndex < css.length) {\n while (currentIndex < css.length && /\\s/.test(css[currentIndex])) {\n currentIndex++;\n }\n if (currentIndex >= css.length) {\n break;\n }\n\n const nextBraceIndex = css.indexOf('{', currentIndex);\n const nextSemicolonIndex = css.indexOf(';', currentIndex);\n\n if (nextBraceIndex !== -1 && (nextBraceIndex < nextSemicolonIndex || nextSemicolonIndex === -1)) {\n const prelude = css.substring(currentIndex, nextBraceIndex).trim();\n if (!prelude) {\n currentIndex = nextBraceIndex + 1;\n continue;\n }\n\n const blockEndIndex = CssParser._findMatchingBrace(css, nextBraceIndex);\n if (blockEndIndex === -1) {\n console.error(\"Malformed CSS: No matching brace for selector -> \", prelude);\n return rules;\n }\n\n const blockContent = css.substring(nextBraceIndex + 1, blockEndIndex).trim();\n\n if (prelude.startsWith('@')) {\n const name = prelude.match(/^@([^\\s]+)/)?.[1] || 'unknown';\n const condition = prelude.replace(/^@[^\\s]+\\s*/, '').trim();\n const content = CssParser._parseContent(blockContent);\n rules.push(new AtRule(name, condition, content));\n } else {\n const content = CssParser._parseContent(blockContent);\n rules.push(new StyleRule(prelude, content));\n }\n currentIndex = blockEndIndex + 1;\n\n } else if (nextSemicolonIndex !== -1) {\n const statement = css.substring(currentIndex, nextSemicolonIndex).trim();\n if (statement.startsWith('@')) {\n const name = statement.match(/^@([^\\s]+)/)?.[1] || 'unknown';\n const condition = statement.replace(/^@[^\\s]+\\s*/, '').trim();\n rules.push(new AtRule(name, condition, []));\n }\n currentIndex = nextSemicolonIndex + 1;\n } else {\n break;\n }\n }\n return rules;\n }\n\n private static _findMatchingBrace(str: string, startIndex: number): number {\n let depth = 1;\n for (let i = startIndex + 1; i < str.length; i++) {\n if (str[i] === '{') {\n depth++;\n } else if (str[i] === '}') {\n depth--;\n if (depth === 0) {\n return i;\n }\n }\n }\n return -1;\n }\n\n private static _parseDeclarations(declarationString: string): CssDeclaration {\n const declarations: CssDeclaration = {};\n const declarationPairs = declarationString.split(';');\n\n for (const pair of declarationPairs) {\n if (pair.trim() === '') {\n continue;\n }\n const parts = pair.split(':');\n if (parts.length >= 2) {\n const property = parts[0].trim();\n const value = parts.slice(1).join(':').trim();\n if (property && value) {\n declarations[property] = value;\n }\n }\n }\n return declarations;\n }\n\n public static _declarationsToCSS(declarations: CssDeclaration, indent: number): string {\n const indentStr = ' '.repeat(indent);\n return Object.entries(declarations)\n .map(([prop, value]) => `${indentStr}${CssParser._camelToKebab(prop)}: ${value};`)\n .join('\\n');\n }\n\n public static _camelToKebab(camelCase: string): string {\n return camelCase.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1-$2').toLowerCase();\n }\n\n // Helper to parse string input to CssRule[]\n public static _parseInputToRules(ruleOrCss: CssRule | string): CssRule[] {\n if (typeof ruleOrCss === 'string') {\n const parsed = new CssParser(ruleOrCss).rules;\n if (parsed.length === 0) {\n console.warn('Provided CSS string resulted in no rules.');\n }\n return [...parsed];\n } else {\n return [ruleOrCss];\n }\n }\n}\n\n// --- Type Guards ---\n\nexport function isRule(obj: any): obj is CssRule {\n return obj instanceof StyleRule || obj instanceof AtRule;\n}\n\nexport function isStyleRule(rule: any): rule is StyleRule {\n return rule instanceof StyleRule;\n}\n\nexport function isAtRule(rule: any): rule is AtRule {\n return rule instanceof AtRule;\n}\n\nexport function isCssDeclarationItem(item: any): item is CssDeclarationItem {\n return item && typeof item === 'object' && item.type === 'declaration' &&\n typeof item.property === 'string' && typeof item.value === 'string';\n}\n\nexport function isCssRuleItem(item: any): item is CssRuleItem {\n return item && typeof item === 'object' && item.type === 'rule' && isRule(item.rule);\n}\n\nexport function isCssCommentItem(item: any): item is CssCommentItem {\n return item && typeof item === 'object' && item.type === 'comment' && typeof item.text === 'string';\n}", "import { Render } from '../rawsets/Render';\n\nexport type OnCreateRenderDataParams = { rootParent: any, render?: Render };\n\nexport interface OnCreateRenderData {\n onCreateRenderData(data: OnCreateRenderDataParams): void;\n}\n\nexport const isOnCreateRenderData = (obj: any): obj is OnCreateRenderData => {\n return typeof obj?.onCreateRenderData === 'function';\n}", "export interface OnCreateRender {\n onCreateRender(...param: any[]): void;\n}\nexport const isOnCreateRender = (obj: any): obj is OnCreateRender => {\n return typeof obj?.onCreateRender === 'function';\n}", "import { RawSet } from '../rawsets/RawSet';\n\nexport type OtherData = {\n rawSet?: RawSet\n}\nexport interface OnChangeAttrRender {\n onChangeAttrRender(name: string, value: any, other: OtherData): void;\n}\n\nexport const isOnChangeAttrRender = (obj: any): obj is OnChangeAttrRender => {\n return typeof obj?.onChangeAttrRender === 'function';\n}\n", "import { RawSet } from '../rawsets/RawSet';\n\nexport interface OnInitRender {\n onInitRender(param: any, rawSet:RawSet): Promise<void>;\n}\n\nexport function isOnInitRender(obj: any): obj is OnInitRender {\n return typeof obj?.onInitRender === 'function';\n}", "import { OnCreateRenderDataParams } from '../lifecycle/OnCreateRenderData';\n\n\nexport interface OnCreatedThisChild {\n onCreatedThisChild(child: any, childData: OnCreateRenderDataParams): void;\n}\n\nexport const isOnCreatedThisChild= (obj: any): obj is OnCreatedThisChild => {\n return typeof obj?.onCreatedThisChild === 'function';\n}", "import { RawSet } from '../rawsets/RawSet';\n\nexport type OnDestroyRenderParams = { rawSet: RawSet };\n\nexport interface OnDestroyRender {\n onDestroyRender(data?: OnDestroyRenderParams): void;\n}\n\nexport const isOnDestroyRender = (obj: any): obj is OnDestroyRender => {\n return typeof obj?.onDestroyRender === 'function';\n};", "import { RawSet } from '../rawsets/RawSet';\nimport { CreatorMetaData } from '../rawsets/CreatorMetaData';\nimport { AfterCallBack, ElementSource, ExecuteState, OperatorExecuter, ReturnContainer, Source } from './OperatorExecuter';\nimport { Render } from '../rawsets/Render';\nimport { ScriptUtils } from '@dooboostore/core-web/script/ScriptUtils';\n\n\n// \uC5EC\uAE30\uC11C \uC0AC\uC6A9\uC790\uAC00 \uB4F1\uB85D\uD55C TargetElement\uAC00 \uB4E4\uC5B4\uAC04\uB2E4.\nexport class DrTargetElementIsElement extends OperatorExecuter<string | null> {\n constructor(rawSet: RawSet, render: Render, returnContainer: ReturnContainer, elementSource: ElementSource, source: Source, afterCallBack: AfterCallBack) {\n source.operatorAround = undefined;\n super(rawSet, render, returnContainer, elementSource, source, afterCallBack, false);\n }\n\n async execute(attr: string | null): Promise<ExecuteState> {\n if (!attr) {\n return ExecuteState.NO_EXECUTE;\n }\n const targetElement = this.source.config?.targetElements?.find(it => it.name.toLowerCase() === attr.toLowerCase());\n // console.log('--------------tar', targetElement)\n if (targetElement) {\n if (this.rawSet.point.start instanceof this.source.config.window.HTMLMetaElement && this.rawSet.point.end instanceof this.source.config.window.HTMLMetaElement) {\n this.rawSet.point.start.setAttribute('this-path', `this.__domrender_components.${this.rawSet.uuid}`)\n this.rawSet.point.end.setAttribute('this-path', `this.__domrender_components.${this.rawSet.uuid}`)\n }\n\n\n const documentFragment = await targetElement.callBack(this.elementSource.element, this.source.obj, this.rawSet, this.elementSource.attrs, this.source.config);\n if (documentFragment) {\n const detectAction = this.elementSource.element.getAttribute(RawSet.DR_DETECT_NAME);\n this.rawSet.dataSet.fragment = documentFragment;\n if (detectAction && this.rawSet.dataSet.render) {\n // TODO: \uC5C6\uC5B4\uC838\uC57C\uB420\uB4EF?\n this.rawSet.detect = {\n action: () => {\n const script = `var $component = this.__render.component; var $element = this.__render.element; var $innerHTML = this.__render.innerHTML; var $attribute = this.__render.attribute; ${detectAction} `;\n ScriptUtils.evaluate(script, Object.assign(this.source.obj, {\n __render: this.rawSet.dataSet.render\n }))\n }\n };\n }\n\n // dr-replace-target-element-is \uB294 \uBB34\uC870\uAC74 NoStrip\uB85C \uCC98\uB9AC\n const noStrip = targetElement.noStrip\n\n let targetFragment = documentFragment;\n if (noStrip) {\n const fragment = this.source.config.window.document.createDocumentFragment()\n Array.from(documentFragment.firstElementChild?.childNodes || []).forEach(child => {\n fragment.appendChild(child);\n });\n targetFragment = fragment;\n }\n\n const rr = RawSet.checkPointCreates(targetFragment, this.source.obj, this.source.config)\n if (noStrip) {\n Array.from(targetFragment.childNodes||[]).forEach(child => {\n documentFragment.firstElementChild?.appendChild(child)\n })\n }\n this.elementSource.element.parentNode?.replaceChild(documentFragment, this.elementSource.element);\n this.returnContainer.raws.push(...rr);\n this.afterCallBack.onElementInitCallBacks.push({\n name: targetElement.name.toLowerCase(),\n obj: this.source.obj,\n targetElement,\n creatorMetaData: targetElement.__creatorMetaData as CreatorMetaData\n });\n targetElement?.complete?.(this.elementSource.element, this.source.obj, this.rawSet);\n }\n return ExecuteState.EXECUTE;\n }\n return ExecuteState.NO_EXECUTE;\n }\n}\n", "export type Attr = { name: string; value: any };\nexport namespace NodeUtils {\n export enum FindNodesFilterResult {\n MATCH_AND_CONTINUE='MATCH_AND_CONTINUE', // Match the node, and continue to its children\n MATCH_AND_SKIP_CHILDREN='MATCH_AND_SKIP_CHILDREN', // Match the node, but do not traverse its children\n NO_MATCH_AND_CONTINUE='NO_MATCH_AND_CONTINUE', // Don't match the node, but continue to its children\n NO_MATCH_AND_SKIP_CHILDREN='NO_MATCH_AND_SKIP_CHILDREN' // Don't match the node, and also skip its children\n }\n // https://stackoverflow.com/questions/3955229/remove-all-child-elements-of-a-dom-node-in-javascript\n export const removeAllChildNode = (node: Node) => {\n while (node?.firstChild) {\n node.firstChild.remove();\n }\n };\n\n export const appendChild = (parentNode: Node, childNode: Node) => {\n return parentNode.appendChild(childNode);\n };\n\n export const replaceNode = (targetNode: Node, newNode: Node) => {\n // console.log('repalceNode', targetNode, newNode, targetNode.parentNode)\n return targetNode.parentNode?.replaceChild(newNode, targetNode);\n };\n\n export const addNode = (targetNode: Node, newNode: Node) => {\n return targetNode.parentNode?.insertBefore(newNode, targetNode.nextSibling);\n };\n export const cloneNode = <N extends Node>(element: N, deep?: boolean) => {\n return element.cloneNode(deep ?? false) as N;\n };\n\n export const findNodes = (rootNode: Node, filter: (node: Node) => FindNodesFilterResult): Node[] => {\n const foundNodes: Node[] = [];\n\n function traverse(node: Node) {\n if (!node) {\n return;\n }\n\n node.childNodes.forEach(child => {\n const result = filter(child);\n\n if (\n result === FindNodesFilterResult.MATCH_AND_CONTINUE ||\n result === FindNodesFilterResult.MATCH_AND_SKIP_CHILDREN\n ) {\n foundNodes.push(child);\n }\n\n if (\n result === FindNodesFilterResult.MATCH_AND_CONTINUE ||\n result === FindNodesFilterResult.NO_MATCH_AND_CONTINUE\n ) {\n traverse(child);\n }\n });\n }\n\n traverse(rootNode);\n return foundNodes;\n };\n}\n", "import { RandomUtils } from '@dooboostore/core/random/RandomUtils';\nimport { StringUtils } from '@dooboostore/core/string/StringUtils';\nimport { EventManager, NormalAttrDataType } from '../events/EventManager';\nimport type { DomRenderConfig } from '../configs/DomRenderConfig';\nimport { Range } from '../iterators/Range';\nimport { ElementUtils } from '@dooboostore/core-web/element/ElementUtils';\nimport { ComponentSet } from '../components/ComponentSet';\nimport { DrPre } from '../operators/DrPre';\nimport { Dr } from '../operators/Dr';\nimport { DrIf } from '../operators/DrIf';\nimport { ExecuteState, OperatorExecuter } from '../operators/OperatorExecuter';\nimport { DrThis } from '../operators/DrThis';\nimport { DrForm } from '../operators/DrForm';\nimport { DrInnerText } from '../operators/DrInnerText';\nimport { DrInnerHTML } from '../operators/DrInnerHTML';\nimport { DrFor } from '../operators/DrFor';\nimport { DrForOf } from '../operators/DrForOf';\nimport { DrAppender } from '../operators/DrAppender';\nimport { DrRepeat } from '../operators/DrRepeat';\nimport { DrTargetElement } from '../operators/DrTargetElement';\nimport { DrTargetAttr } from '../operators/DrTargetAttr';\nimport { DrStripElement } from '../operators/DrStripElement';\nimport { TargetElement } from '../configs/TargetElement';\nimport { TargetAttr } from '../configs/TargetAttr';\nimport { DestroyOptionType } from './DestroyOptionType';\nimport { Attrs } from './Attrs';\nimport { AttrInitCallBack } from './AttrInitCallBack';\nimport { ElementInitCallBack } from './ElementInitCallBack';\nimport { RawSetType } from './RawSetType';\nimport { Render } from './Render';\nimport { DrThisProperty } from '../operators/DrThisProperty';\nimport { RawSetOperatorType } from './RawSetOperatorType';\nimport { CssParser, CssRule, isStyleRule, isAtRule } from '@dooboostore/core/parser/css/CssParser';\nimport { isOnCreateRenderData, OnCreateRenderDataParams } from '../lifecycle/OnCreateRenderData';\nimport { isOnCreateRender } from '../lifecycle/OnCreateRender';\nimport { isOnChangeAttrRender } from '../lifecycle/OnChangeAttrRender';\nimport { isOnInitRender } from '../lifecycle/OnInitRender';\nimport { isOnCreatedThisChild } from '../lifecycle/OnCreatedThisChild';\nimport { isOnDestroyRender, OnDestroyRenderParams } from '../lifecycle/OnDestroyRender';\nimport { DrTargetElementIsElement } from '../operators/DrTargetElementIsElement';\nimport { ObjectUtils } from '@dooboostore/core/object/ObjectUtils';\nimport { NodeUtils } from '@dooboostore/core-web/node/NodeUtils';\nimport { ConvertUtils } from '@dooboostore/core/convert/ConvertUtils';\n\nexport type RenderResult = { raws: RawSet[]; executedOperators: OperatorExecuter[] };\n\nexport class RawSet {\n public static readonly DR_NAME = 'dr';\n public static readonly DR_IF_NAME = 'dr-if';\n public static readonly DR_FOR_NAME = 'dr-for';\n public static readonly DR_FOR_OF_NAME = 'dr-for-of';\n public static readonly DR_THIS_PROPERTY_NAME = 'dr-this-property';\n public static readonly DR_REPEAT_NAME = 'dr-repeat';\n public static readonly DR_THIS_NAME = 'dr-this';\n public static readonly DR_FORM_NAME = 'dr-form';\n public static readonly DR_PRE_NAME = 'dr-pre';\n public static readonly DR_APPENDER_NAME = 'dr-appender';\n public static readonly DR_INNERHTML_NAME = 'dr-inner-html';\n public static readonly DR_INNERTEXT_NAME = 'dr-inner-text';\n public static readonly DR_DETECT_NAME = 'dr-detect';\n public static readonly DR_STRIP_NAME = 'dr-strip';\n public static readonly DR_REPLACE_TARGET_ELEMENT_IS_NAME = 'dr-replace-target-element-is';\n\n // \uAC10\uC9C0\uCC98\uB9AC\uB418\uB294 \uC635\uC158\n public static readonly DR_DETECT_IF_OPTIONNAME = 'dr-detect-option-if';\n public static readonly DR_DETECT_FILTER_OPTIONNAME = 'dr-detect-option-filter';\n public static readonly DR_DETECT_ATTR_OPTIONNAME = 'dr-detect-option-attr';\n\n /**\n * @deprecated\n */\n public static readonly DR_THIS_OPTIONNAME = 'dr-option-this';\n public static readonly DR_ATTR_OPTIONNAME = 'dr-option-attr';\n public static readonly DR_IF_OPTIONNAME = 'dr-option-if';\n public static readonly DR_IT_OPTIONNAME = 'dr-option-it';\n public static readonly DR_VAR_OPTIONNAME = 'dr-option-var';\n public static readonly DR_AFTER_OPTIONNAME = 'dr-option-after';\n public static readonly DR_NEXT_OPTIONNAME = 'dr-option-next';\n public static readonly DR_BEFORE_OPTIONNAME = 'dr-option-before';\n public static readonly DR_COMPLETE_OPTIONNAME = 'dr-option-complete';\n public static readonly DR_STRIP_OPTIONNAME = 'dr-option-strip';\n public static readonly DR_DESTROY_OPTIONNAME = 'dr-option-destroy';\n\n public static readonly DR_THIS_NAME_OPTIONNAME = 'dr-option-this-name';\n\n public static readonly DR_VARIABLE_NAME_OPTIONNAME = 'dr-option-variable-name';\n public static readonly DR_ITEM_VARIABLE_NAME_OPTIONNAME = 'dr-option-item-variable-name';\n public static readonly DR_ITEM_INDEX_VARIABLE_NAME_OPTIONNAME = 'dr-option-item-index-variable-name';\n public static readonly DR_INNER_HTML_NAME_OPTIONNAME = 'dr-option-inner-html-name';\n public static readonly DR_INNER_TEXT_NAME_OPTIONNAME = 'dr-option-inner-text-name';\n public static readonly DR_INNER_HTML_ESCAPED_NAME_OPTIONNAME = 'dr-option-inner-html-escaped-name';\n\n public static readonly DR_KEY_OPTIONNAME = 'dr-option-key';\n public static readonly DR_HAS_KEYS_OPTIONNAME = 'dr-option-has-keys';\n\n public static readonly DR_ON_CREATE_ARGUMENTS_OPTIONNAME = 'dr-on-create:arguments';\n public static readonly DR_ON_CREATED_CALLBACK_OPTIONNAME = 'dr-on-create:callback';\n /** \uC6B0\uC120 \uC4F0\uB294\uACF3\uC774 \uC5C6\uC5B4\uC11C deprecated\uB97C \uAC78\uC5B4\uB1A8\uC74C\n @deprecated\n */\n public static readonly DR_ON_INIT_ARGUMENTS_OPTIONNAME = 'dr-on-init:arguments';\n public static readonly DR_ON_CONSTRUCTOR_ARGUMENTS_OPTIONNAME = 'dr-on-constructor:arguments';\n\n public static readonly drAttrsOriginName: Attrs = {\n dr: RawSet.DR_NAME,\n drIf: RawSet.DR_IF_NAME,\n drFor: RawSet.DR_FOR_NAME,\n drForOf: RawSet.DR_FOR_OF_NAME,\n drThisProperty: RawSet.DR_THIS_PROPERTY_NAME,\n drAppender: RawSet.DR_APPENDER_NAME,\n drRepeat: RawSet.DR_REPEAT_NAME,\n drThis: RawSet.DR_THIS_NAME,\n drForm: RawSet.DR_FORM_NAME,\n drPre: RawSet.DR_PRE_NAME,\n drInnerHTML: RawSet.DR_INNERHTML_NAME,\n drInnerText: RawSet.DR_INNERTEXT_NAME,\n drItOption: RawSet.DR_IT_OPTIONNAME,\n drVarOption: RawSet.DR_VAR_OPTIONNAME,\n drAfterOption: RawSet.DR_AFTER_OPTIONNAME,\n drNextOption: RawSet.DR_NEXT_OPTIONNAME,\n drBeforeOption: RawSet.DR_BEFORE_OPTIONNAME,\n drCompleteOption: RawSet.DR_COMPLETE_OPTIONNAME,\n drStripElement: RawSet.DR_STRIP_NAME,\n drReplaceTargetElementIs: RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME,\n drStripOption: RawSet.DR_STRIP_OPTIONNAME,\n drIfOption: RawSet.DR_IF_OPTIONNAME,\n drDetectIfOption: RawSet.DR_DETECT_IF_OPTIONNAME,\n drDestroyOption: RawSet.DR_DESTROY_OPTIONNAME,\n drHasKeysOption: RawSet.DR_HAS_KEYS_OPTIONNAME,\n drKeyOption: RawSet.DR_KEY_OPTIONNAME\n };\n\n public static readonly DR_TAGS = [];\n\n // public static readonly DR_REPLACE_ACTION_ATTRIBUTES = [\n // RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME\n // ]\n\n public static readonly DR_ATTRIBUTES = [\n RawSet.DR_NAME,\n RawSet.DR_APPENDER_NAME,\n RawSet.DR_IF_NAME,\n RawSet.DR_FOR_OF_NAME,\n RawSet.DR_THIS_PROPERTY_NAME,\n RawSet.DR_FOR_NAME,\n RawSet.DR_THIS_NAME,\n RawSet.DR_FORM_NAME,\n RawSet.DR_PRE_NAME,\n RawSet.DR_INNERHTML_NAME,\n RawSet.DR_INNERTEXT_NAME,\n RawSet.DR_REPEAT_NAME,\n RawSet.DR_DETECT_NAME,\n RawSet.DR_STRIP_NAME\n ] as const;\n\n constructor(\n public uuid: string,\n public type: RawSetType,\n public point: {\n start: Comment | Text | HTMLMetaElement;\n node: Node;\n end: Comment | Text | HTMLMetaElement;\n innerHTML?: string;\n // thisVariableName?: string | null,\n parent?: Node | null;\n parentRawSet?: RawSet;\n childrenRawSets?: RawSet[];\n },\n public dataSet: {\n config: DomRenderConfig;\n fragment: DocumentFragment;\n render?: Render;\n },\n public detect?: { action: Function }\n ) {\n // point.start.rawSet = this;\n // console.log('rawset constructor->', (this.point.node as Element).getAttributeNames());\n }\n\n get isConnected() {\n // console.log('isConnect???', this, this.point.start.isConnected, this.point.end.isConnected);\n return (\n this.point && this.point.start && this.point.end && this.point.start.isConnected && this.point.end.isConnected\n );\n }\n\n // \uC911\uC694\n getUsingTriggerVariables(config?: DomRenderConfig): Set<string> {\n const usingTriggerVariables = new Set<string>();\n // console.log('------data', this.dataSet)\n this.dataSet.fragment.childNodes.forEach((cNode, key) => {\n // console.log('-----aaaa-data', cNode, key)\n let script = '';\n if (cNode.nodeType === Node.TEXT_NODE) {\n script = `\\`${(cNode as Text).textContent ?? ''}\\``;\n const expressionGroups = RawSet.expressionGroups(script);\n // console.log('???????', script, expressionGroups)\n if (expressionGroups[0].length > 1) {\n script = expressionGroups[0][1] as string;\n }\n // console.log('--', expressionGroups, script)\n } else if (cNode.nodeType === Node.ELEMENT_NODE) {\n const element = cNode as Element;\n const targetAttrNames = (config?.targetAttrs?.map(it => it.name) ?? []).concat(\n RawSet.DR_ATTRIBUTES,\n RawSet.DR_DETECT_FILTER_OPTIONNAME,\n RawSet.DR_DETECT_IF_OPTIONNAME,\n RawSet.DR_DETECT_ATTR_OPTIONNAME\n ); // .concat(EventManager.normalAttrMapAttrName);\n const targetScripts = targetAttrNames\n .map(it => element.getAttribute(it))\n .filter(it => it)\n .map(it => `(${it})`);\n const targetAttrMap = element.getAttribute(EventManager.normalAttrMapAttrName);\n // console.log('targetAttrMap-->', targetAttrMap)\n if (targetAttrMap) {\n new Map<string, NormalAttrDataType>(JSON.parse(targetAttrMap)).forEach((v, k) => {\n const variablePaths = v.variablePaths;\n // let targetScript = v.originalAttrValue;\n // variablePaths.forEach(it => {\n // let r = ObjectUtils.Path.toOptionalChainPath(it.inner);\n // targetScript = targetScript.replaceAll(it.origin,`\\${${r}}`);\n // })\n // targetScripts.push(`(${targetScript})`);\n // \uBCC0\uC218 \uCCB4\uD06C\uB9CC \uD558\uB294\uAC70\uB2C8\uAE50 \uC774\uB807\uAC8C\n variablePaths.forEach(it => targetScripts.push(`(${it.inner})`));\n // console.log('targetScripts', targetScripts);\n });\n }\n // console.log('targetScriptstargetScripts', targetScripts)\n script = targetScripts.join(';');\n // script = targetScripts.map(it=>`try{${it}}catch(e){}`).join(';');\n\n // attribute\uCABD \uCCB4\uD06C\uD558\uB294\uAC70 \uCD94\uAC00\n // console.log('----!!!!!-->', targetAttrNames)\n // const otherAttrs = element.getAttributeNames()\n // .filter(it => !targetAttrNames.includes(it.toLowerCase()) && RawSet.isExporesion(element.getAttribute(it)))\n // .map(it => {\n // return `\\`${element.getAttribute(it) ?? ''}\\``;\n // }).join(';');\n // script += ';' + otherAttrs\n }\n if (script) {\n // console.log('------1-',script)\n script = script.replace(/#[^#]*#/g, '({})');\n // console.log('------2-',script)\n // script = script.replace('}$','}');\n // script = script.replace('@this@','this');\n // console.log('----------->', script)\n\n // TODO: \uD6D4.. \uAF2D\uD544\uC694\uD55C\uAC00..? \uD2B8\uB9AC\uAC70\uB420\uB54C \uC2A4\uD06C\uB9BD\uD2B8\uBCC0\uC218 \uAE4C\uC9C0 \uAC10\uC9C0\uD574\uC57C\uB420\uAE4C?\n EventManager.VARNAMES.forEach(it => {\n // script = script.replace(RegExp(it.replace('$', '\\\\$'), 'g'), `this?.___${it}`);\n // script = script.replace(RegExp(it.replace('$', '\\\\$'), 'g'), `this.___${it}`);\n script = script.replace(RegExp(it.replace('$', '\\\\$'), 'g'), `this.___${it}`);\n // console.log('scripts-->', script)\n });\n // console.log('--------1--', script);\n // script = script.replaceAll('#{','${').replaceAll('}#', '}')\n // console.log('--------2--', script);\n // TODO: \uD6D4.. \uAF2D\uD544\uC694\uD55C\uAC00..? \uD2B8\uB9AC\uAC70\uB420\uB54C \uC2A4\uD06C\uB9BD\uD2B8\uBCC0\uC218 \uAE4C\uC9C0 \uAC10\uC9C0\uD574\uC57C\uB420\uAE4C?\n Array.from(ObjectUtils.Path.detectPathFromScript(script, { excludeThis: true }))\n .filter(it => !it.startsWith(`___${EventManager.SCRIPTS_VARNAME}`))\n .forEach(it => usingTriggerVariables.add(it));\n }\n });\n // console.log('usingTriggerVariable----------->', usingTriggerVariables)\n return usingTriggerVariables;\n }\n\n // \uC911\uC694 render \uCC98\uB9AC \uBD80\uBD84\n // public async render(obj: any, config: DomRenderConfig): Promise<RawSet[]> {\n // }\n public async render(obj: any, config: DomRenderConfig): Promise<RenderResult> {\n // console.log('render!!!!!!!!!!!!!!')\n const genNode = config.window.document.importNode(this.dataSet.fragment, true);\n const raws: RawSet[] = [];\n const onAttrInitCallBacks: AttrInitCallBack[] = [];\n const onElementInitCallBacks: ElementInitCallBack[] = [];\n const onThisComponentSetCallBacks: ComponentSet[] = [];\n const drAttrs: Attrs[] = [];\n // console.log('rawSet render!!', obj, config, this, Array.from(genNode.childNodes.values()));\n const executedOperators: OperatorExecuter[] = [];\n for (const cNode of Array.from(genNode.childNodes.values())) {\n // console.log('cNodecNodecNode', cNode);\n let attribute = {};\n if (cNode.nodeType === Node.ELEMENT_NODE) {\n attribute = ElementUtils.getAttributeToObject(cNode as Element);\n }\n\n const __render = Object.freeze({\n rawSet: this,\n scripts: EventManager.setBindProperty(config?.scripts, obj),\n router: config?.router,\n range: Range.range,\n element: cNode,\n attribute: attribute,\n rootObject: obj,\n scriptUtils: ObjectUtils.Script,\n nearThis: this.findNearThis(obj),\n parentThis: this.findParentThis(obj),\n bindScript: ` /** render **/\n const ${EventManager.SCRIPTS_VARNAME} = this.__render.scripts;\n const ${EventManager.RAWSET_VARNAME} = this.__render.rawSet;\n const ${EventManager.ELEMENT_VARNAME} = this.__render.element;\n const ${EventManager.ATTRIBUTE_VARNAME} = this.__render.attribute;\n const ${EventManager.RANGE_VARNAME} = this.__render.range;\n const ${EventManager.ROUTER_VARNAME} = this.__render.router;\n const ${EventManager.NEAR_THIS_VARNAME} = this.__render.nearThis;\n const ${EventManager.PARENT_THIS_VARNAME} = this.__render.parentThis;\n const ${EventManager.SCRIPT_UTILS_VARNAME} = this.__render.scriptUtils;\n const ${EventManager.ROOT_OBJECT_VARNAME} = this.__render.rootObject;\n `\n }) as unknown as Render;\n\n // const normalAttribute = attribute[EventManager.normalAttrMapAttrName];\n // if (normalAttribute) {\n // new Map<string, string>(JSON.parse(normalAttribute)).forEach((v, k) => {\n // const cval = ScriptUtils.evalReturn({ bodyScript: __render.bindScript, returnScript: v }, Object.assign(obj, { __render: __render }));\n // console.log('-----------',v,k, cval);\n // attribute[v] = cval;\n // });\n // }\n\n const fag = config.window.document.createDocumentFragment();\n if (cNode.nodeType === Node.TEXT_NODE && cNode.textContent) {\n // console.log('text-->', this, obj, config, cNode.textContent);\n // console.log('text-->', Array.from(this.fragment.childNodes))\n const textContent = cNode.textContent;\n const runText = RawSet.expressionGroups(textContent)[0][1];\n // console.log('--->', RawSet.exporesionGrouops(textContent), textContent,runText, runText[0][1])\n let newNode: Node;\n if (textContent?.startsWith('#')) {\n const r = ObjectUtils.Script.evaluate(\n `${__render.bindScript} return ${runText}`,\n Object.assign(obj, { __render })\n );\n const template = config.window.document.createElement('template') as HTMLTemplateElement;\n template.innerHTML = r;\n newNode = template.content;\n } else {\n const r = ObjectUtils.Script.evaluate(\n `${__render.bindScript} return ${runText}`,\n Object.assign(obj, { __render })\n );\n newNode = config.window.document.createTextNode(r);\n }\n cNode.parentNode?.replaceChild(newNode, cNode);\n // console.log('-------', this.point.start.parentNode.nodeName)\n // \uC911\uC694 style value change \uB410\uC744\uB54C \uB2E4\uC2DC \uCC98\uB9AC\uD574\uC57C\uB418\uAE30\uB584\uBB38\uC5D0: \uB9C8\uC9C0\uB9C9\uC5D0 completed \uC5C6\uB294 attr \uAC00\uC9C0\uACE0 \uD310\uB2E8 \uD558\uB2C8\uAE50\n if (this.type === RawSetType.STYLE_TEXT && this.point.parent) {\n (this.point.parent as Element).removeAttribute('completed');\n }\n } else if (cNode.nodeType === Node.ELEMENT_NODE) {\n const element = cNode as Element;\n // console.log('target-->', element)\n const drAttr: Attrs = {\n dr: this.getAttributeAndDelete(element, RawSet.DR_NAME),\n drIf: this.getAttributeAndDelete(element, RawSet.DR_IF_NAME),\n drFor: this.getAttributeAndDelete(element, RawSet.DR_FOR_NAME),\n drForOf: this.getAttributeAndDelete(element, RawSet.DR_FOR_OF_NAME),\n drThisProperty: this.getAttributeAndDelete(element, RawSet.DR_THIS_PROPERTY_NAME),\n drAppender: this.getAttributeAndDelete(element, RawSet.DR_APPENDER_NAME),\n drRepeat: this.getAttributeAndDelete(element, RawSet.DR_REPEAT_NAME),\n drThis: this.getAttributeAndDelete(element, RawSet.DR_THIS_NAME),\n drForm: this.getAttributeAndDelete(element, RawSet.DR_FORM_NAME),\n drPre: this.getAttributeAndDelete(element, RawSet.DR_PRE_NAME),\n drInnerHTML: this.getAttributeAndDelete(element, RawSet.DR_INNERHTML_NAME),\n drInnerText: this.getAttributeAndDelete(element, RawSet.DR_INNERTEXT_NAME),\n drStripElement: this.getAttributeAndDelete(element, RawSet.DR_STRIP_NAME),\n drReplaceTargetElementIs: this.getAttributeAndDelete(element, RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME),\n drItOption: this.getAttributeAndDelete(element, RawSet.DR_IT_OPTIONNAME),\n drIfOption: this.getAttributeAndDelete(element, RawSet.DR_IF_OPTIONNAME),\n drVarOption: this.getAttributeAndDelete(element, RawSet.DR_VAR_OPTIONNAME),\n drNextOption: this.getAttributeAndDelete(element, RawSet.DR_NEXT_OPTIONNAME),\n drAfterOption: this.getAttributeAndDelete(element, RawSet.DR_AFTER_OPTIONNAME),\n drBeforeOption: this.getAttributeAndDelete(element, RawSet.DR_BEFORE_OPTIONNAME),\n drCompleteOption: this.getAttributeAndDelete(element, RawSet.DR_COMPLETE_OPTIONNAME),\n drStripOption: this.getAttributeAndDelete(element, RawSet.DR_STRIP_OPTIONNAME),\n drDestroyOption: this.getAttributeAndDelete(element, RawSet.DR_DESTROY_OPTIONNAME),\n drKeyOption: this.getAttributeAndDelete(element, RawSet.DR_KEY_OPTIONNAME),\n drDetectIfOption: this.getAttribute(element, RawSet.DR_DETECT_IF_OPTIONNAME),\n drHasKeysOption: this.getAttribute(element, RawSet.DR_HAS_KEYS_OPTIONNAME)\n };\n drAttrs.push(drAttr);\n // \uC544\uB798 \uC21C\uC11C \uC911\uC694\n const operators = [\n new DrPre(\n this,\n __render,\n { raws, fag },\n { element, attrName: RawSet.DR_PRE_NAME, attr: drAttr.drPre, attrs: drAttr },\n { config, obj, operatorAround: config.operatorAround?.drPre },\n { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }\n ),\n new Dr(\n this,\n __render,\n { raws, fag },\n { element, attrName: RawSet.DR_NAME, attr: drAttr.dr, attrs: drAttr },\n { config, obj, operatorAround: config.operatorAround?.dr },\n { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }\n ),\n // new Dr(this, __render, {raws, fag}, {element, attrName: EventManager.onRenderedInitAttrName, attr: drAttr.dr, attrs: drAttr}, {config, obj, operatorAround: config.operatorAround?.dr}, {onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks}),\n new DrIf(\n this,\n __render,\n { raws, fag },\n { element, attrName: RawSet.DR_IF_NAME, attr: drAttr.drIf, attrs: drAttr },\n { config, obj, operatorAround: config.operatorAround?.drIf },\n { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }\n ),\n new DrStripElement(\n this,\n __render,\n { raws, fag },\n { element, attrName: RawSet.DR_STRIP_NAME, attr: drAttr.drStripElement, attrs: drAttr },\n { config, obj, operatorAround: config.operatorAround?.drThis },\n { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }\n ),\n new DrThis(\n this,\n __render,\n { raws, fag },\n { element, attrName: RawSet.DR_THIS_NAME, attr: drAttr.drThis, attrs: drAttr },\n { config, obj, operatorAround: config.operatorAround?.drThis },\n { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }\n ),\n new DrForm(\n this,\n __render,\n { raws, fag },\n { element, attrName: RawSet.DR_FOR_NAME, attr: drAttr.drForm, attrs: drAttr },\n { config, obj, operatorAround: config.operatorAround?.drForm },\n { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }\n ),\n new DrInnerText(\n this,\n __render,\n { raws, fag },\n { element, attrName: RawSet.DR_INNERTEXT_NAME, attr: drAttr.drInnerText, attrs: drAttr },\n { config, obj, operatorAround: config.operatorAround?.drInnerText },\n { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }\n ),\n new DrInnerHTML(\n this,\n __render,\n { raws, fag },\n { element, attrName: RawSet.DR_INNERHTML_NAME, attr: drAttr.drInnerHTML, attrs: drAttr },\n { config, obj, operatorAround: config.operatorAround?.drInnerHTML },\n { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }\n ),\n new DrFor(\n this,\n __render,\n { raws, fag },\n { element, attrName: RawSet.DR_FOR_NAME, attr: drAttr.drFor, attrs: drAttr },\n { config, obj, operatorAround: config.operatorAround?.drFor },\n { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }\n ),\n new DrForOf(\n this,\n __render,\n { raws, fag },\n { element, attrName: RawSet.DR_FOR_OF_NAME, attr: drAttr.drForOf, attrs: drAttr },\n { config, obj, operatorAround: config.operatorAround?.drForOf },\n { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }\n ),\n new DrThisProperty(\n this,\n __render,\n { raws, fag },\n { element, attrName: RawSet.DR_THIS_PROPERTY_NAME, attr: drAttr.drThisProperty, attrs: drAttr },\n { config, obj, operatorAround: config.operatorAround?.drThisProperty },\n { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }\n ),\n new DrAppender(\n this,\n __render,\n { raws, fag },\n { element, attrName: RawSet.DR_APPENDER_NAME, attr: drAttr.drAppender, attrs: drAttr },\n { config, obj, operatorAround: config.operatorAround?.drAppender },\n { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }\n ),\n new DrRepeat(\n this,\n __render,\n { raws, fag },\n { element, attrName: RawSet.DR_REPEAT_NAME, attr: drAttr.drRepeat, attrs: drAttr },\n { config, obj, operatorAround: config.operatorAround?.drRepeat },\n { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }\n ),\n new DrTargetElementIsElement(\n this,\n __render,\n { raws, fag },\n {\n element,\n attrName: RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME,\n attr: drAttr.drReplaceTargetElementIs,\n attrs: drAttr\n },\n { config, obj },\n { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }\n ),\n new DrTargetElement(\n this,\n __render,\n { raws, fag },\n { element, attrs: drAttr },\n { config, obj },\n { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }\n ),\n new DrTargetAttr(\n this,\n __render,\n { raws, fag },\n { element, attrs: drAttr },\n { config, obj },\n { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }\n )\n ];\n\n for (const operator of operators) {\n const state = await operator.start();\n if (state === ExecuteState.EXECUTE) {\n executedOperators.push(operator);\n break;\n } else if (state === ExecuteState.STOP) {\n return { raws, executedOperators };\n }\n }\n }\n }\n\n this.point.childrenRawSets = raws;\n raws.forEach(it => {\n it.point.parentRawSet = this;\n });\n\n // console.log('pppppppppppppp', this);\n\n // replaceBody\uC640 applyEvent \uC21C\uC11C\uB97C \uBC14\uAFE8\uB2E4 20250511\n const childrenNodes = Array.from(genNode.childNodes);\n this.applyEvent(obj, genNode, config);\n this.replaceBody(genNode); // \uC911\uC694 \uC5EC\uAE30\uC11C \uB9C8\uC9C0\uB9C9\uC5D0 \uC5F0\uC158\uB41C \uAC12\uC744 \uADF8\uB824\uC900\uB2E4.\n // console.log('rawSEt!!!!!!!', obj, this.near)\n // console.log('rawSEt!!!!!!!', obj, this.findNearThis(obj),childrenNodes,config)\n // console.log('rawSEt!!!!!!!', obj, drAttrs)\n this.onRenderedEvent(obj, childrenNodes, config);\n\n drAttrs.forEach(it => {\n if (it.drCompleteOption) {\n // genNode.childNodes\n const render = Object.freeze({\n rawSet: this,\n fag: genNode,\n scripts: EventManager.setBindProperty(config?.scripts, obj)\n } as Render);\n ObjectUtils.Script.evaluate(\n `\n const ${EventManager.FAG_VARNAME} = this.__render.fag;\n const ${EventManager.SCRIPTS_VARNAME} = this.__render.scripts;\n const ${EventManager.RAWSET_VARNAME} = this.__render.rawSet;\n ${it.drCompleteOption}`,\n Object.assign(obj, { __render: render })\n );\n }\n });\n\n // \uC911\uC694 style isolation \uB098\uC911\uC5D0 :scope\uB85C \uB300\uCCB4 \uAC00\uB2A5\uD560\uB4EF.\n // 2023.9.4\uC77C \uC5C6\uC570 style \uCC98\uC74C\uB4E4\uC5B4\uC62C\uB54C \uCC98\uB9AC\uD558\uB294\uAC78\uB85C \uBC14\uAFC8\n // RawSet.generateStyleSheetsLocal(config);\n for (const it of onThisComponentSetCallBacks) {\n if (isOnInitRender(it.obj)) {\n await it.obj?.onInitRender?.({}, this);\n }\n }\n for (const it of onElementInitCallBacks) {\n if (isOnInitRender(this.dataSet.render?.currentThis)) {\n // TODO: \uB098\uC911\uC5D0 \uD30C\uB77C\uBBF8\uD130 \uB4E4\uC5B4\uAC00\uC57C\uB420\uB4EF. \uC9C0\uAE08\uC740 \uB9AC\uD329\uD1A0\uB9C1\uD558\uB290\uB77C \uBE60\uC9D0\n // console.log('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!', it, this.dataSet);\n // dr-on-init:arguments\n\n // if (isOnInitRender()) {\n // it.targetElement.__render.component.onInitRender?.(...param);\n // }\n // if (it.targetElement?.__render?.element && it.targetElement?.__render?.component) {\n // const oninit = it.targetElement.__render.element.getAttribute(RawSet.DR_ON_INIT_ARGUMENTS_OPTIONNAME); // dr-on-component-init\n // let param = [];\n // if (oninit) {\n // const script = `${it.targetElement.__render.renderScript} return ${oninit} `;\n // param = ScriptUtils.eval(script, Object.assign(obj, {\n // __render: it.targetElement.__render\n // }));\n // if (!Array.isArray(param)) {\n // param = [param];\n // }\n // }\n //\n // if (isOnInitRender(it.targetElement.__render.component)) {\n // it.targetElement.__render.component.onInitRender?.(...param);\n // }\n // }\n await this.dataSet.render.currentThis.onInitRender({}, this);\n }\n\n config?.onElementInit?.(it.name, obj, this, it.targetElement);\n }\n\n // TODO: \uC774\uBD80\uBD84\uB3C4 \uC704\uC5D0 targetElement \uCC98\uB7FC \uD574\uC57C\uB420\uAE4C?\n for (const it of onAttrInitCallBacks) {\n config?.onAttrInit?.(it.attrName, it.attrValue, obj, this);\n }\n\n // component destroy\n if (obj.__domrender_components) {\n Object.entries(obj.__domrender_components).forEach(([key, value]) => {\n const rawSet = (value as any).__rawSet as RawSet;\n const drAttrs: Attrs | undefined = rawSet?.dataSet.render?.attribute;\n if (rawSet && !rawSet.isConnected) {\n const destroyOptions = drAttrs?.drDestroyOption?.split(',') ?? [];\n RawSet.destroy(obj.__domrender_components[key], { rawSet: rawSet }, config, destroyOptions);\n delete obj.__domrender_components[key];\n }\n });\n }\n // console.log('-------raws',raws)\n return { raws: raws, executedOperators: executedOperators };\n }\n\n // \uC911\uC694 \uC2A4\uD0C0\uC77C \uC801\uC6A9 \uBD80\uBD84\n private static generateRuleSelector(start: string, end: string, sit: string) {\n const selectorText = `:is(${start} ~ *:not(${start} ~ ${end} ~ *))`;\n if (sit.startsWith('## ')) {\n return sit.replace(/^## /, '');\n } else if (sit.startsWith('.')) {\n return `${selectorText}${sit}, ${selectorText} ${sit}`;\n } else if (sit.includes('::')) {\n const reg = sit.match(/(.*)::(.*)$/);\n const first = reg?.[1];\n const extracted = reg?.[2];\n const divText = `${start} ~ ${first}:not(${start} ~ ${end} ~ *)`;\n return `${selectorText} ${first}, ${divText}::${extracted}`;\n } else {\n const divText = `${start} ~ ${sit}:not(${start} ~ ${end} ~ *)`;\n return `${selectorText} ${sit}, ${divText}`;\n }\n }\n\n public static generateStyleTransform(styleBody: string | string[], componentKey: string, styleTagWrap = true) {\n // console.log('style!!!!!!!!!!!!!!!!1', styleBody, componentKey, styleTagWrap);\n if (Array.isArray(styleBody)) {\n styleBody = styleBody.join('\\n');\n }\n styleBody = styleBody.replaceAll('#uuid#', componentKey);\n const start = `#${componentKey}-start`;\n const end = `#${componentKey}-end`;\n // \uC774\uAC70\uBB50\uD558\uB294\uC9C0 \uAE4C\uBA39\uC5C8\uB124 \uBB50\uC600\uC9C0??..\n // \uB3D9\uC801\uC73C\uB85C \uCC98\uB9AC\uD558\uB294\uAC83\uAC19\uC740\uB370.. css \uC5D0\uC11C\uB294 \uB3D9\uC801\uC73C\uB85C \uCC98\uB9AC\uD558\uB294\uAC78 \uC9C0\uD5A5 \uD574\uC57C\uB420\uAC83\uAC19\uC740\uB370 \uC774\uAE30\uB2A5 deprecated \uD560\uC9C0 \uACE0\uBBFC\uC911\n // const before = StringUtils.regexExecArrayReplace(styleBody, /(\\$\\{.*?\\}\\$)/g, (data) => {\n // // console.log('\uB3D9\uC801?', `var(--domrender-${data[0]})`)\n // return `var(--domrender-${data[0]})`;\n // });\n // const before = styleBody;\n // console.log('before@@@@@@@@@@@', before)\n const cssParser = new CssParser(styleBody);\n\n const processRule = (rule: CssRule) => {\n if (isStyleRule(rule)) {\n const isRoot = rule.selector.includes(':root');\n if (!isRoot) {\n // Handle comma-separated selectors\n const selectors = rule.selector.split(',').map(s => s.trim());\n const transformedSelectors = selectors.map(selector => this.generateRuleSelector(start, end, selector));\n rule.selector = transformedSelectors.join(', ');\n }\n } else if (isAtRule(rule)) {\n if (rule.name === 'media') {\n const hasRoot = rule.children.some(\n childRule => isStyleRule(childRule) && childRule.selector.includes(':root')\n );\n if (!hasRoot) {\n rule.children.forEach(childRule => {\n if (isStyleRule(childRule)) {\n const selectors = childRule.selector.split(',').map(s => s.trim());\n const transformedSelectors = selectors.map(selector => this.generateRuleSelector(start, end, selector));\n childRule.selector = transformedSelectors.join(', ');\n }\n });\n }\n }\n }\n };\n\n cssParser.rules.forEach(processRule);\n\n let after = cssParser.stringify();\n // let after = StringUtils.regexExecArrayReplace(stringify as string, /(var\\(--domrender-(\\$\\{.*?\\}\\$)?\\))/g, (data) => {\n // return data[2];\n // });\n // console.log('after@@@@@@@@@@@', after)\n\n // \uC5EC\uAE30\uC11C \uC120\uC5B8 selector \uC790\uCCB4\uC5D0\uB3C4 \uCC98\uB9AC\uAC00\uB2A5\uD558\uB3C4\uB85D \uD55C\uB2E4 20250518\n after = after.replaceAll('/*$', '${');\n after = after.replaceAll('$*/', '}$');\n\n if (styleTagWrap) {\n styleBody = `<style id='${componentKey}-style' domstyle>${after}</style>`;\n }\n\n // console.log('style!!!!!!!!!!!!!!2', styleBody);\n return styleBody;\n }\n\n public applyEvent(obj: any, fragment = this.dataSet.fragment, config?: DomRenderConfig) {\n this.dataSet.config.eventManager.applyEvent(\n obj,\n this.dataSet.config.eventManager.findAttrElements(fragment, config),\n config\n );\n }\n\n public onRenderedEvent(obj: any, nodes: Node[], config?: DomRenderConfig) {\n this.dataSet.config.eventManager.onRenderedEvent(obj, nodes, config);\n }\n\n public getAttribute(element: Element, attr: string) {\n const data = element.getAttribute(attr);\n return data;\n }\n\n public getAttributeAndDelete(element: Element, attr: string) {\n const data = element.getAttribute(attr);\n // if (data)\n // element.setAttribute(`origin-${attr}`, data);\n\n element.removeAttribute(attr);\n return data;\n }\n\n public getDrAppendAttributeAndDelete(element: Element, obj: any) {\n let data = element.getAttribute(RawSet.DR_APPENDER_NAME);\n // if (data && !/\\[[0-9]+\\]/g.test(data)) {\n if (data && !/\\[.+\\]/g.test(data)) {\n const currentIndex = ObjectUtils.Script.evaluateReturn(\n `${ObjectUtils.Path.toOptionalChainPath(data)}?.length -1`,\n obj\n );\n // console.log('------?', currentIndex)\n // if (currentIndex === undefined || isNaN(currentIndex)) {\n // return undefined;\n // }\n // const currentIndex = ScriptUtils.evalReturn(`${data}.length`, obj);\n data = `${data}[${currentIndex}]`;\n element.setAttribute(RawSet.DR_APPENDER_NAME, data);\n // element.setAttribute(RawSet.DR_IF_NAME, data);\n // element.setAttribute('dr-id', data);\n // console.log('-->', element)\n }\n\n // if (data && !/\\.childs\\[[0-9]+\\]/g.test(data)) {\n // const currentIndex = ScriptUtils.evalReturn(`${data}.currentIndex`, obj);\n // data = `${data}.childs[${currentIndex}]`;\n // element.setAttribute(RawSet.DR_APPENDER_NAME, data)\n // }\n element.removeAttribute(RawSet.DR_APPENDER_NAME);\n return data;\n }\n\n public replaceBody(genNode: Node) {\n this.childAllRemove();\n this.point.start.parentNode?.insertBefore(genNode, this.point.start.nextSibling); // \uC911\uC694 start checkpoint \uB2E4\uC74C\uC778 end checkpoint \uC55E\uC5D0 \uB123\uB294\uB2E4. \uC989 \uC911\uAC04 \uAEF4\uB123\uAE30 (\uB098\uC911\uC5D0 meta tag\uB85C \uBCC0\uACBD\uC744 \uD574\uB3C4\uB420\uB4EF\uD558\uAE34\uD55C\uB370..)\n }\n\n // \uC911\uC694 important\n public static checkPointCreates(element: Node, obj: any, config: DomRenderConfig): RawSet[] {\n // console.log('!@@@@@@@@@@@@@@@@', obj);\n // const NodeFilter = (config.window as any).NodeFilter;\n // const thisVariableName = (element as any).__domrender_this_variable_name;\n // let html = element instanceof DocumentFragment ? ElementUtils.toInnerHTML(element, {document: config.window.document}) : (element as HTMLElement).outerHTML;\n // console.log('==============html-->', element, html);\n const NodeFilter = (config.window as any).NodeFilter;\n const Node = (config.window as any).Node;\n const processedNodes = new Set<Node>();\n\n const findNodes = NodeUtils.findNodes(element, node => {\n // console.log('nodeType', node.nodeType, node, (node as any).tagName, (node as any).data);\n // for (const processedNode of processedNodes) {\n // console.log('pre check!!', Array.from(processedNodes),processedNode !== node , processedNode.contains(node));\n // // if(processedNode.contains(node)){\n // console.log('---prechecker--html', (processedNode as HTMLElement).outerHTML,'------', (node as HTMLElement).outerHTML);\n // // }\n // if (processedNode !== node && processedNode.contains(node)) {\n // console.log('acceptNodeReturn contain', NodeFilter.FILTER_REJECT);\n // return NodeFilter.FILTER_REJECT;\n // }\n // }\n\n if (node.nodeType === Node.TEXT_NODE) {\n // console.log('nodeText--->', node.textContent)\n // console.log('????????', node.parentElement, node.parentElement?.getAttribute('dr-pre'));\n // console.log('???????/',node.textContent, node.parentElement?.getAttribute('dr-pre'))\n // TODO: \uB098\uC911\uC5D0\n // const between = StringUtils.betweenRegexpStr('[$#]\\\\{', '\\\\}', StringUtils.deleteEnter((node as Text).data ?? ''))\n const between = RawSet.expressionGroups(StringUtils.deleteEnter((node as Text).data ?? ''));\n // console.log('bbbb', between)\n const r =\n between?.length > 0\n ? NodeUtils.FindNodesFilterResult.MATCH_AND_SKIP_CHILDREN\n : NodeUtils.FindNodesFilterResult.NO_MATCH_AND_SKIP_CHILDREN;\n // console.log('acceptNodeReturn node', r);\n return r;\n // return /\\$\\{.*?\\}/g.test(StringUtils.deleteEnter((node as Text).data ?? '')) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n // return /[$#]\\{.*?\\}/g.test(StringUtils.deleteEnter((node as Text).data ?? '')) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n } else if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n // if (typeof Window === 'undefined' && element.getAttribute('ttt') === 'visual') {\n // return NodeFilter.FILTER_REJECT;\n // }\n // console.log('nodeHTML-->', element.outerHTML);\n if (element.hasAttribute(RawSet.DR_PRE_NAME)) {\n let r = NodeUtils.FindNodesFilterResult.NO_MATCH_AND_SKIP_CHILDREN;\n // console.log('acceptNodeReturn', r);\n return r;\n }\n if (element.hasAttribute(EventManager.attrAttrName)) {\n const script = element.getAttribute(EventManager.attrAttrName) ?? '';\n // console.log('scriptscriptscriptscriptscriptscript,', script)\n const keyValuePairs = Array.from(script.matchAll(/(\\w+):\\s*([^,}]+)/g)).map(match => ({\n key: match[1],\n value: match[2]\n }));\n (keyValuePairs ?? []).forEach(it => {\n element.setAttribute(it.key, '${' + it.value + '}$');\n });\n }\n // element.setAttribute('dr-event-click', 'console.log(11)');\n const targetElementIs = element.getAttribute(RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME);\n const targetElementNames = config.targetElements?.map(it => it.name.toLowerCase()) ?? [];\n const isElement =\n targetElementNames.includes(element.tagName.toLowerCase()) ||\n targetElementNames.includes(targetElementIs?.toLowerCase() as any);\n // if (isElement) {\n // (element as HTMLElement).style.display = 'none';\n // (element as HTMLElement).style.width = '100px';\n // (element as HTMLElement).style.height = '100px';\n // console.log((element as HTMLElement).outerHTML)\n // }\n // console.log('------targetElementIstargetElementIs>', targetElementNames, '---', isElement, targetElementIs);\n // const targetAttrNames = (config.targetAttrs?.map(it => it.name) ?? []).concat([...RawSet.DR_ATTRIBUTES,...EventManager.RAWSET_CHECK_ATTRIBUTE]);\n const targetAttrNames = (config.targetAttrs?.map(it => it.name) ?? []).concat([...RawSet.DR_ATTRIBUTES]);\n const normalAttrs = new Map<string, NormalAttrDataType>();\n const linkVariables = new Map<string, string>();\n const linkNames = EventManager.linkAttrs.map(it => it.name);\n const isAttr =\n element.getAttributeNames().filter(it=>!EventManager.noDetectAttr.includes(it)).filter(it => {\n const value = element.getAttribute(it);\n\n // link\uC77C\uB54C\n if (value && linkNames.includes(it)) {\n linkVariables.set(it, value);\n } else if (value && RawSet.isExpression(value)) {\n // \uD45C\uD604\uC2DD\uC788\uC744\uB584\n const variablePaths: { origin: string; inner: string }[] = RawSet.expressionGroups(value).map(it => ({\n origin: it[0],\n inner: it[1]\n }));\n // normal Attribute \uCD08\uBC18\uC5D0 \uC14B\uD305\uD574\uC8FC\uAE30.\n // TODO: \uC774\uAC70 \uD558\uAE34\uD588\uB294\uB370 \uC0AC\uC774\uB4DC \uC774\uD329\uD2B8?\n // let variablePath: string = RawSet.expressionGroups(value)[0][1];\n // const originVariable = variablePath;\n // variablePath = variablePath.replace(/#[^#]*#/g, '({})');\n // const optionalChainPath = ObjectUtils.Path.toOptionalChainPath(variablePath);\n // const cval = ObjectUtils.Script.evaluateReturn(optionalChainPath, Object.assign(obj));\n\n let targetScript = value;\n variablePaths.forEach(it => {\n let r = it.inner.replace(/#[^#]*#/g, '({})');\n r = ObjectUtils.Path.toOptionalChainPath(r);\n targetScript = targetScript.replaceAll(it.origin, `\\${${r}}`);\n });\n const cval = ObjectUtils.Script.evaluateReturn('`' + targetScript + '`', Object.assign(obj));\n\n if (cval === null) {\n element.removeAttribute(it);\n } else {\n element.setAttribute(it, cval);\n }\n normalAttrs.set(it, { originalAttrValue: value, variablePaths: variablePaths });\n // normalAttrs.set(it, originVariable);\n // console.log('normalAttribute', it, variablePath);\n }\n // console.log(element.getAttribute(it), attrExpresion);\n const isTargetAttr = targetAttrNames.includes(it.toLowerCase());\n return isTargetAttr;\n }).length > 0;\n\n if (linkVariables.size) {\n element.setAttribute(\n EventManager.linkTargetMapAttrName,\n JSON.stringify(Array.from(linkVariables.entries()))\n );\n }\n // \uAE30\uBCF8 attribute\uB97C \uCC98\uB9AC\uD558\uAE30\uC704\uD574\n if (normalAttrs.size) {\n element.setAttribute(EventManager.normalAttrMapAttrName, JSON.stringify(Array.from(normalAttrs.entries())));\n }\n // if (isElement) {\n // element.setAttribute('www', '@this@');\n // }\n const r = isAttr || isElement ? NodeUtils.FindNodesFilterResult.MATCH_AND_SKIP_CHILDREN : NodeUtils.FindNodesFilterResult.NO_MATCH_AND_CONTINUE;\n // console.log('acceptNodeReturn element', r);\n return r;\n }\n const r = NodeUtils.FindNodesFilterResult.NO_MATCH_AND_CONTINUE;\n // console.log('acceptNodeReturn nothing', r);\n return r;\n }\n )\n\n const pars: RawSet[] = [];\n let currentNode: Node | null;\n const name = RandomUtils.uuid();\n // console.log('name==', name);\n // eslint-disable-next-line no-cond-assign\n // while ((currentNode = nodeIterator?.nextNode())) {\n // console.log('findNodes~~', findNodes);\n for (const currentNode of findNodes) {\n // \uC5EC\uAE30\uC5D0\uC11C \uBD80\uBAA8\uC778\uAC70 \uC778\uC9C0\uC2DC\uCF1C\uC900\uB2E4 \uC704\uCABD \uC5D0\uC11C \uB2E4\uC2DC\uCC3E\uC744\uB584 \uAC78\uB7EC\uC9C4\uB2E4.. JSDOM ..\uC774\uB188\uC774 \uC989\uAC01\uC801\uC778 \uCC98\uB9AC\uB97C \uBABB\uD574\uC918\uC11C \uC218\uB3D9 \uAC80\uC99D \uB85C\uC9C1 \uB123\uC5C8\uB2E4.\n processedNodes.add(currentNode);\n // console.log('currentNode!!!!', currentNode);\n if (currentNode.nodeType === Node.TEXT_NODE) {\n const text = (currentNode as Text).textContent ?? '';\n const template = config.window.document?.createElement('template');\n if (!template) break;\n // const a = StringUtils.regexExec(/\\$\\{.*?\\}/g, text);\n // const a = StringUtils.regexExec(/[$#]\\{.*?\\}/g, text);\n // const a = StringUtils.betweenRegexpStr('[$#]\\\\{', '\\\\}', text); // <--TODO: \uB098\uC911\uC5D0..\n const groups = RawSet.expressionGroups(text);\n const map = groups.map(it => ({\n uuid: `${RandomUtils.alphabet(40)}_${obj?.constructor?.name}`,\n content: it[0],\n regexArr: it\n }));\n // console.log('create!!',map);\n let lasterIndex = 0;\n for (let i = 0; i < map.length; i++) {\n const it = map[i];\n // console.log('itttttttttttt', it);\n const regexArr = it.regexArr;\n // \uC911\uC694: text\uACBD\uC6B0 asdasd ${this.name}$ \uC774\uB807\uAC8C \uC788\uB2E4\uBA74 \uC55E\uBD80\uBD84 asdasd <-- \uC774\uBD80\uBD84\uC740 \uC0B4\uB824\uC57C\uB418\uB2C8\uAE50 \uC544\uB798\uCC98\uB7FC \uC9DC\uB984\n const preparedText = regexArr.input.substring(lasterIndex, regexArr.index);\n // const preparedText = regexArr[1];\n // const start = config.window.document.createElement('meta');\n // start.setAttribute('id', `${it.uuid}-start`);\n // const end = config.window.document.createElement('meta');\n // end.setAttribute('id', `${it.uuid}-end`);\n let type: RawSetType;\n if (currentNode.parentNode && currentNode.parentNode.nodeName.toUpperCase() === 'STYLE') {\n type = RawSetType.STYLE_TEXT;\n } else {\n type = RawSetType.TEXT;\n }\n const node = config.window.document.createTextNode(preparedText);\n const startEndPoint = RawSet.createStartEndPoint({ id: it.uuid, type }, config);\n // layout setting\n // console.log('createTextNode', node);\n template.content.append(node); // expression \uC55E \uBD80\uBD84 \uB123\uC5B4\uC918\uC57C \uC55E\uBD80\uBD84 \uC77C\uBC18 text \uC548\uC9E4\uB9B0\uB2E4.\n template.content.append(startEndPoint.start); // add start checkpoint\n template.content.append(startEndPoint.end); // add end checkpoint\n\n // content \uC548\uCABD RawSet render \uD560\uB54C start \uC640 end \uC0AC\uC774\uC5D0 fragment \uC5F0\uC0B0\uD574\uC11C \uB4E4\uC5B4\uAC04\uB2E4.\n const fragment = config.window.document.createDocumentFragment();\n fragment.append(config.window.document.createTextNode(it.content));\n // (startEndPoint.start as any).khh = RandomUtils.decimal(0,10)\n pars.push(\n new RawSet(\n it.uuid,\n type,\n {\n start: startEndPoint.start,\n node: currentNode,\n end: startEndPoint.end,\n parent: currentNode.parentNode\n // thisVariableName: thisVariableName\n },\n { fragment: fragment, config: config }\n )\n );\n lasterIndex = regexArr.index + it.content.length;\n }\n template.content.append(config.window.document.createTextNode(text.substring(lasterIndex, text.length)));\n currentNode?.parentNode?.replaceChild(template.content, currentNode); // <-- \uC5EC\uAE30\uC11C text\uB97C fragment\uB85C replace\uD588\uAE30\uB54C\uBB38\uC5D0 \uCD94\uC801 \uBCC0\uACBD\uC774 \uAC00\uB2A5\uD558\uB2E4.\n } else if (currentNode.nodeType === Node.ELEMENT_NODE) {\n // const uuid = `${RandomUtils.alphabet(40)}___${obj?.constructor?.name}`;\n const uuid = `${RandomUtils.alphabet(40)}`;\n const element = currentNode as Element;\n // console.log('create ElementTarget', uuid, element.outerHTML);\n const fragment = config.window.document.createDocumentFragment();\n const elementType: RawSetType = RawSetType.TARGET_ELEMENT;\n const startEndPoint = RawSet.createStartEndPoint({ node: element, id: uuid, type: elementType }, config);\n // \uC5EC\uAE30\uC11C \uB4F1\uB85D\uD55C component \uCD94\uAC00\uD55C\uB2E4.\n const targetElementIs = element.getAttribute(RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME);\n const targetElementNames = config.targetElements?.map(it => it.name.toLowerCase()) ?? [];\n const isElement =\n targetElementNames.includes(element.tagName.toLowerCase()) ||\n targetElementNames.includes(targetElementIs?.toLowerCase() as any);\n // if (isElement) {\n // (element as HTMLElement).style.display = 'none'\n // }\n // const isElement = targetElementNames.includes(element.tagName.toLowerCase());\n const targetAttrNames = (config.targetAttrs?.map(it => it.name) ?? []).concat(RawSet.DR_ATTRIBUTES);\n const isAttr = element.getAttributeNames().filter(it => targetAttrNames.includes(it.toLowerCase())).length > 0;\n currentNode?.parentNode?.insertBefore(startEndPoint.start, currentNode);\n currentNode?.parentNode?.insertBefore(startEndPoint.end, currentNode.nextSibling);\n fragment.append(currentNode);\n // const tempDiv = document.createElement('div');\n // tempDiv.appendChild(fragment.cloneNode(true)); // fragment \uBCF5\uC0AC\uBCF8 \uCD94\uAC00\n // console.log('------',tempDiv.innerHTML);\n // console.log();\n const rawSet = new RawSet(\n uuid,\n isElement ? elementType : isAttr ? RawSetType.TARGET_ATTR : RawSetType.UNKOWN,\n {\n start: startEndPoint.start,\n node: currentNode,\n end: startEndPoint.end,\n parent: currentNode.parentNode\n // thisVariableName: thisVariableName\n },\n { config: config, fragment: fragment }\n );\n pars.push(rawSet);\n }\n }\n // config\n const util = ElementUtils;\n // console.log('parsparsparsparsparsparsparsparsparspars', pars, name);\n return pars;\n // const lastpars: RawSet[] = []\n //\n // pars.forEach(it => {\n // // it.uuid\n // const parents = pars.filter(it => it.dataSet.fragment.getElementById(it.uuid+'-start'))\n //\n // console.log('vvvvvvvvv', parents);\n // if (parents.length>0) {\n // parents.forEach(sit => {\n // sit.dataSet.fragment.getElementById(sit.uuid + '-start')?.replaceWith(it.dataSet.fragment);\n // it.dataSet.fragment.getElementById(sit.uuid + '-end').remove();\n // console.log('rrr');\n // // ElementUtils.toInnerHTML(it.dataSet.fragment, {document: config.window.document});\n // // ElementUtils.toInnerHTML(it.dataSet.fragment\n // });\n // } else {\n // lastpars.push(it)\n // }\n // })\n // console.log('zzzzzz', lastpars);\n // return lastpars;\n }\n\n public static createStartEndPoint(data: { node?: Node; id: string; type: RawSetType }, config: DomRenderConfig) {\n if (data.type === RawSetType.TARGET_ELEMENT && data.node) {\n const element = data.node as Element;\n const start: HTMLMetaElement = config.window.document.createElement('meta');\n const end: HTMLMetaElement = config.window.document.createElement('meta');\n start.setAttribute('id', `${data.id}-start`);\n start.setAttribute('dr-start-point', '');\n const keys = element.getAttribute(RawSet.DR_KEY_OPTIONNAME);\n const thisPropertyType = element.getAttribute(RawSet.DR_THIS_PROPERTY_NAME);\n if (thisPropertyType) {\n start.setAttribute('type', RawSetOperatorType.DR_THIS_PROPERTY);\n }\n if (keys) {\n element.removeAttribute(RawSet.DR_KEY_OPTIONNAME);\n start.setAttribute(RawSet.DR_KEY_OPTIONNAME, keys);\n }\n end.setAttribute('id', `${data.id}-end`);\n end.setAttribute('dr-end-point', '');\n return { start, end };\n } else if (data.type === RawSetType.STYLE_TEXT) {\n return {\n start: config.window.document.createTextNode(`/*start text ${data.id}*/`),\n end: config.window.document.createTextNode(`/*end text ${data.id}*/`)\n };\n } else {\n // text\n return {\n start: config.window.document.createComment(`start text ${data.id}`),\n end: config.window.document.createComment(`end text ${data.id}`)\n };\n }\n }\n\n public remove() {\n this.childAllRemove();\n this.point.end.remove();\n this.point.start.remove();\n }\n\n public childAllRemove() {\n let next = this.point.start.nextSibling;\n while (next) {\n if (next === this.point.end) {\n break;\n }\n next.remove();\n next = this.point.start.nextSibling;\n }\n }\n\n public childs(stopNext?: (node: Node) => boolean) {\n const childs: any[] = [];\n let next = this.point.start.nextSibling;\n while (next && next !== this.point.end) {\n if (stopNext?.(next)) {\n return;\n }\n childs.push(next);\n next = next.nextSibling;\n }\n return childs;\n }\n\n public getHasRawSet(key: string) {\n let rawSet: RawSet | undefined;\n this.childs(node => {\n const drKey = (node as Element).getAttribute?.(RawSet.DR_KEY_OPTIONNAME);\n if (drKey && drKey === key) {\n rawSet = (node as any).rawSet as RawSet;\n return true;\n }\n return false;\n });\n return rawSet;\n }\n\n public static drItOtherEncoding(element: Element | DocumentFragment, postFix?: string) {\n const random = RandomUtils.uuid() + postFix;\n const regex = /#it#/g;\n element\n .querySelectorAll(\n `[${RawSet.DR_IT_OPTIONNAME}], [${RawSet.DR_FOR_OF_NAME}], [${RawSet.DR_REPEAT_NAME}], [${RawSet.DR_APPENDER_NAME}]`\n )\n .forEach(it => {\n it.innerHTML = it.innerHTML.replace(regex, random);\n });\n return random;\n }\n\n public static drItOtherDecoding(element: Element | DocumentFragment, random: string) {\n element\n .querySelectorAll(\n `[${RawSet.DR_IT_OPTIONNAME}], [${RawSet.DR_FOR_OF_NAME}], [${RawSet.DR_REPEAT_NAME}], [${RawSet.DR_APPENDER_NAME}]`\n )\n .forEach(it => {\n it.innerHTML = it.innerHTML.replace(RegExp(random, 'g'), '#it#');\n });\n }\n\n public static drVarDecoding(\n element: Element,\n vars: { name: string; value: string; regex: RegExp; random: string }[]\n ) {\n element.querySelectorAll(`[${RawSet.DR_THIS_NAME}]`).forEach(it => {\n vars\n .filter(vit => vit.value && vit.name)\n .forEach(vit => {\n it.innerHTML = it.innerHTML.replace(RegExp(vit.random, 'g'), vit.value);\n });\n });\n }\n\n public static replaceInnerHTML(element: Element, config: { asIs: string | RegExp; toBe?: string }): string {\n const innerHTML = element.innerHTML;\n const tobe = (config.toBe = config.toBe ?? RandomUtils.uuid());\n if (config.asIs instanceof RegExp) {\n element.innerHTML = innerHTML.replace(config.asIs, config.toBe);\n } else {\n element.innerHTML = innerHTML.replaceAll(config.asIs, config.toBe);\n }\n return tobe;\n }\n\n public static drThisEncoding(element: Element, drThis: string, config: { asIs: RegExp; toBe?: string }): string {\n const thisRandom = (config.toBe = config?.toBe ?? RandomUtils.uuid());\n // console.log('rrrrrrrrrrrrr', thisRandom);\n // const thisRegex = /(?<!(dr-|\\.))this(?=.?)/g;\n // const thisRegex = /[^(dr\\-)]this(?=.?)/g;\n // const thisRegex = /[^(dr\\-)]this\\./g;\n // safari \uB54C\uBB38\uC5D0 \uC804\uC704 \uAC80\uC0C9 regex\uAC00 \uC548\uB428 \uC544 \uC9DC\uC99D\uB098\uC11C \uC774\uAC78\uB85C\uD568.\n // element.querySelectorAll(`[${RawSet.DR_PRE_NAME}]`).forEach(it => {\n // let message = it.innerHTML;\n // })\n element.querySelectorAll(`[${RawSet.DR_PRE_NAME}]`).forEach(it => {\n it.innerHTML = it.innerHTML.replace(config.asIs, thisRandom);\n });\n element.querySelectorAll(`[${RawSet.DR_THIS_NAME}]`).forEach(it => {\n // console.log('rrrrrrrrand?', drThis,config);\n let message = it.innerHTML;\n // StringUtils.regexExec(/([^(dr\\-)])?this(?=.?)/g, message).reverse().forEach(it => {\n StringUtils.regexExec(config.asIs, message)\n .reverse()\n .forEach(it => {\n message = message.substr(0, it.index) + message.substr(it.index).replace(it[0], `${it[1] ?? ''}${drThis}`);\n });\n it.innerHTML = message;\n });\n\n // console.log('changggg', element.innerHTML);\n let message = element.innerHTML;\n StringUtils.regexExec(config.asIs, message)\n .reverse()\n .forEach(it => {\n message = message.substr(0, it.index) + message.substr(it.index).replace(it[0], `${it[1] ?? ''}${drThis}`);\n });\n element.innerHTML = message;\n return thisRandom;\n }\n\n public static drThisBindEncoding(\n element: Element,\n variable: RegExp,\n config: { config: DomRenderConfig; otherReplaceVariablePath?: string }\n ) {\n element.querySelectorAll(`[${RawSet.DR_THIS_NAME}]`).forEach(eIt => {\n let message = eIt.innerHTML;\n // StringUtils.regexExec(/([^(dr\\-)])?this(?=.?)/g, message).reverse().forEach(it => {\n StringUtils.regexExec(variable, message)\n .reverse()\n .forEach(it => {\n message =\n message.substr(0, it.index) +\n message.substr(it.index).replace(it[0], `${it[1] ?? ''}${eIt.getAttribute(RawSet.DR_THIS_NAME)}`);\n });\n eIt.innerHTML = message;\n });\n\n const targetElements = config.config.targetElements ?? [];\n const targetElementNames = targetElements\n .map(it => it.name.replaceAll('.', '\\\\.').replaceAll(':', '\\\\:'))\n .join(',');\n const thisRandom = RandomUtils.uuid();\n // console.log('thisRandom', thisRandom, variable);\n element.querySelectorAll(targetElementNames).forEach(it => {\n it.innerHTML = it.innerHTML.replace(variable, thisRandom);\n });\n\n element.querySelectorAll(`[${RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME}]`).forEach(it => {\n it.innerHTML = it.innerHTML.replace(variable, thisRandom);\n });\n\n if (config.otherReplaceVariablePath) {\n let message = element.innerHTML;\n StringUtils.regexExec(variable, message)\n .reverse()\n .forEach(it => {\n message =\n message.substr(0, it.index) +\n message.substr(it.index).replace(it[0], `${it[1] ?? ''}${config.otherReplaceVariablePath}`);\n });\n element.innerHTML = message;\n }\n return thisRandom;\n }\n\n public static drThisBindDecoding(element: Element, config: { asIs: string; toBe: string; config: DomRenderConfig }) {\n const targetElements = config.config.targetElements ?? [];\n const targetElementNames = targetElements\n .map(it => it.name.replaceAll('.', '\\\\.').replaceAll(':', '\\\\:'))\n .join(',');\n element.querySelectorAll(targetElementNames).forEach(it => {\n it.innerHTML = it.innerHTML.replace(RegExp(config.asIs, 'g'), config.toBe);\n });\n element.querySelectorAll(`[${RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME}]`).forEach(it => {\n it.innerHTML = it.innerHTML.replace(RegExp(config.asIs, 'g'), config.toBe);\n });\n }\n\n public static drThisDecoding(element: Element, config: { asIs: string; toBe: string }) {\n element.querySelectorAll(`[${RawSet.DR_PRE_NAME}]`).forEach(it => {\n it.innerHTML = it.innerHTML.replace(RegExp(config.asIs, 'g'), config.toBe);\n });\n element.querySelectorAll(`[${RawSet.DR_THIS_NAME}]`).forEach(it => {\n it.innerHTML = it.innerHTML.replace(RegExp(config.asIs, 'g'), config.toBe);\n });\n }\n\n public static drFormOtherMoveAttr(element: Element, as: string, to: string, config: DomRenderConfig) {\n element.querySelectorAll(`[${RawSet.DR_FORM_NAME}]`).forEach(subElement => {\n const nodeIterator = config.window.document?.createNodeIterator(subElement, NodeFilter.SHOW_ELEMENT, {\n acceptNode(node) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n return element.hasAttribute(as) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n } else {\n return NodeFilter.FILTER_REJECT;\n }\n }\n });\n\n let node;\n // eslint-disable-next-line no-cond-assign\n while ((node = nodeIterator?.nextNode())) {\n const element = node as Element;\n element.setAttribute(to, element.getAttribute(as) ?? '');\n element.removeAttribute(as);\n }\n });\n }\n\n public static drVarEncoding(element: Element, drVarOption: string) {\n const vars = (drVarOption?.split(',') ?? []).map(it => {\n const s = it.trim().split('=');\n const name = s[0]?.trim();\n const value = s[1]?.trim();\n return {\n name,\n value,\n // regex: RegExp('(?<!(dr-|\\\\.))var\\\\.' + s[0] + '(?=.?)', 'g'),\n regex: RegExp('\\\\$var\\\\.' + name + '(?=.?)', 'g'),\n random: RandomUtils.uuid()\n };\n });\n // console.log('asd', element.innerHTML);\n // element.querySelectorAll(`[${RawSet.DR_THIS_NAME}]`).forEach(it => {\n element.querySelectorAll(`[${RawSet.DR_VAR_OPTIONNAME}]`).forEach(it => {\n vars\n .filter(vit => vit.value && vit.name)\n .forEach(vit => {\n it.innerHTML = it.innerHTML.replace(vit.regex, vit.random);\n });\n });\n vars\n .filter(vit => vit.value && vit.name)\n .forEach(vit => {\n element.innerHTML = element.innerHTML.replace(vit.regex, vit.value);\n });\n return vars;\n }\n\n public static async drThisCreate(\n rawSet: RawSet,\n element: Element,\n drThis: string,\n drVarOption: string,\n drStripOption: boolean | string | null,\n obj: any,\n config: DomRenderConfig,\n set?: ComponentSet\n ): Promise<DocumentFragment | undefined> {\n // console.log('ttttttttttttttttttttt',element.innerHTML, drThis, set, obj);\n const fag = config.window.document?.createDocumentFragment();\n if (!fag) {\n return;\n }\n const targetElement = element.cloneNode(true) as Element;\n let targetObj = obj;\n if (set) {\n targetObj = set.obj;\n set.setTemplateStyle(await RawSet.fetchTemplateStyle(set));\n const style = RawSet.generateStyleTransform(set.styles ?? [], rawSet.uuid, true);\n targetElement.innerHTML = style + (set.template ?? '');\n } else {\n targetObj = ObjectUtils.Script.evaluateReturn(ObjectUtils.Path.toOptionalChainPath(drThis), obj);\n }\n\n const componentKey = rawSet.uuid;\n const renderScript = ` /*drThisCreate*/\n // console.log('-----', this.__render);\n var ${EventManager.RENDER_VARNAME} = this.__render; \n var ${EventManager.RAWSET_VARNAME} = this.__render.rawSet; \n var ${EventManager.COMPONENT_VARNAME} = this.__render.component; \n var ${EventManager.ELEMENT_VARNAME} = this.__render.element; \n var ${EventManager.ROUTER_VARNAME} = this.__render.router; \n var ${EventManager.INNER_HTML_VARNAME} = this.__render.innerHTML; \n var ${EventManager.ATTRIBUTE_VARNAME} = this.__render.attribute; \n var ${EventManager.PARENT_THIS_PATH_VARNAME} = this.__render.parentThisPath; \n var ${EventManager.CURRENT_THIS_VARNAME} = this.__render.currentThis; \n var ${EventManager.CURRENT_THIS_PATH_VARNAME} = this.__render.currentThisPath; \n var ${EventManager.PARENT_THIS_VARNAME} = this.__render.parentThis; \n var ${EventManager.NEAR_THIS_PATH_VARNAME} = this.__render.nearThisPath; \n var ${EventManager.NEAR_THIS_VARNAME} = this.__render.nearThis; \n var ${EventManager.CREATOR_META_DATA_VARNAME} = this.__render.creatorMetaData;\n `;\n\n const parentThisPath = rawSet.findParentThisPath();\n const parentThis = rawSet.findParentThis(obj);\n const nearThisPath = rawSet.findNearThisPath();\n const nearThis = rawSet.findNearThis(obj);\n // console.log('ttttttttttttttttt',parentThisPath, parentThis, nearThisPath, nearThis);\n // console.log('-element.innerHTMLelement.innerHTMLelement.innerHTML',element.innerHTML);\n let render = {\n renderScript: renderScript,\n element: element,\n getElement: () => config.window.document.querySelector(`[class*=\"${rawSet.uuid}\"]`),\n innerHTML: element.innerHTML,\n // attribute: ObjectUtils.toDeleteKey(attribute, [...Object.values(RawSet.drAttrsOriginName), ...Object.values(EventManager.VARNAMES)]),\n rawSet: rawSet,\n router: config.router,\n componentKey: componentKey,\n currentThis: targetObj,\n currentThisPath: drThis,\n parentThisPath: parentThisPath,\n parentThis: parentThis,\n nearThisPath: nearThisPath,\n nearThis: nearThis,\n scripts: EventManager.setBindProperty(config.scripts ?? {}, obj)\n } as Render;\n // const attribute = DomUtils.getAttributeToObject(element);\n render.attribute = RawSet.getAttributeObject(element, { script: renderScript, obj: obj, renderData: render });\n render = Object.freeze(render);\n\n // dr-on-create data onCreateRender\n const onCreateDataScript = `return {rootParent: this, render: this.__render}`;\n const onCreateDataParam = ObjectUtils.Script.evaluate<OnCreateRenderDataParams>(\n onCreateDataScript,\n Object.assign(obj, { __render: render })\n );\n if (isOnCreateRenderData(targetObj)) {\n targetObj?.onCreateRenderData(onCreateDataParam as OnCreateRenderDataParams);\n }\n // \uBD80\uBAA8\uC5D0\uAC8C\uB3C4 \uC790\uC2DD this \uC0DD\uC131\uB41C\uAC70 \uC54C\uB824\uC8FC\uB294 callback\n if (onCreateDataParam?.render?.parentThis && isOnCreatedThisChild(onCreateDataParam?.render?.parentThis)) {\n onCreateDataParam.render.parentThis.onCreatedThisChild(targetObj, onCreateDataParam as OnCreateRenderDataParams);\n }\n\n // dr-on-create onCreateRender\n const onCreate = element.getAttribute(RawSet.DR_ON_CREATE_ARGUMENTS_OPTIONNAME);\n let createParam: any[] = [];\n if (onCreate) {\n createParam = ObjectUtils.Script.evaluateReturn<any[]>(\n { bodyScript: renderScript, returnScript: ObjectUtils.Path.toOptionalChainPath(onCreate) },\n obj\n );\n if (!Array.isArray(createParam)) {\n createParam = [createParam];\n }\n }\n\n if (isOnCreateRender(targetObj)) {\n targetObj.onCreateRender(...createParam);\n }\n\n // console.log('\uB9E4\uBC88\uD0C0\uB098?');\n // \uC911\uC694 dr-normal-attr-map\n // const normalAttrMap = element.getAttribute(EventManager.normalAttrMapAttrName);\n const targetAttrObject = RawSet.getAttributeObject(element, { script: renderScript, obj: obj, renderData: render });\n if (targetAttrObject) {\n rawSet.dataSet.render ??= {};\n rawSet.dataSet.render.attribute = targetAttrObject;\n Object.entries(targetAttrObject).forEach(([key, cval], index) => {\n // console.log('ooooooooooooooooo', key, cval);\n // const script = `${renderScript} return ${value} `;\n // const cval = ScriptUtils.eval(script, Object.assign(obj, { __render: render }));\n // // element.setAttribute(key, cval);\n if (isOnChangeAttrRender(targetObj)) {\n targetObj.onChangeAttrRender(key, cval, { rawSet: rawSet });\n }\n });\n }\n\n // dr-on-component-init\n // const oninit = element.getAttribute(`${EventManager.attrPrefix}on-component-init`); // dr-on-component-init\n const oninit = element.getAttribute(RawSet.DR_ON_CREATED_CALLBACK_OPTIONNAME); // dr-on-component-init\n // console.log('--------drThisCreate!!!', oninit)\n if (oninit) {\n const script = `${renderScript} ${oninit} `;\n ObjectUtils.Script.evaluate(script, Object.assign(obj, { __render: render }));\n }\n\n targetElement.querySelectorAll(EventManager.attrNames.map(it => `[${it}]`).join(',')).forEach(it => {\n it.setAttribute(EventManager.ownerVariablePathAttrName, 'this');\n });\n\n // console.log('targetElement',targetElement);\n // attribute\n // const componentName = element.getAttribute(RawSet.DR_COMPONENT_NAME_OPTIONNAME) ?? 'component';\n // const componentNameReplaceKey = RandomUtils.uuid();\n // if (componentName) {\n // RawSet.replaceInnerHTML(element, {asIs: `#${componentName}#`, toBe: 'this'})\n // }\n // const innerHTMLName = element.getAttribute(RawSet.DR_COMPONENT_INNER_HTML_NAME_OPTIONNAME) ?? 'innerHTML';\n // const innerHTMLNameReplaceKey = RandomUtils.uuid();\n // if (innerHTMLName) {\n // RawSet.replaceInnerHTML(element, {asIs: `#${innerHTMLName}#`, toBe: innerHTMLNameReplaceKey})\n // }\n\n rawSet.point.innerHTML = element.innerHTML;\n const innerText = element.textContent?.trim() ?? '';\n const escapedInnerHTML = ConvertUtils.escapeHTML(element.innerHTML);\n // \uC774\uAC78 \uC65C \uBE90\uC5C8\uC9C0... \uB2E4\uC2DC\uB123\uC5C8\uC74C \uADF8\uB7F0\uB370 \uC870\uAE08 \uB85C\uC9C1\uC774.. \uAC80\uC99D\uC774..\n const innerHTMLName = targetElement.getAttribute(RawSet.DR_INNER_HTML_NAME_OPTIONNAME) ?? 'innerHTML';\n const innerTEXTName = targetElement.getAttribute(RawSet.DR_INNER_TEXT_NAME_OPTIONNAME) ?? 'innerTEXT';\n const innerHTMLEscapedName = targetElement.getAttribute(RawSet.DR_INNER_HTML_ESCAPED_NAME_OPTIONNAME) ?? 'innerHTMLEscaped';\n const templateReplacements: StringUtils.SequentialReplacement[] = [];\n if (innerHTMLName) {\n templateReplacements.push({\n regex: new RegExp(`#${innerHTMLName}#`, 'g'),\n callback: () => element.innerHTML\n });\n }\n if (innerTEXTName) {\n templateReplacements.push({\n regex: new RegExp(`#${innerTEXTName}#`, 'g'),\n callback: () => innerText\n });\n }\n if (innerHTMLEscapedName) {\n templateReplacements.push({\n regex: new RegExp(`#${innerHTMLEscapedName}#`, 'g'),\n callback: () => escapedInnerHTML\n });\n }\n\n if (templateReplacements.length > 0) {\n targetElement.innerHTML = StringUtils.replaceSequentially(targetElement.innerHTML, templateReplacements);\n }\n\n // console.log('aa-asIs', targetElement.innerHTML);\n const optionThisName = targetElement.getAttribute(RawSet.DR_THIS_NAME_OPTIONNAME);\n // console.log('11111111111111', optionThisName)\n targetElement\n .getAttributeNames()\n .forEach(it => targetElement.setAttribute(it, targetElement.getAttribute(it)!.replace(/#this#/g, drThis)));\n const thisRandom = this.drThisEncoding(targetElement, drThis, { asIs: /@this@/g });\n // console.log('@@@@@@@@@@@@@0', thisRandom);\n // let thisNameRandom: string | undefined = undefined;\n if (optionThisName) {\n // console.log('-----0', element.innerHTML, '\\n', targetElement.innerHTML)\n targetElement.innerHTML = targetElement.innerHTML.replaceAll(`@${optionThisName}@`, drThis);\n // console.log('-----1', element.innerHTML, '\\n', targetElement.innerHTML)\n // thisNameRandom = this.drThisBindEncoding(targetElement, new RegExp(`@${optionThisName}@`, 'g'), {config: config, otherReplaceVariablePath: drThis});\n }\n const nearThisRandom = this.drThisBindEncoding(targetElement, /@nearThis@/g, {\n config: config,\n otherReplaceVariablePath: rawSet.findNearThisPath()\n });\n const parentThisRandom = this.drThisBindEncoding(targetElement, /@parentThis@/g, {\n config: config,\n otherReplaceVariablePath: rawSet.findParentThisPath()\n });\n // console.log('@@@@@@@@@@@@@1', targetElement.innerHTML, rawSet.findParentThisPath());\n // console.log('@@@@@@@@@@@@@-----------', rawSet.point?.parentRawSet?.point?.start, rawSet.point?.parentRawSet?.point?.start instanceof HTMLMetaElement);\n // if (rawSet.point?.parentRawSet?.point?.start instanceof HTMLMetaElement) {\n // console.log('@@@@@@@@@@@@@-----------', rawSet.point?.parentRawSet?.point?.start.getAttribute('this-path'));\n // }\n // console.log('@@@@@@@@@@@@@2', targetElement.innerHTML);\n // const nearThisRandom = this.drThisEncoding(targetElement, rawSet.findNearThisPath(), {asIs: /@nearThis@/g});\n // const parentThisRandom = this.drThisEncoding(targetElement, rawSet.findParentThisPath(), {asIs: /@parentThis@/g});\n // console.log('aa-toBe', targetElement.innerHTML);\n // console.log('------', rawSet.findNearThisPath());\n // console.log('------', rawSet.findParentThisPath());\n const vars = this.drVarEncoding(targetElement, drVarOption);\n this.drVarDecoding(targetElement, vars);\n this.drThisDecoding(targetElement, { asIs: thisRandom, toBe: '@this@' });\n // if (optionThisName && thisNameRandom)\n // this.drThisBindDecoding(targetElement, {config: config, asIs: thisNameRandom, toBe: `@${optionThisName}@`});\n this.drThisBindDecoding(targetElement, { config: config, asIs: nearThisRandom, toBe: '@nearThis@' });\n this.drThisBindDecoding(targetElement, { config: config, asIs: parentThisRandom, toBe: '@parentThis@' });\n // if (componentName) {\n // RawSet.replaceInnerHTML(element, {asIs: componentNameReplaceKey, toBe: `#${componentName}#`})\n // }\n // if (innerHTMLName) {\n // RawSet.replaceInnerHTML(targetElement, {asIs: innerHTMLNameReplaceKey, toBe: `#${innerHTMLName}#`})\n // }\n // console.log('ddddddddddddd', targetElement.innerHTML);\n if (drStripOption && (drStripOption === true || drStripOption === 'true')) {\n // console.log('------childNodes', Array.from(n.childNodes))\n Array.from(targetElement.childNodes).forEach(it => fag.append(it));\n } else {\n targetElement.classList.add(`${rawSet.uuid}`);\n fag.append(targetElement);\n }\n // (fag as any).__domrender_this_variable_name = drThis;\n // console.log('set __domrender_this_variable_name', (fag as any).__domrender_this_variable_name)\n return fag;\n }\n\n private static async fetchTemplateStyle(set: { template?: string; styles?: string | string[] }) {\n // const id = RandomUtils.getRandomString(20);\n const stylePromises: Promise<string>[] = [];\n const templatePromise =\n set.template && set.template.startsWith('lazy://')\n ? (await fetch(set.template.substring(6))).text()\n : Promise.resolve(set.template);\n if (Array.isArray(set.styles)) {\n for (let i = 0; set.styles && i < (set.styles.length ?? 0); i++) {\n const it = set.styles[i];\n stylePromises.push(it.startsWith('lazy://') ? (await fetch(it.substring(6))).text() : Promise.resolve(it));\n }\n } else if (set.styles) {\n stylePromises.push(Promise.resolve(set.styles));\n }\n // const tempTemplate = config.window.document.createElement('template');\n // tempTemplate.innerHTML = await templatePromise;\n // const tempContainer = config.window.document.createElement('div');\n return {\n template: await templatePromise,\n styles: await Promise.all(stylePromises)\n };\n }\n\n public static createComponentTargetAttribute(\n name: string,\n getThisObj: (element: Element, attrValue: string, obj: any, rawSet: RawSet) => any,\n factory: (element: Element, attrValue: string, obj: any, rawSet: RawSet) => DocumentFragment\n ) {\n const targetAttribute: TargetAttr = {\n name,\n callBack(element: Element, attrValue: string, obj: any, rawSet: RawSet): DocumentFragment {\n const thisObj = getThisObj(element, attrValue, obj, rawSet);\n const data = factory(element, attrValue, obj, rawSet);\n // rawSet.point.thisVariableName = (data as any).__domrender_this_variable_name;\n if (thisObj) {\n // const i = thisObj.__domrender_component_new = (thisObj.__domrender_component_new ?? new Proxy({}, new DomRenderFinalProxy())) as CreatorMetaData;\n // i.thisVariableName = rawSet.point.thisVariableName;\n // i.rawSet = rawSet;\n // i.innerHTML = element.innerHTML;\n // i.rootCreator = new Proxy(obj, new DomRenderFinalProxy());\n // i.creator = new Proxy(rawSet.point.thisVariableName ? ScriptUtils.evalReturn(rawSet.point.thisVariableName, obj) : obj, new DomRenderFinalProxy());\n }\n return data;\n }\n };\n return targetAttribute;\n }\n\n public static createComponentTargetElement({\n name,\n objFactory,\n template = '',\n styles = [],\n noStrip\n }: {\n name: string;\n noStrip?: boolean;\n objFactory: (element: Element, obj: any, rawSet: RawSet, counstructorParam: any[]) => any;\n template?: string;\n styles?: string | string[];\n }): TargetElement {\n const targetElement: TargetElement = {\n name,\n styles,\n template,\n noStrip,\n async callBack(\n element: Element,\n obj: any,\n rawSet: RawSet,\n attrs: Attrs,\n config: DomRenderConfig\n ): Promise<DocumentFragment | undefined> {\n const templateStyle = await RawSet.fetchTemplateStyle({ template: this.template, styles: this.styles });\n this.template = templateStyle.template;\n this.styles = templateStyle.styles;\n obj.__domrender_components ??= {};\n const domrenderComponents = obj.__domrender_components;\n // debugger;\n const renderScript = ` /*createComponentTargetElement*/\n var ${EventManager.RAWSET_VARNAME} = this.__render.rawSet; \n var ${EventManager.COMPONENT_VARNAME} = this.__render.component; \n var ${EventManager.ELEMENT_VARNAME} = this.__render.element; \n var ${EventManager.ROUTER_VARNAME} = this.__render.router; \n var ${EventManager.INNER_HTML_VARNAME} = this.__render.innerHTML; \n var ${EventManager.ATTRIBUTE_VARNAME} = this.__render.attribute; \n var ${EventManager.PARENT_THIS_PATH_VARNAME} = this.__render.parentThisPath; \n var ${EventManager.PARENT_THIS_VARNAME} = this.__render.parentThis; \n var ${EventManager.NEAR_THIS_PATH_VARNAME} = this.__render.nearThisPath; \n var ${EventManager.NEAR_THIS_VARNAME} = this.__render.nearThis; \n var ${EventManager.CREATOR_META_DATA_VARNAME} = this.__render.creatorMetaData;\n `;\n const parentThisPath = rawSet.findParentThisPath();\n const parentThis = rawSet.findParentThis(obj);\n const nearThisPath = rawSet.findNearThisPath();\n const nearThis = rawSet.findNearThis(obj);\n let render = {\n renderScript,\n element: element,\n innerHTML: element.innerHTML,\n // attribute: attribute,\n getElement: () => config.window.document.querySelector(`[class*=\"${rawSet.uuid}\"]`),\n rawSet: rawSet,\n router: config.router,\n componentKey: rawSet.uuid,\n nearThisPath: nearThisPath,\n nearThis: nearThis,\n parentThisPath: parentThisPath,\n parentThis: parentThis,\n scripts: EventManager.setBindProperty(config.scripts ?? {}, obj)\n } as Render;\n const constructor = element.getAttribute(RawSet.DR_ON_CONSTRUCTOR_ARGUMENTS_OPTIONNAME);\n let constructorParam = [];\n // script \uBD80\uBD84\uC740 \uCC98\uB9AC\uB418\uC5B4 \uBC14\uC778\uB529 \uC2DC\uCF1C\uC900\uB2E4\n render.attribute = RawSet.getAttributeObject(element, { script: renderScript, obj: obj, renderData: render });\n render = Object.freeze(render);\n //\n // // dr-constructor\n if (constructor) {\n let param =\n ObjectUtils.Script.evaluateReturn(\n { bodyScript: renderScript, returnScript: ObjectUtils.Path.toOptionalChainPath(constructor) },\n Object.assign(obj, { __render: render })\n ) ?? [];\n if (!Array.isArray(param)) {\n param = [param];\n }\n constructorParam = param;\n }\n\n // // console.log('------22', attrs);\n const instance = (domrenderComponents[rawSet.uuid] = objFactory(element, obj, rawSet, constructorParam));\n render = {\n currentThis: instance,\n // creatorMetaData: i,\n ...render\n };\n rawSet.dataSet.render = render;\n // \uCD94\uC801 \uBC0F destroy \uC704\uD574.\n instance.__rawSet = rawSet;\n\n //\n // const i = instance.__domrender_component_new = (instance.__domrender_component_new ?? new Proxy({}, new DomRenderFinalProxy())) as CreatorMetaData;\n // i.thisVariableName = rawSet.point.thisVariableName;\n // i.thisFullVariableName = `this.__domrender_components.${componentKey}`;\n // i.componentKey = componentKey;\n // i.rawSet = rawSet;\n // i.attribute = attribute;\n // i.router = config.router;\n // i.scripts = render.scripts;\n // i.drAttrs = attrs;\n // i.innerHTML = element.innerHTML;\n // i.rootCreator = new Proxy(obj, new DomRenderFinalProxy());\n // i.creator = new Proxy(rawSet.point.thisVariableName ? ObjectUtils.Script.evalReturn(rawSet.point.thisVariableName, obj) : obj, new DomRenderFinalProxy());\n // this.__creatorMetaData = i;\n // render = {\n // component: instance,\n // creatorMetaData: i,\n // ...render\n // };\n //\n // // \uC911\uC694 dr-normal-attr-map\n // const normalAttrMap = element.getAttribute(EventManager.normalAttrMapAttrName);\n // if (isOnChangeAttrRender(instance) && normalAttrMap) {\n // new Map<string, string>(JSON.parse(normalAttrMap)).forEach((value, key) => {\n // const script = `${renderScript} return ${value} `;\n // const cval = ObjectUtils.Script.eval(script, Object.assign(obj, { __render: render }));\n // // element.setAttribute(key, cval);\n // instance.onChangeAttrRender(key, cval);\n // });\n // }\n //\n // // dr-on-create data\n // const onCreateDataScript = `return {rootParent: this, render: this.__render}`;\n // const onCreateDataParam = ObjectUtils.Script.eval(onCreateDataScript, Object.assign(obj, { __render: render }));\n // if (isOnCreateRenderData(instance)) {\n // instance?.onCreateRenderData(onCreateDataParam);\n // }\n //\n // // dr-on-create onCreateRender\n // const onCreate = element.getAttribute(RawSet.DR_ON_CREATE_ARGUMENTS_OPTIONNAME);\n // this.__render = render;\n // let createParam = [];\n // if (onCreate) {\n // const script = `${renderScript} return ${onCreate} `;\n // createParam = ObjectUtils.Script.eval(script, Object.assign(obj, { __render: render }));\n // if (!Array.isArray(createParam)) {\n // createParam = [createParam];\n // }\n // }\n // if (isOnCreateRender(instance)) {\n // instance?.onCreateRender?.(...createParam);\n // }\n let applayTemplate = element.innerHTML;\n let applayTemplateText = element.textContent?.trim() ?? '';\n let applayTemplateEscape = ConvertUtils.escapeHTML(element.innerHTML);\n let innerHTMLThisRandom;\n const componentName = element.getAttribute(RawSet.DR_VARIABLE_NAME_OPTIONNAME) ?? 'component';\n const innerHTMLName = element.getAttribute(RawSet.DR_INNER_HTML_NAME_OPTIONNAME) ?? 'innerHTML';\n const innerTEXTName = element.getAttribute(RawSet.DR_INNER_TEXT_NAME_OPTIONNAME) ?? 'innerTEXT';\n const innerHTMLEscapedName = element.getAttribute(RawSet.DR_INNER_HTML_ESCAPED_NAME_OPTIONNAME) ?? 'innerHTMLEscaped';\n\n // if (element.getAttribute(RawSet.DR_COMPONENT_VARIABLE_NAME_OPTIONNAME)) {\n // console.log('vvvvvvv', element.getAttribute(RawSet.DR_COMPONENT_VARIABLE_NAME_OPTIONNAME));\n // }\n if (applayTemplate) {\n // if (rawSet.point.thisVariableName) {\n // \uB118\uC5B4\uC628 innerHTML\uC5D0 this\uAC00 \uC788\uC73C\uBA74 \uD574\uB2F9\uC548\uB418\uAC8C \uC6B0\uC120 \uCE58\uD658.\n innerHTMLThisRandom = RandomUtils.uuid();\n applayTemplate = StringUtils.replaceSequentially(applayTemplate, [\n {\n regex: /this\\./g,\n callback: () => innerHTMLThisRandom\n },\n {\n regex: new RegExp(`#${componentName}#`, 'g'),\n callback: () => nearThisPath\n }\n ]);\n // }\n // applayTemplate = applayTemplate.replace(RegExp(`#${componentName}#`, 'g'), 'this');\n }\n // applayTemplate = template.replace(RegExp(`#${innerHTMLName}#`, 'g'), applayTemplate);\n // RawSet.replaceInnerHTML(\n // applayTemplate = StringUtils.regexExecArrayReplace(this.template, RegExp(`#${innerHTMLName}#`, 'g'), applayTemplate)\n // applayTemplate = StringUtils.regexExecArrayReplace(this.template, [RegExp(`#${innerHTMLName}#`, 'g')], applayTemplate)\n applayTemplate = StringUtils.replaceSequentially((this.template ?? ''), [\n {\n regex: new RegExp(`#${innerHTMLName}#`, 'g'),\n callback: () => applayTemplate\n },\n {\n regex: new RegExp(`#${innerTEXTName}#`, 'g'),\n callback: () => applayTemplateText\n },\n {\n regex: new RegExp(`#${innerHTMLEscapedName}#`, 'g'),\n callback: () => applayTemplateEscape\n }\n ]);\n // dr-on-component-init\n // const oninit = element.getAttribute(`${EventManager.attrPrefix}on-component-init`); // dr-on-component-init\n // const oninit = element.getAttribute(RawSet.DR_ON_CREATED_CALLBACK_OPTIONNAME); // dr-on-component-init\n // if (oninit) {\n // const script = `${renderScript} ${oninit} `;\n // ObjectUtils.Script.eval(script, Object.assign(obj, {\n // __render: render\n // }));\n // }\n\n const style = RawSet.generateStyleTransform(this.styles, rawSet.uuid, true);\n element.innerHTML = style + (applayTemplate ?? '');\n\n // \uC5EC\uAE30\uC11C targetElement\uC758 \uC637\uC744 \uBC97\uAE34\uB2E4.\n // console.log('---createComponentTargetElement', element);\n let data = await RawSet.drThisCreate(\n rawSet,\n element,\n `this.__domrender_components.${rawSet.uuid}`,\n '',\n !noStrip,\n obj,\n config\n );\n // const tempDiv = document.createElement(\"div\");\n // tempDiv.appendChild(data.cloneNode(true)); // \uC6D0\uBCF8 \uBCF4\uC874\n // console.log('-------------ddddddddddddd', element.innerHTML, tempDiv.innerHTML);\n // let data = await RawSet.drThisCreate(rawSet, element, `this.__domrender_components.${componentKey}`, '', false, obj, config);\n\n // \uB118\uC5B4\uC628 innerHTML\uC5D0 this\uAC00 \uC788\uB294\uAC78 \uB2E4\uC2DC \uBCF5\uD638\uD654\uD574\uC11C \uC81C\uB300\uB85C \uC791\uB3D9\uD558\uB3C4\uB85D\uD55C\uB2E4. \uBD80\uBAA8\uC5D0\uC11C\uC758 this\uBA74 \uBD80\uBAA8\uAEC4\uB85C \uC791\uB3D9\uB418\uAC8C\n // console.log('!!!!!@', (data && innerHTMLThisRandom) ,innerHTMLThisRandom);\n if (data && innerHTMLThisRandom) {\n const template = config.window.document.createElement('template') as HTMLTemplateElement;\n\n // console.log('------->', template.content);\n // \uBE0C\uB77C\uC6B0\uC800\uC5D0\uC11C\uB294 \uC774\uAC8C\uB418\uB294\uB370 linkedom \uC5D0\uC11C\uB294 \uC548\uB41C\uB2E4. \uADF8\uB798\uC11C innerhtml\uB85C \uCC98\uB9AC\uD568\n // template.content.append(data);\n // console.log('-------', template.innerHTML);\n // const d = config.window.document.createElement('div')\n // d.innerHTML='<a></a>'\n // console.log('-----XX', ElementUtils.toInnerHTML(data, {document: config.window.document}));\n // template.innerHTML = template.innerHTML.replace(RegExp(innerHTMLThisRandom, 'g'), 'this.');\n template.innerHTML = ElementUtils.toInnerHTML(data, {document: config.window.document}).replace(RegExp(innerHTMLThisRandom, 'g'), 'this.');;\n // console.log('ccc?', template.innerHTML);\n // template.innerHTML = '<div>zzzzzzz</div>'\n data = template.content;\n }\n // (data as any).render = render;\n return data;\n }\n // complete\n };\n return targetElement;\n }\n\n public static isExpression(data: string | null) {\n // const reg = /(?:[$#]\\{(?:(([$#]\\{)??[^$#]?[^{]*?)\\}[$#]))/g;\n const reg = /[$#]\\{([\\s\\S.]*?)\\}[$#]/g;\n return reg.test(data ?? '');\n }\n\n public static expressionGroups(data: string | null) {\n // const reg = /(?:[$#]\\{(?:(([$#]\\{)??[^$#]*?)\\}[$#]))/g;\n // const reg = /(?:[$#]\\{(?:(([$#]\\{)??[^$#]?[^{]*?)\\}[$#]))/g;\n const reg = /[$#]\\{([\\s\\S.]*?)\\}[$#]/g;\n return StringUtils.regexExec(reg, data ?? '');\n }\n\n public static destroy(\n obj: any | undefined,\n parameter: OnDestroyRenderParams,\n config: DomRenderConfig,\n destroyOptions: (DestroyOptionType | string)[] = []\n ): void {\n // console.log('destroy destroydestroydestroydestroy', obj, parameter, config, destroyOptions);\n if (!destroyOptions.some(it => it === DestroyOptionType.NO_DESTROY)) {\n if (!destroyOptions.some(it => it === DestroyOptionType.NO_MESSENGER_DESTROY)) {\n if (config.messenger && obj) {\n config.messenger.deleteChannelFromObj(obj);\n }\n }\n // console.log('------------destroy', obj);\n if (isOnDestroyRender(obj)) {\n obj.onDestroyRender?.(parameter);\n }\n }\n }\n\n public findNearThis = (obj: any, rawSet: RawSet = this) => {\n const path = this.findNearThisPath(rawSet);\n if (path) {\n const optionalPath = ObjectUtils.Path.toOptionalChainPath(path);\n // console.log('ppppp-', path, optionalPath)\n return ObjectUtils.Script.evaluateReturn(optionalPath, obj);\n }\n };\n\n public findParentThis = (obj: any, rawSet: RawSet = this) => {\n const path = this.findParentThisPath(rawSet);\n if (path) {\n const optionalPath = ObjectUtils.Path.toOptionalChainPath(path);\n return ObjectUtils.Script.evaluateReturn(optionalPath, obj);\n }\n };\n\n public findNearThisPath = (rawSet: RawSet = this): string | undefined => {\n const paths = this.findThisPaths(rawSet);\n return paths[paths.length - 1];\n };\n\n public findParentThisPath = (rawSet: RawSet = this): string | undefined => {\n const paths = this.findThisPaths(rawSet);\n return paths[paths.length - 2];\n };\n\n public findThisPaths = (rawSet: RawSet = this): string[] => {\n const paths: string[] = [];\n const findPath = (rawSet: RawSet) => {\n if (rawSet && rawSet.point) {\n // jsDom\uC5D0\uC11C instranceof HTMLMetaElement\uAC00 \uC548\uBA39\uD788\uB294\uAC83\uAC19\uC544? \uAC04\uD608\uC801\uC73C\uB85C?\n if (\n rawSet.point?.start &&\n 'getAttribute' in rawSet.point.start &&\n rawSet.point.start.getAttribute('this-path')\n ) {\n paths.push(rawSet.point.start.getAttribute('this-path')!);\n }\n if (rawSet.point.parentRawSet) findPath(rawSet.point.parentRawSet);\n }\n };\n findPath(rawSet);\n paths.push('this');\n return paths.reverse();\n };\n\n public static getAttributeObject(element: Element, config: { script: string; obj: any; renderData?: any }) {\n if (!element) {\n return undefined;\n }\n const attribute = ElementUtils.getAttributeToObject(element);\n const normalAttribute = attribute[EventManager.normalAttrMapAttrName];\n if (normalAttribute) {\n new Map<string, NormalAttrDataType>(JSON.parse(normalAttribute)).forEach((v, k) => {\n const variablePaths = v.variablePaths;\n let targetScript = v.originalAttrValue.trim();\n\n let checktargetScript = v.originalAttrValue.trim();\n variablePaths.forEach(it => {\n checktargetScript = targetScript.replaceAll(it.origin, '');\n })\n\n\n //\uC911\uC694!! expression \uD558\uB098\uB9CC \uC874\uC7AC \uBC0F \uADF8\uC678\uAC83\uB4E4\uC774 \uC5C6\uC744\uB54C \uADF8\uC790\uCCB4\uAC00 \uAC12\uC774\uB2E4 \uADF8\uC678 \uC5EC\uB7EC\uAC1C \uC788\uC73C\uBA74 \uBB38\uC790\uC5F4 \uD569\uCE58\uB294\uAC78\uB85C \uAC04\uC8FC\uD55C\uB2E4.\n let isScriptValue = checktargetScript.length === 0 && variablePaths.length === 1;\n\n if (isScriptValue) {\n let r = ObjectUtils.Path.toOptionalChainPath(variablePaths[0].inner);\n targetScript = targetScript.replaceAll(variablePaths[0].origin, r);\n } else {\n variablePaths.forEach(it => {\n let r = ObjectUtils.Path.toOptionalChainPath(it.inner);\n targetScript = targetScript.replaceAll(it.origin, `\\${${r}}`);\n });\n }\n const cval = ObjectUtils.Script.evaluateReturn(\n { bodyScript: config.script, returnScript: isScriptValue ? targetScript : '`' + targetScript + '`' },\n Object.assign(config.obj, config.renderData ? { __render: config.renderData } : undefined)\n );\n attribute[k] = cval;\n });\n }\n return attribute;\n }\n}\n", "import { ValidUtils } from '@dooboostore/core/valid/ValidUtils';\n\nexport const DomRenderNoProxyKey = 'DomRender:NoProxy'\nexport const DomRenderNoProxy = (target: any, propertyKey?: string | symbol) => {\n // \uD074\uB798\uC2A4 \uB370\uCF54\uB808\uC774\uD130\uB85C \uC0AC\uC6A9\uB41C \uACBD\uC6B0\n if (propertyKey === undefined) {\n // target\uC740 \uD074\uB798\uC2A4 \uC0DD\uC131\uC790\n Reflect.defineMetadata(DomRenderNoProxyKey, true, target);\n return;\n }\n\n // \uD504\uB85C\uD37C\uD2F0 \uB370\uCF54\uB808\uC774\uD130\uB85C \uC0AC\uC6A9\uB41C \uACBD\uC6B0\n // target\uC740 \uD504\uB85C\uD1A0\uD0C0\uC785, propertyKey\uB294 \uD504\uB85C\uD37C\uD2F0 \uC774\uB984\n Reflect.defineMetadata(DomRenderNoProxyKey, true, target, propertyKey);\n};\n\nexport const getDomRenderNoProxy = (target: any, propertyKey?: string | symbol) => {\n // if (ValidUtils.isNotNullUndefined(target)) {\n // \uD074\uB798\uC2A4 \uB370\uCF54\uB808\uC774\uD130\n if (propertyKey === undefined) {\n return Reflect.getMetadata(DomRenderNoProxyKey, target);\n }\n // \uD504\uB85C\uD37C\uD2F0 \uB370\uCF54\uB808\uC774\uD130\n return Reflect.getMetadata(DomRenderNoProxyKey, target, propertyKey);\n // } else {\n // return undefined;\n // }\n}\n\nexport const isDomRenderNoProxy = (target: any, propertyKey?: string | symbol) => {\n return ValidUtils.isNullOrUndefined(target) || getDomRenderNoProxy(target, propertyKey) === true;\n}", "import { Observable } from '@dooboostore/core/message/Observable';\n\nexport namespace DocumentUtils {\n\n export const querySelectorAllByAttributeName = (document: Document | Element, attributeName: string): {element: Element, value: string | null}[] =>{\n const elements: {element:Element, value: (string | null)}[] = [];\n document.querySelectorAll(`[${attributeName}]`)?.forEach((element) => {\n elements.push({element: element, value: element.getAttribute(attributeName)});\n });\n return elements;\n }\n export const eventObservable = <K extends keyof WindowEventMap>(document: Document, type: K, options?: boolean | AddEventListenerOptions): Observable<WindowEventMap[K]> => {\n return new Observable<WindowEventMap[K]>((subscriber) => {\n const handler = (event: WindowEventMap[K]) => subscriber.next(event);\n window.addEventListener(type, handler, options);\n return () => {\n window.removeEventListener(type, handler, options);\n };\n });\n }\n}", "export interface OnBeforeReturnSet {\n onBeforeReturnSet(name: string, value: any, fullPath?: string[]): void;\n}\nexport function isOnBeforeReturnSet(obj: any): obj is OnBeforeReturnSet {\n return typeof obj?.onBeforeReturnSet === 'function';\n}\n", "import { RawSet } from '../rawsets/RawSet';\n\nexport interface OnChildRenderedByProperty {\n onChildRenderedByProperty(key: string, value: any): void;\n}\n\nexport function isOnChildRenderedByProperty(obj: any): obj is OnChildRenderedByProperty {\n return typeof obj?.onChildRenderedByProperty === 'function';\n}", "import {DomRenderConfig} from '../configs/DomRenderConfig';\n\nexport interface OnProxyDomRender {\n onProxyDomRender(config: DomRenderConfig): void;\n}\nexport const isOnProxyDomRender = (obj: any): obj is OnProxyDomRender =>\n typeof obj?.onProxyDomRender === 'function';", "import { RawSet, RenderResult } from '../rawsets/RawSet';\n\nexport type OnRawSetRenderedOtherData = {\n path?: string\n renderResult?: RenderResult\n // rawSet?: RawSet\n}\nexport interface OnRawSetRendered {\n// TODO: \uD638\uCD9C\uB41C\uACF3\uC5D0\uC11C \uB610 \uBCC0\uC218\uB97C \uC218\uC815\uD558\uAC8C\uB418\uBA74 \uBB34\uD55C\uB8E8\uD504\uB2C8\uAE50 \uC660\uB9CC\uD558\uBA74 \uC0AC\uC6A9\uBABB\uD558\uAC8C \uD574\uC57C\uD55C\uB2E4.\n onRawSetRendered (rawSet: RawSet,otherData: OnRawSetRenderedOtherData): Promise<void>;\n}\n\nexport const isOnRawSetRendered= (obj: any): obj is OnRawSetRendered => {\n return typeof obj?.onRawSetRendered === 'function';\n}\n", "import { RawSet, RenderResult } from './rawsets/RawSet';\nimport { EventManager, NormalAttrDataType } from './events/EventManager';\nimport { DomRenderConfig } from './configs/DomRenderConfig';\nimport { ScriptUtils } from '@dooboostore/core-web/script/ScriptUtils';\nimport { DomRenderFinalProxy, Shield } from './types/Types';\nimport { RawSetType } from './rawsets/RawSetType';\nimport { DrThisProperty } from './operators/DrThisProperty';\nimport { RawSetOperatorType } from './rawsets/RawSetOperatorType';\nimport { ComponentSet } from './components/ComponentSet';\nimport { DomRenderNoProxyKey, isDomRenderNoProxy } from './decorators/DomRenderNoProxy';\nimport { isOnCreateRender } from './lifecycle/OnCreateRender';\nimport { isOnInitRender } from './lifecycle/OnInitRender';\nimport { isOnCreateRenderData } from './lifecycle/OnCreateRenderData';\nimport { isOnChangeAttrRender } from './lifecycle/OnChangeAttrRender';\nimport { DocumentUtils } from '@dooboostore/core-web/document/DocumentUtils';\nimport { isDefined } from '@dooboostore/core/types';\nimport { isOnBeforeReturnSet } from './lifecycle/OnBeforeReturnSet';\nimport { isOnChildRenderedByProperty } from './lifecycle/OnChildRenderedByProperty';\nimport { ObjectUtils } from '@dooboostore/core/object/ObjectUtils';\nimport { ValidUtils } from '@dooboostore/core/valid/ValidUtils';\nimport { isOnProxyDomRender } from './lifecycle/OnProxyDomRender';\nimport { isOnRawSetRendered } from './lifecycle/OnRawSetRendered';\n\nconst excludeGetSetPropertys = [\n 'onBeforeReturnGet',\n 'onBeforeReturnSet',\n '__domrender_components',\n '__render',\n '_DomRender_isFinal',\n '_domRender_ref',\n '_rawSets',\n '_domRender_proxy',\n '_targets',\n '_DomRender_origin',\n '_DomRender_ref',\n '_DomRender_proxy'\n];\nexport const isWrapProxyDomRenderProxy = <T>(obj: T): boolean => {\n return obj && typeof obj === 'object' && '_DomRender_isProxy' in obj;\n};\nexport const getDomRenderOriginObject = <T>(obj: T): T => {\n if (isWrapProxyDomRenderProxy(obj)) {\n return (obj as any)._domRender_origin;\n }\n return obj;\n};\nexport const getDomRenderConfig = (obj: any): DomRenderConfig | undefined => {\n if (isWrapProxyDomRenderProxy(obj)) {\n return obj._domRender_config;\n }\n return undefined;\n};\n//@ts-ignore\nexport const getDomRenderProxy = <T>(obj: T): DomRenderProxy<T> | undefined => {\n if (isWrapProxyDomRenderProxy(obj)) {\n //@ts-ignore\n return (obj as any)._domRender_proxy as DomRenderProxy<T>;\n }\n return undefined;\n};\nexport class DomRenderProxy<T extends object> implements ProxyHandler<T> {\n public _domRender_ref = new Map<object, Set<string>>();\n public _rawSets = new Map<string, Set<RawSet>>();\n public _domRender_proxy?: T;\n // public _firstTarget: Node;\n public _targets = new Set<Node>();\n\n constructor(\n public _domRender_origin: T,\n target: Node | null | undefined,\n public _domRender_config: DomRenderConfig\n ) {\n if (target) {\n this._targets.add(target);\n // this._firstTarget = target;\n }\n\n // setInterval(() => {\n // this._rawSets.forEach(it => {\n // Array.from(it).forEach(it => {\n // console.log(it, it.isConnected)\n // })\n // });\n // }, 1000)\n }\n\n public static unFinal<T = any>(obj: T): T {\n return DomRenderFinalProxy.unFinal(obj);\n }\n\n public static final<T = any>(obj: T): T {\n return DomRenderFinalProxy.final(obj);\n }\n\n public static isFinal<T = any>(obj: T) {\n return ValidUtils.isNull(obj) || DomRenderFinalProxy.isFinal(obj);\n }\n\n public async run(objProxy: T) {\n this._domRender_proxy = objProxy;\n if (isOnProxyDomRender(objProxy)) {\n objProxy.onProxyDomRender(this._domRender_config);\n }\n const obj = getDomRenderOriginObject<any>(objProxy);\n if (obj) {\n Object.keys(obj).forEach(it => {\n // Reflect \uBA54\uD0C0\uB370\uC774\uD130\uC5D0\uC11C domRender:NoProxy \uC5EC\uBD80 \uD655\uC778\n try {\n const isNoProxy =\n Reflect.getMetadata(DomRenderNoProxyKey, obj, it) ||\n Reflect.getMetadata(DomRenderNoProxyKey, Object.getPrototypeOf(obj).constructor);\n if (isNoProxy) {\n return obj;\n }\n } catch (e) {}\n const target = obj[it];\n if (\n target !== undefined &&\n target !== null &&\n typeof target === 'object' &&\n !DomRenderProxy.isFinal(target) &&\n !Object.isFrozen(target) &&\n !(obj instanceof Shield)\n ) {\n const isExcluded = this._domRender_config.proxyExcludeTyps?.some(it => target instanceof it) ?? false;\n // const filter = this._domRender_config.proxyExcludeTyps?.filter(it => target instanceof it) ?? [];\n if (!isExcluded) {\n const proxyAfter = this.proxy(objProxy, target, it);\n obj[it] = proxyAfter;\n }\n }\n });\n }\n // console.log('target', this._targets);\n for (let target of this._targets) {\n await this.initRender(target);\n }\n }\n\n public async initRender(target: Node, rawSet?: RawSet) {\n // if (target instanceof Element) {\n // target.setAttribute('dr-this', 'this');\n // const rawSets = RawSet.checkPointCreates(target, this._domRender_proxy, this.config);\n // this.render(rawSets)\n // return;\n // }\n //\n if (target instanceof Element) {\n // \uC911\uC694: \uB098\uB97C\uD1B5\uD574 \uC774\uC5B4\uC9C4\uACF3\uC758 \uC704\uCE58\uB97C \uB0A8\uACA8\uC57C\uB41C\uB2E4 \uC548\uADF8\uB7EC\uBA74 TargetElement\uB294 \uC54C\uC218 \uC788\uB294 \uBC29\uBC95\uC774 \uC5C6\uB2E4. \uC5EC\uAE30\uC11C \uD754\uC801\uC744 \uB0A8\uACA8\uC918\uC57C \uD55C\uB2E4.\n // const targetElementNames = (this.config.targetElements?.map(it => it.name.toLowerCase().replaceAll('.', '\\\\.')) ?? []).join(',');\n // Array.from(target.querySelectorAll(targetElementNames)).forEach(it => it.setAttribute(EventManager.parentVariablePathAttrName, '@this@'));\n target.innerHTML = target.innerHTML.replace(/@this@/g, 'this');\n }\n // TODO: \uD55C\uACF3\uC5D0\uC11C \uCC98\uB9AC \uD544\uC694\uD560\uB4EF.. \uB108\uBB34 \uC0B0\uBC1C\uC801\uC73C\uB85C \uC788\uC74C.\n const onCreate = (target as any).getAttribute?.(RawSet.DR_ON_CREATE_ARGUMENTS_OPTIONNAME);\n let createParam: any[] = [];\n if (onCreate) {\n createParam = ObjectUtils.Script.evaluateReturn(onCreate, this._domRender_proxy);\n if (!Array.isArray(createParam)) {\n createParam = [createParam];\n }\n }\n\n if (isOnCreateRenderData(this._domRender_proxy)) {\n this._domRender_proxy?.onCreateRenderData({ rootParent: this._domRender_proxy });\n }\n\n if (isOnCreateRender(this._domRender_proxy)) {\n this._domRender_proxy.onCreateRender(...createParam);\n }\n\n // const innerHTML = (target as any).innerHTML ?? '';\n this._targets.add(target);\n const rawSets = RawSet.checkPointCreates(target, this._domRender_proxy, this._domRender_config);\n // console.log('initRender -------rawSet', rawSets)\n // \uC911\uC694 \uCD08\uAE30\uC5D0 \uD55C\uBC88 \uD295\uACA8\uC918\uC57C\uD568.\n this._domRender_config.eventManager.applyEvent(\n this._domRender_proxy,\n this._domRender_config.eventManager.findAttrElements(target as Element, this._domRender_config),\n this._domRender_config\n );\n rawSets.forEach(it => {\n const variables = it.getUsingTriggerVariables(this._domRender_config);\n if (variables.size <= 0) {\n this.addRawSet('', it);\n } else {\n variables.forEach(sit => {\n this.addRawSet(sit, it);\n });\n }\n });\n\n const targetRawSets = await this.render(this.getRawSets());\n for (let targetRawSet of targetRawSets) {\n const onInit = (target as any).getAttribute?.(RawSet.DR_ON_INIT_ARGUMENTS_OPTIONNAME);\n let initParam: any;\n if (onCreate) {\n initParam = ScriptUtils.evaluateReturn(onCreate, this._domRender_proxy);\n }\n if (isOnInitRender(this._domRender_proxy)) {\n await this._domRender_proxy.onInitRender(\n initParam,\n rawSet ?? ({ dataSet: { config: this._domRender_config } } as any)\n );\n }\n }\n }\n\n public getRawSets() {\n const set = new Set<RawSet>();\n this._rawSets.forEach((v, k) => {\n v.forEach(it => set.add(it));\n });\n return Array.from(set);\n }\n\n // \uC911\uC694 important\n public async render(raws?: RawSet[] | string, fullPathStr?: string) {\n if (typeof raws === 'string') {\n const iter = this._rawSets.get(raws);\n if (iter) {\n raws = Array.from(iter);\n } else {\n raws = undefined;\n }\n }\n const removeRawSets: RawSet[] = [];\n const rawSets = raws ?? this.getRawSets();\n\n // console.log('----', rawSets);\n for (const it of rawSets as RawSet[]) {\n it.getUsingTriggerVariables(this._domRender_config).forEach(path => {\n // console.log('getUsingTriggerVariables->', path);\n this.addRawSet(path, it);\n });\n\n let renderResult: RenderResult | undefined;\n if (it.isConnected) {\n // \uC911\uC694 render\uB420\uB54C targetAttribute \uCCB4\uD06C \uD574\uC57C\uD568.\n const targetAttrMap = (it.point.node as Element)?.getAttribute?.(EventManager.normalAttrMapAttrName);\n // console.log('sssssssssSSS?',it, targetAttrMap)\n // console.log('----2', it, fullPathStr, targetAttrMap, (it.fragment as any).render, it.isConnected, this.getRawSets());\n if (it.detect?.action) {\n it.detect.action();\n // } else if (it.type === RawSetType.TARGET_ELEMENT && it.data && fullPathStr && targetAttrMap && (it.fragment as any).render) {\n } else if (\n it.type === RawSetType.TARGET_ELEMENT &&\n it.dataSet?.render?.currentThis &&\n fullPathStr &&\n targetAttrMap\n ) {\n new Map<string, NormalAttrDataType>(JSON.parse(targetAttrMap)).forEach((v, k) => {\n // it?.data.onChangeAttrRender(k, null, v);\n // console.log('------->?',v,k);\n const isUsing = v.variablePaths.some(it => EventManager.isUsingThisVar(it.inner, `this.${fullPathStr}`))\n // console.log('------->?',v,k, isUsing);\n if (isUsing) {\n const targetAttrObject = RawSet.getAttributeObject(it.point.node as Element, {\n script: it.dataSet?.render?.renderScript ?? '',\n obj: Object.assign(this._domRender_proxy ?? {}, { __render: it.dataSet?.render })\n });\n it.dataSet.render ??= {};\n it.dataSet.render.attribute = targetAttrObject;\n // const render = it.dataSet?.render;\n // console.log('render-->!!!!!', it.dataSet.render);\n // const script = `${render.renderScript} return ${v} `;\n // const cval = ScriptUtils.eval(script, Object.assign(this._domRender_proxy ?? {}, { __render: render }));\n if (isOnChangeAttrRender(it.dataSet?.render?.currentThis)) {\n it.dataSet?.render?.currentThis?.onChangeAttrRender?.(k, targetAttrObject[k], { rawSet: it });\n }\n }\n // console.log('---?', v, fullPathStr, isUsing);\n });\n // ------------------->\n } else {\n const rawSets = await it.render(this._domRender_proxy, this._domRender_config);\n renderResult = rawSets;\n // \uADF8\uC678 \uC790\uC2DD\uB4E4 render\n if (rawSets && rawSets.raws.length > 0) {\n await this.render(rawSets.raws);\n }\n }\n } else {\n removeRawSets.push(it);\n }\n\n const t = it.findNearThis(this._domRender_proxy);\n // TODO: \uD638\uCD9C\uB41C\uACF3\uC5D0\uC11C \uB610 \uBCC0\uC218\uB97C \uC218\uC815\uD558\uAC8C\uB418\uBA74 \uBB34\uD55C\uB8E8\uD504\uB2C8\uAE50 \uC660\uB9CC\uD558\uBA74 \uC0AC\uC6A9\uBABB\uD558\uAC8C \uD574\uC57C\uD55C\uB2E4.\n if (isOnRawSetRendered(t)) {\n await t.onRawSetRendered(it, { path: fullPathStr, renderResult });\n }\n // console.log('----', it);\n }\n\n if (removeRawSets.length > 0) {\n this.removeRawSet(...removeRawSets);\n }\n return this.getRawSets();\n }\n\n // domrender_ref\uB85C \uCC3E\uB294\uAC78\uB85C \uBC14\uAFC8\n // public findRootDomRenderProxy(): DomRenderProxy<any> {\n // let current:DomRenderProxy<any> = this;\n // while (current.parentProxy) {\n // current = current.parentProxy;\n // }\n // return current;\n // }\n\n public root(\n pathInfos: { path: string; obj: any }[][],\n value?: any,\n lastDoneExecute = true\n ): { path: string; obj: any }[][] {\n // console.log('root--->', paths, value, this._domRender_ref, this._domRender_origin);\n const fullPaths: { path: string; obj: any }[][] = [];\n if (this._domRender_ref.size > 0) {\n this._domRender_ref.forEach((it, key) => {\n if ('_DomRender_isProxy' in key) {\n it.forEach(sit => {\n try {\n const concat = pathInfos.concat([[{ path: sit, obj: key }]]);\n const items: { path: string; obj: any }[][] = (key as any)._DomRender_proxy?.root(\n concat,\n value,\n lastDoneExecute\n );\n\n fullPaths.push(items.flat());\n // fullPaths.push({path: items.map(it=>it.path).join(','), obj: this._domRender_proxy});\n // fullPaths.push({path: items.map(it=>it.path).join(','), obj: this._domRender_proxy});\n } catch (e) {\n // \uC624\uBE0C\uC81D\uD2B8\uB4E4 \uC5C6\uC5B4\uC84C\uC744\uC218\uB3C4\uC788\uB2E4 Destroy\uC2DC\uC810\uC5D0\uC11C \uC624\uB958\uB098\uB294\uACBD\uC6B0\uAC00 \uC788\uB2E4. \uB530\uB77C\uC11C \uCC38\uC870 \uD558\uB294\uBD80\uBD84 \uC5C6\uC5B4\uC838\uC57C\uD55C\uB2E4.\n // console.error(e)\n // it.delete(sit);\n }\n });\n }\n });\n } else {\n // const firstPathStr = paths.slice(1).reverse().join('.');\n const strings = pathInfos.reverse().map(it => it.map(it => it.path).join(','));\n // array\uAC19\uC740\uACBD\uC6B0\uB3C4 \uD0A4\uAC12\uC73C\uB85C \uC811\uADFC\uD558\uAE30\uB54C\uBB38\uC5D0 \uD2B9\uC815 \uC778\uB371\uC2A4\uB97C \uCC3E\uC544\uC11C \uADF8\uBD80\uBD84\uB9CC \uBC14\uAFD4\uC904\uC218 \uC788\uB2E4.\n const fullPathStr = strings\n .map(it => (isNaN(Number(it)) ? '.' + it : `[${it}]`))\n .join('')\n .slice(1);\n // console.log('-------fullPathStr', fullPathStr, lastDoneExecute);\n if (lastDoneExecute) {\n // const firstData = ScriptUtils.evalReturn('this.' + firstPathStr, this._domRender_proxy);\n // console.log('-------', firstPathStr, firstData);\n // if (firstData instanceof Dictionary) {\n // }\n const iterable = this._rawSets.get(fullPathStr);\n // array check\n const front = strings\n .slice(0, strings.length - 1)\n .map(it => (isNaN(Number(it)) ? '.' + it : `[${it}]`))\n .join('');\n const lastPropertyName = strings[strings.length - 1];\n const path = 'this' + front;\n const data = ScriptUtils.evaluateReturn(ObjectUtils.Path.toOptionalChainPath(path), this._domRender_proxy);\n // console.log('root-->', this._rawSets, path, data );\n // console.log('--!!!!', fullPathStr, iterable, data, front, last);\n // \uC65C\uC5EC\uAE30\uC11C promise\uB97C \uD588\uC744\uAE4C\uB97C \uC0DD\uAC01\uD574\uBCF4\uBA74......\uD6D4.. \uBCC0\uC218\uBCC0\uACBD\uACFC \uD654\uBA74 \uBFCC\uB824\uC8FC\uB294\uAC78 \uB3D9\uAE30\uB85C\uD558\uBA74 \uC131\uB2A5\uC774 \uC548\uB098\uC624\uACE0 \uBE44\uD604\uC2E4\uC801\uC774\uB2E4. \uADF8\uB798\uC11C promise\n new Promise<RawSet[]>(async resolve => {\n let rData: RawSet[] = [];\n const firstPathStr = front.slice(1);\n\n // check dictionary\n // console.log('-promise-------', firstPathStr, this)\n const firstTargets = this._rawSets.get(firstPathStr);\n const firstTargetDictionary: RawSet[] = [];\n firstTargets?.forEach(it => {\n // console.log('----forEach---', it);\n const type = (it.point.start as Element)?.getAttribute?.('type');\n if (type === RawSetOperatorType.DR_THIS_PROPERTY) {\n firstTargetDictionary.push(it);\n }\n });\n if (firstTargetDictionary.length > 0) {\n // console.log('ddddddddddd', firstTargetDictionary);\n const rawSets: RawSet[] = [];\n let skip = false;\n firstTargetDictionary.forEach(it => {\n const startElement = it.point.start as Element;\n const keys = startElement.getAttribute(RawSet.DR_HAS_KEYS_OPTIONNAME)?.split(',') ?? [];\n if (value === undefined) {\n const rawSet = it.getHasRawSet(lastPropertyName);\n rawSet?.remove();\n startElement.setAttribute(\n RawSet.DR_HAS_KEYS_OPTIONNAME,\n keys.filter(it => it !== lastPropertyName).join(',')\n );\n }\n if (!keys.includes(lastPropertyName)) {\n const raws = DrThisProperty.append(\n this._domRender_proxy,\n fullPathStr,\n lastPropertyName,\n it,\n this._domRender_config\n );\n if (raws) {\n rawSets.push(...raws);\n }\n } else {\n skip = true;\n }\n });\n if (skip === false || rawSets.length > 0) {\n rData = await this.render(rawSets);\n }\n }\n\n if (lastPropertyName === 'length' && Array.isArray(data)) {\n const aIterable = this._rawSets.get(firstPathStr);\n if (aIterable) {\n rData = await this.render(Array.from(aIterable));\n }\n } else if (iterable) {\n // console.log('------------',iterable, fullPaths)\n rData = await this.render(Array.from(iterable), fullPathStr);\n }\n\n // console.log('-----------', this, lastPropertyName );\n // this._targets.forEach(it => {\n // // return;\n // if (it.nodeType === Node.DOCUMENT_FRAGMENT_NODE || it.nodeType === Node.ELEMENT_NODE) {\n // const targets = eventManager.findAttrElements((it as DocumentFragment | Element), this.config);\n // eventManager.changeVar(this._domRender_proxy, targets, `this.${fullPathStr}`, this.config);\n // }\n // });\n\n const Node = ((this._domRender_config.window as any).Node)\n this._targets.forEach(it => {\n // return;\n if (it.nodeType === Node.DOCUMENT_FRAGMENT_NODE || it.nodeType === Node.ELEMENT_NODE) {\n const targets = this._domRender_config.eventManager.findAttrElements(\n it as DocumentFragment | Element,\n this._domRender_config\n );\n this._domRender_config.eventManager.changeVar(\n this._domRender_proxy,\n targets,\n `this.${fullPathStr}`,\n this._domRender_config\n );\n }\n });\n\n //\uB79C\uB354\uB300\uC0C1\uB41C\uAC8C\uC788\uC73C\uBA74\n if (rData?.length > 0 && isOnChildRenderedByProperty(data)) {\n const propertyValue = ScriptUtils.evaluateReturn(`this.${lastPropertyName}`, data);\n data.onChildRenderedByProperty(lastPropertyName, propertyValue);\n // data\n }\n resolve(rData);\n }).then(it => {\n // console.log('DonrenderProxy root RenderDone')\n });\n }\n fullPaths.push([{ path: fullPathStr, obj: this._domRender_proxy }]);\n }\n\n // console.log('dddddd', fullPaths.flatMap(it=>it).map(it=>it.path))\n return fullPaths;\n }\n\n public set(target: T, p: string | symbol, value: any, receiver: T): boolean {\n // console.log('set------->', target, p, value, receiver, Date.now())\n // console.log('set------->', p,value)\n // console.log('set------->', target, p, value, receiver, Date.now())\n // try {\n // const isNoProxy = Reflect.getMetadata(DomRenderNoProxyKey, target, p) || Reflect.getMetadata(DomRenderNoProxyKey, Object.getPrototypeOf(obj).constructor);\n // if (isNoProxy) {\n // return obj;\n // }\n // }catch (e) {}\n\n // console.log('set-->', p, value, target, receiver, Reflect.getMetadata(DomRenderNoProxyKey, target, p) );\n\n if (\n (typeof p === 'string' && p !== '__domrender_components' && excludeGetSetPropertys.includes(p)) ||\n Reflect.getMetadata(DomRenderNoProxyKey, target, p)\n ) {\n (target as any)[p] = value;\n return true;\n }\n // const old = (target as any)[p];\n // console.log('set proxy-->', target, p, value, this._rawSets, this._domRender_ref);\n // if (typeof p === 'string' && '__render' === p) {\n // (target as any)[p] = value;\n // return true;\n // }\n // console.log('set--?', p, target, value);\n\n if (typeof p === 'string') {\n value = this.proxy(receiver, value, p);\n }\n\n // console.log('set typeChecked', (target as any)[p] instanceof ComponentSet, value instanceof ComponentSet);\n // if ((target as any)[p] instanceof ComponentSet) {\n // (target as any)[p]?.obj?.onDrThisUnBind?.();\n // }\n // is ComponentSet\n if (value instanceof ComponentSet && (target as any)[p] instanceof ComponentSet) {\n value.config.beforeComponentSet = (target as any)[p];\n }\n (target as any)[p] = value;\n let fullPathInfo: { path: string; obj: any }[][] = [];\n if (typeof p === 'string') {\n fullPathInfo = this.root([[{ path: p, obj: this._domRender_proxy }]], value);\n }\n\n // console.log('setRooot', fullPathInfo);\n\n //normal attribute \uB610\uD55C \uB9C1\uD06C\uB791 \uAC19\uC740 \uC99D\uC138\uB77C\uC11C \uC774\uB807\uAC8C \uD574\uC918\uC57C\uD55C\uB2E4!!\n // const rootDomRenderProxy = this.findRootDomRenderProxy();\n // console.log('set!!!!!!!', fullPathInfo, rootDomRenderProxy)\n // console.log('--------rootDom',fullPathInfo, rootDomRenderProxy, rootDomRenderProxy._domRender_proxy)\n const rootElement = this._domRender_config.rootElement ?? this._domRender_config.window.document;\n DocumentUtils.querySelectorAllByAttributeName(rootElement, EventManager.normalAttrMapAttrName)?.forEach(\n elementInfo => {\n // @ts-ignore\n // const optionalPath = ObjectUtils.Path.toOptionalChainPath(elementInfo.value);\n const targets = new Map<string, NormalAttrDataType>(\n ObjectUtils.Script.evaluateReturn<[string, NormalAttrDataType][]>(elementInfo.value)\n );\n Array.from(targets.entries())\n .filter(isDefined)\n .flatMap(([key, valueScript]) => {\n return fullPathInfo\n .flat()\n .filter(it => valueScript.variablePaths?.some(vit=> vit.inner.includes(`this.${it.path}`)))\n .flatMap(it => ({ key, valueScript: valueScript, pathInfo: it }));\n })\n .forEach(it => {\n // const optionalPaths = it.valueScript.variablePaths.map(it => ObjectUtils.Path.toOptionalChainPath(it))\n const variablePaths = it.valueScript.variablePaths;\n let targetScript = it.valueScript.originalAttrValue;\n variablePaths.forEach(it => {\n let r = ObjectUtils.Path.toOptionalChainPath(it.inner);\n targetScript = targetScript.replaceAll(it.origin,`\\${${r}}`);\n })\n const value1 = ObjectUtils.Script.evaluateReturn('`'+targetScript+'`', it.pathInfo.obj);\n // console.log('proxy set!Attribut======', it.key, value1)\n if (value1 === null) {\n elementInfo.element.removeAttribute(it.key);\n elementInfo.element[it.key] = null;\n } else {\n elementInfo.element.setAttribute(it.key, value1);\n elementInfo.element[it.key] = value1;\n }\n });\n }\n );\n\n //\uC5EC\uAE30\uC11C \uB9C1\uD06C \uAC19\uC740\uAC70 \uD574\uC918\uC57C\uD568 *-link\uB85C \uBCC0\uC218\uAC12\uC774 \uBCC0\uACBD\uB418\uBA74 \uADF8\uAC78 \uCC38\uACE0\uD558\uACE0\uC788\uB294 \uB2E4\uB978\uAC83\uB4E4\uC5D0\uB3C4 \uD574\uC918\uC57C\uD55C\uB2E4.\n DocumentUtils.querySelectorAllByAttributeName(rootElement, EventManager.linkTargetMapAttrName)?.forEach(\n elementInfo => {\n // @ts-ignore\n const targets = new Map<string, string>(ScriptUtils.evaluateReturn<[string, string][]>(elementInfo.value));\n\n Array.from(targets.entries())\n .filter(([key, value]) => value.trim())\n .filter(isDefined)\n .flatMap(([key, valueScript]) => {\n return fullPathInfo\n .flat()\n .filter(it => valueScript.includes(`this.${it.path}`))\n .flatMap(it => ({ key, valueScript: valueScript, pathInfo: it }));\n })\n .forEach(info => {\n const value1 = ScriptUtils.evaluateReturn(info.valueScript, info.pathInfo.obj);\n const applyAttributeName = EventManager.linkAttrs.find(it => it.name === info.key);\n if (applyAttributeName) {\n if (value1 === null) {\n elementInfo.element.removeAttribute(applyAttributeName.property);\n } else {\n // console.log('ppppppppppppppppppppppp', applyAttributeName, elementInfo)\n elementInfo.element.setAttribute(applyAttributeName.property, value1);\n }\n }\n });\n\n Array.from(targets.entries())\n .filter(([key, value]) => value.trim())\n .filter(isDefined)\n .flatMap(([key, valueScript]) => {\n return fullPathInfo\n .flat()\n .filter(it => valueScript.includes(`this.${it.path}`))\n .flatMap(it => ({ key, valueScript: valueScript, pathInfo: it }));\n })\n .forEach(info => {\n const linkInfo = EventManager.linkAttrs.find(it => it.name === info.key);\n if (linkInfo) {\n elementInfo.element[linkInfo.property] = value;\n }\n });\n }\n );\n\n // console.log('---end',receiver);\n if (\n 'onBeforeReturnSet' in receiver &&\n typeof p === 'string' &&\n !(this._domRender_config.proxyExcludeOnBeforeReturnSets ?? []).concat(excludeGetSetPropertys).includes(p)\n ) {\n if (isOnBeforeReturnSet(receiver)) {\n receiver.onBeforeReturnSet?.(\n p,\n value,\n fullPathInfo.map(it => it.map(it => it.path).join())\n );\n }\n }\n return true;\n }\n\n get(target: T, p: string | symbol, receiver: any): any {\n // console.log('get-->', target, p, receiver);\n if (p === '_DomRender_origin' || p === '_domRender_origin') {\n return this._domRender_origin;\n } else if (p === '_DomRender_ref' || p === '_domRender_ref') {\n return this._domRender_ref;\n } else if (p === '_DomRender_config' || p === '_domRender_config') {\n return this._domRender_config;\n } else if (p === '_DomRender_proxy' || p === '_domRender_proxy') {\n return this;\n } else {\n // Date\uB77C\uB358\uC9C0 \uC774\uB7F0\uB188\uB4E4\uC740-_-\uD504\uB85D\uC2DC\uAC00 \uC774\uC0C1\uD558\uAC8C \uB3D9\uC791\uD574\uC11C\n // console.log('--->', p, target, target.bind, 'bind' in target)\n // if ((p in target) && ('bind' in target)) {\n // try{\n // return (target as any)[p].bind(target);\n // }catch (e) {\n // console.error(e)\n // }\n // } else {\n // return (target as any)[p]\n // }\n // return (p in target) ? (target as any)[p].bind(target) : (target as any)[p]\n // console.log('-->', p, Object.prototype.toString.call((target as any)[p]), (target as any)[p])\n // return (target as any)[p]\n let it = (target as any)[p];\n if (\n it &&\n typeof it === 'object' &&\n '_DomRender_isProxy' in it &&\n Object.prototype.toString.call(it._DomRender_origin) === '[object Date]'\n ) {\n it = it._DomRender_origin;\n }\n\n if (\n 'onBeforeReturnGet' in receiver &&\n typeof p === 'string' &&\n !(this._domRender_config.proxyExcludeOnBeforeReturnGets ?? []).concat(excludeGetSetPropertys).includes(p)\n ) {\n (receiver as any)?.onBeforeReturnGet?.(\n p,\n it,\n this.root([[{ path: p, obj: this._domRender_proxy }]], it, false)\n );\n }\n return it;\n }\n }\n\n deleteProperty(target: T, p: string | symbol): boolean {\n delete (target as any)[p];\n if (typeof p === 'string') {\n this.root([[{ path: p, obj: this._domRender_proxy }]]);\n }\n return true;\n }\n\n has(target: T, p: string | symbol): boolean {\n return p === '_DomRender_isProxy' || p in target;\n }\n\n proxy(parentProxy: T, obj: T | any, p: string) {\n try {\n // const isNoProxy = Reflect.getMetadata(DomRenderNoProxyKey, obj, p) || Reflect.getMetadata(DomRenderNoProxyKey, Object.getPrototypeOf(obj).constructor);\n const isObject = typeof obj === 'object';\n const isNoProxy = isObject && isDomRenderNoProxy(obj, p);\n const isExclude = this._domRender_config.proxyExcludeTyps?.some(it => obj instanceof it) ?? false;\n const isFinal = isObject && DomRenderProxy.isFinal(obj);\n const isFrozen = Object.isFrozen(obj);\n const isShield = obj instanceof Shield;\n if (\n obj === undefined ||\n obj === null ||\n isNoProxy ||\n isExclude ||\n ValidUtils.isNullOrUndefined(obj) ||\n !isObject ||\n isFinal ||\n isFrozen ||\n isShield\n ) {\n return obj;\n }\n } catch (e) {}\n\n /*\n const proxyTarget = (this._domRender_config.proxyExcludeTyps?.filter(it => obj instanceof it) ?? []).length <= 0;\n if (proxyTarget && obj !== undefined && obj !== null && typeof obj === 'object' && !('_DomRender_isProxy' in obj) && !DomRenderProxy.isFinal(obj) && !Object.isFrozen(obj) && !(obj instanceof Shield)) {\n const domRender = new DomRenderProxy(obj, undefined, this._domRender_config);\n domRender.addRef(parentProxy, p);\n const proxy = new Proxy(obj, domRender);\n domRender.run(proxy);\n return proxy;\n }\n if (proxyTarget && obj !== undefined && obj !== null && typeof obj === 'object' && ('_DomRender_isProxy' in obj) && !DomRenderProxy.isFinal(obj) && !Object.isFrozen(obj) && !(obj instanceof Shield)) {\n const d = (obj as any)._DomRender_proxy as DomRenderProxy<T>;\n d.addRef(this._domRender_proxy!, p);\n return obj;\n } else {\n return obj;\n }\n */\n if (!isWrapProxyDomRenderProxy(obj)) {\n const domRender = new DomRenderProxy(obj, undefined, this._domRender_config);\n domRender.addRef(parentProxy, p);\n const proxy = new Proxy(obj, domRender);\n domRender.run(proxy);\n return proxy;\n }\n if (isWrapProxyDomRenderProxy(obj)) {\n const d = (obj as any)._DomRender_proxy as DomRenderProxy<T>;\n d.addRef(this._domRender_proxy!, p);\n return obj;\n } else {\n return obj;\n }\n }\n\n public addRef(parent: object, path: string) {\n if (!this._domRender_ref.get(parent)) {\n this._domRender_ref.set(parent, new Set<string>());\n }\n this._domRender_ref.get(parent)?.add(path);\n }\n\n public addRawSetAndRender(path: string, rawSet: RawSet) {\n this.addRawSet(path, rawSet);\n this.render([rawSet]);\n }\n\n public addRawSet(path: string, rawSet: RawSet) {\n // console.log('addRawSet--> path:', path, 'rawSet:', rawSet)\n if (!this._rawSets.get(path)) {\n this._rawSets.set(path, new Set<RawSet>());\n }\n this._rawSets.get(path)?.add(rawSet);\n }\n\n // public removeRawSet(...raws: RawSet[]) {\n // this._rawSets.forEach(it => {\n // raws.forEach(sit => it.delete(sit));\n // })\n // this.garbageRawSet();\n // }\n\n public removeRawSet(...raws: RawSet[]) {\n this._rawSets.forEach(it => {\n it.forEach(sit => {\n if (!sit.isConnected) {\n it.delete(sit);\n } else if (raws.includes(sit)) {\n it.delete(sit);\n }\n });\n });\n this.targetGarbageRawSet();\n }\n\n private targetGarbageRawSet() {\n this._targets.forEach(it => {\n if (!it.isConnected) {\n this._targets.delete(it);\n }\n });\n }\n\n private garbageRawSet() {\n this._targets.forEach(it => {\n if (!it.isConnected) {\n this._targets.delete(it);\n }\n });\n\n this._rawSets.forEach(it => {\n it.forEach(sit => {\n if (!sit.isConnected) {\n it.delete(sit);\n }\n });\n });\n }\n}\n", "import { Observable } from '../Observable';\n\nexport function filter<T>(predicate: (value: T, index: number) => boolean) {\n return (source: Observable<T, any>): Observable<T, any> => {\n return new Observable(subscriber => {\n let index = 0;\n const subscription = source.subscribe({\n next: (value) => {\n try {\n if (predicate(value, index++)) {\n subscriber.next(value);\n }\n } catch (err) {\n subscriber.error(err as any);\n }\n },\n error: (err) => {\n subscriber.error(err);\n },\n complete: () => {\n subscriber.complete();\n }\n });\n return subscription; // Return the subscription for teardown\n });\n };\n}\n", "import { Observable, OperatorFunction } from '../Observable';\n\nexport class EmptyError extends Error {\n constructor() {\n super('no elements in sequence');\n this.name = 'EmptyError';\n }\n}\n\n/**\n * Emits only the first value (or the first value that meets a condition)\n * emitted by the source Observable.\n *\n * If no value meets the condition, it will emit an EmptyError.\n *\n * @param predicate An optional function to test each source value for a condition.\n * @return An Observable that emits only the first value from the source, or the\n * first value that meets the condition.\n */\nexport function first<T>(\n predicate?: (value: T, index: number) => boolean\n): OperatorFunction<T, T> {\n return (source: Observable<T, any>): Observable<T, any> => {\n return new Observable<T>(subscriber => {\n let index = 0;\n let found = false;\n\n const sourceSubscription = source.subscribe({\n next: (value) => {\n if (found) return;\n const passed = predicate ? predicate(value, index++) : true;\n if (passed) {\n found = true;\n subscriber.next(value);\n subscriber.complete();\n sourceSubscription.unsubscribe();\n }\n },\n error: (err) => {\n subscriber.error(err);\n },\n complete: () => {\n if (!found) {\n subscriber.error(new EmptyError());\n }\n }\n });\n\n return () => {\n sourceSubscription.unsubscribe();\n };\n });\n };\n}\n", "import { Observable } from '../Observable';\n\nexport interface LastValueFromConfig<T> {\n defaultValue: T;\n}\n\nexport class EmptyError extends Error {\n constructor(message: string = 'No elements in sequence') {\n super(message);\n this.name = 'EmptyError';\n }\n}\n\nexport function lastValueFrom<T, D>(source: Observable<T>, config: LastValueFromConfig<D>): Promise<T | D>;\nexport function lastValueFrom<T>(source: Observable<T>): Promise<T>;\n\n/**\n * Converts an observable to a promise by subscribing to the observable,\n * waiting for it to complete, and resolving the returned promise with the\n * last value from the observed stream.\n *\n * @param source the observable to convert to a promise\n * @param config a configuration object to define the `defaultValue` to use if the source completes without emitting a value\n */\nexport function lastValueFrom<T, D>(source: Observable<T>, config?: LastValueFromConfig<D>): Promise<T | D> {\n const hasConfig = typeof config === 'object';\n return new Promise<T | D>((resolve, reject) => {\n let _hasValue = false;\n let _value: T;\n \n source.subscribe({\n next: (value) => {\n _value = value;\n _hasValue = true;\n },\n error: reject,\n complete: () => {\n if (_hasValue) {\n resolve(_value);\n } else if (hasConfig) {\n resolve(config!.defaultValue);\n } else {\n reject(new EmptyError());\n }\n },\n });\n });\n}", "import { Observable } from '../Observable';\nimport { EmptyError } from './lastValueFrom'; // Reusing EmptyError from lastValueFrom\n\n/**\n * Converts an observable to a promise by subscribing to the observable,\n * and returning a promise that will resolve with the first value emitted\n * by the observable. The subscription is then immediately unsubscribed.\n *\n * If the observable stream completes before any values were emitted, the\n * returned promise will reject with {@link EmptyError}.\n *\n * If the observable stream emits an error, the returned promise will reject\n * with that error.\n *\n * @param source The observable to convert to a promise.\n * @return A promise that resolves with the first value from the observable,\n * or rejects with an error or EmptyError.\n */\nexport function firstValueFrom<T>(source: Observable<T>): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n let _hasValue = false;\n\n const subscription = source.subscribe({\n next: (value) => {\n _hasValue = true;\n resolve(value);\n subscription.unsubscribe(); // Unsubscribe immediately after first value\n },\n error: reject,\n complete: () => {\n if (!_hasValue) {\n reject(new EmptyError());\n }\n },\n });\n });\n}", "import { RequestResponse } from '@dooboostore/simple-boot-http-server/models/RequestResponse';\nimport { HttpHeaders } from '@dooboostore/simple-boot-http-server/codes/HttpHeaders';\nimport { SimpleBootHttpSSRFactory } from '../SimpleBootHttpSSRFactory';\nimport { ConstructorType } from '@dooboostore/core/types';\nimport { JsdomInitializer } from '../initializers/JsdomInitializer';\nimport { Filter } from '@dooboostore/simple-boot-http-server/filters/Filter';\nimport { Mimes } from '@dooboostore/simple-boot-http-server/codes/Mimes';\nimport { HttpStatus } from '@dooboostore/simple-boot-http-server/codes/HttpStatus';\nimport { SimpleBootHttpServer } from '@dooboostore/simple-boot-http-server/SimpleBootHttpServer';\nimport { SimFrontOption } from '@dooboostore/simple-boot-front/option/SimFrontOption';\nimport { SimpleBootFront } from '@dooboostore/simple-boot-front/SimpleBootFront';\nimport { AsyncBlockingQueue } from '@dooboostore/core/queues/AsyncBlockingQueue';\nimport { RandomUtils } from '@dooboostore/core/random/RandomUtils';\nimport * as JSDOM from 'jsdom';\nimport { NotFoundError } from '@dooboostore/simple-boot-http-server/errors/NotFoundError';\nimport { DomRenderProxy } from '@dooboostore/dom-render/DomRenderProxy';\nimport { filter } from '@dooboostore/core/message/operators/filter';\nimport { first } from '@dooboostore/core/message/operators/first';\nimport { firstValueFrom } from '@dooboostore/core/message/internal/firstValueFrom';\n\nexport type FactoryAndParams = {\n frontDistPath: string;\n frontDistIndexFileName?: string;\n factorySimFrontOption: (window: any) => SimFrontOption;\n factory: SimpleBootHttpSSRFactory;\n poolOption: {\n max: number;\n min: number;\n clearIntervalTime?: number;\n };\n using: ConstructorType<any>[];\n domExcludes?: ConstructorType<any>[];\n ssrExcludeFilter?: (rr: RequestResponse) => boolean;\n simpleBootFront?: {\n notFoundError?: boolean;\n };\n};\n\nexport class SSRFilter implements Filter {\n private simpleBootFrontPool: SimpleBootFront[] = [];\n private simpleBootFrontQueue = new AsyncBlockingQueue<SimpleBootFront>();\n private indexHTML: string;\n private welcomUrl = 'http://localhost';\n private poolGeneration = 0;\n private intervalId?: NodeJS.Timeout;\n\n constructor(\n public config: FactoryAndParams,\n public otherInstanceSim?: Map<ConstructorType<any>, any>\n ) {\n config.frontDistIndexFileName = config.frontDistIndexFileName || 'index.html';\n this.indexHTML = JsdomInitializer.loadFile(this.config.frontDistPath, config.frontDistIndexFileName);\n }\n\n async onInit(app: SimpleBootHttpServer) {\n for (let i = 0; i < this.config.poolOption.min; i++) {\n await this.pushQueue();\n }\n\n if (this.config.poolOption.clearIntervalTime && this.config.poolOption.clearIntervalTime > 0) {\n this.intervalId = setInterval(() => {\n this.poolGeneration++;\n }, this.config.poolOption.clearIntervalTime);\n }\n // console.log('SimpleBootHttpSSRFactory init success ', + this.simpleBootFrontPool.length)\n }\n\n async onDestroy() {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n }\n // this.simpleBootFrontQueue.clear();\n this.simpleBootFrontPool.forEach(front => {\n (front as any).jsdom?.window.close();\n });\n this.simpleBootFrontPool = [];\n }\n\n // workerTs(workerOptions: WorkerOptions) {\n // workerOptions.eval = true;\n // if (!workerOptions.workerData) {\n // workerOptions.workerData = {};\n // }\n // workerOptions.workerData.__filename = '/Users/hyunhakim/source/visualkhh/pet-space/libs/simple-boot-http-ssr/dist/filters/SSRCreatorWorker.js';\n // return new Worker(` const wk = require('worker_threads'); require('ts-node').register(); let file = wk.workerData.__filename; require(file); `, workerOptions,);\n // }\n\n async makeJsdom() {\n const jsdom = await new JsdomInitializer(\n this.config.frontDistPath,\n this.config.frontDistIndexFileName || 'index.html',\n { url: this.welcomUrl }\n ).run();\n return jsdom;\n }\n\n async makeFront(jsdom: JSDOM.JSDOM) {\n const name = RandomUtils.uuid();\n // const jsdom = await this.makeJsdom();\n const window = jsdom.window as unknown as Window & typeof globalThis;\n (window as any).ssrUse = false;\n const option = this.config.factorySimFrontOption(DomRenderProxy.final(window));\n const simpleBootFront = await this.config.factory.create(option, this.config.using, this.config.domExcludes);\n simpleBootFront.run(this.otherInstanceSim);\n (simpleBootFront as any).jsdom = jsdom;\n (simpleBootFront as any).generation = this.poolGeneration;\n return simpleBootFront;\n }\n\n enqueueFrontApp(simpleBootFront: SimpleBootFront) {\n // this.simpleBootFrontPool.set(simpleBootFront.option.name!, simpleBootFront);\n this.simpleBootFrontPool.push(simpleBootFront);\n this.simpleBootFrontQueue.enqueue(simpleBootFront);\n }\n\n // async pushQueue(destorFront?: SimpleBootFront) {\n // if (destorFront) {\n // this.simpleBootFrontPool.delete(destorFront.option.name!);\n // }\n async pushQueue() {\n if (this.simpleBootFrontPool.length < this.config.poolOption.max) {\n this.enqueueFrontApp(await this.makeFront(await this.makeJsdom()));\n }\n }\n\n async proceedBefore({ rr, app }: { rr: RequestResponse; app: SimpleBootHttpServer; carrier: Map<string, any> }) {\n if (this.config.ssrExcludeFilter?.(rr)) {\n return false;\n }\n if (rr.reqHasAcceptHeader(Mimes.TextHtml) || rr.reqHasAcceptHeader(Mimes.All)) {\n if (this.simpleBootFrontQueue.isEmpty()) {\n await this.pushQueue();\n }\n const simpleBootFront = await this.simpleBootFrontQueue.dequeue();\n try {\n // console.log('SSRFilter before-->' , simpleBootFront.option.name, 'poolLength:',this.simpleBootFrontPool.size);\n (simpleBootFront.option.window as any).ssrUse = true;\n delete (simpleBootFront.option.window as any).server_side_data;\n\n const url = rr.reqUrlObj({ host: 'localhost' });\n if (this.config.simpleBootFront?.notFoundError) {\n // intent router check first\n const intent = await simpleBootFront.getIntent(url.pathname);\n // route\uB97C \uBABB\uCC3E\uC740\uC0C1\uD0DC\uC5D0\uC11C router path\uAE4C\uC9C0 \uC548\uB9DE\uC73C\uBA74 404 \uCC98\uB9AC\uD55C\uB2E4. route\uB791 router\uB791 \uB2E4\uB974\uB2C8\uAE50 \uD5DB\uAC08\uB9AC\uC9C0\uB9D0\uB3C4\uB85D\n if (intent.module === undefined && !intent.getRouterPathData(rr.reqUrlPathName)) {\n throw new NotFoundError({ message: `Not Found: ${rr.reqUrlPathName}` });\n }\n }\n\n // runRouting!!\n const targetUrl = url.toString();\n // console.log('rrrrr');\n // simpleBootFront.routingSubjectObservable.subscribe(it => {\n // if (it.state === 'end' && it.routerModule.intent.uri === targetUrl) {\n // console.log('vvvvvvvvvvvv', it.state, it.routerModule.intent.uri);\n // }\n // });\n await simpleBootFront.goRouting(targetUrl);\n await new Promise(r => setTimeout(r, 0)); // <--\uC911\uC694: \uC774\uAC70 \uB123\uC5B4\uC57C\uC9C0 \uB450\uBC88\uBD88\uB7EC\uC9C0\uB294\uAC8C \uC5C6\uC5B4\uC9C0\uB294\uB4EF? \uBB50\uC9C0 event loop \uBCC0\uACBD\uB41C\uAC74\uAC00?\n // TODO: \uC635\uC158\uC73C\uB85C \uC774\uAC70 \uD0A4\uACE0 \uB044\uACE0\uD560\uC218\uC788\uAC8C \uD574\uC57C\uB420\uAE4C..?\n // simpleBootFront.routingSubjectObservable.pipe(\n // filter((it) =>\n // it.state === 'end' &&\n // typeof it.routerModule.intent.uri === 'string' &&\n // targetUrl.endsWith(it.routerModule.intent.uri)\n // ),\n // // delay(1000),\n // first()\n // );\n const data = await firstValueFrom(\n // @ts-ignore\n simpleBootFront.routingSubjectObservable.pipe(\n // @ts-ignore\n filter(\n (it) =>\n it.triggerPoint === 'end' &&\n typeof it.routerModule.intent.uri === 'string' &&\n targetUrl.endsWith(it.routerModule.intent.uri)\n ),\n // delay(1000),\n first()\n )\n );\n // console.log('rrrrrssss');\n // console.log('rrrrrssss122');\n // await new Promise(r => setTimeout(r, 5000)); // <--\uC911\uC694: \uC774\uAC70 \uB123\uC5B4\uC57C\uC9C0 \uB450\uBC88\uBD88\uB7EC\uC9C0\uB294\uAC8C \uC5C6\uC5B4\uC9C0\uB294\uB4EF? \uBB50\uC9C0 event loop \uBCC0\uACBD\uB41C\uAC74\uAC00?\n const html = this.makeHTML(simpleBootFront);\n await this.writeOkHtmlAndEnd({ rr }, html);\n } finally {\n (simpleBootFront.option.window as any).ssrUse = false;\n delete (simpleBootFront.option.window as any).server_side_data;\n // console.log('--------->', simpleBootFront.option.window)\n // simpleBootFront.ninitWriteRootRouter();\n // ((simpleBootFront as any).jsdom as JSDOM.JSDOM)?.reconfigure({url: '/' });\n // simpleBootFront.option.window.location.href = 'about:blank';\n // console.log('ddddddddd', (simpleBootFront as any).generation, this.poolGeneration)\n if ((simpleBootFront as any).generation < this.poolGeneration) {\n // Stale instance, destroy it\n const jsdom = (simpleBootFront as any).jsdom as JSDOM.JSDOM | undefined;\n jsdom?.window.close();\n const index = this.simpleBootFrontPool.indexOf(simpleBootFront);\n if (index > -1) {\n this.simpleBootFrontPool.splice(index, 1);\n }\n // Create a new one to maintain pool size\n this.pushQueue();\n } else {\n // Current instance, return to queue\n this.simpleBootFrontQueue.enqueue(simpleBootFront);\n }\n // simpleBootFront.option.window.document.body.innerHTML = this.rootJSDOM.window.document.body.innerHTML;\n // simpleBootFront.writeRootRouter()\n // await simpleBootFront.goRouting('/');\n\n // ((simpleBootFront as any).jsdom as JSDOM.JSDOM)?.reconfigure({url: this.welcomUrl });\n\n // simpleBootFront.option.window.location.href = this.welcomUrl;\n // simpleBootFront.option.window.document.documentElement.outerHTML = this.indexHTML;\n // this.simpleBootFrontQueue.enqueue(simpleBootFront);\n // await new Promise((re, r) => setTimeout(() => re(true), 10000));\n // new Promise((re, r) => setTimeout(() => re(true), 10000)).then(it => {\n // console.log('ddddddddddd')\n // });\n // this.simpleBootFrontPool.delete(simpleBootFront.option.name!);\n // if (isMainThread) { // \uBA54\uC778 \uC2A4\uB808\uB4DC\n // console.log('file-->', __filename)\n // const worker = new Worker(__filename);\n // worker.on('message', (value: any) => {\n // console.log('\uC6CC\uCEE4\uB85C\uBD80\uD130', value)\n // })\n // worker.on('exit', (value: any) => { // parentPort.close()\uAC00 \uC77C\uC5B4\uB098\uBA74 \uC774\uBCA4\uD2B8 \uBC1C\uC0DD\n // console.log('\uC6CC\uCEE4 \uB05D~');\n // })\n // worker.postMessage('ping'); // \uC6CC\uCEE4\uC2A4\uB808\uB4DC\uC5D0\uAC8C \uBA54\uC138\uC9C0\uB97C \uBCF4\uB0B8\uB2E4.\n // } else { // \uC6CC\uCEE4\uC2A4\uB808\uB4DC\n // parentPort.on('message', (value: any) => {\n // console.log(\"\uBD80\uBAA8\uB85C\uBD80\uD130\", value);\n // parentPort.postMessage('pong');\n // parentPort.close(); // \uC6CC\uCEE4\uC2A4\uB808\uB4DC \uC885\uB8CC\uB77C\uACE0 \uBA54\uC778\uC2A4\uB808\uB4DC\uC5D0 \uC54C\uB824\uC918\uC57C exit\uC774\uBCA4\uD2B8 \uBC1C\uC0DD\n // })\n // }\n\n //worker thrad\n // const workerPath = path.join(__dirname, 'SSRWorker.js');\n // const worker = new Worker(workerPath);\n // worker.once('message', (value: any) => {\n // console.log('\uC6CC\uCEE4\uB85C\uBD80\uD130', value)\n // });\n // const receiveWorker = new Worker('/Users/hyunhakim/source/visualkhh/pet-space/libs/simple-boot-http-ssr/dist/filters/SSRCreatorWorker.js');\n // receiveWorker.on('message', (msg: JSDOM.JSDOM)=>{\n // console.log('\uC6CC\uCEE4\uB85C\uBD80\uD130', msg, msg.window.document.body.innerHTML)\n // console.log('a message is sent! : ', msg)\n //\n // });\n //\n // receiveWorker.on('error', err=>{\n // console.error(err);\n // })\n //\n // receiveWorker.on('exit', ()=>console.log('exited!'));\n // receiveWorker.postMessage(\n // {\n // frontDistPath: this.factory.frontDistPath,\n // frontDistIndexFileName: this.factory.frontDistIndexFileName,\n // }\n // );\n\n // const myWorkers = this.workerTs({});\n // myWorkers.postMessage(this);\n // myWorkers.on('message', (value: SimpleBootFront) => {\n // this.pushQueue(value);\n // })\n // this\n // this.pushQueue(simpleBootFront).then(it => {\n // console.log('deee')\n // });\n // console.log('-1->', simpleBootFront.option.window.location.href);\n // simpleBootFront.option.window.location.href = this.welcomUrl;\n // simpleBootFront.option.window.location.reload();\n // console.log('-2->', simpleBootFront.option.window.location.href);\n // simpleBootFront.option.window.location.reload();\n // console.log('-3->', simpleBootFront.option.window.location.href);\n // this.simpleBootFrontQueue.enqueue(simpleBootFront);\n // await this.makeJsdom();\n // simpleBootFront.option.window.location.href = this.welcomUrl;\n }\n // console.log('----doen')\n return false;\n } else {\n // console.log('----doen2')\n return true;\n }\n }\n\n // const e = Expression.Path.pathNameData(rr.reqUrlPathName, intent.getRouterPath())\n // console.log('------intent', rr.reqUrl, rr.reqUrlPathName, intent.module, intent.getRouterPath(), e)\n // simpleBootFront.option.window.document.documentElemenh\n // \"dr-\"\uB85C \uC2DC\uC791\uD558\uB294 \uBAA8\uB4E0 attribute\uB97C \uAC00\uC9C4 element\uC5D0\uC11C \uD574\uB2F9 attribute\uB97C \uC81C\uAC70\n\n makeHTML(simpleBootFront: SimpleBootFront) {\n (simpleBootFront.option.window as any).document.querySelectorAll('*').forEach((el:HTMLElement )=> {\n Array.from(el.attributes).forEach(attr => {\n if (/^dr-/.test(attr.name) || /^domstyle/.test(attr.name) || /this-path/.test(attr.name)) {\n el.removeAttribute(attr.name);\n }\n });\n });\n let html = simpleBootFront.option.window.document.documentElement.outerHTML;\n html = '<!DOCTYPE html>' + html;\n html = html.replace(/\\$\\{[\\s\\S]*?\\}\\$/g, '');\n const serverSideData = (simpleBootFront.option.window as any).server_side_data;\n if (serverSideData) {\n const data = Object.entries(serverSideData)\n .map(([k, v]) => {\n if (typeof v === 'string') {\n return `window.server_side_data.${k} = ${v}`;\n } else {\n return `window.server_side_data.${k} = ${JSON.stringify(v)}`;\n }\n })\n .join(';');\n if (data) {\n html = html.replace('</head>', `<script> window.server_side_data={}; ${data}; </script></head>`);\n }\n }\n return html;\n }\n async writeOkHtmlAndEnd({ rr, status = HttpStatus.Ok }: { rr: RequestResponse; status?: HttpStatus }, html: string) {\n // rr.res.writeHead(status, {[HttpHeaders.ContentType]: Mimes.TextHtml});\n rr.resStatusCode(status);\n rr.resSetHeader(HttpHeaders.ContentType, Mimes.TextHtml);\n await rr.resEnd(html);\n }\n\n async proceedAfter({ rr, app }: { rr: RequestResponse; app: SimpleBootHttpServer; carrier: Map<string, any> }) {\n // console.log('done--------', sw)\n return true;\n }\n}\n", "import { ConstructorType } from '@dooboostore/core/types';\nimport {FactoryAndParams} from './SSRFilter';\nimport {JsdomInitializer} from '../initializers/JsdomInitializer';\nimport JSDOM from 'jsdom';\nimport {RandomUtils} from '@dooboostore/core/random/RandomUtils';\nimport {SimpleBootFront} from '@dooboostore/simple-boot-front/SimpleBootFront';\n\nexport class SSRWorker {\n public welcomUrl = 'http://localhost'\n private simpleBootFront?: SimpleBootFront;\n\n constructor(public factory: FactoryAndParams, public otherInstanceSim?: Map<ConstructorType<any>, any>) {\n\n }\n\n async run() {\n this.simpleBootFront = await this.makeFront();\n }\n\n async makeJsdom() {\n const jsdom = await new JsdomInitializer(this.factory.frontDistPath, this.factory.frontDistIndexFileName || 'index.html', {url: this.welcomUrl}).run();\n return jsdom;\n }\n\n async makeFront(jsdom?: JSDOM.JSDOM) {\n if (!jsdom) {\n jsdom = await this.makeJsdom();\n }\n const name = RandomUtils.uuid();\n // const jsdom = await this.makeJsdom();\n const window = jsdom.window as unknown as Window & typeof globalThis;\n (window as any).ssrUse = false;\n const option = this.factory.factorySimFrontOption(window);\n // option.name = name;\n const simpleBootFront = await this.factory.factory.create(option, this.factory.using, this.factory.domExcludes);\n simpleBootFront.run(this.otherInstanceSim);\n (simpleBootFront as any).jsdom = jsdom;\n return simpleBootFront;\n }\n\n\n async getHtml(url: string) {\n if (this.simpleBootFront && (this.simpleBootFront.option.window as any).ssrUse) {\n\n } else if (this.simpleBootFront) {\n (this.simpleBootFront.option.window as any).ssrUse = true;\n delete (this.simpleBootFront.option.window as any).server_side_data;\n\n // run\n await this.simpleBootFront.goRouting(url);\n let html = this.simpleBootFront.option.window.document.documentElement.outerHTML;\n\n const serverSideData = (this.simpleBootFront.option.window as any).server_side_data;\n if (serverSideData) {\n const data = Object.entries(serverSideData).map(([k, v]) => {\n if (typeof v === 'string') {\n return `window.server_side_data.${k} = ${v}`;\n } else {\n return `window.server_side_data.${k} = ${JSON.stringify(v)}`;\n }\n }).join(';');\n if (data) {\n html = html.replace('</head>', `<script> window.server_side_data={}; ${data}; </script></head>`);\n }\n }\n\n this.makeFront().then(it => {\n this.simpleBootFront = it;\n });\n return html;\n } {\n\n }\n\n }\n}", "import { InitOptionType, SimOption } from '@dooboostore/simple-boot/SimOption';\nimport { ConstructorType } from '@dooboostore/core/types';\nimport { Server as HttpServer, ServerOptions } from 'http';\nimport { Server as HttpsServer, ServerOptions as HttpsServerOption } from 'https';\nimport { Filter } from '../filters/Filter';\nimport { EndPoint } from '../endpoints/EndPoint';\nimport { RequestResponse } from '../models/RequestResponse';\nimport { SimpleBootHttpServer } from '../SimpleBootHttpServer';\nimport { TransactionManager } from '@dooboostore/core/transaction/TransactionManager';\n\nexport type Listen = { port?: number, hostname?: string, backlog?: number, listeningListener?: (server: SimpleBootHttpServer, httpServer: HttpServer | HttpsServer) => void };\n\nexport interface ListenData extends Listen {\n port: number;\n hostname: string;\n}\n\nexport class HttpServerOption extends SimOption {\n public static readonly DEFAULT_PORT = 8081;\n public static readonly DEFAULT_HOSTNAME = '127.0.0.1';\n public serverOption?: ServerOptions | HttpsServerOption;\n public listen: ListenData;\n public filters?: (Filter | ConstructorType<Filter>)[];\n public fileUploadTempPath?: string;\n public requestEndPoints?: (EndPoint | ConstructorType<EndPoint>)[];\n public closeEndPoints?: (EndPoint | ConstructorType<EndPoint>)[];\n public errorEndPoints?: (EndPoint | ConstructorType<EndPoint>)[];\n public sessionOption: { key: string, expiredTime: number, provider?: { uuids: () => Promise<string[]>, delete: (uuid: string) => Promise<void>, get: (uuid: string) => Promise<{ access: number, data?: any }>, set: (uuid: string, data: { access: number, data?: any }) => Promise<void> } };\n public globalAdvice?: any | ConstructorType<any>;\n public noSuchRouteEndPointMappingThrow?: (rr: RequestResponse) => any;\n public transactionManagerFactory?: () => TransactionManager;\n\n constructor({serverOption, listen, filters, requestEndPoints, closeEndPoints, errorEndPoints, sessionOption, globalAdvice, fileUploadTempPath,noSuchRouteEndPointMappingThrow, transactionManagerFactory}: {\n serverOption?: ServerOptions | HttpsServerOption,\n listen?: Listen,\n filters?: (Filter | ConstructorType<Filter>)[],\n requestEndPoints?: (EndPoint | ConstructorType<EndPoint>)[],\n closeEndPoints?: (EndPoint | ConstructorType<EndPoint>)[],\n errorEndPoints?: (EndPoint | ConstructorType<EndPoint>)[],\n sessionOption?: { key?: string, expiredTime?: number, provider?: { uuids: () => Promise<string[]>, delete: (uuid: string) => Promise<void>, get: (uuid: string) => Promise<{ access: number, data?: any }>, set: (uuid: string, data: { access: number, data?: any }) => Promise<void> } },\n globalAdvice?: any | ConstructorType<any>,\n fileUploadTempPath?: string,\n noSuchRouteEndPointMappingThrow?: (rr: RequestResponse) => any,\n transactionManagerFactory?: () => TransactionManager\n } = {}, initSimOption?: InitOptionType) {\n super(initSimOption);\n this.serverOption = serverOption;\n this.listen = Object.assign({port: HttpServerOption.DEFAULT_PORT, hostname: HttpServerOption.DEFAULT_HOSTNAME}, listen);\n this.filters = filters;\n this.requestEndPoints = requestEndPoints;\n this.closeEndPoints = closeEndPoints;\n this.errorEndPoints = errorEndPoints;\n this.sessionOption = Object.assign({key: 'SBSESSIONID', expiredTime: 1000 * 60 * 30}, sessionOption);\n this.globalAdvice = globalAdvice;\n this.fileUploadTempPath=fileUploadTempPath;\n this.noSuchRouteEndPointMappingThrow = noSuchRouteEndPointMappingThrow;\n this.transactionManagerFactory = transactionManagerFactory;\n }\n\n get hostname() {\n return this.listen.hostname;\n }\n\n get port() {\n return this.listen.port;\n }\n\n get protocol() {\n return this.isSecure ? 'https' : 'http';\n }\n\n get address() {\n return `${this.protocol}://${this.hostname}:${this.port}`;\n }\n\n get isSecure() {\n return this.serverOption && 'key' in this.serverOption && 'cert' in this.serverOption;\n }\n \n \n}\n", "import { HttpServerOption } from '@dooboostore/simple-boot-http-server/option/HttpServerOption';\n\nexport class HttpSSRServerOption extends HttpServerOption {\n}\n", "import { getSim, Sim } from '@dooboostore/simple-boot/decorators/SimDecorator';\nimport { HttpHeaders } from '@dooboostore/simple-boot-http-server/codes/HttpHeaders';\nimport { HttpHeaders as SSRHttpHeaders } from '../codes/HttpHeaders';\nimport { Mimes as SSRMimes } from '../codes/Mimes';\nimport { ReflectUtils } from '@dooboostore/core/reflect/ReflectUtils';\nimport { ConvertUtils } from '@dooboostore/core/convert/ConvertUtils';\n\n@Sim\nexport class IntentSchemeFrontProxy implements ProxyHandler<any> {\n public get(target: any, prop: string): any {\n const t = target[prop];\n // TODO: 여기에 추가적인 프로퍼티 작성으 추가적으로 해야된다..\n // if (typeof t === 'function') {\n if (!['constructor', 'onProxyDomRender', 'toString'].includes(prop)) {\n return (...args: any[]) => {\n // const simstanceManager = target._SimpleBoot_simstanceManager;\n const simOption = target._SimpleBoot_simOption;\n const config = getSim(target);\n // const scheme = getSim(target)?.scheme;\n const firstScheme = ConvertUtils.flatArray(config?.scheme)[0];\n const key = firstScheme + '_' + prop;\n const type = ReflectUtils.getReturnType(target, prop);\n const isHas = (key in (simOption.window.server_side_data ?? {}));\n if (isHas) {\n const data = simOption.window.server_side_data?.[key];\n delete simOption.window.server_side_data?.[key];\n let rdata;\n if (type instanceof Promise) {\n rdata = Promise.resolve(data);\n } else {\n rdata = data;\n }\n return rdata;\n } else {\n return fetch(`/${prop.toString()}`,\n {\n method: 'POST',\n headers: {[HttpHeaders.ContentType]: SSRMimes.ApplicationJsonPostSimpleBootSsrIntentScheme, [SSRHttpHeaders.XSimpleBootSsrIntentScheme]: firstScheme ?? ''},\n body: JSON.stringify(args[0])\n }\n ).then(async (res) => {\n try {\n const data = await res.json();\n return data;\n } catch(e) {\n try {\n return await res.text();\n } catch(e) {\n return undefined;\n }\n }\n });\n }\n // return t.apply(target, args);\n }\n } else {\n return t;\n }\n }\n\n\n // apply(target: Function, thisArg: any, ...argumentsList: any[]): any {\n // console.log('-IntentSchemeFrontProxyHandler----?????')\n // return target(...argumentsList);\n // }\n\n}\n", "import { getSim, Sim } from '@dooboostore/simple-boot/decorators/SimDecorator';\n\n@Sim\nexport class IntentSchemeServerProxy implements ProxyHandler<any> {\n public get(target: any, prop: string): any {\n const t = target[prop];\n if (typeof t === 'function') {\n return (...args: any[]) => {\n\n const simstanceManager = target._SimpleBoot_simstanceManager;\n const simOption = target._SimpleBoot_simOption;\n const config = getSim(target);\n const data = t.apply(target, args);\n if (simstanceManager && simOption && config?.scheme && simOption.window) {\n if (!simOption.window.server_side_data) {\n simOption.window.server_side_data = {};\n }\n const key = config.scheme + '_' + prop;\n if (data instanceof Promise) {\n data.then((it) => {\n simOption.window.server_side_data[key] = JSON.stringify(it);\n return it;\n });\n } else {\n simOption.window.server_side_data[key] = JSON.stringify(data);\n }\n }\n return data;\n }\n } else {\n return t;\n }\n }\n\n}\n", "export enum AlertAction {\n ACTIVE = 'ACTIVE',\n IN_ACTIVE = 'IN_ACTIVE'\n}\n", "import { AlertFactoryConfig } from './AlertFactoryConfig';\nimport { RandomUtils } from '@dooboostore/core/random/RandomUtils';\nimport { AlertAction } from './AlertAction';\nimport { AlertService } from './AlertService';\n\nexport abstract class Alert<T> {\n result?: T | void;\n isActive = false;\n activeBefore: ((() => void) | (() => Promise<void>))[] = [];\n activeAfter: ((() => void) | (() => Promise<void>))[] = [];\n deActiveBefore: ((() => void) | (() => Promise<void>))[] = [];\n deActiveAfter: ((() => void) | (() => Promise<void>))[] = [];\n data: Map<string, any> = new Map();\n public readonly uuid: string;\n\n constructor(\n public alertService?: AlertService<T>,\n public config?: AlertFactoryConfig<T>\n ) {\n if (config?.uuid) {\n this.uuid = config.uuid;\n } else {\n this.uuid = RandomUtils.uuid();\n }\n }\n\n addOpenBefore(fn: (() => void) | (() => Promise<void>)) {\n this.activeBefore.push(fn);\n }\n\n addOpenAfter(fn: (() => void) | (() => Promise<void>)) {\n this.activeAfter.push(fn);\n }\n\n addCloseBefore(fn: (() => void) | (() => Promise<void>)) {\n this.deActiveBefore.push(fn);\n }\n\n addCloseAfter(fn: (() => void) | (() => Promise<void>)) {\n this.deActiveAfter.push(fn);\n }\n\n setData(key: string, value: any) {\n this.data.set(key, value);\n }\n\n getData(key: string) {\n return this.data.get(key);\n }\n\n async active(): Promise<void> {\n try {\n await Promise.allSettled(this.activeBefore.map(it => it()))\n .then(it => {\n this.result = this.make();\n this.alertService?.publish({action: AlertAction.ACTIVE, alert: this});\n this.isActive = true;\n if (this.config?.closeTime !== undefined && this.config?.closeTime > 0) {\n setTimeout(() => {\n this.inActive();\n }, this.config.closeTime);\n }\n this.config?.active?.(this.result, this);\n });\n } catch (e) {\n\n } finally {\n await Promise.allSettled(this.activeAfter.map(it => it())).then(it => {\n });\n }\n\n }\n\n async inActive(): Promise<void> {\n try {\n await Promise.allSettled(this.deActiveBefore.map(it => it()))\n .then(it => {\n this.alertService?.publish({action: AlertAction.IN_ACTIVE, alert: this});\n this.isActive = false;\n this.config?.deActive?.(this.result, this);\n })\n } catch (e) {\n\n } finally {\n await Promise.allSettled(this.deActiveAfter.map(it => it())).then(it => {\n });\n\n }\n }\n\n protected abstract make(): T | void;\n}\n", "import { Alert } from './Alert';\nimport { AlertType } from './AlertType';\nimport { Sim } from '../decorators/SimDecorator';\nimport { AlertFactoryConfig } from './AlertFactoryConfig';\nexport namespace AlertFactory {\n export const SYMBOL: Symbol= Symbol('AlertFactory');\n}\n\nexport interface AlertFactory<T> {\n create(data?: {\n caller?: any;\n type?: AlertType | string;\n config?: AlertFactoryConfig<T>;\n }): Alert<T> | undefined;\n}\nexport interface AlertFactorAy<T> {\n create(data?: {\n caller?: any;\n type?: AlertType | string;\n config?: AlertFactoryConfig<T>;\n }): Alert<T> | undefined;\n}\n\n@Sim({symbol: AlertFactory.SYMBOL})\nexport class DefaultAlertFactory<T = any> implements AlertFactory<T>{\n create(data?: { caller?: any; type?: AlertType | string; config?: AlertFactoryConfig<T> }): Alert<T> | undefined {\n return undefined;\n }\n}", "export enum AlertType {\n DANGER = 'DANGER',\n NORMAL = 'NORMAL',\n PROGRESS = 'PROGRESS',\n SUCCESS = 'SUCCESS',\n ERROR = 'ERROR',\n INFO = 'INFO',\n WARNING = 'WARNING',\n CONSOLE = 'CONSOLE',\n ETC = 'ETC'\n}\n", "import { Subject } from './Subject';\nimport { Subscription } from './Subscription';\nimport { Observer } from './Observer';\nimport { CompleteCallBack, ErrorCallBack, ObserverCallBack } from './Subscribable';\n\nexport class ReplaySubject<T, E = any> extends Subject<T, E> {\n private _buffer: T[] = [];\n // Removed: private _error: E | undefined;\n // Removed: private _isStopped = false;\n\n constructor(private bufferSize: number = Infinity) {\n super();\n }\n\n next(data: T): void {\n // Rely on parent Subject's _isStopped\n if ((this as any)._isStopped) {\n return; // Cannot emit after stopped\n }\n this._buffer.push(data);\n if (this._buffer.length > this.bufferSize) {\n this._buffer.shift(); // Remove oldest if buffer exceeds size\n }\n super.next(data); // Multicast to current subscribers\n }\n\n error(err: E): void {\n // Rely on parent Subject to manage _isStopped and _error\n super.error(err); // Multicast error and stop\n }\n\n complete(): void {\n // Rely on parent Subject to manage _isStopped\n super.complete(); // Multicast complete and stop\n }\n\n protected _subscribeToSubject(subscriber: any): Subscription {\n // Emit buffered values to the new subscriber first\n this._buffer.forEach(value => subscriber.next(value));\n\n // If the subject has already completed or errored, emit that status\n // Rely on parent Subject's _isStopped, _hasError, _error\n if ((this as any)._isStopped) {\n if ((this as any)._hasError) {\n subscriber.error((this as any)._error);\n } else {\n subscriber.complete();\n }\n return { closed: true, unsubscribe: () => {} }; // Return dummy subscription as it's already done\n }\n\n // Then, call super._subscribeToSubject to add the observer for future values\n return super._subscribeToSubject(subscriber);\n }\n}\n", "import { AlertFactoryConfig } from './AlertFactoryConfig';\nimport { Alert } from './Alert';\nimport { Inject } from '../decorators/inject/Inject';\nimport { AlertFactory } from './AlertFactory';\nimport { Store } from '@dooboostore/core/message/Store';\nimport { AlertAction } from './AlertAction';\nimport { AlertType } from './AlertType';\nimport { PostConstruct, Sim } from '../decorators/SimDecorator';\nimport { ReplaySubject } from '@dooboostore/core/message/ReplaySubject';\n\nexport namespace AlertService {\n // export const SYMBOL: Symbol | undefined = Symbol('AlertService');\n export type AlertActionContainer<T> = { action: AlertAction; alert: Alert<T> };\n}\n\n@Sim\nexport class AlertService<T> implements Store<AlertService.AlertActionContainer<T>>{\n public name = new Date().toUTCString();\n private subject = new ReplaySubject<AlertService.AlertActionContainer<T>>();\n private alertFactory?: AlertFactory<T>;\n constructor(\n // @ts-ignore\n @Inject({symbol: AlertFactory.SYMBOL}) alertFactory: AlertFactory<T>\n ) {\n this.alertFactory = alertFactory;\n // console.log('%c AlertService constructor 55555', 'color: #ff0000', this.alertFactory)\n // this.observable.subscribe(it => {\n // console.log('subscribe!!!!!selft!', it, this)\n // })\n }\n\n // @PostConstruct\n // postConstruct(\n // ) {\n // this.alertFactory = alertFactory;\n // }\n\n get observable() {\n return this.subject.asObservable();\n }\n\n publish(data: AlertService.AlertActionContainer<T>) {\n // console.log('publicsh------------', data)\n this.subject.next(data);\n }\n\n create(factory: (alert: Alert<T>) => T, config?: AlertFactoryConfig<T>): Alert<T> {\n return new (class extends Alert<T> {\n protected make(): T {\n return factory(this);\n }\n })(this, config);\n }\n\n createFromFactory(type: AlertType, config?: AlertFactoryConfig<T>) {\n return this.alertFactory?.create({ caller: this, type, config: config });\n }\n\n danger(config?: AlertFactoryConfig<T>) {\n // config = config ?? {};\n // config.closeTime ??= AlertService.DEFAULT_CLOSE_TIME;\n return this.createFromFactory(AlertType.DANGER, config) as Alert<T> | undefined;\n }\n\n progress(config?: AlertFactoryConfig<T>) {\n config = config ?? {};\n return this.createFromFactory(AlertType.PROGRESS, config) as Alert<T> | undefined;\n }\n\n success(config?: AlertFactoryConfig<T>) {\n // config = config ?? {};\n // config.closeTime ??= AlertService.DEFAULT_CLOSE_TIME;\n return this.createFromFactory(AlertType.SUCCESS, config) as Alert<T> | undefined;\n }\n info(config?: AlertFactoryConfig<T>) {\n // config = config ?? {};\n // config.closeTime ??= AlertService.DEFAULT_CLOSE_TIME;\n return this.createFromFactory(AlertType.INFO, config) as Alert<T> | undefined;\n }\n error(config?: AlertFactoryConfig<T>) {\n // config = config ?? {};\n // config.closeTime ??= AlertService.DEFAULT_CLOSE_TIME;\n return this.createFromFactory(AlertType.ERROR, config) as Alert<T> | undefined;\n }\n\n warning(config?: AlertFactoryConfig<T>) {\n // config = config ?? {};\n // config.closeTime ??= AlertService.DEFAULT_CLOSE_TIME;\n return this.createFromFactory(AlertType.WARNING, config) as Alert<T> | undefined;\n }\n}", "export type FetcherRequest<TARGET, RESPONSE, CONFIG, RESPONSE_TRANSFORM = RESPONSE> = {\n target: TARGET;\n config?: CONFIG & { hasErrorChecker?: (data: RESPONSE) => any };\n transform?: (data: RESPONSE) => RESPONSE_TRANSFORM;\n errorTransform?: (data?: any) => Promise<any>;\n before?: () => void;\n error?: (e?: any) => void;\n afterSuccess?: () => void;\n finally?: () => void;\n};\n\nexport abstract class Fetcher<TARGET, RESPONSE, CONFIG, PIPE extends { responseData?: RESPONSE }> {\n protected createPipe<T = RESPONSE>(config: FetcherRequest<TARGET, RESPONSE, CONFIG, T>): PIPE {\n return {} as PIPE;\n }\n protected abstract before<T = RESPONSE>(config: FetcherRequest<TARGET, RESPONSE, CONFIG, T>, pipe: PIPE): void;\n protected abstract afterSuccess<T = RESPONSE>(config: FetcherRequest<TARGET, RESPONSE, CONFIG, T>, pipe: PIPE): void;\n protected abstract afterSuccessTransform<T = RESPONSE>(\n config: FetcherRequest<TARGET, RESPONSE, CONFIG, T>,\n pipe: PIPE\n ): void;\n protected abstract finally<T = RESPONSE>(config: FetcherRequest<TARGET, RESPONSE, CONFIG, T>, pipe: PIPE): void;\n protected abstract error<T = RESPONSE>(\n config: FetcherRequest<TARGET, RESPONSE, CONFIG, T>,\n pipe: PIPE,\n e?: any\n ): void;\n\n public fetch<T = RESPONSE>(config: FetcherRequest<TARGET, RESPONSE, CONFIG, T>): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const pipe = this.createPipe(config);\n Promise.resolve()\n .then(() => {\n this.before(config, pipe);\n config?.before?.();\n })\n .then(() => {\n return this.execute(config);\n // return this.execute(config.target, config?.config);\n })\n .then(data => {\n const hasError = config.config?.hasErrorChecker?.(data);\n if (hasError) {\n throw hasError;\n }\n pipe.responseData = data;\n this.afterSuccess(config, pipe);\n config?.afterSuccess?.();\n const gdata = (config?.transform ? config.transform(data) : data) as T;\n this.afterSuccessTransform(config, pipe);\n resolve(gdata);\n })\n .catch(async e => {\n this.error(config, pipe, e);\n config?.error?.();\n if (config?.errorTransform) {\n e = await config.errorTransform(e);\n }\n e = await this.errorTransform(e);\n reject(e);\n })\n .finally(() => {\n this.finally(config, pipe);\n config?.finally?.();\n });\n });\n }\n\n protected abstract errorTransform(e: any): Promise<any>;\n protected abstract execute<T=RESPONSE>(fetcherRequest: FetcherRequest<TARGET, RESPONSE, CONFIG, T>): Promise<RESPONSE>;\n}\n", "import { Fetcher, FetcherRequest } from './Fetcher';\nimport { ConvertUtils } from '../convert/ConvertUtils';\n\nexport type RequestInitType = RequestInit & { timeout?: number };\nexport type RequestInfo = {\n requestInfo: string | URL;\n init: RequestInitType;\n};\nexport type HttpFetcherTarget =\n | URL\n | string\n | { url: URL | string; searchParams?: { [key: string]: any } | URLSearchParams | [string, unknown][] };\nexport type HttpFetcherConfig<CONFIG, RESPONSE = Response> = {\n fetch?: RequestInitType;\n fetcher?: typeof fetch;\n config?: CONFIG;\n allowedResponseNotOk?: boolean;\n beforeProxyFetch?: <T extends RequestInfo | URL>(\n config: BeforeProxyFetchParams<T>\n ) => Promise<BeforeProxyFetchParams<T>>;\n afterProxyFetch?: <T extends RequestInfo | URL>(config: AfterProxyFetchParams<T>) => Promise<Response>;\n skipGlobalBeforeProxyFetch?: boolean;\n skipGlobalAfterProxyFetch?: boolean;\n fetchResponseBeforeCallBack?: (config: HttpFetcherConfig<CONFIG, RESPONSE>) => void;\n fetchResponseAfterCallBack?: (data: Response, config: HttpFetcherConfig<CONFIG, RESPONSE>) => void;\n hasResponseErrorChecker?: (data: Response, config: HttpFetcherConfig<CONFIG, RESPONSE>) => any;\n};\nexport type BeforeProxyFetchParams<T = RequestInfo | URL> = {\n requestInfo: T;\n init?: RequestInit;\n};\nexport type AfterProxyFetchParams<T = RequestInfo | URL> = {\n fetch: {\n target: URL;\n requestInit: RequestInit;\n }\n config: BeforeProxyFetchParams<T>;\n response: Response;\n};\n\nexport type FetchSet = { target: URL, requestInit?: RequestInit };\n\nexport class HttpResponseError<T = any> extends Error {\n public error?: any;\n public body?: T;\n public response?: Response;\n}\n\nexport const isHttpResponseError = (data: any): data is HttpResponseError => {\n return data instanceof HttpResponseError;\n}\n\nexport type HttpFetcherRequest<RESPONSE = Response, CONFIG = any, T = RESPONSE> = FetcherRequest<\n HttpFetcherTarget,\n RESPONSE,\n HttpFetcherConfig<CONFIG, RESPONSE>,\n T\n>\n\nexport class HttpFetcher<\n CONFIG = any,\n RESPONSE = Response,\n PIPE extends { responseData?: RESPONSE | undefined } = any\n> extends Fetcher<HttpFetcherTarget, RESPONSE, HttpFetcherConfig<CONFIG, RESPONSE>, PIPE> {\n get<T = RESPONSE>(config: HttpFetcherRequest<RESPONSE, CONFIG, T>): Promise<T> {\n config.config ??= {};\n config.config.fetch = config.config?.fetch ?? {};\n config.config.fetch.method = 'GET';\n return this.fetch(config);\n }\n\n post<T = RESPONSE>(\n config: HttpFetcherRequest<RESPONSE, CONFIG, T>\n ): Promise<T> {\n config.config ??= {};\n config.config.fetch = config.config?.fetch ?? {};\n config.config.fetch.method = 'POST';\n return this.fetch(config);\n }\n\n patch<T = RESPONSE>(\n config: HttpFetcherRequest<RESPONSE, CONFIG, T>\n ): Promise<T> {\n config.config ??= {};\n config.config.fetch = config.config?.fetch ?? {};\n config.config.fetch.method = 'PATCH';\n return this.fetch(config);\n }\n\n put<T = RESPONSE>(\n config: HttpFetcherRequest<RESPONSE, CONFIG, T>\n ): Promise<T> {\n config.config ??= {};\n config.config.fetch = config.config?.fetch ?? {};\n config.config.fetch.method = 'PUT';\n return this.fetch(config);\n }\n\n head<T = RESPONSE>(\n config: HttpFetcherRequest<RESPONSE, CONFIG, T>\n ): Promise<T> {\n config.config ??= {};\n config.config.fetch = config.config?.fetch ?? {};\n config.config.fetch.method = 'HEAD';\n return this.fetch(config);\n }\n\n delete<T = RESPONSE>(\n config: HttpFetcherRequest<RESPONSE, CONFIG, T>\n ): Promise<T> {\n config.config ??= {};\n config.config.fetch = config.config?.fetch ?? {};\n config.config.fetch.method = 'DELETE';\n return this.fetch(config);\n }\n\n protected async beforeProxyFetch<T = RequestInfo | URL>(\n config: BeforeProxyFetchParams<T>\n ): Promise<BeforeProxyFetchParams<T>> {\n return config;\n }\n\n protected async afterProxyFetch<T = RequestInfo | URL>(config: AfterProxyFetchParams<T>): Promise<Response> {\n return config.response;\n }\n\n protected afterSuccess<T>(\n config: HttpFetcherRequest<RESPONSE, CONFIG, T>,\n pipe: PIPE\n ): void {}\n\n protected afterSuccessTransform<T>(\n config: HttpFetcherRequest<RESPONSE, CONFIG, T>,\n pipe: PIPE\n ): void {}\n\n protected before<T>(\n config: HttpFetcherRequest<RESPONSE, CONFIG, T>,\n pipe: PIPE\n ): void {}\n\n protected error<T>(\n config: HttpFetcherRequest<RESPONSE, CONFIG, T>,\n pipe: PIPE,\n e: any\n ): void {}\n\n protected finally<T>(\n config: HttpFetcherRequest<RESPONSE, CONFIG, T>,\n pipe: PIPE\n ): void {}\n\n protected beforeFetch(fetch: FetchSet): void {}\n\n protected afterFetch(fetch: FetchSet, response: Response): void {}\n\n // protected async errorTransform(e: any): Promise<HttpResponseError<any>> {\n protected async errorTransform(e: any): Promise<HttpResponseError> {\n const httpResponseError = new HttpResponseError<any>();\n httpResponseError.error = e;\n if (e instanceof Response) {\n httpResponseError.response = e;\n try {\n httpResponseError.body = await e.clone().text();\n httpResponseError.message = e.statusText;\n } catch (e: any) {\n httpResponseError.body = e;\n httpResponseError.message = e.message;\n }\n } else {\n httpResponseError.body = e;\n httpResponseError.message = e.message;\n }\n return httpResponseError;\n }\n\n protected async execute<T = RESPONSE>(\n fetcherRequest: HttpFetcherRequest<RESPONSE, CONFIG, T>\n ): Promise<any | RESPONSE> {\n let target = fetcherRequest.target;\n let config = fetcherRequest.config;\n // target data setting\n if (!(target instanceof URL) && typeof target !== 'string') {\n // const url: URL | string = target.url;\n // if (typeof target.url === 'string') {\n // }\n const searchParams = ConvertUtils.toURLSearchParams(target.searchParams ?? {});\n\n try {\n const url = typeof target.url === 'string' ? new URL(target.url) : target.url;\n searchParams.forEach((value, key) => {\n url.searchParams.append(key, value);\n });\n target = url;\n } catch (e) {\n if (typeof (target as any).url === 'string') {\n const searchParamString = searchParams.toString();\n target = (target as any).url + (searchParamString ? '?' + searchParamString : '');\n } else {\n target = '';\n }\n }\n }\n\n // before proxy fetch\n const beforeProxyData = { requestInfo: target, init: config?.fetch } as BeforeProxyFetchParams<URL>;\n let beforeData = config?.beforeProxyFetch\n ? await config?.beforeProxyFetch(config as any)\n : beforeProxyData.requestInfo;\n beforeData = config?.skipGlobalBeforeProxyFetch ? beforeProxyData : await this.beforeProxyFetch(beforeProxyData);\n target = beforeData.requestInfo as URL;\n if (beforeData.init) {\n config ??= {};\n config.fetch = beforeData.init;\n }\n\n let abortedTimeout: NodeJS.Timeout | undefined;\n if (config?.fetch && 'timeout' in config.fetch) {\n const abortController = new AbortController();\n abortedTimeout = setTimeout(() => {\n if (config?.fetch?.signal) {\n const inputSignal = config.fetch.signal;\n const listener = () => {\n if (!abortController.signal.aborted) {\n abortController.abort();\n }\n inputSignal.removeEventListener('abort', listener);\n };\n inputSignal.addEventListener('abort', listener);\n }\n if (!abortController.signal.aborted) {\n abortController.abort();\n }\n }, config.fetch.timeout);\n config.fetch.signal = abortController.signal;\n }\n\n this.beforeFetch({ target, requestInit: config?.fetch });\n return (config.fetcher??fetch)(target, config?.fetch)\n .then(async it => {\n // console.log('httpFetch!!!', Array.from(it.headers))\n this.afterFetch({ target: target as URL, requestInit: config?.fetch }, it);\n // after proxy fetch\n // @ts-ignore\n const afterProxyData: AfterProxyFetchParams<any> = {\n fetch: { target: target as URL, requestInit: config.fetch },\n config: beforeData,\n response: it\n };\n it = config?.afterProxyFetch ? await config.afterProxyFetch(afterProxyData) : it;\n // @ts-ignore\n it = config?.skipGlobalAfterProxyFetch ? it : await this.afterProxyFetch(afterProxyData);\n config?.fetchResponseAfterCallBack?.(it, config);\n if (!config?.allowedResponseNotOk && !it.ok) {\n throw it;\n }\n const data = config?.hasResponseErrorChecker?.(it, config);\n if (data) {\n throw data;\n }\n return it;\n })\n .finally(() => {\n if (abortedTimeout) {\n clearTimeout(abortedTimeout);\n }\n });\n }\n}\n", "import {\n HttpFetcher,\n HttpFetcherConfig,\n HttpFetcherRequest,\n HttpFetcherTarget,\n HttpResponseError,\n RequestInitType\n} from './HttpFetcher';\nimport { FetcherRequest } from './Fetcher';\n\nexport type HttpJsonFetcherConfig<CONFIG, RESPONSE> = HttpFetcherConfig<CONFIG> & {\n bypassTransform?: boolean;\n transformText?: boolean;\n // parsingExceptionDefault?: (e: any) => any;\n executeTransform?: (response: Response) => Promise<RESPONSE>;\n};\nexport type RequestJsonInit = Omit<RequestInitType, 'body'> & { body?: any | null };\n// type RequestJsonInit = Omit<RequestInitType, 'body'>;\nexport type HttpAnyBodyFetcherConfig<C, R> = Omit<HttpJsonFetcherConfig<C, R>, 'fetch'> & { fetch?: RequestJsonInit };\n\n// export class HttpJsonResponseError<T = any> extends HttpResponseError {\n// }\n//\n// export const isHttpJsonResponseError = (data: any): data is HttpJsonResponseError => {\n// return data instanceof HttpJsonResponseError;\n// }\n// export type HttpJsonFetcherRequest<RESPONSE = Response, CONFIG = any, T = RESPONSE> = HttpFetcherRequest<HttpFetcherTarget, RESPONSE, HttpJsonFetcherConfig<CONFIG, RESPONSE>>;\nexport type HttpJsonFetcherRequest<RESPONSE = any, CONFIG = any, T = RESPONSE> = FetcherRequest<\n HttpFetcherTarget,\n RESPONSE,\n HttpJsonFetcherConfig<CONFIG, RESPONSE>,\n T\n>;\n\nexport class HttpJsonFetcher<CONFIG, PIPE extends { responseData?: any }> extends HttpFetcher<CONFIG, any, PIPE> {\n private updateJsonFetchConfigAndData<RESPONSE, T = RESPONSE>(\n config: HttpJsonFetcherRequest<RESPONSE, CONFIG, T>\n ) {\n const headers = {\n 'Content-Type': 'application/json',\n Accept: 'application/json, text/plain, */*'\n };\n config.config ??= {};\n config.config.fetch ??= {};\n config.config.fetch.headers ??= {};\n config.config!.fetch!.headers = {...headers, ...config.config!.fetch?.headers};\n if (config.config?.fetch?.body && typeof config.config?.fetch?.body !== 'string') {\n config.config.fetch.body = JSON.stringify(config.config.fetch.body);\n }\n return config;\n }\n\n get<RESPONSE, T = RESPONSE>(config: HttpJsonFetcherRequest<RESPONSE, CONFIG, T>): Promise<T> {\n return super.get(config);\n }\n\n delete<RESPONSE, T = RESPONSE>(config: HttpJsonFetcherRequest<RESPONSE, CONFIG, T>): Promise<T> {\n return super.delete(config);\n }\n\n post<RESPONSE, T = RESPONSE>(config: HttpJsonFetcherRequest<RESPONSE, CONFIG, T>): Promise<T> {\n return super.post(config);\n }\n\n patch<RESPONSE, T = RESPONSE>(config: HttpJsonFetcherRequest<RESPONSE, CONFIG, T>): Promise<T> {\n return super.patch(config);\n }\n\n put<RESPONSE, T = RESPONSE>(config: HttpJsonFetcherRequest<RESPONSE, CONFIG, T>): Promise<T> {\n return super.put(config);\n }\n\n head<RESPONSE, T = RESPONSE>(config: HttpJsonFetcherRequest<RESPONSE, CONFIG, T>): Promise<T> {\n return super.head(config);\n }\n\n postJson<RESPONSE, T = RESPONSE>(config: HttpJsonFetcherRequest<RESPONSE, CONFIG, T>): Promise<T> {\n return super.post(this.updateJsonFetchConfigAndData(config));\n }\n\n patchJson<RESPONSE, T = RESPONSE>(config: HttpJsonFetcherRequest<RESPONSE, CONFIG, T>): Promise<T> {\n return super.patch(this.updateJsonFetchConfigAndData(config));\n }\n\n putJson<RESPONSE, T = RESPONSE>(config: HttpJsonFetcherRequest<RESPONSE, CONFIG, T>): Promise<T> {\n return super.put(this.updateJsonFetchConfigAndData(config));\n }\n\n protected async errorTransform(e: any): Promise<HttpResponseError> {\n const httpResponseError = new HttpResponseError();\n httpResponseError.error = e;\n if (e instanceof Response) {\n httpResponseError.response = e;\n try {\n httpResponseError.body = await e.clone().json();\n httpResponseError.message = e.statusText;\n } catch (parseError: any) {\n httpResponseError.body = parseError; // Store the parsing error\n httpResponseError.message = parseError.message; // Use parsing error message\n }\n } else {\n httpResponseError.body = e;\n httpResponseError.message = e.message;\n }\n return httpResponseError;\n }\n\n // protected execute(target: HttpFetcherTarget, config?: HttpJsonFetcherConfig<C, any>): Promise<any> {\n protected execute(fetcherRequest: FetcherRequest<HttpFetcherTarget, any, HttpJsonFetcherConfig<CONFIG, any>>): Promise<any> {\n\n return super.execute(fetcherRequest).then((response: Response) => {\n // fetch\uC5D0 \uC788\uB294 content-length\uB294 \uC11C\uBC84\uC5D0\uC11C \uBCF4\uB0B8\uAC12\uC774 0 \uC774\uC5EC\uB3C4 \uC790\uCCB4\uC801\uC73C\uB85C \uB530\uB85C \uD310\uB2E8\uD574\uC11C 0\uC774\uC0C1\uC774 \uB098\uC624\uB294\uACBD\uC6B0\uAC00 \uC788\uB2E4. \uADF8\uB9AC\uACE0 \uC11C\uBC84\uC5D0\uC11C\uC8FC\uB294 header\uAC12\uB3C4 \uBBFF\uAE34 \uC5B4\uB835\uB2E4.\n // const contentLength = response.headers.get('Content-Length');\n // const hasBody = contentLength && parseInt(contentLength, 10) > 0;\n // console.log('hgasbody', hasBody)\n const config = fetcherRequest.config;\n if (config?.bypassTransform) {\n return response;\n }\n if (config?.executeTransform) {\n return config.executeTransform(response);\n } else {\n if (config?.transformText) {\n return response?.text();\n } else {\n return response?.text().then(it => {\n if ((it ?? '').length > 0) {\n return JSON.parse(it);\n }\n })\n }\n }\n });\n // .catch(e => {\n // if (config?.parsingExceptionDefault) {\n // return config.parsingExceptionDefault(e);\n // } else {\n // throw e;\n // }\n // });\n }\n}\n", "import { Sim } from '../decorators/SimDecorator';\nimport { Alert } from '../alert/Alert';\nimport { AlertService } from '../alert/AlertService';\nimport { SimstanceManager } from '../simstance/SimstanceManager';\nimport { isDefined } from '@dooboostore/core/types';\nimport { Subject } from '@dooboostore/core/message/Subject';\nimport { HttpFetcherTarget,HttpFetcherConfig, AfterProxyFetchParams,BeforeProxyFetchParams, FetchSet } from '@dooboostore/core/fetch/HttpFetcher';\nimport { FetcherRequest } from '@dooboostore/core/fetch/Fetcher';\nimport { HttpJsonFetcher, HttpJsonFetcherConfig } from '@dooboostore/core/fetch/HttpJsonFetcher';\n\nexport namespace ApiServiceInterceptor {\n export const TOKEN = Symbol('ApiServiceInterceptor');\n export const resolveAll = (simstanceManager: SimstanceManager):ApiServiceInterceptor[] => {\n try {\n return (simstanceManager.findSims<ApiServiceInterceptor>(ApiServiceInterceptor.TOKEN) ?? []).map(it => it.getValue()).filter(isDefined);\n } catch (e) {\n return [];\n }\n };\n\n export type BeforeProxyExecuteParams = {\n target: HttpFetcherTarget;\n config?: HttpFetcherConfig<ApiService.ApiServiceConfig>;\n };\n}\nexport interface ApiServiceInterceptor {\n afterProxyFetch?<T = RequestInfo | URL>(config: AfterProxyFetchParams<T>): Promise<Response>;\n beforeProxyFetch?<T = RequestInfo | URL>(config: BeforeProxyFetchParams<T>): Promise<BeforeProxyFetchParams<T>>;\n beforeProxyExecute?(config: ApiServiceInterceptor.BeforeProxyExecuteParams): Promise<ApiServiceInterceptor.BeforeProxyExecuteParams>;\n}\n\n\nexport namespace ApiService {\n\n\n\n export type AlertConfig = {\n title?: string;\n alertProgress?: boolean;\n alertSuccessMsg?: boolean;\n alertErrorMsg?: boolean;\n // errorMsgConvert?: (e: unknown) => Promise<string>;\n enableErrorConsole?: boolean;\n };\n export type CallBackConfig = {\n callBackProgress?: (config: FetcherRequest<URL, any, HttpFetcherConfig<ApiServiceConfig>>, pipe: PIPE) => void;\n callBackSuccess?: (config: FetcherRequest<URL, any, HttpFetcherConfig<ApiServiceConfig>>, pipe: PIPE) => void;\n callBackError?: (\n config: FetcherRequest<URL, any, HttpFetcherConfig<ApiServiceConfig>>,\n pipe: PIPE,\n e?: any\n ) => void;\n callBackFinal?: (\n config: FetcherRequest<URL, any, HttpFetcherConfig<ApiServiceConfig>>,\n pipe: PIPE,\n e?: any\n ) => void;\n };\n\n export type ApiServiceConfig = CallBackConfig & AlertConfig;\n\n export type PIPE<T = any> = {\n progress?: Alert<T>;\n responseData?: any;\n };\n export type StoreDataError = {\n type: 'error';\n config: FetcherRequest<URL, any, HttpFetcherConfig<ApiServiceConfig>>;\n pipe: PIPE;\n e: any;\n };\n export type StoreDataSuccess = {\n type: 'success';\n config: FetcherRequest<URL, any, HttpFetcherConfig<ApiServiceConfig>>;\n pipe: PIPE;\n };\n export type StoreDataProgress = {\n type: 'progress';\n config: FetcherRequest<URL, any, HttpFetcherConfig<ApiServiceConfig>>;\n pipe: PIPE;\n };\n export type StoreDataAfterFetch = { type: 'afterFetchData'; response: Response };\n export type StoreDataBeforeFetch<T = RequestInfo | URL> = { type: 'beforeFetchData'; config: BeforeProxyFetchParams<T> };\n export type StoreDataFinal = {\n type: 'final';\n config: FetcherRequest<URL, any, HttpFetcherConfig<ApiServiceConfig>>;\n pipe: PIPE;\n };\n export type StoreBeforeFetch = { type: 'beforeFetch'; fetch: FetchSet };\n export type StoreAfterFetch = { type: 'afterFetch'; fetch: FetchSet, response: Response };\n export type StoreData =\n | StoreDataBeforeFetch\n | StoreDataAfterFetch\n | StoreDataProgress\n | StoreDataSuccess\n | StoreDataError\n | StoreDataFinal\n | StoreBeforeFetch\n | StoreAfterFetch\n\n}\n\nexport const isStoreAfterFetch = (data: ApiService.StoreData): data is ApiService.StoreAfterFetch => {\n return data.type === 'afterFetch';\n}\nexport const isStoreAfterFetchData = (data: ApiService.StoreData): data is ApiService.StoreAfterFetch => {\n return data.type === 'afterFetchData';\n}\nexport const isStoreBeforeFetch = (data: ApiService.StoreData): data is ApiService.StoreBeforeFetch => {\n return data.type === 'beforeFetch';\n}\nexport const isStoreBeforeFetchData = (data: ApiService.StoreData): data is ApiService.StoreBeforeFetch => {\n return data.type === 'beforeFetchData';\n}\nexport const isStoreProgress = (data: ApiService.StoreData): data is ApiService.StoreDataProgress => {\n return data.type === 'progress';\n}\nexport const isStoreSuccess = (data: ApiService.StoreData): data is ApiService.StoreDataSuccess => {\n return data.type === 'success';\n}\nexport const isStoreError = (data: ApiService.StoreData): data is ApiService.StoreDataError => {\n return data.type === 'error';\n}\nexport const isStoreFinal = (data: ApiService.StoreData): data is ApiService.StoreDataFinal => {\n return data.type === 'final';\n}\n\n@Sim\nexport class ApiService extends HttpJsonFetcher<ApiService.ApiServiceConfig, ApiService.PIPE> {\n private subject = new Subject<ApiService.StoreData>();\n private alertService?: AlertService<any>;\n constructor(private simstanceManager: SimstanceManager, alertService: AlertService<any>) {\n super();\n this.alertService = alertService;\n // console.log('%c ApiService constructor', 'color: #ff0000');\n }\n\n // @PostConstruct\n // postConstruct(alertService: AlertService<any>) {\n // this.alertService = alertService;\n // }\n\n get observable() {\n return this.subject.asObservable();\n }\n\n protected createPipe<T = any>(\n config: FetcherRequest<URL, any, HttpFetcherConfig<ApiService.ApiServiceConfig>, T>\n ): ApiService.PIPE {\n return {};\n }\n\n async beforeProxyFetch<T = RequestInfo | URL>(config: BeforeProxyFetchParams<T>) {\n let interceptors = ApiServiceInterceptor.resolveAll(this.simstanceManager);\n for (const interceptor of interceptors) {\n if (interceptor.beforeProxyFetch) {\n config = await interceptor.beforeProxyFetch(config);\n }\n }\n // @ts-ignore\n this.subject.next({ type: 'beforeFetchData', config: config as BeforeProxyFetchParams});\n return config;\n }\n\n async afterProxyFetch<T = RequestInfo | URL>(config: AfterProxyFetchParams<T>) {\n // console.log('afterProxyFetch!!!!11', config);\n let interceptors = ApiServiceInterceptor.resolveAll(this.simstanceManager);\n let r = config.response;\n for (const interceptor of interceptors) {\n if (interceptor.afterProxyFetch) {\n r = await interceptor.afterProxyFetch(config);\n }\n }\n // console.log('afterProxyFetch!!!!22', r);\n this.subject.next({ type: 'afterFetchData', response: r });\n return r;\n }\n\n beforeFetch(fetch: FetchSet): void {\n this.subject.next({type: 'beforeFetch', fetch});\n }\n\n afterFetch(fetch: FetchSet, response: Response): void {\n this.subject.next({type: 'afterFetch', fetch, response});\n }\n\n protected before(\n config: FetcherRequest<URL, any, HttpFetcherConfig<ApiService.ApiServiceConfig>>,\n pipe: ApiService.PIPE\n ) {\n this.subject.next({type: 'progress', config, pipe});\n config.config?.config?.callBackProgress?.(config, pipe);\n if (config.config?.config?.alertProgress) {\n const alert = this.alertService?.progress({title: config.config.config.title});\n if (alert) {\n pipe.progress = alert;\n alert.active();\n }\n }\n }\n\n protected afterSuccess(\n config: FetcherRequest<URL, any, HttpFetcherConfig<ApiService.ApiServiceConfig>>,\n pipe: ApiService.PIPE\n ) {\n this.subject.next({type: 'success', config, pipe});\n config.config?.config?.callBackSuccess?.(config, pipe);\n if (config.config?.config?.alertSuccessMsg) {\n this.alertService?.success({ title: config.config.config.title })?.active();\n }\n }\n\n protected afterSuccessTransform<T>(\n config: FetcherRequest<URL, any, HttpFetcherConfig<ApiService.ApiServiceConfig>, T>,\n pipe: ApiService.PIPE\n ): void {\n }\n\n protected finally(\n config: FetcherRequest<URL, any, HttpFetcherConfig<ApiService.ApiServiceConfig>>,\n pipe: ApiService.PIPE\n ) {\n this.subject.next({type: 'final', config, pipe});\n config.config?.config?.callBackFinal?.(config, pipe);\n pipe.progress?.inActive();\n }\n\n protected error(\n config: FetcherRequest<URL, any, HttpFetcherConfig<ApiService.ApiServiceConfig>>,\n pipe: ApiService.PIPE,\n e?: any\n ) {\n console.log('error', e);\n this.subject.next({type: 'error', config, pipe, e});\n config.config?.config?.callBackError?.(config, pipe, e);\n if (config.config?.config?.alertErrorMsg) {\n this.alertService?.danger({\n title: `${config.config.config.title ? config.config.config.title : ''}${e.message ? `(${e.message})` : ''}`\n })\n ?.active();\n }\n if (config.config?.config?.enableErrorConsole) {\n console.error(`apiService Error ${config?.config?.config?.title}`, e);\n }\n }\n\n protected async execute(\n fetcherRequest: FetcherRequest<HttpFetcherTarget, any, HttpJsonFetcherConfig<ApiService.ApiServiceConfig, any>>\n // target: HttpFetcherTarget,\n // config?: HttpFetcherConfig<ApiService.ApiServiceConfig>\n ): Promise<any> {\n const target = fetcherRequest.target;\n const config = fetcherRequest.config;\n let r: ApiServiceInterceptor.BeforeProxyExecuteParams = {target, config};\n const interceptor = ApiServiceInterceptor.resolveAll(this.simstanceManager) ?? [];\n for (const apiServiceInterceptor of interceptor) {\n if (apiServiceInterceptor.beforeProxyExecute) {\n r = await apiServiceInterceptor.beforeProxyExecute?.(r);\n }\n }\n return super.execute(r);\n }\n}", "import { getSim, Sim } from '@dooboostore/simple-boot/decorators/SimDecorator';\nimport { makeIntentHeaderBySymbol } from '../codes/HttpHeaders';\nimport { ConvertUtils } from '@dooboostore/core/convert/ConvertUtils';\nimport { ApiService } from '@dooboostore/simple-boot/fetch/ApiService';\n\n\nexport type Config<T = any> = { method?:'get' | 'post' | 'petch' | 'delete' | 'head', multipartFormData?: boolean, bypassTransform?: boolean; transformText?: boolean, headers?: HeadersInit, body?: T };\nconst _ = ApiService;\n@Sim\nexport class SymbolIntentApiServiceProxy<T extends object> implements ProxyHandler<T> {\n\n\n constructor(private apiService: ApiService) {\n console.log('-------apiService', apiService);\n }\n\n get(target: T, prop: string | symbol, receiver: any): any {\n const simConfig = getSim(target)\n const apiService = this.apiService;\n const value = Reflect.get(target, prop, receiver);\n if (typeof value === 'function' && simConfig?.symbol) {\n return function (...args: any[]) {\n const f = value as Function;\n const p = (userConfig: Config) => {\n\n const headers = {...(userConfig?.headers ?? {}), ...makeIntentHeaderBySymbol(simConfig.symbol as Symbol)};\n const method = userConfig?.method ?? 'post';\n if(method === 'post' && userConfig?.multipartFormData) {\n return apiService.post({\n target: `/${String(prop)}`,\n config: {\n bypassTransform: userConfig?.bypassTransform,\n transformText: userConfig?.transformText,\n fetch: {\n credentials: 'include',\n headers: headers,\n body: ConvertUtils.toFormData(userConfig?.body)\n }\n }\n });\n } else if (method === 'post') {\n return apiService.postJson({\n target: `/${String(prop)}`,\n config: {\n bypassTransform: userConfig?.bypassTransform,\n transformText: userConfig?.transformText,\n fetch: {\n credentials: 'include',\n headers: headers,\n body: userConfig?.body\n }\n }\n });\n }else if (method === 'petch') {\n return apiService.patchJson({\n target: `/${String(prop)}`,\n config: {\n bypassTransform: userConfig?.bypassTransform,\n transformText: userConfig?.transformText,\n fetch: {\n credentials: 'include',\n headers: headers,\n body: userConfig?.body\n }\n }\n });\n } else {\n return apiService[method]({\n // return apiService.head({\n target: {url: `/${String(prop)}`, searchParams: userConfig?.body},\n config: {\n bypassTransform: userConfig?.bypassTransform,\n transformText: userConfig?.transformText,\n fetch: {\n credentials: 'include',\n headers: headers,\n }\n }\n });\n }\n\n\n\n\n // if (userConfig?.multipartFormData) {\n // return apiService.post({\n // target: `/${String(prop)}`,\n // config: {\n // bypassTransform: userConfig?.bypassTransform,\n // transformText: userConfig?.transformText,\n // fetch: {\n // credentials: 'include',\n // headers: headers,\n // body: ConvertUtils.toFormData(userConfig?.body)\n // }\n // }\n // });\n // } else {\n // return apiService.postJson({\n // target: `/${String(prop)}`,\n // config: {\n // bypassTransform: userConfig?.bypassTransform,\n // transformText: userConfig?.transformText,\n // fetch: {\n // credentials: 'include',\n // headers: headers,\n // body: userConfig?.body\n // }\n // }\n // });\n // }\n\n };\n args.push(p);\n return Reflect.apply(f, target, args);\n // return f.apply(target, args);\n }\n }\n return Reflect.get(target, prop, receiver);\n }\n\n apply(target: T, thisArg: any, argArray: any[]): any {\n console.log('SymbolIntentApiServiceProxy apply')\n // @ts-ignore\n return Reflect.apply(target, thisArg, argArray);\n }\n\n\n\n\n}", "import { getSim, Sim } from '@dooboostore/simple-boot/decorators/SimDecorator';\nimport { makeIntentHeaderBySymbol } from '../codes/HttpHeaders';\nimport { ConvertUtils } from '@dooboostore/core/convert/ConvertUtils';\nimport { ApiService } from '@dooboostore/simple-boot/fetch/ApiService';\n\n\nexport type SymbolIntentApiServiceProxyBaseConfig<T = any> = { method?:'get' | 'post' | 'petch' | 'delete' | 'head', multipartFormData?: boolean, bypassTransform?: boolean; transformText?: boolean, headers?: HeadersInit, body?: T };\n\nexport class SymbolIntentApiServiceProxyBase<T extends object = any> {\n // \uC0DD\uC131\uC790\uB294 \uD504\uB85D\uC2DC\uB420 \uB300\uC0C1 \uAC1D\uCCB4(target)\uC640 \uC758\uC874\uC131\uC744 \uC8FC\uC785\uBC1B\uC2B5\uB2C8\uB2E4.\n constructor(\n apiService: ApiService,\n ) {\n // ProxyHandler \uAC1D\uCCB4\uB97C \uC815\uC758\uD569\uB2C8\uB2E4.\n const handler: ProxyHandler<T> = {\n get(target: T, prop: string | symbol, receiver: any): any {\n const simConfig = getSim(target)\n const value = Reflect.get(target, prop, receiver);\n if (typeof value === 'function' && simConfig?.symbol) {\n return function (...args: any[]) {\n const f = value as Function;\n const p = (userConfig: SymbolIntentApiServiceProxyBaseConfig) => {\n const headers = {...(userConfig?.headers ?? {}), ...makeIntentHeaderBySymbol(simConfig.symbol as Symbol)};\n const method = userConfig?.method ?? 'post';\n if(method === 'post' && userConfig?.multipartFormData) {\n return apiService.post({\n target: `/${String(prop)}`,\n config: {\n bypassTransform: userConfig?.bypassTransform,\n transformText: userConfig?.transformText,\n fetch: {\n credentials: 'include',\n headers: headers,\n body: ConvertUtils.toFormData(userConfig?.body)\n }\n }\n });\n } else if (method === 'post') {\n return apiService.postJson({\n target: `/${String(prop)}`,\n config: {\n bypassTransform: userConfig?.bypassTransform,\n transformText: userConfig?.transformText,\n fetch: {\n credentials: 'include',\n headers: headers,\n body: userConfig?.body\n }\n }\n });\n }else if (method === 'petch') {\n return apiService.patchJson({\n target: `/${String(prop)}`,\n config: {\n bypassTransform: userConfig?.bypassTransform,\n transformText: userConfig?.transformText,\n fetch: {\n credentials: 'include',\n headers: headers,\n body: userConfig?.body\n }\n }\n });\n } else {\n return apiService[method]({\n target: {url: `/${String(prop)}`, searchParams: userConfig?.body},\n config: {\n bypassTransform: userConfig?.bypassTransform,\n transformText: userConfig?.transformText,\n fetch: {\n credentials: 'include',\n headers: headers,\n }\n }\n });\n }\n };\n args.push(p);\n return Reflect.apply(f, target, args);\n }\n }\n return Reflect.get(target, prop, receiver);\n },\n\n apply(target: T, thisArg: any, argArray: any[]): any {\n console.log('SymbolIntentApiServiceProxyBase apply (from handler)');\n // @ts-ignore\n return Reflect.apply(target, thisArg, argArray);\n }\n };\n\n // \uC0DD\uC131\uC790\uC5D0\uC11C Proxy \uAC1D\uCCB4\uB97C \uBC18\uD658\uD569\uB2C8\uB2E4.\n\n // @ts-ignore\n return new Proxy(this, handler);\n }\n}", "import { SimpleBootFront } from '@dooboostore/simple-boot-front/SimpleBootFront';\nimport { ConstructorType } from '@dooboostore/core/types';\nimport { SimFrontOption } from '@dooboostore/simple-boot-front/option/SimFrontOption';\nexport abstract class SimpleBootHttpSSRFactory {\n public abstract factory(simFrontOption: SimFrontOption, using: (ConstructorType<any> | Function)[], domExcludes: ConstructorType<any>[]): Promise<SimpleBootFront> ;\n\n public async create(simFrontOption: SimFrontOption, using: (ConstructorType<any> | Function)[] = [], domExcludes: ConstructorType<any>[] = []): Promise<SimpleBootFront> {\n const front = await this.factory(simFrontOption, using, domExcludes);\n return front;\n }\n}\n", "import { SimpleApplication } from '@dooboostore/simple-boot/SimpleApplication';\nimport { HttpServerOption } from './option/HttpServerOption';\nimport { ConstructorType } from '@dooboostore/core/types';\nimport { IncomingMessage, Server as HttpServer, ServerResponse } from 'http'\nimport { Server as HttpsServer } from 'https'; // Add HTTPS support\nimport { RequestResponse } from './models/RequestResponse';\nimport { getUrlMapping, getUrlMappings, SaveMappingConfig, UrlMappingSituationType } from './decorators/MethodMapping';\nimport { HttpStatus } from './codes/HttpStatus';\nimport { HttpHeaders } from './codes/HttpHeaders';\nimport { Mimes } from './codes/Mimes';\nimport { Filter } from './filters/Filter';\nimport { ExceptionHandlerSituationType, targetExceptionHandler } from '@dooboostore/simple-boot/decorators/exception/ExceptionDecorator';\nimport { getInject, SituationTypeContainer, SituationTypeContainers } from '@dooboostore/simple-boot/decorators/inject/Inject';\nimport { EndPoint } from './endpoints/EndPoint';\nimport { ReflectUtils } from '@dooboostore/core/reflect/ReflectUtils';\nimport { ReqFormUrlBody } from './models/datas/body/ReqFormUrlBody';\nimport { ReqJsonBody } from './models/datas/body/ReqJsonBody';\nimport { ReqHeader } from './models/datas/ReqHeader';\nimport { RouterModule } from '@dooboostore/simple-boot/route/RouterModule';\nimport { ReqMultipartFormBody } from './models/datas/body/ReqMultipartFormBody';\nimport { execValidationInValid, getValidIndex } from '@dooboostore/simple-boot/decorators/validate/Validation';\nimport { ValidException } from '@dooboostore/simple-boot/errors/ValidException';\nimport { HttpError } from './errors/HttpError';\nimport { getRoute } from '@dooboostore/simple-boot/decorators/route/Router';\nimport { OnInit } from './lifecycle/OnInit';\nimport { URLSearchParams } from 'url';\nimport { HttpMethod } from './codes/HttpMethod';\nimport { SessionManager } from './session/SessionManager';\nimport { InjectSituationType } from './inject/InjectSituationType';\n\nexport class SimpleBootHttpServer extends SimpleApplication {\n public server?: HttpServer | HttpsServer;\n private sessionManager: SessionManager;\n constructor(public option: HttpServerOption = new HttpServerOption()) {\n super(option);\n this.sessionManager = new SessionManager(this.option);\n }\n\n\n public run(otherInstanceSim?: Map<ConstructorType<any>, any>) {\n super.run(otherInstanceSim);\n const targets = [...this.option.closeEndPoints ?? [], ...this.option.errorEndPoints ?? [], ...this.option.requestEndPoints ?? [], ...this.option.filters ?? []];\n Promise.all(targets.map(it => (typeof it === 'function' ? this.simstanceManager.getOrNewSim({target:it as ConstructorType<any>}) : it) as OnInit).map(it => it.onInit(this))).then(it => {\n this.startServer();\n });\n return this;\n }\n\n private startServer() {\n\n // const a = this.option.serverOption as HttpsServerOption;\n // this.option.serverOption?.\n\n if (this.option.serverOption && 'key' in this.option.serverOption && 'cert' in this.option.serverOption) {\n this.server = new HttpsServer(this.option.serverOption);\n const httpServer = new HttpServer();\n httpServer.on('request', (req: IncomingMessage, res: ServerResponse) => {\n res.writeHead(301, { Location: `https://${req.headers.host}${req.url}` });\n res.end();\n });\n httpServer.listen(80, this.option.listen.hostname, () => {\n console.log('HTTP redirect server running on port 80');\n });\n } else if (this.option.serverOption) {\n this.server = new HttpServer(this.option.serverOption);\n } else {\n this.server = new HttpServer();\n }\n // const thisRef = this;\n this.server.on('request', async (req: IncomingMessage, res: ServerResponse) => {\n // console.log('request', req.url);\n const transactionManager = this.option.transactionManagerFactory ? await this.option.transactionManagerFactory() : undefined;\n res.on('close', async () => {\n if (this.option.closeEndPoints) {\n for (const it of this.option.closeEndPoints) {\n try {\n const execute = (typeof it === 'function' ? this.simstanceManager.getOrNewSim({target:it}) : it) as EndPoint;\n const endPoint = execute?.endPoint(rr, this);\n if (endPoint instanceof Promise) {\n await endPoint;\n }\n } catch (e) {\n }\n }\n }\n\n if (!rr.resIsDone()) {\n rr.resEnd();\n }\n });\n res.on('error', async () => {\n if (this.option.errorEndPoints) {\n for (const it of this.option.errorEndPoints) {\n try {\n const execute = (typeof it === 'function' ? this.simstanceManager.getOrNewSim({target:it}) : it) as EndPoint;\n const endPoint = execute?.endPoint(rr, this);\n if (endPoint instanceof Promise) {\n await endPoint;\n }\n } catch (e) {\n }\n }\n }\n\n if (!rr.resIsDone()) {\n rr.resEnd();\n }\n });\n\n const rr = new RequestResponse(req, res,{sessionManager: this.sessionManager, option: this.option});\n /*\n default setting first\n */\n rr.resSetHeader(HttpHeaders.Server, 'simple-boot-http-server');\n const cookie = rr.reqCookieGet(this.option.sessionOption.key);\n if (!cookie) {\n const session = await this.sessionManager.session();\n rr.resSetHeader(HttpHeaders.SetCookie, `${this.option.sessionOption.key}=${session.uuid}; Path=/; HttpOnly`);\n }\n\n const otherStorage = new Map<ConstructorType<any>, any>();\n otherStorage.set(RequestResponse, rr);\n otherStorage.set(IncomingMessage, req);\n otherStorage.set(ServerResponse, res);\n try {\n transactionManager?.try();\n if (this.option.requestEndPoints) {\n for (const it of this.option.requestEndPoints) {\n try {\n const execute = (typeof it === 'function' ? this.simstanceManager.getOrNewSim<EndPoint>({target:it}) : it) as EndPoint;\n execute?.endPoint(rr, this);\n } catch (e) {\n }\n }\n }\n\n const filter = {\n carrier: new Map<string, any>(),\n filters: [] as { filter: Filter, sw: boolean }[]\n };\n for (let i = 0; this.option.filters && i < this.option.filters.length; i++) {\n const it = this.option.filters[i];\n const execute = (typeof it === 'function' ? this.simstanceManager.getOrNewSim({target:it}) : it) as Filter;\n let sw = true;\n if (execute?.proceedBefore) {\n sw = await execute.proceedBefore({rr, app: this, carrier: filter.carrier});\n filter.filters.push({filter: execute, sw});\n }\n if (!sw) {\n break;\n }\n }\n\n // body.. something..\n if (!rr.resIsDone()) {\n const routerModule = await super.routing(rr.reqIntent);\n otherStorage.set(RouterModule, routerModule);\n const moduleInstance = routerModule?.getModuleInstance?.();\n let methods: SaveMappingConfig[] = [];\n if (routerModule && moduleInstance) {\n // router \uD074\uB798\uC2A4 \uB0B4\uBD80\uC5D0\uC11C \uC120\uC5B8\uB41C Route\uC77C\uB54C\n if (routerModule.propertyKeys) {\n const map = routerModule.propertyKeys?.map((it: string | symbol) => {\n return {propertyKey: it, config: getUrlMapping(moduleInstance, it)} as SaveMappingConfig\n });\n methods.push(...(map ?? []));\n } else {\n methods.push(...(getUrlMappings(moduleInstance).filter(it => !getRoute(moduleInstance, it.propertyKey)) ?? []));\n }\n\n // options\uB85C \uC694\uCCAD\uC624\uBA74\uC740 allow\uB85C \uB123\uACE0 \uADF8\uB0E5 200\uCC98\uB9AC\uD574\uC57C\uB428.\n if (rr.reqMethod()?.toUpperCase() === HttpMethod.OPTIONS.toUpperCase()) {\n rr.resSetHeader(HttpHeaders.Allow, methods.map(it => it.config.method).join(', '));\n rr.resStatusCode(HttpStatus.Ok);\n }\n\n // method \uCC3E\uAE30\n methods = methods.filter(it => it && it.propertyKey && it.config && rr.reqMethod()?.toUpperCase() === it.config.method.toUpperCase());\n methods.sort((a, b) => {\n return ((b.config?.req?.contentType?.length ?? 0) + (b.config?.req?.accept?.length ?? 0)) - ((a.config?.req?.contentType?.length ?? 0) + (a.config?.req?.accept?.length ?? 0));\n });\n methods = methods\n .filter(it => it.config?.req?.contentType ? (!!it.config?.req?.contentType?.find(sit => rr.reqHasContentTypeHeader(sit))) : true)\n .filter(it => it.config?.req?.accept ? (!!it.config?.req?.accept?.find(sit => rr.reqHasAcceptHeader(sit))) : true);\n\n if (methods[0]) {\n const it = methods[0];\n const paramTypes = ReflectUtils.getParameterTypes(moduleInstance, it.propertyKey)\n const injects = getInject(moduleInstance, it.propertyKey);\n const validIndexs = getValidIndex(moduleInstance, it.propertyKey);\n if (injects) {\n const isJson = injects.find(it => it.config?.situationType === UrlMappingSituationType.REQ_JSON_BODY);\n const isFormUrl = injects.find(it => it.config?.situationType === UrlMappingSituationType.REQ_FORM_URL_BODY);\n const isTransactionManager = injects.find(it => it.config?.situationType === InjectSituationType.TransactionManager);\n const siturationContainers = new SituationTypeContainers();\n if (isJson) {\n let data = await rr.reqBodyJsonData()\n if (isJson.type) {\n data = Object.assign(new isJson.type(), data);\n }\n if (validIndexs.includes(isJson.index)) {\n const inValid = execValidationInValid(data);\n if ((inValid?.length ?? 0) > 0) {\n throw new ValidException(inValid);\n }\n }\n siturationContainers.push(new SituationTypeContainer({\n situationType: UrlMappingSituationType.REQ_JSON_BODY,\n data\n }));\n }\n if (isFormUrl) {\n let data = await rr.reqBodyFormUrlData()\n if (isFormUrl.type) {\n data = Object.assign(new isFormUrl.type(), data);\n }\n if (validIndexs.includes(isFormUrl.index)) {\n const inValid = execValidationInValid(data);\n if ((inValid?.length ?? 0) > 0) {\n throw new ValidException(inValid);\n }\n }\n siturationContainers.push(new SituationTypeContainer({situationType: UrlMappingSituationType.REQ_FORM_URL_BODY, data}));\n }\n\n if (isTransactionManager && isTransactionManager.type && transactionManager && transactionManager.hasTransaction(isTransactionManager.type)) {\n let data = await transactionManager.getTransaction(isTransactionManager.type);\n if (data) {\n data = await data.try(isTransactionManager.config.argument);\n siturationContainers.push(new SituationTypeContainer({situationType: InjectSituationType.TransactionManager, data, index: isTransactionManager.index}));\n }\n }\n if (siturationContainers.length) {\n otherStorage.set(SituationTypeContainers, siturationContainers);\n }\n }\n\n for (const paramType of paramTypes) {\n if (paramType === ReqFormUrlBody) {\n otherStorage.set(ReqFormUrlBody, await rr.reqBodyReqFormUrlBody())\n } else if (paramType === ReqJsonBody) {\n otherStorage.set(ReqJsonBody, await rr.reqBodyReqJsonBody())\n } else if (paramType === URLSearchParams) {\n otherStorage.set(URLSearchParams, rr.reqUrlSearchParams)\n } else if (paramType === ReqMultipartFormBody) {\n otherStorage.set(ReqMultipartFormBody, rr.reqBodyMultipartFormData())\n } else if (paramType === ReqHeader) {\n otherStorage.set(ReqHeader, rr.reqHeaderObj)\n }\n }\n\n // execute !!!\n let data = await this.simstanceManager.executeBindParameterSimPromise({\n target: moduleInstance,\n targetKey: it.propertyKey\n }, otherStorage);\n /*\n \uC5EC\uAE30\uC5D0\uC11C \uC815\uD574\uC9C4 \uD0C0\uC785 \uB9AC\uD134\uC5D0 \uB530\uB978 \uC870\uCE58\n ...\n */\n if (it.config?.resolver) {\n const execute = typeof it.config.resolver === 'function' ? this.simstanceManager.getOrNewSim({target:it.config.resolver}) : it.config.resolver;\n data = await execute?.resolve?.(data, rr);\n }\n const status = it.config?.res?.status ?? HttpStatus.Ok;\n const headers = it.config?.res?.header ?? {};\n if (it.config?.res?.contentType) {\n headers[HttpHeaders.ContentType] = it.config?.res?.contentType;\n }\n if ((it.config?.res?.contentType?.toLowerCase().indexOf(Mimes.ApplicationJson.toLowerCase()) ?? -1) > -1) {\n data = JSON.stringify(data);\n } else if (data && typeof data === 'object') {\n data = JSON.stringify(data);\n }\n rr.resSetHeaders(headers)\n rr.resSetStatusCode(status); \n rr.resWrite(data);\n }\n }\n\n if (this.option.noSuchRouteEndPointMappingThrow && methods.length <= 0 && rr.reqMethod()?.toUpperCase() !== HttpMethod.OPTIONS) {\n throw this.option.noSuchRouteEndPointMappingThrow(rr);\n }\n }\n\n // after\n for (const it of filter.filters.reverse()) {\n if (it.filter?.proceedAfter && !await it.filter.proceedAfter({rr, app:this, before: it.sw, carrier: filter.carrier})) {\n break;\n }\n }\n } catch (e) {\n transactionManager?.catch(e);\n rr.resStatusCode(e instanceof HttpError ? e.status : HttpStatus.InternalServerError)\n const execute = typeof this.option.globalAdvice === 'function' ? this.simstanceManager.getOrNewSim(this.option.globalAdvice) : this.option.globalAdvice;\n if (!execute) {\n rr.resEnd();\n // rr.resEnd().catch(e => {\n // });\n return;\n }\n if (e && typeof e === 'object') {\n otherStorage.set(e.constructor as ConstructorType<any>, e);\n otherStorage.set(SituationTypeContainer, new SituationTypeContainer({\n situationType: ExceptionHandlerSituationType.ERROR_OBJECT,\n data: e\n }));\n }\n const target = targetExceptionHandler(execute, e);\n if (target) {\n await this.simstanceManager.executeBindParameterSimPromise({\n target: execute,\n targetKey: target.propertyKey\n }, otherStorage);\n }\n } finally {\n transactionManager?.finally();\n }\n\n if (!rr.resIsDone()) {\n rr.resEnd();\n }\n });\n\n this.server.listen(this.option.listen.port, this.option.listen.hostname, this.option.listen.backlog, () => {\n this.option.listen.listeningListener?.(this, this.server);\n });\n }\n}\n", "import { IncomingMessage, OutgoingHttpHeader, OutgoingHttpHeaders, ServerResponse } from 'http';\nimport { HttpHeaders, HttpHeadersType } from '../codes/HttpHeaders';\nimport { Mimes } from '../codes/Mimes';\nimport { Intent } from '@dooboostore/simple-boot/intent/Intent';\nimport { URL, URLSearchParams } from 'url';\nimport { Buffer } from 'buffer';\nimport { MultipartData } from './datas/MultipartData';\nimport { ReqFormUrlBody } from './datas/body/ReqFormUrlBody';\nimport { ReqJsonBody } from './datas/body/ReqJsonBody';\nimport { ReqHeader } from './datas/ReqHeader';\nimport { ReqMultipartFormBody } from './datas/body/ReqMultipartFormBody';\nimport { HttpStatus } from '../codes/HttpStatus';\nimport { gzip } from 'node-gzip';\nimport { SessionManager } from '../session/SessionManager';\nimport { HttpServerOption } from '../option/HttpServerOption';\nimport { Blob } from 'node:buffer';\nimport * as fs from 'fs';\nimport * as os from 'os';\nimport { RandomUtils } from '@dooboostore/core/random/RandomUtils';\nimport { FileUtils } from '@dooboostore/core-node/file/FileUtils';\nimport { ConvertUtils as CoreConvertUtils} from '@dooboostore/core/convert/ConvertUtils';\nimport { ConvertUtils } from '@dooboostore/core-node/convert/ConvertUtils';\n// https://masteringjs.io/tutorials/node/http-request\ntype Config = { sessionManager?: SessionManager, option: HttpServerOption };\n\n// https://nodejs.org/ko/docs/guides/anatomy-of-an-http-transaction/\nexport class RequestResponse {\n protected resWriteChunk: string | Buffer | undefined;\n protected reqBodyChunk?: Buffer;\n protected req: IncomingMessage;\n protected res: ServerResponse;\n protected config: Config;\n // protected sessionManager?: SessionManager;\n\n // constructor(req: IncomingMessage, res: ServerResponse);\n // constructor(req: RequestResponse);\n // constructor(req: IncomingMessage, res: ServerResponse, sessionManager?: SessionManager);\n // constructor(req: IncomingMessage | RequestResponse, res?: ServerResponse, sessionManager?: SessionManager) {\n // // this.req = req;\n // // this.res = res;\n // if (req instanceof RequestResponse) {\n // this.req = req.req;\n // this.res = req.res;\n // this.sessionManager = req.sessionManager;\n // } else {\n // this.req = req;\n // this.res = res!;\n // this.sessionManager = sessionManager;\n // }\n // }\n constructor(req: IncomingMessage | RequestResponse, res: ServerResponse, config: Config) {\n // this.req = req;\n // this.res = res;\n if (req instanceof RequestResponse) {\n this.req = req.req;\n this.res = req.res;\n this.config = config;\n } else {\n this.req = req;\n this.res = res!;\n this.config = config;\n }\n }\n\n get reqSocket() {\n return this.req.socket;\n }\n\n get reqCookieMap() {\n let cookies = this.reqHeader(HttpHeaders.Cookie) ?? '';\n if (Array.isArray(cookies)) {\n cookies = cookies.join(';')\n }\n\n const map = new Map<string, string>();\n cookies.split(';').map(it => it.trim().split('=')).forEach(it => {\n map.set(it[0], it[1]);\n });\n return map;\n }\n\n reqCookieGet(key: string) {\n return this.reqCookieMap.get(key);\n }\n\n get reqRemoteAddress(): string | undefined {\n const ipHeader = this.req.headers['x-forwarded-for'];\n let ip = this.req.socket.remoteAddress;\n if (Array.isArray(ipHeader)) {\n ip = ipHeader.join(',').split(',').shift();\n } else if (typeof ipHeader === 'string') {\n ip = ipHeader.split(',').shift();\n }\n return ip;\n }\n\n get reqUrlObject(): URL {\n return new URL(this.reqUrl, `${this.reqSocket ? 'https://' : 'http'}${this.reqHost ?? 'localhost'}`);\n }\n\n get reqUrlPathName(): string {\n // parse(rr.reqUrl ?? '', true)\n return this.reqUrlObj().pathname ?? '';\n }\n\n get reqUrl(): string {\n return this.req.url ?? '';\n }\n\n reqUrlObj(config?:{scheme?: string, host?: string}): URL {\n return new URL(`${config?.scheme??'http' }://${config?.host ? config?.host : (this.reqHeaderFirst(HttpHeaders.Host) ?? 'localhost')}${this.req.url ?? ''}`);\n }\n\n get reqUrlSearchParamTuples(): [string, string][] {\n return Array.from(this.reqUrlObj().searchParams as any);\n }\n\n get reqUrlSearchParams(): URLSearchParams {\n return this.reqUrlObj().searchParams;\n }\n\n get reqUrlSearchParamsObj(): {[p: string]: string | string[]} {\n const entries = this.reqUrlObj().searchParams;\n return CoreConvertUtils.toObject(entries);\n // return obj;\n // return Object.fromEntries(entries as any)\n }\n\n get reqPathSearchParamUrl(): string {\n const reqUrlObj = this.reqUrlObj();\n return reqUrlObj.pathname + (reqUrlObj.searchParams.toString() ? '?' + reqUrlObj.searchParams.toString() : '')\n }\n\n get reqReadable() {\n return this.req.readable;\n }\n\n get reqIntent() {\n return new Intent(this.reqPathSearchParamUrl);\n }\n\n reqHasContentTypeHeader(mime: Mimes | string): boolean {\n return (this.reqHeaderFirst(HttpHeaders.ContentType) ?? '').toLowerCase().indexOf(mime.toLocaleLowerCase()) > -1;\n }\n\n reqHasAcceptHeader(mime: Mimes | string): boolean {\n return (this.reqHeaderFirst(HttpHeaders.Accept) ?? '').toLowerCase().indexOf(mime.toLocaleLowerCase()) > -1;\n }\n\n reqBodyData(): Promise<Buffer> {\n return new Promise<Buffer>((resolve, reject) => {\n if (this.reqReadable) {\n const data: Uint8Array[] = [];\n this.req.on('data', (chunk) => data.push(chunk));\n this.req.on('error', err => reject(err));\n this.req.on('end', () => {\n this.reqBodyChunk = Buffer.concat(data);\n resolve(this.reqBodyChunk);\n });\n } else {\n resolve(this.reqBodyChunk ?? Buffer.alloc(0));\n }\n });\n }\n \n resBodyData(): string | Buffer | undefined{\n return this.resWriteChunk;\n }\n\n\n\n async reqBodyMultipartFormDataObject<T>(): Promise<T> {\n const m = await this.reqBodyMultipartFormData();\n const formData = {} as any;\n\n for (const it of m) {\n if (it.isFile) {\n formData[it.name] = await FileUtils.writeFile(it.value, {originalName: it.filename });\n } else {\n const target = formData[it.name];\n if (Array.isArray(target)) {\n target.push(it.value);\n } else if (typeof target === 'string') {\n formData[it.name] = [target, it.value]\n } else {\n formData[it.name] = it.value;\n }\n }\n };\n return formData;\n }\n\n reqBodyMultipartFormData(): Promise<MultipartData[]> {\n return new Promise((resolve, reject) => {\n const contentTypeHeader = this.req.headers['content-type'];\n if (!contentTypeHeader || !contentTypeHeader.startsWith('multipart/form-data')) {\n return reject(new Error('Invalid Content-Type. Expected multipart/form-data.'));\n }\n\n const boundaryMatch = contentTypeHeader.match(/boundary=(?:\"([^\"]+)\"|([^;]+))/i);\n if (!boundaryMatch) {\n return reject(new Error('Boundary not found in Content-Type header.'));\n }\n const boundary = boundaryMatch[1] || boundaryMatch[2]; // \uB530\uC634\uD45C \uC720\uBB34 \uCC98\uB9AC\n if (!boundary) {\n return reject(new Error('Failed to extract boundary.'));\n }\n\n const boundaryBuffer = Buffer.from(`--${boundary}`);\n const crlfBuffer = Buffer.from('\\r\\n');\n const doubleCrlfBuffer = Buffer.from('\\r\\n\\r\\n'); // \uD5E4\uB354\uC640 \uBC14\uB514 \uAD6C\uBD84\uC790\n\n const chunks: Buffer[] = [];\n let totalLength = 0;\n\n this.req.on('data', (chunk: Buffer) => {\n chunks.push(chunk);\n totalLength += chunk.length;\n });\n\n this.req.on('error', (err) => {\n reject(err);\n });\n\n this.req.on('end', () => {\n if (totalLength === 0) {\n return resolve([]); // \uBE48 \uC694\uCCAD \uCC98\uB9AC\n }\n\n const fullBuffer = Buffer.concat(chunks, totalLength);\n const parsedParts: MultipartData[] = [];\n let currentPosition = 0;\n\n // \uCCAB \uBC88\uC9F8 boundary \uCC3E\uAE30 (\uBCF4\uD1B5 \uC2DC\uC791 \uBD80\uBD84\uC5D0 \uC788\uC74C)\n let boundaryStartIndex = fullBuffer.indexOf(boundaryBuffer, currentPosition);\n if (boundaryStartIndex === -1) {\n return reject(new Error('Initial boundary not found.'));\n }\n // boundary \uBC14\uB85C \uB2E4\uC74C \\r\\n \uAC74\uB108\uB6F0\uAE30\n currentPosition = boundaryStartIndex + boundaryBuffer.length;\n if (fullBuffer.slice(currentPosition, currentPosition + crlfBuffer.length).equals(crlfBuffer)) {\n currentPosition += crlfBuffer.length;\n }\n\n\n while (currentPosition < fullBuffer.length) {\n // \uB2E4\uC74C boundary \uCC3E\uAE30 (\uD30C\uD2B8\uC758 \uB05D)\n const nextBoundaryIndex = fullBuffer.indexOf(boundaryBuffer, currentPosition);\n if (nextBoundaryIndex === -1) {\n // \uB9C8\uC9C0\uB9C9 boundary (--)\uC778\uC9C0 \uD655\uC778 \uD544\uC694\uD558\uB098, \uC5EC\uAE30\uC11C\uB294 \uB2E8\uC21C\uD558\uAC8C \uCC98\uB9AC\n // console.warn('Next boundary not found, assuming end of data or malformed.');\n break;\n }\n\n // \uD604\uC7AC \uD30C\uD2B8 \uB370\uC774\uD130 \uCD94\uCD9C (boundary \uC774\uC804\uAE4C\uC9C0)\n // \uC2E4\uC81C \uD30C\uD2B8 \uB370\uC774\uD130\uB294 \uB2E4\uC74C boundary \uBC14\uB85C \uC55E\uC758 \\r\\n\uC744 \uC81C\uC678\uD574\uC57C \uD568\n let partEndIndex = nextBoundaryIndex;\n if (partEndIndex > crlfBuffer.length && fullBuffer.slice(partEndIndex - crlfBuffer.length, partEndIndex).equals(crlfBuffer)) {\n partEndIndex -= crlfBuffer.length;\n }\n const partBuffer = fullBuffer.slice(currentPosition, partEndIndex);\n\n // \uD5E4\uB354\uC640 \uBC14\uB514 \uBD84\uB9AC\n const headerBodySeparatorIndex = partBuffer.indexOf(doubleCrlfBuffer);\n if (headerBodySeparatorIndex === -1) {\n console.warn('Skipping malformed part: no header/body separator found.');\n currentPosition = nextBoundaryIndex + boundaryBuffer.length;\n if (fullBuffer.slice(currentPosition, currentPosition + crlfBuffer.length).equals(crlfBuffer)) {\n currentPosition += crlfBuffer.length;\n }\n if (fullBuffer.slice(currentPosition, currentPosition + 2).toString() === '--') break; // \uB9C8\uC9C0\uB9C9 boundary\n continue;\n }\n\n const headerBuffer = partBuffer.slice(0, headerBodySeparatorIndex);\n const bodyBuffer = partBuffer.slice(headerBodySeparatorIndex + doubleCrlfBuffer.length);\n const headersStr = headerBuffer.toString('utf-8'); // \uD5E4\uB354\uB294 \uBCF4\uD1B5 ASCII/UTF-8\n\n // \uD5E4\uB354 \uD30C\uC2F1\n const headers: { [key: string]: string } = {};\n headersStr.split('\\r\\n').forEach(line => {\n const colonIndex = line.indexOf(':');\n if (colonIndex > 0) {\n const key = line.substring(0, colonIndex).trim().toLowerCase();\n const value = line.substring(colonIndex + 1).trim();\n headers[key] = value;\n }\n });\n\n const contentDisposition = headers['content-disposition'];\n if (!contentDisposition) {\n console.warn('Skipping part: no Content-Disposition header.');\n currentPosition = nextBoundaryIndex + boundaryBuffer.length;\n if (fullBuffer.slice(currentPosition, currentPosition + crlfBuffer.length).equals(crlfBuffer)) {\n currentPosition += crlfBuffer.length;\n }\n if (fullBuffer.slice(currentPosition, currentPosition + 2).toString() === '--') break;\n continue;\n }\n\n const nameMatch = contentDisposition.match(/name=\"([^\"]+)\"/i);\n const filenameMatch = contentDisposition.match(/filename=\"([^\"]+)\"/i);\n\n const name = nameMatch ? nameMatch[1] : null;\n const filename = filenameMatch ? filenameMatch[1] : null;\n const contentType = headers['content-type'] || null;\n\n if (name) {\n\n const isFile = !!filename;\n // @ts-ignore\n const multipartData:MultipartData = {\n name:name,\n isFile: isFile, // filename\uC774 \uC788\uC73C\uBA74 \uD30C\uC77C\uB85C \uAC04\uC8FC\n filename: filename,\n contentType: contentType,\n value: isFile ? bodyBuffer: bodyBuffer.toString('utf-8'),\n }\n parsedParts.push(multipartData);\n } else {\n console.warn(\"Skipping part: 'name' not found in Content-Disposition.\");\n }\n\n // \uB2E4\uC74C \uD30C\uD2B8 \uC2DC\uC791 \uC704\uCE58\uB85C \uC774\uB3D9\n currentPosition = nextBoundaryIndex + boundaryBuffer.length;\n // boundary \uBC14\uB85C \uB2E4\uC74C \\r\\n \uAC74\uB108\uB6F0\uAE30\n if (fullBuffer.slice(currentPosition, currentPosition + crlfBuffer.length).equals(crlfBuffer)) {\n currentPosition += crlfBuffer.length;\n }\n\n // \uB9C8\uC9C0\uB9C9 boundary (--)\uC778\uC9C0 \uD655\uC778\uD558\uACE0 \uB8E8\uD504 \uC885\uB8CC\n if (fullBuffer.slice(currentPosition, currentPosition + 2).toString() === '--') {\n break;\n }\n }\n resolve(parsedParts);\n });\n })\n // const form = formidable({});\n // return new Promise((resolve, reject) => {\n // form.parse(this.req, (err, fields, files) => {\n // if (err) {\n // reject(err);\n // return;\n // }\n //\n // console.log('----', files)\n // // this.res.set('Content-Type', 'application/json');\n // // ctx.status = 200;\n // // ctx.state = { fields, files };\n // // ctx.body = JSON.stringify(ctx.state, null, 2);\n // resolve(' ' as any);\n // });\n // });\n\n // return new Promise<MultipartData<any>[]>((resolve, reject) => {\n //\n //\n // const contentType = this.req.headers['content-type'];\n // const boundary = contentType.split('boundary=')[1];\n //\n // let body: Uint8Array[] = [];\n // this.req.on('data', chunk => body.push(chunk));\n // this.req.on('end', async () => {\n // const buffer = Buffer.concat(body);\n // // Boundary\uB85C \uD30C\uD2B8 \uBD84\uB9AC\n // const parts = buffer.toString().split(`--${boundary}`).slice(1, -1);\n // let jsonData = {};\n // let fileData = null;\n //\n // for (let part of parts) {\n // const [headerPart, ...bodyParts] = part.split('\\r\\n\\r\\n');\n // const headers = headerPart.split('\\r\\n').reduce((acc, line) => {\n // const [key, value] = line.split(': ').map(s => s.trim().toLowerCase());\n // if (key) acc[key] = value;\n // return acc;\n // }, {});\n //\n // const content = bodyParts.join('\\r\\n\\r\\n').trim();\n // const disposition = headers['content-disposition'];\n // const name = disposition?.match(/name=\"([^\"]+)\"/)?.[1];\n // const filename = disposition?.match(/filename=\"([^\"]+)\"/)?.[1];\n //\n // if (filename) {\n // // \uD30C\uC77C \uB370\uC774\uD130 (Blob)\n // fileData = { filename, contentType: headers['content-type'], data: Buffer.from(content, 'binary') };\n // } else if (name) {\n // // \uD14D\uC2A4\uD2B8 \uB370\uC774\uD130\n // if (name === 'metadata') jsonData = JSON.parse(content);\n // }\n // }\n //\n // // \uD30C\uC77C \uC800\uC7A5\n // if (fileData) {\n //\n //\n //\n //\n // const uploadPath = this.config.option.fileUploadTempPath || os.tmpdir();\n // fs.mkdirSync(uploadPath, { recursive: true }); // \uD3F4\uB354\uAC00 \uC5C6\uC73C\uBA74 \uC0DD\uC131\n // const saveTempPath = `${uploadPath}/${RandomUtils.uuid4()}${fileData.filename}`;\n // console.log('saveTempPathsaveTempPath', saveTempPath)\n // await fs.promises.writeFile(saveTempPath, fileData.data);\n // this.res.writeHead(200, { 'Content-Type': 'application/json' });\n // this.res.end(JSON.stringify({ message: '\uC5C5\uB85C\uB4DC \uC131\uACF5', jsonData, filename: fileData?.filename }));\n // // const uploadPath = this.config.option.fileUploadTempPath ;\n // // fs.mkdirSync(uploadPath, { recursive: true }); // \uD3F4\uB354\uAC00 \uC5C6\uC73C\uBA74 \uC0DD\uC131\n // // await fs.writeFile(`${uploadPath}/${fileData.filename}`, fileData.data);\n // }\n // });\n // });\n }\n\n async reqBodyStringData(): Promise<string> {\n const data = (await this.reqBodyData()).toString()\n return data;\n }\n\n async reqBodyJsonData<T>(): Promise<T> {\n return JSON.parse(await this.reqBodyStringData());\n }\n\n async reqBodyFormUrlData<T>(): Promise<T> {\n const data = (await this.reqBodyStringData())\n const formData = {} as any;\n Array.from(new URLSearchParams(data).entries()).forEach(([k, v]) => {\n const target = formData[k];\n if (Array.isArray(target)) {\n target.push(v);\n } else if (typeof target === 'string') {\n formData[k] = [target, v]\n } else {\n formData[k] = v;\n }\n });\n return formData;\n }\n\n async reqBodyReqFormUrlBody() {\n const data = await this.reqBodyFormUrlData()\n return Object.assign(new ReqFormUrlBody(), data);\n }\n\n async reqBodyReqJsonBody(): Promise<ReqJsonBody> {\n const data = (await this.reqBodyStringData());\n return Object.assign(new ReqJsonBody(), data ? JSON.parse(data) : {})\n }\n\n // reqBodyReqMultipartFormBody(): Promise<ReqMultipartFormBody> {\n // return this.reqBodyMultipartFormData().then(it => new ReqMultipartFormBody(it))\n // }\n\n resBodyJsonData<T>(): (T | null) {\n const data = ConvertUtils.toString(this.resBodyData());\n return data ? JSON.parse(data) : null;\n }\n\n resBodyStringData() {\n return ConvertUtils.toString(this.resBodyData());\n }\n\n reqMethod() {\n return this.req.method?.toUpperCase();\n }\n\n reqHeader(key: keyof typeof HttpHeaders | string) {\n return this.req.headers[key.toLowerCase()];\n }\n\n get reqHost() {\n return this.reqHeaderFirst(HttpHeaders.Host)\n }\n\n get reqHeaderObj(): ReqHeader {\n const h = new ReqHeader();\n Object.entries(this.req.headers).forEach(([k, v]) => {\n h[k] = v;\n });\n return h;\n }\n\n reqHeaderFirst(key: HttpHeadersType | string, defaultValue?: string) {\n const header = this.req.headers[key.toLowerCase()];\n if (header && Array.isArray(header)) {\n return header[0] ?? defaultValue;\n } else {\n return (header as string) ?? defaultValue;\n }\n }\n\n public reqAuthorizationHeader() {\n return this.reqHeaderFirst(HttpHeaders.Authorization);\n }\n\n reqRefreshTokenHeader() {\n return this.reqHeaderFirst(HttpHeaders.Authorization);\n }\n\n resStatusCode(code?: undefined): number;\n // eslint-disable-next-line no-dupe-class-members\n resStatusCode(code: number | HttpStatus): RequestResponseChain<number>;\n // eslint-disable-next-line no-dupe-class-members\n resStatusCode(code: number | undefined | HttpStatus): number | RequestResponseChain<number> {\n if (code) {\n this.res.statusCode = code;\n return new RequestResponseChain<number>(this.req, this.res, this.config, this.res.statusCode);\n } else {\n return this.res.statusCode;\n }\n }\n\n resHeader(key: HttpHeadersType | string) {\n return this.res.getHeader(key.toLowerCase());\n }\n\n resHeaderFirst(key: HttpHeadersType | string, defaultValue?: string) {\n const header = this.res.getHeader(key.toLowerCase());\n if (header && Array.isArray(header)) {\n return header[0] ?? defaultValue;\n } else {\n return (header as string) ?? defaultValue;\n }\n }\n\n async reqSession(): Promise<{ [key: string]: any }> {\n if (this.config.sessionManager) {\n return (await this.config.sessionManager.session(this)).dataSet.data;\n } else {\n return Promise.reject(new Error('Not SessionManager'));\n }\n }\n\n reqSessionSet(key: string, value: any): void {\n (this.reqSession as any)[key] = value;\n }\n\n reqSessionGet<T = any>(key: string): T | undefined {\n const session = this.reqSession as any;\n if (session) {\n return session[key] as T;\n }\n }\n\n resSetStatusCode(statusCode: number) {\n this.res.statusCode = statusCode;\n return this.createRequestResponseChain(this.res.statusCode);\n }\n\n // resEnd() {\n // this.res.end();\n // }\n\n // eslint-disable-next-line no-undef\n resWrite(chunk: string | Buffer | any, encoding: BufferEncoding = 'utf8') {\n this.resWriteChunk = chunk;\n return this.createRequestResponseChain(this.resWriteChunk);\n }\n\n // eslint-disable-next-line no-undef\n resWriteJson(chunk: any, encoding: BufferEncoding = 'utf8') {\n return this.resWrite(JSON.stringify(chunk), encoding);\n }\n\n resSetHeader(key: HttpHeadersType | string, value: string | string[]) {\n return this.createRequestResponseChain(this.res.setHeader(key.toLowerCase(), value));\n }\n\n resAddHeader(key: HttpHeadersType | string, value: string | string[]) {\n const existingValue = this.res.getHeader(key.toLowerCase());\n const newValue = Array.isArray(existingValue)\n ? existingValue.concat(value)\n : existingValue\n ? [existingValue.toString(), ...[].concat(value)]\n : value;\n return this.createRequestResponseChain(this.res.setHeader(key.toLowerCase(), newValue));\n }\n\n resSetHeaders(headers: { [key: string]: string | string[] }) {\n Object.entries(headers).forEach(([key, value]) => this.resSetHeader(key, value));\n return this.createRequestResponseChain();\n }\n\n resAddHeaders(headers: { [key: string]: string | string[] }) {\n Object.entries(headers).forEach(([key, value]) => this.resAddHeader(key, value));\n return this.createRequestResponseChain();\n }\n\n // \uB9C8\uC9C0\uB9C9 \uC885\uB8CC\uB420\uB54C \uD0C0\uB294\uAC70.\n private async resEndChunk() {\n const encoding = this.reqHeaderFirst(HttpHeaders.AcceptEncoding);\n let data = this.resWriteChunk;\n if (encoding?.includes('gzip')) {\n data = await gzip(data);\n this.resSetHeader(HttpHeaders.ContentEncoding, 'gzip');\n }\n this.res.end(data);\n }\n\n async resEnd(chunk?: string | Buffer | Blob | ArrayBuffer | Response) {\n if (chunk instanceof Response) {\n // \uD5E4\uB354\uB97C \uC9C1\uC811 \uC124\uC815\uD558\uC5EC \uCCB4\uC774\uB2DD \uC624\uBC84\uD5E4\uB4DC \uC81C\uAC70\n chunk.headers.forEach((value, key) => {\n this.res.setHeader(`ORIGIN-${key}`, value);\n });\n if (!this.resHeader(HttpHeaders.ContentType)) {\n const contentType = chunk.headers.get(HttpHeaders.ContentType);\n if (contentType) {\n this.res.setHeader(HttpHeaders.ContentType, contentType);\n }\n }\n this.res.statusCode = chunk.status;\n this.resWriteChunk = Buffer.from(await chunk.arrayBuffer());\n } else if (chunk instanceof Blob) {\n this.resWriteChunk = Buffer.from(await chunk.arrayBuffer());\n if (!this.resHeader(HttpHeaders.ContentType)) {\n this.res.setHeader(HttpHeaders.ContentType, chunk.type);\n }\n } else if (chunk instanceof ArrayBuffer) {\n this.resWriteChunk = Buffer.from(chunk);\n } else {\n this.resWriteChunk = chunk ?? this.resWriteChunk;\n }\n\n if (this.req.readable) {\n await this.reqBodyData();\n await this.resEndChunk();\n } else {\n await this.resEndChunk();\n }\n }\n\n // writeContinue(callback?: () => void) {\n // this.res.writeContinue(callback);\n // return new RequestResponseChain(this.req, this.res);\n // }\n\n // reqWrite(chunk?: any) {\n // this.resWriteChunk = chunk;\n // // this.res.write(chunk);\n // return this.createRequestResponseChain();\n // }\n\n resWriteHead(statusCode: number, headers?: OutgoingHttpHeaders | OutgoingHttpHeader[] | { [key: string]: string | string[] }) {\n return this.createRequestResponseChain(this.res.writeHead(statusCode, headers));\n }\n resWriteHeadEnd(statusCode: number, headers?: OutgoingHttpHeaders | OutgoingHttpHeader[] | { [key: string]: string | string[] }) {\n this.createRequestResponseChain(this.res.writeHead(statusCode, headers));\n this.res.end();\n }\n\n resIsDone() {\n return this.res.finished || this.res.writableEnded || this.res.headersSent;\n // return new RequestResponseChain(this.req, this.res, this.res.finished || this.res.writableEnded);\n }\n\n createRequestResponseChain<T = any>(data?: T) {\n const requestResponseChain = new RequestResponseChain(this.req, this.res, this.config, data);\n requestResponseChain.resWriteChunk = this.resWriteChunk;\n requestResponseChain.reqBodyChunk = this.reqBodyChunk;\n return requestResponseChain;\n }\n\n // res.on(\"readable\", () => {\n // console.log('readable???')\n // });\n // res.on('complete', function (details) {\n // var size = details.req.bytes;\n // console.log('complete-->', size)\n // });\n // res.on('finish', function() {\n // console.log('finish??');\n // });\n // res.on('end', () => {\n // console.log('end--?')\n // });\n}\n\nexport class RequestResponseChain<T> extends RequestResponse {\n constructor(req: IncomingMessage, res: ServerResponse, config: Config, public result?: T) {\n super(req, res, config);\n }\n}", "export class ReqFormUrlBody {\n [key: string]: string | string[]\n}", "export class ReqJsonBody {\n [key: string]: any\n}", "import {IncomingHttpHeaders} from 'http';\n\nexport class ReqHeader implements IncomingHttpHeaders {\n [key: string]: string | string[] | undefined;\n\n 'accept-language': string | undefined;\n 'accept-patch': string | undefined;\n 'accept-ranges': string | undefined;\n 'access-control-allow-credentials': string | undefined;\n 'access-control-allow-headers': string | undefined;\n 'access-control-allow-methods': string | undefined;\n 'access-control-allow-origin': string | undefined;\n 'access-control-expose-headers': string | undefined;\n 'access-control-max-age': string | undefined;\n 'access-control-request-headers': string | undefined;\n 'access-control-request-method': string | undefined;\n 'alt-svc': string | undefined;\n 'cache-control': string | undefined;\n 'content-disposition': string | undefined;\n 'content-encoding': string | undefined;\n 'content-language': string | undefined;\n 'content-length': string | undefined;\n 'content-location': string | undefined;\n 'content-range': string | undefined;\n 'content-type': string | undefined;\n 'if-match': string | undefined;\n 'if-modified-since': string | undefined;\n 'if-none-match': string | undefined;\n 'if-unmodified-since': string | undefined;\n 'last-modified': string | undefined;\n 'proxy-authenticate': string | undefined;\n 'proxy-authorization': string | undefined;\n 'public-key-pins': string | undefined;\n 'retry-after': string | undefined;\n 'sec-websocket-accept': string | undefined;\n 'sec-websocket-extensions': string | undefined;\n 'sec-websocket-key': string | undefined;\n 'sec-websocket-protocol': string | undefined;\n 'sec-websocket-version': string | undefined;\n 'set-cookie': string[] | undefined;\n 'strict-transport-security': string | undefined;\n 'transfer-encoding': string | undefined;\n 'user-agent': string | undefined;\n 'www-authenticate': string | undefined;\n accept: string | undefined;\n age: string | undefined;\n allow: string | undefined;\n authorization: string | undefined;\n connection: string | undefined;\n cookie: string | undefined;\n date: string | undefined;\n etag: string | undefined;\n expect: string | undefined;\n expires: string | undefined;\n forwarded: string | undefined;\n from: string | undefined;\n host: string | undefined;\n location: string | undefined;\n origin: string | undefined;\n pragma: string | undefined;\n range: string | undefined;\n referer: string | undefined;\n tk: string | undefined;\n trailer: string | undefined;\n upgrade: string | undefined;\n vary: string | undefined;\n via: string | undefined;\n warning: string | undefined;\n}", "import * as node_os from 'node:os';\n\nimport * as node_fs from 'node:fs';\nimport * as node_path from 'node:path';\nimport { MakeDirectoryOptions, RmDirOptions, RmOptions, WriteFileOptions } from 'fs';\nimport { RandomUtils } from '@dooboostore/core/random/RandomUtils';\n\nexport namespace FileUtils {\n export type PathParamType = string | string[];\n\n\n export class File {\n public size: number | undefined;\n\n constructor(private _data: {\n path: string,\n originalName?: string,\n }) {\n\n this.updateStats();\n }\n\n get originalName(): string | undefined {\n return this._data.originalName;\n }\n\n get directory(): string {\n return this._data.path.substring(0, this._data.path.lastIndexOf('/'));\n }\n\n get fileName(): string {\n return this._data.path.substring(this._data.path.lastIndexOf('/') + 1);\n }\n\n get path(): string {\n return this._data.path;\n }\n\n get extension(): string | undefined {\n const ext = this._data.path.substring(this._data.path.lastIndexOf('.') + 1);\n return ext.length > 0 ? ext : undefined;\n }\n\n async updateStats(): Promise<void> {\n const stats = await node_fs.promises.stat(this._data.path);\n this.size = stats.size;\n }\n\n async delete(): Promise<void> {\n await node_fs.promises.unlink(this._data.path);\n this._data.path = '';\n this.size = undefined;\n }\n\n\n async copy(newPath: string): Promise<void> {\n await node_fs.promises.copyFile(this._data.path, newPath);\n this._data.path = newPath;\n this.size = (await node_fs.promises.stat(newPath)).size;\n }\n\n // path\uC5D0 \uD30C\uC77C\uBA85\uB3C4\uC788\uC5B4\uC57C\uB41C\uB2E4!!\n async move(newPath: string): Promise<void> {\n // newPath\uC758 \uB514\uB809\uD1A0\uB9AC\uAC00 \uC5C6\uC73C\uBA74 \uC0DD\uC131\n const dir = newPath.substring(0, newPath.lastIndexOf('/'));\n await node_fs.promises.mkdir(dir, {recursive: true});\n await node_fs.promises.rename(this._data.path, newPath);\n this._data.path = newPath;\n this.size = (await node_fs.promises.stat(newPath)).size;\n }\n\n async rename(newName: string): Promise<void> {\n const dir = this.directory;\n const newPath = `${dir}/${newName}`;\n await node_fs.promises.rename(this._data.path, newPath);\n this.size = (await node_fs.promises.stat(newPath)).size;\n this._data.path = newPath;\n }\n }\n\n export const writeFile = async (buffer: Buffer, config: { path?: string, originalName?: string }) => {\n config.path ??= `${node_os.tmpdir()}/${RandomUtils.uuid4()}_${Date.now()}`;\n await node_fs.promises.mkdir(config.path.substring(0, config.path.lastIndexOf('/')), {recursive: true});\n await node_fs.promises.writeFile(config.path, buffer);\n return new File({path: config.path, originalName: config.originalName});\n // console.log(`\uD30C\uC77C \uC800\uC7A5 \uC644\uB8CC: ${tempFilePath}`);\n }\n\n\n\n\n export const path = (path: PathParamType) => {\n return Array.isArray(path) ? node_path.join(...path) : path;\n }\n\n export const existsSync = (path: PathParamType, config?: { existes?: (path: string) => void, noExistes?: (path: string) => void }) => {\n const p = FileUtils.path(path);\n if (node_fs.existsSync(p)) {\n config?.existes?.(p);\n return true;\n } else {\n config?.noExistes?.(p);\n return false;\n }\n }\n\n export const mkdirSync = (path: PathParamType, config?: MakeDirectoryOptions) => {\n FileUtils.existsSync(\n path,\n {\n noExistes: (path) => {\n node_fs.mkdirSync(path, config);\n }\n });\n\n }\n\n export const mkdir = async (path: PathParamType, config?: MakeDirectoryOptions): Promise<string> => {\n return new Promise((resolve, reject) => {\n FileUtils.existsSync(\n path,\n {\n noExistes: (path) => {\n node_fs.mkdirSync(path, config);\n resolve(path);\n },\n existes: (path) => {\n resolve(path);\n }\n });\n });\n }\n\n export const readSync = (path: PathParamType, config?: { option?: Parameters<typeof node_fs['readFileSync']>[1] }) => {\n const p = FileUtils.path(path)\n const buffer = config?.option ? node_fs.readFileSync(p, config.option) : node_fs.readFileSync(p);\n // const buffer = node_fs.readFileSync(p);\n return buffer;\n }\n\n export const readAsync = async (path: PathParamType, config?: { option?: Parameters<typeof node_fs.promises.readFile>[1] }) => {\n const p = FileUtils.path(path);\n return node_fs.promises.readFile(p, config?.option);\n }\n\n export const readStringSync = (path: PathParamType): string => {\n const p = FileUtils.path(path);\n return node_fs.readFileSync(p, 'utf-8');\n }\n\n export const readStringAsync = async (path: PathParamType): Promise<string> => {\n const p = FileUtils.path(path);\n return node_fs.promises.readFile(p, 'utf-8');\n }\n\n export const read = async (path: PathParamType, config: { option: Parameters<typeof node_fs['readFile']>[1] }) => {\n const p = FileUtils.path(path);\n return node_fs.readFile(p, config.option);\n }\n\n export const write = (data: string | Buffer, config: {path: PathParamType, options?: WriteFileOptions,}) => {\n const p = FileUtils.path(config.path);\n config.options ? node_fs.writeFileSync(p, data, config.options) : node_fs.writeFileSync(p, data);\n return p;\n }\n\n export const writeAppend = (data: string | Buffer, config: {path: PathParamType, options?: WriteFileOptions}) => {\n const p = FileUtils.path(config.path);\n config.options ? node_fs.appendFileSync(p, data, config.options) : node_fs.appendFileSync(p, data);\n return p;\n }\n\n export const deleteSync = (path: PathParamType, config?: {options?: RmOptions}) => {\n const p = FileUtils.path(path);\n if (FileUtils.existsSync(p)) {\n config?.options ? node_fs.rmSync(p, config?.options) : node_fs.rmSync(p);\n }\n }\n\n export const deleteDirSync = (path: PathParamType, config?: {options?: RmDirOptions}) => {\n const p = FileUtils.path(path);\n if (FileUtils.existsSync(p)) {\n config?.options ? node_fs.rmdirSync(p, config?.options) : node_fs.rmdirSync(p);\n }\n }\n export const deleteFileSync = (path: PathParamType) => {\n const p = FileUtils.path(path);\n if (FileUtils.existsSync(p)) {\n node_fs.unlinkSync(p);\n }\n }\n\n\n export const copySync = (source: PathParamType, destination: PathParamType, options?: Parameters<typeof node_fs.cpSync>[2]) => {\n const srcPath = FileUtils.path(source);\n const destPath = FileUtils.path(destination);\n node_fs.cpSync(srcPath, destPath, options);\n }\n\n}", "export namespace ConvertUtils {\n\n export function toString (data: string): string;\n export function toString (data: string | Buffer): string;\n export function toString (data: Buffer, config?: {encoding?: BufferEncoding, start?: number, end?: number}): string;\n export function toString (data: string | Buffer, config?: {encoding?: BufferEncoding, start?: number, end?: number}) {\n if (data === undefined || data === null) {\n return '';\n } else if (typeof data === 'string') {\n return data;\n } else {\n return data.toString(config?.encoding ?? 'utf-8', config?.start, config?.end );\n }\n\n }\n\n export const toBuffer = (data: string, config?: {encoding: BufferEncoding}): Buffer => {\n if (config?.encoding === 'base64') {\n // const base64Content = base64Data.replace(/^data:.*,/, ''); \uC774\uAC78\uB85C\uD574\uB3C4\uB428\n // base64Data\uAC00 data:image/png;base64,AAAAA... \uC774\uB7F0 \uD615\uD0DC\n data = data.split(';base64,').pop() || '';\n // if (ValidUtils.isBase64(data)) {\n return Buffer.from(data, 'base64');\n // } else {\n // throw new Error(`Invalid data (${config?.encoding})`);\n // }\n } else {\n return Buffer.from(data)\n }\n\n }\n}", "export enum HttpMethod {\n GET = 'GET',\n POST = 'POST',\n PUT = 'PUT',\n DELETE = 'DELETE',\n PATCH = 'PATCH',\n HEAD = 'HEAD',\n OPTIONS = 'OPTIONS',\n TRACE = 'TRACE',\n CONNECT = 'CONNECT',\n}", "import { ConstructorType } from '@dooboostore/core/types';\nimport { ReflectMethod } from '@dooboostore/simple-boot/types/Types';\nimport { ReflectUtils } from '@dooboostore/core/reflect/ReflectUtils';\nimport { Resolver } from '../resolvers/Resolver';\nimport { Mimes } from '../codes/Mimes';\nimport { HttpMethod } from '../codes/HttpMethod';\n\nexport enum UrlMappingSituationType {\n REQ_JSON_BODY = 'SIMPLE_BOOT_HTTP_SERVER://URLMAPPING/REQ_JSON_BODY',\n REQ_FORM_URL_BODY = 'SIMPLE_BOOT_HTTP_SERVER://URLMAPPING/REQ_FORM_URL_BODY'\n}\nexport type MappingConfig = {\n method: HttpMethod | string,\n description?: {\n name?: string;\n detail?: string;\n };\n\n req?: {\n contentType?: (Mimes|string)[];\n accept?: (Mimes|string)[];\n };\n\n res?: {\n status?: number;\n header?: {[key: string]: string};\n contentType?: Mimes | string;\n }\n resolver?: Resolver|ConstructorType<Resolver>;\n}\nexport type SaveMappingConfig = {propertyKey: string | symbol; config: MappingConfig}\nconst MappingMetadataKey = Symbol('MappingMetadataKey');\n// const GETSMappingMetadataKey = Symbol('GET_METHODS');\n// const GETMappingMetadataKey = Symbol('GET_METHOD');\n\nconst process = (config: MappingConfig, target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n const saveMappingConfigs = (ReflectUtils.getMetadata(MappingMetadataKey, target.constructor) ?? []) as SaveMappingConfig[];\n saveMappingConfigs.push({propertyKey, config});\n ReflectUtils.defineMetadata(MappingMetadataKey, saveMappingConfigs, target.constructor);\n ReflectUtils.defineMetadata(MappingMetadataKey, config, target, propertyKey);\n}\nexport function UrlMapping(config: MappingConfig): ReflectMethod;\nexport function UrlMapping(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function UrlMapping(configOrtarget?: MappingConfig | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({method: HttpMethod.GET}, configOrtarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n process(configOrtarget, target, propertyKey, descriptor);\n }\n }\n}\nexport const getUrlMapping = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return ReflectUtils.getMetadata(MappingMetadataKey, target, propertyKey);\n}\n\nexport const getUrlMappings = (target: any): SaveMappingConfig[] => {\n if (target !== null && undefined !== target && typeof target === 'object') {\n target = target.constructor;\n }\n return ReflectUtils.getMetadata(MappingMetadataKey, target);\n}\nexport function GET(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function GET(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function GET(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({method: HttpMethod.GET}, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget.method = HttpMethod.GET;\n process(configOrTarget, target, propertyKey, descriptor);\n }\n }\n}\n\nexport const getGET = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n}\nexport const getGETS = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.GET);\n}\nexport function POST(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function POST(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function POST(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({method: HttpMethod.POST}, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget.method = HttpMethod.POST;\n process(configOrTarget, target, propertyKey, descriptor);\n }\n }\n}\n\nexport const getPOST = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n}\nexport const getPOSTS = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.POST);\n}\nexport function DELETE(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function DELETE(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function DELETE(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({method: HttpMethod.DELETE}, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget.method = HttpMethod.DELETE;\n process(configOrTarget, target, propertyKey, descriptor);\n }\n }\n}\n\nexport const getDELETE = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n}\nexport const getDELETES = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.DELETE);\n}\nexport function PUT(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function PUT(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function PUT(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({method: HttpMethod.PUT}, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget.method = HttpMethod.PUT;\n process(configOrTarget, target, propertyKey, descriptor);\n }\n }\n}\n\nexport const getPUT = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n}\nexport const getPUTS = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.PUT);\n}\nexport function PATCH(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function PATCH(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function PATCH(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({method: HttpMethod.PATCH}, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget.method = HttpMethod.PATCH;\n process(configOrTarget, target, propertyKey, descriptor);\n }\n }\n}\n\nexport const getPATCH = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n}\nexport const getPATCHS = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.GET);\n}\nexport function OPTIONS(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function OPTIONS(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function OPTIONS(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({method: HttpMethod.OPTIONS}, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget.method = HttpMethod.OPTIONS;\n process(configOrTarget, target, propertyKey, descriptor);\n }\n }\n}\n\nexport const getOPTIONS = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n}\nexport const getOPTIONSS = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.OPTIONS);\n}\nexport function HEAD(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function HEAD(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function HEAD(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({method: HttpMethod.HEAD}, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget.method = HttpMethod.HEAD;\n process(configOrTarget, target, propertyKey, descriptor);\n }\n }\n}\n\nexport const getHEAD = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n}\nexport const getHEADS = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.GET);\n}\nexport function TRACE(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function TRACE(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function TRACE(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({method: HttpMethod.TRACE}, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget.method = HttpMethod.TRACE;\n process(configOrTarget, target, propertyKey, descriptor);\n }\n }\n}\n\nexport const getTRACE = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n}\nexport const getTRACES = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.TRACE);\n}\nexport function CONNECT(config: Omit<MappingConfig, 'method'>): ReflectMethod;\nexport function CONNECT(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): void;\nexport function CONNECT(configOrTarget?: Omit<MappingConfig, 'method'> | any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor): ReflectMethod | void {\n if (propertyKey && descriptor) {\n process({method: HttpMethod.CONNECT}, configOrTarget, propertyKey, descriptor);\n } else {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n configOrTarget.method = HttpMethod.CONNECT;\n process(configOrTarget, target, propertyKey, descriptor);\n }\n }\n}\n\nexport const getCONNECT = (target: any, propertyKey: string | symbol): MappingConfig | undefined => {\n return getUrlMapping(target, propertyKey);\n}\nexport const getCONNECTS = (target: any): SaveMappingConfig[] => {\n return getUrlMappings(target)?.filter(it => it.config?.method.toUpperCase() === HttpMethod.CONNECT);\n}\n", "import {MultipartData} from '../MultipartData';\n\nexport class ReqMultipartFormBody {\n constructor(public field: MultipartData[] = []) {\n }\n}", "import { ConstructorType } from '@dooboostore/core/types';\nimport {MethodParameter, ReflectField} from '../../types/Types';\nimport { ReflectUtils } from '@dooboostore/core/reflect/ReflectUtils';\nconst ValidMetadataKey = Symbol('ValidMetadataKey');\nexport const Valid: MethodParameter = (target: Object, propertyKey: string | symbol | undefined, parameterIndex: number) => {\n if (propertyKey && typeof target === 'object') { // <-- object: method\n target = target.constructor;\n const existingRequiredParameters: number[] = Reflect.getOwnMetadata(ValidMetadataKey, target, propertyKey) || [];\n existingRequiredParameters.push(parameterIndex);\n Reflect.defineMetadata(ValidMetadataKey, existingRequiredParameters, target, propertyKey);\n } else if (!propertyKey || typeof target === 'function') { // <-- function: constructor\n const existingRequiredParameters: number[] = Reflect.getOwnMetadata(ValidMetadataKey, target) || [];\n existingRequiredParameters.push(parameterIndex);\n Reflect.defineMetadata(ValidMetadataKey, existingRequiredParameters, target);\n }\n}\n\nexport const getValidIndex = (target: ConstructorType<any> | Function | any, propertyKey?: string | symbol): number[] => {\n if (target !== null && undefined !== target && typeof target === 'object') {\n target = target.constructor;\n }\n if (propertyKey) {\n const parameters: number[] = Reflect.getOwnMetadata(ValidMetadataKey, target, propertyKey);\n return parameters ?? [];\n } else {\n return ReflectUtils.getMetadata(ValidMetadataKey, target) ?? [];\n }\n}\n\nexport type Validator = (value: any, ...params: any[]) => boolean;\nconst ValidationMetadataKey = Symbol('ValidationMetadataKey');\nexport type SaveValidator = {\n propertyKey: string | symbol;\n validator: Validator;\n}\nexport const Validation = (validator: Validator): ReflectField => {\n return (target: Object, propertyKey: string | symbol) => {\n const saves = (ReflectUtils.getMetadata(ValidationMetadataKey, target.constructor) ?? []) as SaveValidator[];\n saves.push({\n propertyKey,\n validator\n });\n ReflectUtils.defineMetadata(ValidationMetadataKey, saves, target.constructor);\n ReflectUtils.defineMetadata(ValidationMetadataKey, validator, target, propertyKey);\n }\n}\n\nexport const getValidator = (target: any, propertyKey: string): Validator | undefined => {\n return ReflectUtils.getMetadata(ValidationMetadataKey, target, propertyKey);\n}\n\nexport const getValidators = (target: any): SaveValidator[] => {\n if (target !== null && undefined !== target && typeof target === 'object') {\n target = target.constructor;\n }\n return ReflectUtils.getMetadata(ValidationMetadataKey, target) ?? [];\n}\n\nexport const Regexp = (regexp: RegExp) => {\n const content: Validator = (value: any, ...params: any[]) => {\n return regexp.test(value);\n };\n return content;\n}\n\nexport const NotNull: Validator = (value: any, ...params: any[]) => {\n return value !== null;\n}\n\nexport const NotEmpty: Validator = (value: any, ...params: any[]) => {\n return value !== null && value !== undefined && (typeof value === 'string' && value.length > 0 || Array.isArray(value) && value.length > 0);\n}\n\nexport type ValidationResult = {\n name: string;\n valid: boolean;\n message?: string;\n}\nexport const execValidationInValid = (obj: any) => {\n return execValidation(obj).filter(it => !it.valid);\n}\n\nexport const execValidation = (obj: any) => {\n const validators = getValidators(obj);\n const reesults: ValidationResult[] = [];\n validators.forEach(it => {\n reesults.push({\n name: it.propertyKey,\n valid: it.validator(it.propertyKey, it),\n message: ''\n } as ValidationResult)\n });\n return reesults;\n}\n", "import {ValidationResult} from '../decorators/validate/Validation';\n\nexport class ValidException {\n constructor(public result: ValidationResult[]) {\n }\n\n toString(): string {\n return this.result ? JSON.stringify(this.result) : 'undefined';\n }\n\n get message() {\n return this.toString();\n }\n}", "import {RandomUtils} from '@dooboostore/core/random/RandomUtils'\nimport {HttpServerOption} from '../option/HttpServerOption';\nimport {RequestResponse} from '../models/RequestResponse';\n\nexport class SessionManager {\n private sessions = new Map<string, { access: number, data?: any }>();\n public sessionOption: { key: string; expiredTime: number, provider?: {uuids: () => Promise<string[]>, delete: (uuid: string) => Promise<void>, get: (uuid: string) => Promise<{ access: number, data?: any }>, set: (uuid: string, data: { access: number, data?: any }) => Promise<void>} };\n\n constructor(private option: HttpServerOption) {\n this.sessionOption = option.sessionOption;\n setInterval(async () => {\n const uuids = (await this.getSessionUUIDs());\n for (const uuid of uuids) {\n const dataSet = await this.getSessionDataSet(uuid);\n if (dataSet && this.isExpired(dataSet.access)) {\n await this.deleteSession(uuid);\n }\n }\n }, this.sessionOption.expiredTime);\n }\n\n async getSessionUUIDs() {\n if (this.sessionOption.provider?.uuids) {\n return this.sessionOption.provider.uuids();\n } else {\n return Array.from(this.sessions.keys());\n }\n }\n\n async deleteSession(uuid: string) {\n if (this.sessionOption.provider?.delete) {\n this.sessionOption.provider.delete(uuid);\n } else {\n this.sessions.delete(uuid);\n }\n }\n\n async getSessionDataSet(uuid: string) {\n if (this.sessionOption.provider?.get) {\n return this.sessionOption.provider.get(uuid);\n } else {\n return this.sessions.get(uuid);\n }\n }\n\n async setSessionDataSet(uuid: string, dataSet: { access: number, data?: any }) {\n if (this.sessionOption.provider?.set) {\n this.sessionOption.provider.set(uuid, dataSet);\n } else {\n this.sessions.set(uuid, dataSet);\n }\n }\n\n isExpired(access: number, now: number = Date.now()) {\n return (now - access) >= this.option.sessionOption.expiredTime;\n }\n\n makeUUID() {\n return RandomUtils.uuid('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');\n }\n\n async session(): Promise<{ uuid: string, dataSet: { access: number, data?: any } }>;\n async session(uuid: string): Promise<{ uuid: string, dataSet: { access: number, data?: any } }>;\n async session(rr: RequestResponse): Promise<{ uuid: string, dataSet: { access: number, data?: any } }>;\n async session(rrOrUUID?: string | RequestResponse): Promise<{ uuid: string, dataSet: { access: number, data?: any } } >{\n let uuid: string;\n if (rrOrUUID instanceof RequestResponse) {\n uuid = rrOrUUID.reqCookieGet(this.sessionOption.key) ?? this.makeUUID();\n } else if (typeof rrOrUUID === 'string') {\n uuid = rrOrUUID;\n } else {\n uuid = this.makeUUID()\n }\n let dataSet = await this.getSessionDataSet(uuid);\n const now = Date.now();\n if (dataSet) {\n if (this.isExpired(dataSet.access, now)) {\n delete dataSet.data;\n }\n dataSet.access = now;\n } else {\n dataSet = {\n access: now\n }\n }\n await this.setSessionDataSet(uuid, dataSet);\n return {uuid, dataSet};\n }\n}", "export namespace InjectSituationType {\n export const TransactionManager = Symbol('TransactionManager');\n}", "import { SimpleBootHttpServer } from '@dooboostore/simple-boot-http-server/SimpleBootHttpServer';\n// import { SimstanceManager } from '@dooboostore/simple-boot/simstance/SimstanceManager';\nimport { HttpSSRServerOption } from './option/HttpSSRServerOption';\nimport { ConstructorType } from '@dooboostore/core/types';\n\nexport class SimpleBootHttpSSRServer extends SimpleBootHttpServer {\n constructor(option?: HttpSSRServerOption) {\n super(option)\n }\n\n run(otherInstanceSim?: Map<ConstructorType<any>, any>) {\n const oi = new Map<ConstructorType<any>, any>()\n otherInstanceSim?.forEach((value, key) => oi.set(key, value));\n return super.run(oi);\n }\n\n // TODO: \uB098\uC911\uC5D0 \uBB50\uB77C\uB3C4..\n stop(){\n\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["gzip", "Mimes", "Mimes", "HttpHeaders", "Mimes", "ReflectUtils", "ValidUtils", "Lifecycle", "target", "ObjectUtils", "filter", "Path", "path", "tokens", "Script", "window", "Expression", "Path", "PublishType", "containers", "propertyKey", "parameterIndex", "ExceptionHandlerSituationType", "MathUtil", "min", "max", "minMax", "sum", "ratio", "x", "bezier", "ConvertUtils", "obj", "join", "RouterAction", "e", "RouterManager", "path", "it", "RandomUtils", "uuid", "hex", "IntentManager", "it", "data", "__decorate", "_a", "_b", "HttpStatus", "IntentSchemeFilter", "HttpHeaders", "Mimes", "__decorate", "_a", "StringUtils", "document", "Promises", "promises", "Result", "p", "ElementUtils", "first", "_EventManager", "window", "context", "filter", "it", "ExecuteState", "value", "target", "event", "data", "DestroyOptionType", "RawSetType", "RawSetOperatorType", "NodeUtils", "FindNodesFilterResult", "filter", "_RawSet", "path", "rawSet", "drAttrs", "first", "NodeFilter", "Node", "r", "element", "it", "currentNode", "message", "node", "_a", "template", "DocumentUtils", "document", "it", "path", "_a", "rawSets", "Node", "value", "EmptyError", "EmptyError", "window", "window", "IntentSchemeFrontProxy", "Mimes", "HttpHeaders", "e", "__decorate", "IntentSchemeServerProxy", "__decorate", "AlertAction", "AlertFactory", "DefaultAlertFactory", "__decorate", "AlertType", "AlertService", "__decorate", "_a", "fetch", "e", "_a", "_b", "ApiServiceInterceptor", "ApiService", "fetch", "__decorate", "_a", "_b", "SymbolIntentApiServiceProxy", "__decorate", "_a", "URL", "URLSearchParams", "Buffer", "FileUtils", "path", "ConvertUtils", "URL", "Buffer", "URLSearchParams", "ConvertUtils", "HttpMethod", "UrlMappingSituationType", "URLSearchParams", "InjectSituationType", "filter", "it", "data", "URLSearchParams"]
|
|
7
7
|
}
|