@angular-wave/angular.ts 0.9.3 → 0.9.5

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.
Files changed (703) hide show
  1. package/@types/angular.d.ts +4 -19
  2. package/@types/animations/animate.d.ts +2 -2
  3. package/@types/animations/animation.d.ts +1 -1
  4. package/@types/core/compile/attributes.d.ts +1 -1
  5. package/@types/core/compile/compile.d.ts +2 -2
  6. package/@types/core/controller/controller.d.ts +1 -1
  7. package/@types/core/controller/interface.d.ts +6 -0
  8. package/@types/core/di/ng-module.d.ts +27 -26
  9. package/@types/core/filter/filter.d.ts +5 -5
  10. package/@types/core/interpolate/interface.d.ts +13 -0
  11. package/@types/core/interpolate/interpolate.d.ts +1 -13
  12. package/@types/core/scope/scope.d.ts +4 -1
  13. package/@types/directive/http/http.d.ts +16 -16
  14. package/@types/directive/http/interface.d.ts +27 -0
  15. package/@types/directive/include/include.d.ts +4 -4
  16. package/@types/directive/inject/inject.d.ts +12 -0
  17. package/@types/directive/model/model.d.ts +1 -1
  18. package/@types/directive/script/script.d.ts +2 -2
  19. package/@types/directive/setter/setter.d.ts +4 -4
  20. package/@types/filters/filter.d.ts +2 -2
  21. package/@types/filters/filters.d.ts +2 -2
  22. package/@types/filters/interface.d.ts +8 -0
  23. package/@types/filters/limit-to.d.ts +2 -2
  24. package/@types/filters/order-by.d.ts +2 -2
  25. package/@types/interface.d.ts +105 -82
  26. package/@types/namespace.d.ts +76 -0
  27. package/@types/router/state/interface.d.ts +8 -8
  28. package/@types/router/state-filters.d.ts +4 -4
  29. package/@types/router/template-factory.d.ts +8 -8
  30. package/@types/router/transition/hook-builder.d.ts +5 -2
  31. package/@types/router/transition/hook-registry.d.ts +11 -2
  32. package/@types/router/transition/transition-service.d.ts +6 -2
  33. package/@types/router/transition/transition.d.ts +2 -2
  34. package/@types/router/view/view.d.ts +1 -8
  35. package/@types/router/view-scroll.d.ts +4 -2
  36. package/@types/services/{anchor-scroll.d.ts → anchor-scroll/anchor-scroll.d.ts} +2 -2
  37. package/@types/services/exception/exception-handler.d.ts +2 -2
  38. package/@types/services/exception/interface.d.ts +1 -1
  39. package/@types/services/http/http.d.ts +40 -2
  40. package/@types/services/http/interface.d.ts +11 -0
  41. package/@types/services/location/location.d.ts +1 -4
  42. package/@types/services/sce/sce.d.ts +3 -4
  43. package/@types/services/template-cache/template-cache.d.ts +4 -4
  44. package/@types/services/template-request/interface.d.ts +22 -0
  45. package/@types/services/{template-request.d.ts → template-request/template-request.d.ts} +4 -7
  46. package/@types/shared/common.d.ts +8 -69
  47. package/@types/shared/hof.d.ts +7 -7
  48. package/dist/angular-ts.esm.js +510 -570
  49. package/dist/angular-ts.umd.js +510 -570
  50. package/dist/angular-ts.umd.min.js +1 -1
  51. package/package.json +8 -1
  52. package/.github/workflows/ci.yml +0 -104
  53. package/.github/workflows/gh-pages.yml +0 -75
  54. package/.husky/pre-commit +0 -5
  55. package/.prettierignore +0 -9
  56. package/@types/services/cookie-reader.d.ts +0 -4
  57. package/@types/services/http-backend/http-backend.d.ts +0 -58
  58. package/@types/services/template-cache/interface.d.ts +0 -10
  59. package/CHANGELOG.md +0 -17667
  60. package/CODE_OF_CONDUCT.md +0 -3
  61. package/CONTRIBUTING.md +0 -247
  62. package/DEVELOPERS.md +0 -499
  63. package/Makefile +0 -60
  64. package/RELEASE.md +0 -86
  65. package/TRIAGING.md +0 -127
  66. package/docs/.cspell.yml +0 -8
  67. package/docs/.github/dependabot.yml +0 -14
  68. package/docs/.nvmrc +0 -1
  69. package/docs/CONTRIBUTING.md +0 -28
  70. package/docs/Dockerfile +0 -4
  71. package/docs/LICENSE +0 -201
  72. package/docs/README.md +0 -217
  73. package/docs/assets/icons/logo.svg +0 -1
  74. package/docs/assets/scss/_variables_project.scss +0 -12
  75. package/docs/assets/scss/_variables_project_after_bs.scss +0 -8
  76. package/docs/assets/scss/index.scss +0 -48
  77. package/docs/config.yaml +0 -15
  78. package/docs/content/_index.md +0 -28
  79. package/docs/content/docs/_index.md +0 -61
  80. package/docs/content/docs/directive/_index.md +0 -4
  81. package/docs/content/docs/directive/app.md +0 -11
  82. package/docs/content/docs/directive/aria.md +0 -0
  83. package/docs/content/docs/directive/bind.md +0 -72
  84. package/docs/content/docs/directive/blur.md +0 -38
  85. package/docs/content/docs/directive/channel.md +0 -37
  86. package/docs/content/docs/directive/class-even.md +0 -47
  87. package/docs/content/docs/directive/class-odd.md +0 -48
  88. package/docs/content/docs/directive/class.md +0 -64
  89. package/docs/content/docs/directive/click.md +0 -41
  90. package/docs/content/docs/directive/cloak.md +0 -74
  91. package/docs/content/docs/directive/copy.md +0 -38
  92. package/docs/content/docs/directive/cut.md +0 -40
  93. package/docs/content/docs/directive/dblclick.md +0 -41
  94. package/docs/content/docs/directive/focus.md +0 -38
  95. package/docs/content/docs/directive/get.md +0 -203
  96. package/docs/content/docs/directive/include.md +0 -7
  97. package/docs/content/docs/directive/keydown.md +0 -38
  98. package/docs/content/docs/directive/keyup.md +0 -38
  99. package/docs/content/docs/directive/load.md +0 -43
  100. package/docs/content/docs/directive/mousedown.md +0 -38
  101. package/docs/content/docs/directive/mouseenter.md +0 -38
  102. package/docs/content/docs/directive/mouseleave.md +0 -38
  103. package/docs/content/docs/directive/mousemove.md +0 -38
  104. package/docs/content/docs/directive/mouseout.md +0 -38
  105. package/docs/content/docs/directive/mouseover.md +0 -38
  106. package/docs/content/docs/directive/mouseup.md +0 -38
  107. package/docs/content/docs/directive/non-bindable.md +0 -28
  108. package/docs/content/docs/filter/_index.md +0 -4
  109. package/docs/content/docs/provider/_index.md +0 -4
  110. package/docs/content/docs/provider/eventBusProvider.md +0 -35
  111. package/docs/content/docs/provider/locationProvider.md +0 -26
  112. package/docs/content/docs/provider/logProvider.md +0 -59
  113. package/docs/content/docs/provider/templateCacheProvider.md +0 -100
  114. package/docs/content/docs/service/_index.md +0 -4
  115. package/docs/content/docs/service/eventBus.md +0 -56
  116. package/docs/content/docs/service/location.md +0 -57
  117. package/docs/content/docs/service/log.md +0 -113
  118. package/docs/content/docs/service/templateCache.md +0 -64
  119. package/docs/content/docs/service/url.md +0 -5
  120. package/docs/docker-compose.yaml +0 -12
  121. package/docs/docsy.work +0 -5
  122. package/docs/docsy.work.sum +0 -0
  123. package/docs/go.mod +0 -5
  124. package/docs/go.sum +0 -6
  125. package/docs/hugo-disabled.toml +0 -220
  126. package/docs/hugo.yaml +0 -200
  127. package/docs/layouts/404.html +0 -13
  128. package/docs/layouts/_markup/render-heading.html +0 -1
  129. package/docs/layouts/partials/hooks/head-end.html +0 -3
  130. package/docs/layouts/shortcodes/showcss.html +0 -2
  131. package/docs/layouts/shortcodes/showhtml.html +0 -2
  132. package/docs/layouts/shortcodes/showjs.html +0 -2
  133. package/docs/layouts/shortcodes/showraw.html +0 -1
  134. package/docs/layouts/shortcodes/version.html +0 -1
  135. package/docs/package-lock.json +0 -2293
  136. package/docs/package.json +0 -53
  137. package/docs/static/examples/counter/counter-test.html +0 -13
  138. package/docs/static/examples/counter/counter.html +0 -5
  139. package/docs/static/examples/counter/counter.test.js +0 -28
  140. package/docs/static/examples/eventbus/eventbus-test.html +0 -15
  141. package/docs/static/examples/eventbus/eventbus.html +0 -13
  142. package/docs/static/examples/eventbus/eventbus.js +0 -15
  143. package/docs/static/examples/eventbus/eventbus.test.js +0 -19
  144. package/docs/static/examples/ng-bind/ng-bind.html +0 -9
  145. package/docs/static/examples/ng-blur/ng-blur.html +0 -9
  146. package/docs/static/examples/ng-channel/ng-channel-test.html +0 -17
  147. package/docs/static/examples/ng-channel/ng-channel.html +0 -24
  148. package/docs/static/examples/ng-channel/ng-channel.test.js +0 -31
  149. package/docs/static/examples/ng-class/ng-class.html +0 -71
  150. package/docs/static/examples/ng-class-even/ng-class-even.html +0 -8
  151. package/docs/static/examples/ng-class-odd/ng-class-odd.html +0 -8
  152. package/docs/static/examples/ng-click/ng-click.html +0 -6
  153. package/docs/static/examples/ng-copy/ng-copy.html +0 -6
  154. package/docs/static/examples/ng-cut/ng-cut.html +0 -6
  155. package/docs/static/examples/ng-dblclick/ng-dblclick.html +0 -10
  156. package/docs/static/examples/ng-focus/ng-focus.html +0 -9
  157. package/docs/static/examples/ng-keydown/ng-keydown.html +0 -9
  158. package/docs/static/examples/ng-keyup/ng-keyup.html +0 -9
  159. package/docs/static/examples/ng-load/ng-load.html +0 -8
  160. package/docs/static/examples/ng-mousedown/ng-mousedown.html +0 -6
  161. package/docs/static/examples/ng-mouseenter/ng-mouseenter.html +0 -4
  162. package/docs/static/examples/ng-mouseleave/ng-mouseleave.html +0 -4
  163. package/docs/static/examples/ng-mousemove/ng-mousemove.html +0 -4
  164. package/docs/static/examples/ng-mouseout/ng-mouseout.html +0 -4
  165. package/docs/static/examples/ng-mouseover/ng-mouseover.html +0 -4
  166. package/docs/static/examples/ng-mouseup/ng-mouseup.html +0 -4
  167. package/docs/static/examples/ng-non-bindable/ng-non-bindable-test.html +0 -13
  168. package/docs/static/examples/ng-non-bindable/ng-non-bindable.html +0 -3
  169. package/docs/static/examples/ng-non-bindable/ng-non-bindable.test.js +0 -11
  170. package/docs/static/typedoc/.nojekyll +0 -1
  171. package/docs/static/typedoc/assets/hierarchy.js +0 -1
  172. package/docs/static/typedoc/assets/highlight.css +0 -78
  173. package/docs/static/typedoc/assets/icons.js +0 -18
  174. package/docs/static/typedoc/assets/icons.svg +0 -1
  175. package/docs/static/typedoc/assets/main.js +0 -60
  176. package/docs/static/typedoc/assets/navigation.js +0 -1
  177. package/docs/static/typedoc/assets/search.js +0 -1
  178. package/docs/static/typedoc/assets/style.css +0 -1633
  179. package/docs/static/typedoc/classes/Location.html +0 -55
  180. package/docs/static/typedoc/classes/LocationProvider.html +0 -20
  181. package/docs/static/typedoc/classes/LogProvider.html +0 -6
  182. package/docs/static/typedoc/classes/PubSub.html +0 -71
  183. package/docs/static/typedoc/classes/PubSubProvider.html +0 -3
  184. package/docs/static/typedoc/classes/TemplateCacheProvider.html +0 -5
  185. package/docs/static/typedoc/hierarchy.html +0 -1
  186. package/docs/static/typedoc/index.html +0 -1
  187. package/docs/static/typedoc/interfaces/ChangesObject.html +0 -6
  188. package/docs/static/typedoc/interfaces/ComponentOptions.html +0 -16
  189. package/docs/static/typedoc/interfaces/Controller.html +0 -12
  190. package/docs/static/typedoc/interfaces/DefaultPorts.html +0 -5
  191. package/docs/static/typedoc/interfaces/Directive.html +0 -37
  192. package/docs/static/typedoc/interfaces/DirectivePrePost.html +0 -4
  193. package/docs/static/typedoc/interfaces/Html5Mode.html +0 -23
  194. package/docs/static/typedoc/interfaces/HttpHeadersGetter.html +0 -1
  195. package/docs/static/typedoc/interfaces/HttpProviderDefaults.html +0 -31
  196. package/docs/static/typedoc/interfaces/HttpRequestConfigHeaders.html +0 -6
  197. package/docs/static/typedoc/interfaces/HttpRequestTransformer.html +0 -1
  198. package/docs/static/typedoc/interfaces/HttpResponse.html +0 -7
  199. package/docs/static/typedoc/interfaces/HttpResponseTransformer.html +0 -1
  200. package/docs/static/typedoc/interfaces/HttpService.html +0 -38
  201. package/docs/static/typedoc/interfaces/LogService.html +0 -12
  202. package/docs/static/typedoc/interfaces/NgModelController.html +0 -30
  203. package/docs/static/typedoc/interfaces/NgModelOptions.html +0 -16
  204. package/docs/static/typedoc/interfaces/Provider.html +0 -34
  205. package/docs/static/typedoc/interfaces/RequestConfig.html +0 -48
  206. package/docs/static/typedoc/interfaces/RequestShortcutConfig.html +0 -38
  207. package/docs/static/typedoc/interfaces/ServiceProvider.html +0 -5
  208. package/docs/static/typedoc/interfaces/TemplateCache.html +0 -7
  209. package/docs/static/typedoc/interfaces/TranscludeFunctionObject.html +0 -8
  210. package/docs/static/typedoc/interfaces/UrlParts.html +0 -9
  211. package/docs/static/typedoc/types/AnnotatedDirectiveFactory.html +0 -1
  212. package/docs/static/typedoc/types/AnnotatedFactory.html +0 -8
  213. package/docs/static/typedoc/types/CloneAttachFunction.html +0 -2
  214. package/docs/static/typedoc/types/ControllerConstructor.html +0 -2
  215. package/docs/static/typedoc/types/DirectiveCompileFn.html +0 -2
  216. package/docs/static/typedoc/types/DirectiveController.html +0 -2
  217. package/docs/static/typedoc/types/DirectiveFactory.html +0 -1
  218. package/docs/static/typedoc/types/DirectiveFactoryFn.html +0 -1
  219. package/docs/static/typedoc/types/DirectiveLinkFn.html +0 -2
  220. package/docs/static/typedoc/types/ExpandoStore.html +0 -2
  221. package/docs/static/typedoc/types/Expression.html +0 -6
  222. package/docs/static/typedoc/types/FilterFactory.html +0 -2
  223. package/docs/static/typedoc/types/FilterFn.html +0 -2
  224. package/docs/static/typedoc/types/HttpPromise.html +0 -1
  225. package/docs/static/typedoc/types/HttpResponseStatus.html +0 -1
  226. package/docs/static/typedoc/types/Injectable.html +0 -4
  227. package/docs/static/typedoc/types/InjectableClass.html +0 -1
  228. package/docs/static/typedoc/types/InjectableFactory.html +0 -1
  229. package/docs/static/typedoc/types/LogCall.html +0 -2
  230. package/docs/static/typedoc/types/LogServiceFactory.html +0 -2
  231. package/docs/static/typedoc/types/OnChangesObject.html +0 -2
  232. package/docs/static/typedoc/types/SwapModeType.html +0 -2
  233. package/docs/static/typedoc/types/TController.html +0 -2
  234. package/docs/static/typedoc/types/UrlChangeListener.html +0 -5
  235. package/docs/static/typedoc/variables/EventBus.html +0 -1
  236. package/docs/static/typedoc/variables/SwapMode.html +0 -11
  237. package/docs/static/version.js +0 -13
  238. package/docs/test-results/.last-run.json +0 -4
  239. package/docs/test-results/static-examples-counter-counter-counter-example/error-context.md +0 -50
  240. package/eslint.config.js +0 -26
  241. package/images/android-chrome-192x192.png +0 -0
  242. package/images/android-chrome-512x512.png +0 -0
  243. package/images/apple-touch-icon.png +0 -0
  244. package/images/favicon-16x16.png +0 -0
  245. package/images/favicon-32x32.png +0 -0
  246. package/images/favicon.ico +0 -0
  247. package/images/site.webmanifest +0 -19
  248. package/index.html +0 -86
  249. package/legacy.d.ts +0 -2599
  250. package/playwright.config.ts +0 -81
  251. package/public/jasmine/boot0.js +0 -66
  252. package/public/jasmine/boot1.js +0 -134
  253. package/public/jasmine/jasmine-html.js +0 -970
  254. package/public/jasmine/jasmine.css +0 -323
  255. package/public/jasmine/jasmine.js +0 -11406
  256. package/public/public/README.md +0 -1
  257. package/public/public/circle.html +0 -1
  258. package/public/public/jasmine-helper.css +0 -9
  259. package/public/public/my_child_directive.html +0 -1
  260. package/public/public/my_directive.html +0 -1
  261. package/public/public/my_other_directive.html +0 -1
  262. package/public/public/test.html +0 -1
  263. package/rollup.config.js +0 -51
  264. package/src/angular.js +0 -293
  265. package/src/angular.spec.js +0 -1191
  266. package/src/animations/animate-cache.js +0 -80
  267. package/src/animations/animate-children-directive.js +0 -32
  268. package/src/animations/animate-children-directive.md +0 -80
  269. package/src/animations/animate-css-driver.js +0 -284
  270. package/src/animations/animate-css.html +0 -58
  271. package/src/animations/animate-css.js +0 -915
  272. package/src/animations/animate-css.md +0 -263
  273. package/src/animations/animate-js-driver.js +0 -60
  274. package/src/animations/animate-js.html +0 -47
  275. package/src/animations/animate-js.js +0 -371
  276. package/src/animations/animate-queue.js +0 -859
  277. package/src/animations/animate-runner.js +0 -193
  278. package/src/animations/animate-swap.js +0 -33
  279. package/src/animations/animate-swap.md +0 -88
  280. package/src/animations/animate.html +0 -19
  281. package/src/animations/animate.js +0 -546
  282. package/src/animations/animate.md +0 -933
  283. package/src/animations/animate.spec.js +0 -490
  284. package/src/animations/animation.js +0 -519
  285. package/src/animations/animations.test.js +0 -10
  286. package/src/animations/interface.ts +0 -19
  287. package/src/animations/raf-scheduler.html +0 -19
  288. package/src/animations/raf-scheduler.js +0 -92
  289. package/src/animations/raf-scheduler.spec.js +0 -98
  290. package/src/animations/shared.js +0 -341
  291. package/src/binding.html +0 -19
  292. package/src/binding.spec.js +0 -474
  293. package/src/binding.test.js +0 -10
  294. package/src/core/compile/attributes.js +0 -337
  295. package/src/core/compile/compile.html +0 -19
  296. package/src/core/compile/compile.js +0 -3270
  297. package/src/core/compile/compile.md +0 -1128
  298. package/src/core/compile/compile.spec.js +0 -15574
  299. package/src/core/compile/compile.test.js +0 -12
  300. package/src/core/controller/controller.html +0 -22
  301. package/src/core/controller/controller.js +0 -189
  302. package/src/core/controller/controller.spec.js +0 -334
  303. package/src/core/controller/controller.test.js +0 -12
  304. package/src/core/core.html +0 -20
  305. package/src/core/core.test.js +0 -12
  306. package/src/core/di/injector.html +0 -19
  307. package/src/core/di/injector.js +0 -307
  308. package/src/core/di/injector.md +0 -740
  309. package/src/core/di/injector.spec.js +0 -2310
  310. package/src/core/di/injector.test.js +0 -12
  311. package/src/core/di/internal-injector.js +0 -284
  312. package/src/core/di/ng-module.html +0 -19
  313. package/src/core/di/ng-module.js +0 -226
  314. package/src/core/di/ng-module.spec.js +0 -263
  315. package/src/core/di/ng-module.test.js +0 -12
  316. package/src/core/filter/filter.html +0 -19
  317. package/src/core/filter/filter.js +0 -55
  318. package/src/core/filter/filter.md +0 -132
  319. package/src/core/filter/filter.spec.js +0 -149
  320. package/src/core/filter/filter.test.js +0 -12
  321. package/src/core/interpolate/interpolate.html +0 -22
  322. package/src/core/interpolate/interpolate.js +0 -408
  323. package/src/core/interpolate/interpolate.spec.js +0 -601
  324. package/src/core/interpolate/interpolate.test.js +0 -12
  325. package/src/core/parse/ast/ast-node.ts +0 -81
  326. package/src/core/parse/ast/ast.html +0 -19
  327. package/src/core/parse/ast/ast.js +0 -574
  328. package/src/core/parse/ast/ast.spec.js +0 -1453
  329. package/src/core/parse/ast/ast.test.js +0 -10
  330. package/src/core/parse/ast-type.js +0 -23
  331. package/src/core/parse/interface.ts +0 -84
  332. package/src/core/parse/interpreter.js +0 -915
  333. package/src/core/parse/lexer/lexer.html +0 -19
  334. package/src/core/parse/lexer/lexer.js +0 -338
  335. package/src/core/parse/lexer/lexer.spec.js +0 -303
  336. package/src/core/parse/lexer/lexer.test.js +0 -10
  337. package/src/core/parse/lexer/token.ts +0 -22
  338. package/src/core/parse/parse.html +0 -19
  339. package/src/core/parse/parse.js +0 -337
  340. package/src/core/parse/parse.md +0 -57
  341. package/src/core/parse/parse.spec.js +0 -2107
  342. package/src/core/parse/parse.test.js +0 -10
  343. package/src/core/parse/parser/parser.html +0 -19
  344. package/src/core/parse/parser/parser.js +0 -64
  345. package/src/core/parse/parser/parser.spec.js +0 -8
  346. package/src/core/parse/parser/parser.test.js +0 -10
  347. package/src/core/prop.spec.js +0 -775
  348. package/src/core/root-element.spec.js +0 -14
  349. package/src/core/sanitize/interface.ts +0 -10
  350. package/src/core/sanitize/sanitize-uri.js +0 -75
  351. package/src/core/sanitize/sanitize-uri.spec.js +0 -249
  352. package/src/core/sanitize/sanitize-uri.test.js +0 -12
  353. package/src/core/sanitize/sanitize.html +0 -22
  354. package/src/core/scope/scope.html +0 -19
  355. package/src/core/scope/scope.js +0 -1249
  356. package/src/core/scope/scope.spec.js +0 -3000
  357. package/src/core/scope/scope.test.js +0 -12
  358. package/src/directive/aria/aria.html +0 -19
  359. package/src/directive/aria/aria.js +0 -382
  360. package/src/directive/aria/aria.md +0 -145
  361. package/src/directive/aria/aria.spec.js +0 -1241
  362. package/src/directive/aria/aria.test.js +0 -12
  363. package/src/directive/attrs/attrs.html +0 -19
  364. package/src/directive/attrs/attrs.js +0 -106
  365. package/src/directive/attrs/attrs.md +0 -224
  366. package/src/directive/attrs/attrs.spec.js +0 -71
  367. package/src/directive/attrs/attrs.test.js +0 -12
  368. package/src/directive/attrs/boolean.html +0 -19
  369. package/src/directive/attrs/boolean.spec.js +0 -137
  370. package/src/directive/attrs/boolean.test.js +0 -12
  371. package/src/directive/attrs/element-style.html +0 -22
  372. package/src/directive/attrs/element-style.spec.js +0 -85
  373. package/src/directive/attrs/element-style.test.js +0 -12
  374. package/src/directive/attrs/src.html +0 -19
  375. package/src/directive/attrs/src.spec.js +0 -163
  376. package/src/directive/attrs/src.test.js +0 -12
  377. package/src/directive/bind/bind-html.spec.js +0 -36
  378. package/src/directive/bind/bind.html +0 -20
  379. package/src/directive/bind/bind.js +0 -78
  380. package/src/directive/bind/bind.md +0 -142
  381. package/src/directive/bind/bind.spec.js +0 -314
  382. package/src/directive/bind/bind.test.js +0 -12
  383. package/src/directive/channel/channel.html +0 -19
  384. package/src/directive/channel/channel.js +0 -30
  385. package/src/directive/channel/channel.spec.js +0 -67
  386. package/src/directive/channel/channel.test.js +0 -10
  387. package/src/directive/class/class-test.html +0 -23
  388. package/src/directive/class/class.html +0 -19
  389. package/src/directive/class/class.js +0 -184
  390. package/src/directive/class/class.spec.js +0 -704
  391. package/src/directive/class/class.test.js +0 -12
  392. package/src/directive/cloak/cloak.html +0 -19
  393. package/src/directive/cloak/cloak.js +0 -11
  394. package/src/directive/cloak/cloak.spec.js +0 -44
  395. package/src/directive/cloak/cloak.test.js +0 -12
  396. package/src/directive/controller/controller.html +0 -22
  397. package/src/directive/controller/controller.js +0 -11
  398. package/src/directive/controller/controller.md +0 -46
  399. package/src/directive/controller/controller.spec.js +0 -175
  400. package/src/directive/controller/controller.test.js +0 -12
  401. package/src/directive/events/click.spec.js +0 -35
  402. package/src/directive/events/event.spec.js +0 -267
  403. package/src/directive/events/events-test.html +0 -36
  404. package/src/directive/events/events.html +0 -20
  405. package/src/directive/events/events.js +0 -65
  406. package/src/directive/events/events.md +0 -125
  407. package/src/directive/events/events.test.js +0 -12
  408. package/src/directive/form/form.html +0 -19
  409. package/src/directive/form/form.js +0 -669
  410. package/src/directive/form/form.spec.js +0 -1515
  411. package/src/directive/form/form.test.js +0 -12
  412. package/src/directive/http/delete.spec.js +0 -26
  413. package/src/directive/http/form-router-test.html +0 -44
  414. package/src/directive/http/form-test.html +0 -18
  415. package/src/directive/http/get.spec.js +0 -488
  416. package/src/directive/http/http.html +0 -22
  417. package/src/directive/http/http.js +0 -342
  418. package/src/directive/http/http.test.js +0 -12
  419. package/src/directive/http/post-example.html +0 -30
  420. package/src/directive/http/post.spec.js +0 -521
  421. package/src/directive/http/put.spec.js +0 -26
  422. package/src/directive/if/if-animate-css.html +0 -57
  423. package/src/directive/if/if-animate-svg.html +0 -25
  424. package/src/directive/if/if.html +0 -19
  425. package/src/directive/if/if.js +0 -72
  426. package/src/directive/if/if.md +0 -76
  427. package/src/directive/if/if.spec.js +0 -293
  428. package/src/directive/if/if.test.js +0 -114
  429. package/src/directive/include/include.html +0 -19
  430. package/src/directive/include/include.js +0 -151
  431. package/src/directive/include/include.md +0 -87
  432. package/src/directive/include/include.spec.js +0 -734
  433. package/src/directive/include/include.test.js +0 -12
  434. package/src/directive/init/init.html +0 -19
  435. package/src/directive/init/init.js +0 -22
  436. package/src/directive/init/init.md +0 -41
  437. package/src/directive/init/init.spec.js +0 -68
  438. package/src/directive/init/init.test.js +0 -12
  439. package/src/directive/input/input-example.html +0 -15
  440. package/src/directive/input/input.html +0 -19
  441. package/src/directive/input/input.js +0 -1078
  442. package/src/directive/input/input.md +0 -706
  443. package/src/directive/input/input.spec.js +0 -3700
  444. package/src/directive/input/input.test.js +0 -12
  445. package/src/directive/messages/messages.html +0 -22
  446. package/src/directive/messages/messages.js +0 -349
  447. package/src/directive/messages/messages.md +0 -543
  448. package/src/directive/messages/messages.spec.js +0 -1083
  449. package/src/directive/messages/messages.test.js +0 -12
  450. package/src/directive/model/change.md +0 -25
  451. package/src/directive/model/model.html +0 -19
  452. package/src/directive/model/model.js +0 -1170
  453. package/src/directive/model/model.spec.js +0 -1976
  454. package/src/directive/model/model.test.js +0 -12
  455. package/src/directive/model-options/model-option.test.js +0 -12
  456. package/src/directive/model-options/model-options.html +0 -22
  457. package/src/directive/model-options/model-options.js +0 -142
  458. package/src/directive/model-options/model-options.md +0 -407
  459. package/src/directive/model-options/model-options.spec.js +0 -1022
  460. package/src/directive/non-bindable/non-bindable.html +0 -22
  461. package/src/directive/non-bindable/non-bindable.js +0 -9
  462. package/src/directive/non-bindable/non-bindable.spec.js +0 -59
  463. package/src/directive/non-bindable/non-bindable.test.js +0 -12
  464. package/src/directive/observe/observe-demo.html +0 -184
  465. package/src/directive/observe/observe.html +0 -19
  466. package/src/directive/observe/observe.js +0 -41
  467. package/src/directive/observe/observe.spec.js +0 -106
  468. package/src/directive/observe/observe.test.js +0 -10
  469. package/src/directive/on/on.html +0 -19
  470. package/src/directive/on/on.spec.js +0 -215
  471. package/src/directive/on/on.test.js +0 -12
  472. package/src/directive/options/options-example.html +0 -17
  473. package/src/directive/options/options.html +0 -22
  474. package/src/directive/options/options.js +0 -542
  475. package/src/directive/options/options.md +0 -179
  476. package/src/directive/options/options.spec.js +0 -3554
  477. package/src/directive/options/options.test.js +0 -12
  478. package/src/directive/ref/href.html +0 -19
  479. package/src/directive/ref/href.spec.js +0 -141
  480. package/src/directive/ref/href.test.js +0 -19
  481. package/src/directive/ref/ref.html +0 -19
  482. package/src/directive/ref/ref.js +0 -89
  483. package/src/directive/ref/ref.spec.js +0 -546
  484. package/src/directive/repeat/repeat.html +0 -19
  485. package/src/directive/repeat/repeat.js +0 -333
  486. package/src/directive/repeat/repeat.md +0 -330
  487. package/src/directive/repeat/repeat.spec.js +0 -1209
  488. package/src/directive/repeat/repeat.test.js +0 -12
  489. package/src/directive/script/script.html +0 -19
  490. package/src/directive/script/script.js +0 -17
  491. package/src/directive/script/script.md +0 -11
  492. package/src/directive/script/script.spec.js +0 -47
  493. package/src/directive/script/script.test.js +0 -12
  494. package/src/directive/select/select.html +0 -19
  495. package/src/directive/select/select.js +0 -594
  496. package/src/directive/select/select.md +0 -74
  497. package/src/directive/select/select.spec.js +0 -2566
  498. package/src/directive/select/select.test.js +0 -12
  499. package/src/directive/setter/setter.html +0 -19
  500. package/src/directive/setter/setter.js +0 -59
  501. package/src/directive/setter/setter.spec.js +0 -100
  502. package/src/directive/setter/setter.test.js +0 -12
  503. package/src/directive/show-hide/show-hide.html +0 -22
  504. package/src/directive/show-hide/show-hide.js +0 -65
  505. package/src/directive/show-hide/show-hide.md +0 -255
  506. package/src/directive/show-hide/show-hide.spec.js +0 -268
  507. package/src/directive/show-hide/show-hide.test.js +0 -12
  508. package/src/directive/style/style.html +0 -19
  509. package/src/directive/style/style.js +0 -27
  510. package/src/directive/style/style.md +0 -23
  511. package/src/directive/style/style.spec.js +0 -183
  512. package/src/directive/style/style.test.js +0 -12
  513. package/src/directive/switch/switch.html +0 -19
  514. package/src/directive/switch/switch.js +0 -133
  515. package/src/directive/switch/switch.md +0 -66
  516. package/src/directive/switch/switch.spec.js +0 -509
  517. package/src/directive/switch/switch.test.js +0 -12
  518. package/src/directive/transclude/transclude.js +0 -122
  519. package/src/directive/validators/validators.html +0 -22
  520. package/src/directive/validators/validators.js +0 -346
  521. package/src/directive/validators/validators.spec.js +0 -740
  522. package/src/directive/validators/validators.test.js +0 -12
  523. package/src/filters/filter.js +0 -213
  524. package/src/filters/filter.md +0 -69
  525. package/src/filters/filter.spec.js +0 -719
  526. package/src/filters/filters.html +0 -22
  527. package/src/filters/filters.js +0 -239
  528. package/src/filters/filters.spec.js +0 -36
  529. package/src/filters/filters.test.js +0 -12
  530. package/src/filters/json.md +0 -16
  531. package/src/filters/limit-to.js +0 -55
  532. package/src/filters/limit-to.md +0 -19
  533. package/src/filters/limit-to.spec.js +0 -252
  534. package/src/filters/order-by.js +0 -181
  535. package/src/filters/order-by.md +0 -83
  536. package/src/filters/order-by.spec.js +0 -883
  537. package/src/index.js +0 -6
  538. package/src/index.spec.js +0 -11
  539. package/src/injection-tokens.js +0 -78
  540. package/src/interface.ts +0 -421
  541. package/src/ng.js +0 -289
  542. package/src/ng.spec.js +0 -33
  543. package/src/router/common/trace.js +0 -240
  544. package/src/router/directives/component-example.html +0 -37
  545. package/src/router/directives/state-directives.html +0 -22
  546. package/src/router/directives/state-directives.js +0 -393
  547. package/src/router/directives/state-directives.md +0 -435
  548. package/src/router/directives/state-directives.spec.js +0 -1091
  549. package/src/router/directives/state-directives.test.js +0 -10
  550. package/src/router/directives/view-directive.js +0 -489
  551. package/src/router/directives/view-directive.spec.js +0 -1937
  552. package/src/router/directives/view-directive.test.js +0 -10
  553. package/src/router/directives/view-directives.html +0 -22
  554. package/src/router/glob/glob.html +0 -19
  555. package/src/router/glob/glob.js +0 -102
  556. package/src/router/glob/glob.spec.js +0 -108
  557. package/src/router/glob/glob.test.js +0 -12
  558. package/src/router/hooks/core-resolvables.js +0 -38
  559. package/src/router/hooks/ignored-transition.js +0 -25
  560. package/src/router/hooks/invalid-transition.js +0 -14
  561. package/src/router/hooks/lazy-load.js +0 -104
  562. package/src/router/hooks/on-enter-exit-retain.js +0 -55
  563. package/src/router/hooks/redirect-to.js +0 -38
  564. package/src/router/hooks/resolve.js +0 -57
  565. package/src/router/hooks/update-globals.js +0 -34
  566. package/src/router/hooks/url.js +0 -34
  567. package/src/router/hooks/views.js +0 -41
  568. package/src/router/params/interface.ts +0 -626
  569. package/src/router/params/param-factory.js +0 -23
  570. package/src/router/params/param-type.js +0 -133
  571. package/src/router/params/param-types.js +0 -153
  572. package/src/router/params/param.js +0 -243
  573. package/src/router/params/state-params.js +0 -36
  574. package/src/router/path/path-node.js +0 -78
  575. package/src/router/path/path-utils.js +0 -207
  576. package/src/router/resolve/interface.ts +0 -208
  577. package/src/router/resolve/resolvable.js +0 -123
  578. package/src/router/resolve/resolve-context.js +0 -190
  579. package/src/router/router-test-hashbang.html +0 -45
  580. package/src/router/router-test.html +0 -41
  581. package/src/router/router.html +0 -22
  582. package/src/router/router.js +0 -54
  583. package/src/router/router.test.js +0 -12
  584. package/src/router/services.spec.js +0 -52
  585. package/src/router/state/README.md +0 -21
  586. package/src/router/state/interface.ts +0 -1007
  587. package/src/router/state/state-builder.js +0 -376
  588. package/src/router/state/state-builder.spec.js +0 -86
  589. package/src/router/state/state-matcher.js +0 -64
  590. package/src/router/state/state-object.js +0 -118
  591. package/src/router/state/state-queue-manager.js +0 -95
  592. package/src/router/state/state-registry.js +0 -257
  593. package/src/router/state/state-service.js +0 -699
  594. package/src/router/state/state.html +0 -23
  595. package/src/router/state/state.spec.js +0 -1002
  596. package/src/router/state/state.test.js +0 -12
  597. package/src/router/state/target-state.js +0 -162
  598. package/src/router/state/views.js +0 -195
  599. package/src/router/state-filter.spec.js +0 -139
  600. package/src/router/state-filters.js +0 -46
  601. package/src/router/template-factory.html +0 -19
  602. package/src/router/template-factory.js +0 -249
  603. package/src/router/template-factory.spec.js +0 -155
  604. package/src/router/template-factory.test.js +0 -12
  605. package/src/router/transition/hook-builder.js +0 -133
  606. package/src/router/transition/hook-registry.js +0 -172
  607. package/src/router/transition/interface.js +0 -18
  608. package/src/router/transition/interface.ts +0 -922
  609. package/src/router/transition/reject-factory.js +0 -122
  610. package/src/router/transition/transition-event-type.js +0 -26
  611. package/src/router/transition/transition-hook.js +0 -199
  612. package/src/router/transition/transition-service.js +0 -302
  613. package/src/router/transition/transition.js +0 -652
  614. package/src/router/url/url-config.js +0 -155
  615. package/src/router/url/url-matcher.js +0 -532
  616. package/src/router/url/url-rule.js +0 -231
  617. package/src/router/url/url-rules.js +0 -350
  618. package/src/router/url/url-service.js +0 -446
  619. package/src/router/url/url-service.spec.js +0 -1288
  620. package/src/router/url/url.html +0 -19
  621. package/src/router/url/url.test.js +0 -12
  622. package/src/router/view/interface.ts +0 -51
  623. package/src/router/view/view.html +0 -19
  624. package/src/router/view/view.js +0 -274
  625. package/src/router/view/view.spec.js +0 -100
  626. package/src/router/view/view.test.js +0 -12
  627. package/src/router/view-hook.spec.js +0 -215
  628. package/src/router/view-scroll.js +0 -33
  629. package/src/router/view-scroll.spec.js +0 -72
  630. package/src/services/anchor-scroll.html +0 -76
  631. package/src/services/anchor-scroll.js +0 -147
  632. package/src/services/cookie-reader.js +0 -48
  633. package/src/services/exception/exception-handler.js +0 -75
  634. package/src/services/exception/interface.ts +0 -7
  635. package/src/services/http/http.html +0 -23
  636. package/src/services/http/http.js +0 -922
  637. package/src/services/http/http.md +0 -413
  638. package/src/services/http/http.spec.js +0 -3941
  639. package/src/services/http/http.test.js +0 -11
  640. package/src/services/http/interface.ts +0 -243
  641. package/src/services/http/template-request.spec.js +0 -220
  642. package/src/services/http-backend/http-backend.html +0 -22
  643. package/src/services/http-backend/http-backend.js +0 -158
  644. package/src/services/http-backend/http-backend.spec.js +0 -389
  645. package/src/services/http-backend/http-backend.test.js +0 -12
  646. package/src/services/location/interface.ts +0 -70
  647. package/src/services/location/location.html +0 -22
  648. package/src/services/location/location.js +0 -1006
  649. package/src/services/location/location.spec.js +0 -3792
  650. package/src/services/location/location.test.js +0 -12
  651. package/src/services/log/interface.ts +0 -39
  652. package/src/services/log/log.html +0 -19
  653. package/src/services/log/log.js +0 -74
  654. package/src/services/log/log.spec.js +0 -64
  655. package/src/services/log/log.test.js +0 -12
  656. package/src/services/pubsub/pubsub.html +0 -19
  657. package/src/services/pubsub/pubsub.js +0 -349
  658. package/src/services/pubsub/pubsub.spec.js +0 -400
  659. package/src/services/pubsub/pubsub.test.js +0 -12
  660. package/src/services/sce/sce.html +0 -19
  661. package/src/services/sce/sce.js +0 -847
  662. package/src/services/sce/sce.md +0 -300
  663. package/src/services/sce/sce.spec.js +0 -617
  664. package/src/services/sce/sce.test.js +0 -12
  665. package/src/services/template-cache/interface.ts +0 -10
  666. package/src/services/template-cache/template-cache.html +0 -22
  667. package/src/services/template-cache/template-cache.js +0 -15
  668. package/src/services/template-cache/template-cache.spec.js +0 -134
  669. package/src/services/template-cache/template-cache.test.js +0 -12
  670. package/src/services/template-request.js +0 -142
  671. package/src/shared/cache.js +0 -7
  672. package/src/shared/common.js +0 -438
  673. package/src/shared/common.spec.js +0 -294
  674. package/src/shared/constants.js +0 -21
  675. package/src/shared/dom.js +0 -716
  676. package/src/shared/hof.js +0 -151
  677. package/src/shared/hof.spec.js +0 -60
  678. package/src/shared/interface.ts +0 -21
  679. package/src/shared/min-err.spec.js +0 -178
  680. package/src/shared/noderef.js +0 -225
  681. package/src/shared/predicates.js +0 -34
  682. package/src/shared/queue.js +0 -105
  683. package/src/shared/queue.spec.js +0 -80
  684. package/src/shared/shared.html +0 -24
  685. package/src/shared/shared.test.js +0 -12
  686. package/src/shared/strings.js +0 -142
  687. package/src/shared/strings.spec.js +0 -40
  688. package/src/shared/test-utils.js +0 -47
  689. package/src/shared/url-utils/interface.ts +0 -54
  690. package/src/shared/url-utils/url-utils.html +0 -22
  691. package/src/shared/url-utils/url-utils.js +0 -122
  692. package/src/shared/url-utils/url-utils.spec.js +0 -148
  693. package/src/shared/url-utils/url-utils.test.js +0 -12
  694. package/src/shared/utils.js +0 -1255
  695. package/src/shared/utils.spec.js +0 -178
  696. package/src/src.html +0 -21
  697. package/src/src.test.js +0 -10
  698. package/tsconfig.json +0 -19
  699. package/tsconfig.types.json +0 -14
  700. package/typedoc.json +0 -8
  701. package/utils/express.js +0 -203
  702. package/utils/version.cjs +0 -23
  703. package/vite.config.js +0 -14
@@ -1,1249 +0,0 @@
1
- import {
2
- assert,
3
- concat,
4
- hasOwn,
5
- isDefined,
6
- isFunction,
7
- isNull,
8
- isObject,
9
- isProxy,
10
- isProxySymbol,
11
- isString,
12
- isUndefined,
13
- nextUid,
14
- } from "../../shared/utils.js";
15
- import { ASTType } from "../parse/ast-type.js";
16
-
17
- /**
18
- * @type {number}
19
- */
20
- let uid = 0;
21
-
22
- export function nextId() {
23
- uid += 1;
24
- return uid;
25
- }
26
-
27
- /**
28
- * @type {import('../parse/interface.ts').ParseService}
29
- */
30
- let $parse;
31
-
32
- /**@type {import('../../services/exception/exception-handler.js').ErrorHandler} */
33
- let $exceptionHandler;
34
-
35
- /**
36
- * @typedef {Object} AsyncQueueTask
37
- * @property {Scope} handler
38
- * @property {Function} fn
39
- * @property {Object} locals
40
- */
41
-
42
- export const $postUpdateQueue = [];
43
-
44
- export class RootScopeProvider {
45
- constructor() {
46
- this.rootScope = createScope();
47
- }
48
-
49
- $get = [
50
- "$exceptionHandler",
51
- "$parse",
52
- /**
53
- * @param {import('../../services/exception/exception-handler.js').ErrorHandler} exceptionHandler
54
- * @param {import('../parse/interface.ts').ParseService} parse
55
- */
56
- (exceptionHandler, parse) => {
57
- $exceptionHandler = exceptionHandler;
58
- $parse = parse;
59
- return this.rootScope;
60
- },
61
- ];
62
- }
63
-
64
- /**
65
- * Creates a deep proxy for the target object, intercepting property changes
66
- * and recursively applying proxies to nested objects.
67
- *
68
- * @param {Object} target - The object to be wrapped in a proxy.
69
- * @param {Scope} [context] - The context for the handler, used to track listeners.
70
- * @returns {Scope} - A proxy that intercepts operations on the target object,
71
- * or the original value if the target is not an object.
72
- */
73
- export function createScope(target = {}, context) {
74
- if (
75
- isNull(target) ||
76
- target[NONSCOPE] === true ||
77
- (target.constructor && target.constructor[NONSCOPE]) === true
78
- ) {
79
- return target;
80
- }
81
-
82
- if (typeof target === "object") {
83
- const proxy = new Proxy(target, context || new Scope());
84
- for (const key in target) {
85
- if (hasOwn(target, key)) {
86
- try {
87
- if (
88
- (target.constructor.$nonscope &&
89
- Array.isArray(target.constructor.$nonscope) &&
90
- target.constructor.$nonscope.includes(key)) ||
91
- (target.$nonscope &&
92
- Array.isArray(target.$nonscope) &&
93
- target.$nonscope.includes(key))
94
- ) {
95
- /* empty */
96
- } else {
97
- target[key] = createScope(target[key], proxy.$handler);
98
- }
99
- } catch {
100
- // convert only what we can
101
- }
102
- }
103
- }
104
-
105
- return proxy;
106
- } else {
107
- return target;
108
- }
109
- }
110
-
111
- /**
112
- * Listener function definition.
113
- * @typedef {Object} Listener
114
- * @property {Object} originalTarget - The original target object.
115
- * @property {ListenerFunction} listenerFn - The function invoked when changes are detected.
116
- * @property {import("../parse/interface.ts").CompiledExpression} watchFn
117
- * @property {number} id - Deregistration id
118
- * @property {number} scopeId - The scope that created the Listener
119
- * @property {string[]} property
120
- * @property {string} [watchProp] - The original property to watch if different from observed key
121
- * @property {Proxy} [foreignListener]
122
- *
123
- */
124
-
125
- /**
126
- * Listener function type.
127
- * @callback ListenerFunction
128
- * @param {*} newValue - The new value of the changed property.
129
- * @param {Object} originalTarget - The original target object.
130
- */
131
-
132
- /**
133
- * Decorator for excluding objects from scope observability
134
- */
135
- export const NONSCOPE = "$nonscope";
136
-
137
- /**
138
- * Scope class for the Proxy. It intercepts operations like property access (get)
139
- * and property setting (set), and adds support for deep change tracking and
140
- * observer-like behavior.
141
- * @extends {Record<string, any>}
142
- */
143
- export class Scope {
144
- /**
145
- * Initializes the handler with the target object and a context.
146
- *
147
- * @param {Scope} [context] - The context containing listeners.
148
- * @param {Scope} [parent] - Custom parent.
149
- */
150
- constructor(context, parent) {
151
- this.context = context
152
- ? context.context
153
- ? context.context
154
- : context
155
- : undefined;
156
-
157
- /** @type {Map<string, Array<Listener>>} Watch listeners */
158
- this.watchers = context ? context.watchers : new Map();
159
-
160
- /** @type {Map<String, Function[]>} Event listeners */
161
- this.$$listeners = new Map();
162
-
163
- /** @type {Map<string, Array<Listener>>} Watch listeners from other proxies */
164
- this.foreignListeners = context ? context.foreignListeners : new Map();
165
-
166
- /** @type {Set<ProxyConstructor>} */
167
- this.foreignProxies = context ? context.foreignProxies : new Set();
168
-
169
- /** @type {WeakMap<Object, Array<string>>} */
170
- this.objectListeners = context ? context.objectListeners : new WeakMap();
171
-
172
- /** @type {Map<Function, {oldValue: any, fn: Function}>} */
173
- this.functionListeners = context ? context.functionListeners : new Map();
174
-
175
- /** Current proxy being operated on */
176
- this.$proxy = null;
177
-
178
- /** @type {Scope} The actual proxy */
179
- this.$handler = /** @type {Scope} */ (this);
180
-
181
- /** @type {*} Current target being called on */
182
- this.$target = null;
183
-
184
- /** @type {*} Value wrapped by the proxy */
185
- this.$value = null;
186
-
187
- /**
188
- * @type {Scope[]}
189
- */
190
- this.$children = [];
191
-
192
- /**
193
- * @type {number} Unique model ID (monotonically increasing) useful for debugging.
194
- */
195
- this.$id = nextId();
196
-
197
- /**
198
- * @type {Scope}
199
- */
200
- this.$root = context ? context.$root : /** @type {Scope} */ (this);
201
-
202
- this.$parent = parent
203
- ? parent
204
- : /** @type {Scope} */ (this).$root === /** @type {Scope} */ (this)
205
- ? null
206
- : context;
207
-
208
- /** @type {AsyncQueueTask[]} */
209
- this.$$asyncQueue = [];
210
-
211
- this.filters = [];
212
-
213
- /** @type {boolean} */
214
- this.$$destroyed = false;
215
-
216
- this.scheduled = [];
217
- }
218
-
219
- /**
220
- * Intercepts and handles property assignments on the target object. If a new value is
221
- * an object, it will be recursively proxied.
222
- *
223
- * @param {Object} target - The target object.
224
- * @param {string} property - The name of the property being set.
225
- * @param {*} value - The new value being assigned to the property.
226
- * @param {Proxy} proxy - The proxy intercepting property access
227
- * @returns {boolean} - Returns true to indicate success of the operation.
228
- */
229
- set(target, property, value, proxy) {
230
- if (property === "undefined") {
231
- throw new Error("Attempting to set undefined property");
232
- }
233
- if (
234
- (target.constructor?.$nonscope &&
235
- Array.isArray(target.constructor.$nonscope) &&
236
- target.constructor.$nonscope.includes(property)) ||
237
- (target.$nonscope &&
238
- Array.isArray(target.$nonscope) &&
239
- target.$nonscope.includes(property))
240
- ) {
241
- target[property] = value;
242
- return true;
243
- }
244
-
245
- this.$proxy = proxy;
246
- this.$target = target;
247
- const oldValue = target[property];
248
-
249
- // Handle NaNs
250
- if (
251
- oldValue !== undefined &&
252
- Number.isNaN(oldValue) &&
253
- Number.isNaN(value)
254
- ) {
255
- return true;
256
- }
257
- if (oldValue && oldValue[isProxySymbol]) {
258
- if (Array.isArray(value)) {
259
- if (oldValue !== value) {
260
- const listeners = this.watchers.get(property);
261
-
262
- if (listeners) {
263
- this.#scheduleListener(listeners);
264
- }
265
-
266
- const foreignListeners = this.foreignListeners.get(property);
267
-
268
- if (foreignListeners) {
269
- this.#scheduleListener(foreignListeners);
270
- }
271
- }
272
-
273
- if (this.objectListeners.get(target[property])) {
274
- this.objectListeners.delete(target[property]);
275
- }
276
- target[property] = createScope(value, this);
277
- this.objectListeners.set(target[property], [property]);
278
- return true;
279
- }
280
-
281
- if (isObject(value)) {
282
- if (hasOwn(target, property)) {
283
- Object.keys(oldValue)
284
- .filter((x) => !value[x])
285
- .forEach((k) => {
286
- delete oldValue[k];
287
- });
288
- }
289
-
290
- if (oldValue !== value) {
291
- const listeners = this.watchers.get(property);
292
-
293
- if (listeners) {
294
- this.#scheduleListener(listeners);
295
- }
296
-
297
- const foreignListeners = this.foreignListeners.get(property);
298
-
299
- if (foreignListeners) {
300
- this.#scheduleListener(foreignListeners);
301
- }
302
-
303
- this.#checkeListenersForAllKeys(value);
304
- }
305
- target[property] = createScope(value, this);
306
- //setDeepValue(target[property], value);
307
- return true;
308
- }
309
-
310
- if (isUndefined(value)) {
311
- let called = false;
312
- Object.keys(oldValue.$target).forEach((k) => {
313
- if (oldValue.$target[k]?.[isProxySymbol]) {
314
- called = true;
315
- }
316
- delete oldValue[k];
317
- });
318
-
319
- target[property] = undefined;
320
- if (!called) {
321
- let listeners = this.watchers.get(property);
322
-
323
- if (listeners) {
324
- this.#scheduleListener(listeners);
325
- }
326
- }
327
-
328
- return true;
329
- }
330
-
331
- if (isDefined(value)) {
332
- target[property] = value;
333
- let listeners = this.watchers.get(property);
334
-
335
- if (listeners) {
336
- this.#scheduleListener(listeners);
337
- }
338
-
339
- if (Array.isArray(target)) {
340
- if (this.objectListeners.has(proxy) && property !== "length") {
341
- let keys = this.objectListeners.get(proxy);
342
- keys.forEach((key) => {
343
- const listeners = this.watchers.get(key);
344
- if (listeners) {
345
- this.#scheduleListener(listeners);
346
- }
347
- });
348
- decodeURI;
349
- }
350
- }
351
-
352
- return true;
353
- }
354
- return true;
355
- } else {
356
- if (isUndefined(target[property]) && isProxy(value)) {
357
- this.foreignProxies.add(value);
358
- target[property] = value;
359
- if (!this.watchers.has(property)) {
360
- return true;
361
- }
362
- }
363
- if (isUndefined(value)) {
364
- target[property] = value;
365
- } else {
366
- target[property] = createScope(value, this);
367
- }
368
-
369
- if (oldValue !== value) {
370
- let expectedTarget = this.$target;
371
- let listeners = [];
372
- // Handle the case where we need to start observing object after a watcher has been set
373
- if (isUndefined(oldValue) && isObject(target[property])) {
374
- if (!this.objectListeners.has(target[property])) {
375
- this.objectListeners.set(target[property], [property]);
376
- }
377
- for (const k of Object.keys(value)) {
378
- this.watchers.get(k)?.forEach((l) => listeners.push(l));
379
- // overwhrite the context so we pass the owneship test in filter
380
- expectedTarget = value;
381
- }
382
- }
383
-
384
- if (Array.isArray(target)) {
385
- this.watchers.get("length")?.forEach((l) => listeners.push(l));
386
- }
387
-
388
- this.watchers.get(property)?.forEach((l) => listeners.push(l));
389
- if (listeners.length > 0) {
390
- // check if the listener actually appllies to this target
391
- this.#scheduleListener(listeners, (x) => {
392
- return x.filter((x) => {
393
- if (!x.watchProp) return true;
394
- // Compute the expected target based on `watchProp`
395
- const wrapperExpr = x.watchProp.split(".").slice(0, -1).join(".");
396
- const expectedHandler = $parse(wrapperExpr)(
397
- x.originalTarget,
398
- )?.$handler;
399
- return expectedTarget === expectedHandler?.$target;
400
- });
401
- });
402
- }
403
-
404
- let foreignListeners = this.foreignListeners.get(property);
405
-
406
- if (!foreignListeners && this.$parent?.foreignListeners) {
407
- foreignListeners = this.$parent.foreignListeners.get(property);
408
- }
409
- if (foreignListeners) {
410
- // filter for repeaters
411
- if (this.$target.$$hashKey) {
412
- foreignListeners = foreignListeners.filter((x) =>
413
- x.originalTarget.$$hashKey
414
- ? x.originalTarget.$$hashKey == this.$target.$$hashKey
415
- : false,
416
- );
417
- }
418
-
419
- this.#scheduleListener(foreignListeners);
420
- }
421
- }
422
-
423
- if (this.objectListeners.has(proxy) && property !== "length") {
424
- let keys = this.objectListeners.get(proxy);
425
- keys.forEach((key) => {
426
- const listeners = this.watchers.get(key);
427
- if (listeners) {
428
- if (this.scheduled !== listeners) {
429
- this.#scheduleListener(listeners);
430
- }
431
- }
432
- });
433
- }
434
-
435
- return true;
436
- }
437
- }
438
-
439
- /**
440
- * Intercepts property access on the target object. It checks for specific
441
- * properties (`watch` and `sync`) and binds their methods. For other properties,
442
- * it returns the value directly.
443
- *
444
- * @param {Object} target - The target object.
445
- * @param {string|number|symbol} property - The name of the property being accessed.
446
- * @param {Proxy} proxy - The proxy object being invoked
447
- * @returns {*} - The value of the property or a method if accessing `watch` or `sync`.
448
- */
449
- get(target, property, proxy) {
450
- if (property === "$$watchersCount") return calculateWatcherCount(this);
451
- if (property === isProxySymbol) return true;
452
-
453
- if (target[property] && isProxy(target[property])) {
454
- this.$proxy = target[property];
455
- } else {
456
- this.$proxy = proxy;
457
- }
458
-
459
- this.propertyMap = {
460
- $watch: this.$watch.bind(this),
461
- $new: this.$new.bind(this),
462
- $newIsolate: this.$newIsolate.bind(this),
463
- $destroy: this.$destroy.bind(this),
464
- $eval: this.$eval.bind(this),
465
- $apply: this.$apply.bind(this),
466
- $postUpdate: this.$postUpdate.bind(this),
467
- $isRoot: this.#isRoot.bind(this),
468
- $target: target,
469
- $proxy: this.$proxy,
470
- $on: this.$on.bind(this),
471
- $emit: this.$emit.bind(this),
472
- $broadcast: this.$broadcast.bind(this),
473
- $transcluded: this.$transcluded.bind(this),
474
- $handler: /** @type {Scope} */ (this),
475
- $parent: this.$parent,
476
- $root: this.$root,
477
- $children: this.$children,
478
- $id: this.$id,
479
- $merge: this.$merge.bind(this),
480
- $getById: this.$getById.bind(this),
481
- };
482
-
483
- if (
484
- Array.isArray(target) &&
485
- ["pop", "shift", "unshift"].includes(/** @type { string } */ (property))
486
- ) {
487
- if (this.objectListeners.has(proxy)) {
488
- let keys = this.objectListeners.get(this.$proxy);
489
- keys.forEach((key) => {
490
- const listeners = this.watchers.get(key);
491
- if (listeners) {
492
- this.scheduled = listeners;
493
- }
494
- });
495
- }
496
-
497
- // TODO aditional testing
498
- if (property === "unshift") {
499
- this.#scheduleListener(this.scheduled);
500
- }
501
- }
502
-
503
- if (hasOwn(this.propertyMap, property)) {
504
- this.$target = target;
505
- return this.propertyMap[property];
506
- } else {
507
- // we are a simple getter
508
- return target[property];
509
- }
510
- }
511
-
512
- deleteProperty(target, property) {
513
- // Currently deletes $model
514
- if (target[property] && target[property][isProxySymbol]) {
515
- target[property] = undefined;
516
-
517
- let listeners = this.watchers.get(property);
518
- if (listeners) {
519
- this.#scheduleListener(listeners);
520
- }
521
- if (this.objectListeners.has(this.$proxy)) {
522
- let keys = this.objectListeners.get(this.$proxy);
523
- keys.forEach((key) => {
524
- listeners = this.watchers.get(key);
525
- if (listeners) {
526
- this.#scheduleListener(listeners);
527
- }
528
- });
529
- }
530
-
531
- if (this.scheduled) {
532
- this.#scheduleListener(this.scheduled);
533
- this.scheduled = [];
534
- }
535
- return true;
536
- }
537
-
538
- delete target[property];
539
-
540
- if (this.objectListeners.has(this.$proxy)) {
541
- let keys = this.objectListeners.get(this.$proxy);
542
- keys.forEach((key) => {
543
- const listeners = this.watchers.get(key);
544
- if (listeners) {
545
- this.#scheduleListener(listeners);
546
- }
547
- });
548
- } else {
549
- const listeners = this.watchers.get(property);
550
- if (listeners) {
551
- this.#scheduleListener(listeners, target[property]);
552
- }
553
- }
554
-
555
- return true;
556
- }
557
-
558
- /** @internal **/
559
- #checkeListenersForAllKeys(value) {
560
- if (isUndefined(value)) {
561
- return;
562
- }
563
- Object.keys(value).forEach((k) => {
564
- const listeners = this.watchers.get(k);
565
-
566
- if (listeners) {
567
- this.#scheduleListener(listeners);
568
- }
569
- if (isObject(value[k])) {
570
- this.#checkeListenersForAllKeys(value[k]);
571
- }
572
- });
573
- }
574
-
575
- /**
576
- * @param {Listener[]} listeners
577
- * @param {Function} filter
578
- */
579
- #scheduleListener(listeners, filter = (val) => val) {
580
- Promise.resolve().then(() => {
581
- let index = 0;
582
- let filteredListeners = filter(listeners);
583
- while (index < filteredListeners.length) {
584
- const listener = filteredListeners[index];
585
- if (listener.foreignListener) {
586
- listener.foreignListener.#notifyListener(listener, this.$target);
587
- } else {
588
- this.#notifyListener(listener, this.$target);
589
- }
590
- index++;
591
- }
592
- });
593
- }
594
-
595
- /**
596
- * Registers a watcher for a property along with a listener function. The listener
597
- * function is invoked when changes to that property are detected.
598
- *
599
- * @param {string} watchProp - An expression to be watched in the context of this model.
600
- * @param {ListenerFunction} [listenerFn] - A function to execute when changes are detected on watched context.
601
- * @param {boolean} [lazy] - A flag to indicate if the listener should be invoked immediately. Defaults to false.
602
- */
603
- $watch(watchProp, listenerFn, lazy = false) {
604
- assert(isString(watchProp), "Watched property required");
605
- watchProp = watchProp.trim();
606
- const get = $parse(watchProp);
607
-
608
- // Constant are immediately passed to listener function
609
- if (get.constant) {
610
- if (listenerFn) {
611
- Promise.resolve().then(() => {
612
- let res = get();
613
- while (isFunction(res)) {
614
- res = res();
615
- }
616
- listenerFn(res, this.$target);
617
- });
618
- }
619
- return () => {};
620
- }
621
-
622
- /** @type {Listener} */
623
- const listener = {
624
- originalTarget: this.$target,
625
- listenerFn: listenerFn,
626
- watchFn: get,
627
- scopeId: this.$id,
628
- id: nextUid(),
629
- property: [],
630
- };
631
- // simplest case
632
- let key = get.decoratedNode.body[0].expression.name;
633
- let keySet = [];
634
-
635
- let type = get.decoratedNode.body[0].expression.type;
636
- switch (type) {
637
- // 1
638
- case ASTType.Program: {
639
- throw new Error("Unsupported type " + type);
640
- }
641
- // 2
642
- case ASTType.ExpressionStatement: {
643
- throw new Error("Unsupported type " + type);
644
- }
645
- // 3
646
- case ASTType.AssignmentExpression:
647
- // assignment calls without listener functions
648
- if (!listenerFn) {
649
- let res = get(this.$target);
650
- while (isFunction(res)) {
651
- res = res(this.$target);
652
- }
653
- Promise.resolve().then(res);
654
- return () => {};
655
- }
656
- key = get.decoratedNode.body[0].expression.left.name;
657
- break;
658
- // 4
659
- case ASTType.ConditionalExpression: {
660
- key = get.decoratedNode.body[0].expression.toWatch[0]?.test?.name;
661
- listener.property.push(key);
662
- break;
663
- }
664
- // 5
665
- case ASTType.LogicalExpression: {
666
- let keys = [];
667
- keys.push(get.decoratedNode.body[0].expression.left.toWatch[0]?.name);
668
- keys.push(get.decoratedNode.body[0].expression.right.toWatch[0]?.name);
669
- keys.forEach((key) => {
670
- this.#registerKey(key, listener);
671
- });
672
- return () => {
673
- keys.forEach((key) => {
674
- this.#deregisterKey(key, listener.id);
675
- });
676
- };
677
- }
678
- // 6
679
- case ASTType.BinaryExpression: {
680
- let expr = get.decoratedNode.body[0].expression.toWatch[0];
681
- key = expr.property ? expr.property.name : expr.name;
682
- if (!key) {
683
- throw new Error("Unable to determine key");
684
- }
685
- listener.property.push(key);
686
- break;
687
- }
688
- // 7
689
- case ASTType.UnaryExpression: {
690
- let expr = get.decoratedNode.body[0].expression.toWatch[0];
691
- key = expr.property ? expr.property.name : expr.name;
692
- if (!key) {
693
- throw new Error("Unable to determine key");
694
- }
695
- listener.property.push(key);
696
- break;
697
- }
698
- // 8 function
699
- case ASTType.CallExpression: {
700
- let keys = [];
701
- get.decoratedNode.body[0].expression.toWatch.forEach((x) => {
702
- if (isDefined(x)) {
703
- keys.push(x.name);
704
- }
705
- });
706
- keys.forEach((key) => {
707
- this.#registerKey(key, listener);
708
- this.#scheduleListener([listener]);
709
- });
710
-
711
- return () => {
712
- keys.forEach((key) => {
713
- this.#deregisterKey(key, listener.id);
714
- });
715
- };
716
- }
717
-
718
- // 9
719
- case ASTType.MemberExpression: {
720
- key = get.decoratedNode.body[0].expression.property.name;
721
-
722
- // array watcher
723
- if (!key) {
724
- key = get.decoratedNode.body[0].expression.object.name;
725
- }
726
-
727
- listener.property.push(key);
728
- if (watchProp !== key) {
729
- // Handle nested expression call
730
- listener.watchProp = watchProp;
731
-
732
- let potentialProxy = $parse(
733
- watchProp.split(".").slice(0, -1).join("."),
734
- )(listener.originalTarget);
735
- if (potentialProxy && this.foreignProxies.has(potentialProxy)) {
736
- potentialProxy.$handler.#registerForeignKey(key, listener);
737
- potentialProxy.$handler.#scheduleListener([listener]);
738
- return () => {
739
- return potentialProxy.$handler.#deregisterKey(key, listener.id);
740
- };
741
- }
742
- }
743
- break;
744
- }
745
-
746
- // 10
747
- case ASTType.Identifier: {
748
- listener.property.push(get.decoratedNode.body[0].expression.name);
749
- break;
750
- }
751
-
752
- // 11
753
- case ASTType.Literal: {
754
- throw new Error("Unsupported type " + type);
755
- }
756
-
757
- // 12
758
- case ASTType.ArrayExpression: {
759
- let keys = get.decoratedNode.body[0].expression.elements
760
- .map((x) => {
761
- switch (x.type) {
762
- case 11:
763
- return x.value;
764
- default:
765
- return x.toWatch[0].name;
766
- }
767
- })
768
- .filter((x) => !!x);
769
- keys.forEach((key) => {
770
- this.#registerKey(key, listener);
771
- this.#scheduleListener([listener]);
772
- });
773
- return () => {
774
- keys.forEach((key) => {
775
- this.#deregisterKey(key, listener.id);
776
- });
777
- };
778
- }
779
-
780
- // 13
781
- case ASTType.Property: {
782
- throw new Error("Unsupported type " + type);
783
- }
784
-
785
- // 14
786
- case ASTType.ObjectExpression: {
787
- get.decoratedNode.body[0].expression.properties.forEach((prop) => {
788
- if (prop.key.isPure === false) {
789
- keySet.push(prop.key.name);
790
- listener.property.push(key);
791
- } else {
792
- if (prop.value.name) {
793
- keySet.push(prop.value.name);
794
- listener.property.push(key);
795
- } else {
796
- const target = get.decoratedNode.body[0].expression.toWatch[0];
797
- key = target.property ? target.property.name : target.name;
798
- listener.property.push(key);
799
- }
800
- }
801
- });
802
-
803
- // key = get.decoratedNode.body[0].expression.toWatch[0].name;
804
- // listener.property.push(key);
805
- break;
806
- }
807
-
808
- // 15
809
- case ASTType.ThisExpression: {
810
- throw new Error("Unsupported type " + type);
811
- }
812
-
813
- // 16
814
- case ASTType.LocalsExpression: {
815
- throw new Error("Unsupported type " + type);
816
- }
817
-
818
- // 17
819
- case ASTType.NGValueParameter: {
820
- throw new Error("Unsupported type " + type);
821
- }
822
- }
823
-
824
- // if the target is an object, then start observing it
825
- let listenerObject = listener.watchFn(this.$target);
826
- if (isObject(listenerObject)) {
827
- this.objectListeners.set(listenerObject, [key]);
828
- }
829
-
830
- if (keySet.length > 0) {
831
- keySet.forEach((key) => {
832
- this.#registerKey(key, listener);
833
- });
834
- } else {
835
- this.#registerKey(key, listener);
836
- }
837
-
838
- if (!lazy) {
839
- this.#scheduleListener([listener]);
840
- }
841
- return () => {
842
- if (keySet.length > 0) {
843
- let res = true;
844
- keySet.forEach((key) => {
845
- let success = this.#deregisterKey(key, listener.id);
846
- if (!success) {
847
- res = false;
848
- }
849
- });
850
- return res;
851
- } else {
852
- return this.#deregisterKey(key, listener.id);
853
- }
854
- };
855
- }
856
-
857
- $new(childInstance) {
858
- let child;
859
- if (childInstance) {
860
- if (Object.getPrototypeOf(childInstance) === Object.prototype) {
861
- Object.setPrototypeOf(childInstance, this.$target);
862
- } else {
863
- if (Object.getPrototypeOf(childInstance) == this.$target) {
864
- Object.setPrototypeOf(childInstance, this.$target);
865
- } else {
866
- Object.setPrototypeOf(
867
- Object.getPrototypeOf(childInstance) || childInstance,
868
- this.$target,
869
- );
870
- }
871
- }
872
-
873
- child = childInstance;
874
- } else {
875
- child = Object.create(this.$target);
876
- // child.$parent = this.$parent;
877
- }
878
-
879
- const proxy = new Proxy(child, new Scope(this));
880
- this.$children.push(proxy);
881
- return proxy;
882
- }
883
-
884
- $newIsolate(instance) {
885
- let child = instance ? Object.create(instance) : Object.create(null);
886
- const proxy = new Proxy(child, new Scope(this, this.$root));
887
- this.$children.push(proxy);
888
- return proxy;
889
- }
890
-
891
- $transcluded(parentInstance) {
892
- let child = Object.create(this.$target);
893
- const proxy = new Proxy(child, new Scope(this, parentInstance));
894
- this.$children.push(proxy);
895
- return proxy;
896
- }
897
-
898
- /** @internal **/
899
- #registerKey(key, listener) {
900
- if (this.watchers.has(key)) {
901
- this.watchers.get(key).push(listener);
902
- } else {
903
- this.watchers.set(key, [listener]);
904
- }
905
- }
906
-
907
- /** @internal **/
908
- #registerForeignKey(key, listener) {
909
- if (this.foreignListeners.has(key)) {
910
- this.foreignListeners.get(key).push(listener);
911
- } else {
912
- this.foreignListeners.set(key, [listener]);
913
- }
914
- }
915
-
916
- #deregisterKey(key, id) {
917
- const listenerList = this.watchers.get(key);
918
- if (!listenerList) return false;
919
-
920
- const index = listenerList.findIndex((x) => x.id === id);
921
- if (index === -1) return false;
922
-
923
- listenerList.splice(index, 1);
924
- if (listenerList.length) {
925
- this.watchers.set(key, listenerList);
926
- } else {
927
- this.watchers.delete(key);
928
- }
929
- return true;
930
- }
931
-
932
- // deregisterForeignKey(key, id) {
933
- // const listenerList = this.foreignListeners.get(key);
934
- // if (!listenerList) return false;
935
-
936
- // const index = listenerList.findIndex((x) => x.id === id);
937
- // if (index === -1) return false;
938
-
939
- // listenerList.splice(index, 1);
940
- // if (listenerList.length) {
941
- // this.foreignListeners.set(key, listenerList);
942
- // } else {
943
- // this.foreignListeners.delete(key);
944
- // }
945
- // return true;
946
- // }
947
-
948
- $eval(expr, locals) {
949
- const fn = $parse(expr);
950
- const res = fn(this, locals);
951
- if (isUndefined(res) || res === null) {
952
- return res;
953
- }
954
-
955
- if (res["name"] === Object.hasOwnProperty["name"]) {
956
- return res;
957
- }
958
- if (isFunction(res)) {
959
- return res();
960
- }
961
-
962
- if (Number.isNaN(res)) {
963
- return 0;
964
- }
965
-
966
- return res;
967
- }
968
-
969
- /**
970
- * @param {Object} newTarget
971
- */
972
- $merge(newTarget) {
973
- Object.entries(newTarget).forEach(([key, value]) => {
974
- this.set(this.$target, key, value, this.$proxy);
975
- });
976
- }
977
-
978
- /**
979
- * @param {import('../../interface.js').Expression} expr
980
- * @returns {any}
981
- */
982
- $apply(expr) {
983
- try {
984
- return $parse(expr)(this.$proxy);
985
- } catch (e) {
986
- $exceptionHandler(e);
987
- }
988
- }
989
-
990
- /**
991
- * @param {string} name
992
- * @param {Function} listener
993
- * @returns {(function(): void)|*}
994
- */
995
- $on(name, listener) {
996
- let namedListeners = this.$$listeners.get(name);
997
- if (!namedListeners) {
998
- namedListeners = [];
999
- this.$$listeners.set(name, namedListeners);
1000
- }
1001
- namedListeners.push(listener);
1002
-
1003
- return () => {
1004
- const indexOfListener = namedListeners.indexOf(listener);
1005
- if (indexOfListener !== -1) {
1006
- namedListeners.splice(indexOfListener, 1);
1007
- if (namedListeners.length == 0) {
1008
- this.$$listeners.delete(name);
1009
- }
1010
- }
1011
- };
1012
- }
1013
-
1014
- /**
1015
- * @param {string} name
1016
- * @param {...any} args
1017
- * @returns {void}
1018
- */
1019
- $emit(name, ...args) {
1020
- return this.#eventHelper(
1021
- { name: name, event: undefined, broadcast: false },
1022
- ...args,
1023
- );
1024
- }
1025
-
1026
- /**
1027
- * @param {string} name
1028
- * @param {...any} args
1029
- * @returns {any}
1030
- */
1031
- $broadcast(name, ...args) {
1032
- return this.#eventHelper(
1033
- { name: name, event: undefined, broadcast: true },
1034
- ...args,
1035
- );
1036
- }
1037
-
1038
- /**
1039
- * @internal
1040
- * @returns {any}
1041
- */
1042
- #eventHelper({ name, event, broadcast }, ...args) {
1043
- if (!broadcast) {
1044
- if (!this.$$listeners.has(name)) {
1045
- if (this.$parent) {
1046
- return this.$parent.$handler.#eventHelper(
1047
- { name: name, event: event, broadcast: broadcast },
1048
- ...args,
1049
- );
1050
- }
1051
- return;
1052
- }
1053
- }
1054
- if (event) {
1055
- event.currentScope = this.$target;
1056
- } else {
1057
- event = event || {
1058
- name,
1059
- targetScope: this.$target,
1060
- currentScope: this.$target,
1061
- stopped: false,
1062
- stopPropagation() {
1063
- event.stopped = true;
1064
- },
1065
- preventDefault() {
1066
- event.defaultPrevented = true;
1067
- },
1068
- defaultPrevented: false,
1069
- };
1070
- }
1071
-
1072
- const listenerArgs = concat([event], [event].concat(args), 1);
1073
- let listeners = this.$$listeners.get(name);
1074
- if (listeners) {
1075
- let length = listeners.length;
1076
- for (let i = 0; i < length; i++) {
1077
- try {
1078
- let cb = listeners[i];
1079
- cb.apply(null, listenerArgs);
1080
- if (listeners.length !== length) {
1081
- if (listeners.length < length) {
1082
- i--;
1083
- }
1084
- length = listeners.length;
1085
- }
1086
- } catch (e) {
1087
- $exceptionHandler(e);
1088
- }
1089
- }
1090
- }
1091
-
1092
- event.currentScope = null;
1093
-
1094
- if (event.stopped) {
1095
- return event;
1096
- }
1097
-
1098
- if (broadcast) {
1099
- if (this.$children.length > 0) {
1100
- this.$children.forEach((child) => {
1101
- event = child["$handler"].#eventHelper(
1102
- { name: name, event: event, broadcast: broadcast },
1103
- ...args,
1104
- );
1105
- });
1106
- }
1107
- return event;
1108
- } else {
1109
- if (this.$parent) {
1110
- return this.$parent.#eventHelper(
1111
- { name: name, event: event, broadcast: broadcast },
1112
- ...args,
1113
- );
1114
- } else {
1115
- return event;
1116
- }
1117
- }
1118
- }
1119
-
1120
- /**
1121
- * @internal
1122
- * @returns {boolean}
1123
- */
1124
- #isRoot() {
1125
- return this.$root == /** @type {Scope} */ (this);
1126
- }
1127
-
1128
- $postUpdate(fn) {
1129
- $postUpdateQueue.push(fn);
1130
- }
1131
-
1132
- $destroy() {
1133
- if (this.$$destroyed) return;
1134
-
1135
- this.$broadcast("$destroy");
1136
- Array.from(this.watchers.entries()).forEach(([key, val]) => {
1137
- this.watchers.set(
1138
- key,
1139
- val.filter((x) => x.scopeId !== this.$id),
1140
- );
1141
- });
1142
-
1143
- if (this.#isRoot()) {
1144
- this.watchers.clear();
1145
- } else {
1146
- let i = this.$parent.$children.filter((x) => x.$id == this.$id)[0];
1147
- this.$parent.$children.splice(this.$parent.$children.indexOf(i), 1);
1148
- }
1149
-
1150
- this.$$listeners.clear();
1151
-
1152
- this.$$destroyed = true;
1153
- }
1154
-
1155
- /**
1156
- * @internal
1157
- * @param {Listener} listener - The property path that was changed.
1158
- */
1159
- #notifyListener(listener, target) {
1160
- const { originalTarget, listenerFn, watchFn } = listener;
1161
- try {
1162
- let newVal = watchFn(originalTarget);
1163
- if (isUndefined(newVal)) {
1164
- newVal = watchFn(target);
1165
- }
1166
- if (isFunction(newVal)) {
1167
- newVal = newVal(originalTarget);
1168
- }
1169
-
1170
- if (Array.isArray(newVal)) {
1171
- newVal.forEach((x, index) => {
1172
- if (isFunction(x)) {
1173
- newVal[index] = x(originalTarget);
1174
- }
1175
- });
1176
- }
1177
- listenerFn(newVal, originalTarget);
1178
- this.$$asyncQueue.forEach((x) => {
1179
- if (x.handler.$id == this.$id) {
1180
- Promise.resolve().then(x.fn(x.handler, x.locals));
1181
- }
1182
- });
1183
-
1184
- while ($postUpdateQueue.length) {
1185
- $postUpdateQueue.shift()();
1186
- }
1187
- } catch (e) {
1188
- $exceptionHandler(e);
1189
- }
1190
- }
1191
-
1192
- /**
1193
- * Searches the scope instance
1194
- *
1195
- * @param {string|number}id
1196
- * @returns {Scope|undefined}
1197
- */
1198
- $getById(id) {
1199
- if (isString(id)) {
1200
- id = parseInt(/** @type {string} */ (id), 10);
1201
- }
1202
- if (this.$id === id) {
1203
- return this;
1204
- } else {
1205
- let res = undefined;
1206
- for (const child of this.$children) {
1207
- let found = child.$getById(id);
1208
- if (found) {
1209
- res = found;
1210
- break;
1211
- }
1212
- }
1213
- return res;
1214
- }
1215
- }
1216
- }
1217
-
1218
- /*------------- Private helpers -------------*/
1219
-
1220
- /**
1221
- * @param {Scope} model
1222
- * @returns {number}
1223
- */
1224
- function calculateWatcherCount(model) {
1225
- const childIds = collectChildIds(model).add(model.$id);
1226
-
1227
- return Array.from(model.watchers.values()).reduce(
1228
- (count, watcherArray) =>
1229
- count +
1230
- watcherArray.reduce(
1231
- (subCount, watcher) =>
1232
- subCount + (childIds.has(watcher.scopeId) ? 1 : 0),
1233
- 0,
1234
- ),
1235
- 0,
1236
- );
1237
- }
1238
-
1239
- /**
1240
- * @param {Scope} child
1241
- * @returns {Set<number>}
1242
- */
1243
- function collectChildIds(child) {
1244
- const ids = new Set([child.$id]);
1245
- child.$children?.forEach((c) => {
1246
- collectChildIds(c).forEach((id) => ids.add(id));
1247
- });
1248
- return ids;
1249
- }