@pravosleva/reactive-engine 1.8.3-beta → 2.0.0-beta
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 +271 -0
- package/dist/AbstractService.cjs.map +1 -1
- package/dist/AbstractService.mjs.map +1 -1
- package/dist/BaseREServiceEnhanced.cjs.map +1 -1
- package/dist/BaseREServiceEnhanced.mjs.map +1 -1
- package/dist/_react-bindings.d.ts +1 -1
- package/dist/_react-bindings.d.ts.map +1 -1
- package/dist/angular/core.angular-adapter.cjs +2 -0
- package/dist/angular/core.angular-adapter.cjs.map +1 -0
- package/dist/angular/core.angular-adapter.d.ts +15 -0
- package/dist/angular/core.angular-adapter.d.ts.map +1 -0
- package/dist/angular/core.angular-adapter.mjs +28 -0
- package/dist/angular/core.angular-adapter.mjs.map +1 -0
- package/dist/angular/core.angular-adapter.test.d.ts +2 -0
- package/dist/angular/core.angular-adapter.test.d.ts.map +1 -0
- package/dist/angular/index.cjs +2 -1
- package/dist/angular/index.cjs.map +1 -0
- package/dist/angular/index.d.ts +19 -2
- package/dist/angular/index.d.ts.map +1 -1
- package/dist/angular/index.mjs +28 -2
- package/dist/angular/index.mjs.map +1 -0
- package/dist/core/AbstractService.d.ts +3 -3
- package/dist/core/AbstractService.d.ts.map +1 -1
- package/dist/core/BaseREServiceEnhanced.d.ts +3 -3
- package/dist/core/BaseREServiceEnhanced.d.ts.map +1 -1
- package/dist/core/_draft.core.methods.d.ts +13 -0
- package/dist/core/_draft.core.methods.d.ts.map +1 -0
- package/dist/core/core.advanced.reactive-framework-test-suite.p2.test.d.ts +2 -0
- package/dist/core/core.advanced.reactive-framework-test-suite.p2.test.d.ts.map +1 -0
- package/dist/core/core.advanced.test.d.ts +2 -0
- package/dist/core/core.advanced.test.d.ts.map +1 -0
- package/dist/core/core.autolog.d.ts +15 -0
- package/dist/core/core.autolog.d.ts.map +1 -0
- package/dist/core/core.automatic.d.ts +23 -0
- package/dist/core/core.automatic.d.ts.map +1 -0
- package/dist/core/core.automatic.test.d.ts +2 -0
- package/dist/core/core.automatic.test.d.ts.map +1 -0
- package/dist/core/core.d.ts +38 -158
- package/dist/core/core.d.ts.map +1 -1
- package/dist/core/core.method.batch.d.ts +6 -0
- package/dist/core/core.method.batch.d.ts.map +1 -0
- package/dist/core/core.method.computed.d.ts +7 -0
- package/dist/core/core.method.computed.d.ts.map +1 -0
- package/dist/core/core.method.effect.d.ts +7 -0
- package/dist/core/core.method.effect.d.ts.map +1 -0
- package/dist/core/core.method.reactive.d.ts +6 -0
- package/dist/core/core.method.reactive.d.ts.map +1 -0
- package/dist/core/core.method.signal.d.ts +7 -0
- package/dist/core/core.method.signal.d.ts.map +1 -0
- package/dist/core/core.method.untrack.d.ts +6 -0
- package/dist/core/core.method.untrack.d.ts.map +1 -0
- package/dist/core/core.propagation.test.d.ts +2 -0
- package/dist/core/core.propagation.test.d.ts.map +1 -0
- package/dist/core/core.test.d.ts +2 -0
- package/dist/core/core.test.d.ts.map +1 -0
- package/dist/core/index.d.ts +4 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/types.d.ts +31 -4
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core.autolog.cjs +2 -0
- package/dist/core.autolog.cjs.map +1 -0
- package/dist/core.autolog.mjs +41 -0
- package/dist/core.autolog.mjs.map +1 -0
- package/dist/core.automatic.cjs +2 -0
- package/dist/core.automatic.cjs.map +1 -0
- package/dist/core.automatic.mjs +26 -0
- package/dist/core.automatic.mjs.map +1 -0
- package/dist/core.cjs +1 -1
- package/dist/core.cjs.map +1 -1
- package/dist/core.method.batch.cjs +2 -0
- package/dist/core.method.batch.cjs.map +1 -0
- package/dist/core.method.batch.mjs +13 -0
- package/dist/core.method.batch.mjs.map +1 -0
- package/dist/core.method.computed.cjs +2 -0
- package/dist/core.method.computed.cjs.map +1 -0
- package/dist/core.method.computed.mjs +122 -0
- package/dist/core.method.computed.mjs.map +1 -0
- package/dist/core.method.effect.cjs +2 -0
- package/dist/core.method.effect.cjs.map +1 -0
- package/dist/core.method.effect.mjs +49 -0
- package/dist/core.method.effect.mjs.map +1 -0
- package/dist/core.method.reactive.cjs +2 -0
- package/dist/core.method.reactive.cjs.map +1 -0
- package/dist/core.method.reactive.mjs +39 -0
- package/dist/core.method.reactive.mjs.map +1 -0
- package/dist/core.method.signal.cjs +2 -0
- package/dist/core.method.signal.cjs.map +1 -0
- package/dist/core.method.signal.mjs +75 -0
- package/dist/core.method.signal.mjs.map +1 -0
- package/dist/core.method.untrack.cjs +2 -0
- package/dist/core.method.untrack.cjs.map +1 -0
- package/dist/core.method.untrack.mjs +14 -0
- package/dist/core.method.untrack.mjs.map +1 -0
- package/dist/core.mjs +268 -592
- package/dist/core.mjs.map +1 -1
- package/dist/decorators/index.d.ts +1 -0
- package/dist/decorators/index.d.ts.map +1 -1
- package/dist/decorators/withCache/types.d.ts +29 -0
- package/dist/decorators/withCache/types.d.ts.map +1 -0
- package/dist/decorators/withCache/withCache.cjs +1 -1
- package/dist/decorators/withCache/withCache.cjs.map +1 -1
- package/dist/decorators/withCache/withCache.d.ts +4 -61
- package/dist/decorators/withCache/withCache.d.ts.map +1 -1
- package/dist/decorators/withCache/withCache.mjs +29 -9
- package/dist/decorators/withCache/withCache.mjs.map +1 -1
- package/dist/decorators/withValidation/index.d.ts +2 -0
- package/dist/decorators/withValidation/index.d.ts.map +1 -0
- package/dist/decorators/withValidation/withValidation.cjs +2 -0
- package/dist/decorators/withValidation/withValidation.cjs.map +1 -0
- package/dist/decorators/withValidation/withValidation.d.ts +18 -0
- package/dist/decorators/withValidation/withValidation.d.ts.map +1 -0
- package/dist/decorators/withValidation/withValidation.mjs +27 -0
- package/dist/decorators/withValidation/withValidation.mjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +14 -11
- package/dist/react/core.react-adapter.test.d.ts +2 -0
- package/dist/react/core.react-adapter.test.d.ts.map +1 -0
- package/dist/react/hooks/_draft.useReactiveValue.v2.d.ts +9 -0
- package/dist/react/hooks/_draft.useReactiveValue.v2.d.ts.map +1 -0
- package/dist/react/hooks/useReactiveSubscription.cjs +2 -0
- package/dist/react/hooks/useReactiveSubscription.cjs.map +1 -0
- package/dist/react/hooks/useReactiveSubscription.d.ts +7 -0
- package/dist/react/hooks/useReactiveSubscription.d.ts.map +1 -0
- package/dist/react/hooks/useReactiveSubscription.mjs +21 -0
- package/dist/react/hooks/useReactiveSubscription.mjs.map +1 -0
- package/dist/react/hooks/useReactiveValue.cjs +2 -0
- package/dist/react/hooks/useReactiveValue.cjs.map +1 -0
- package/dist/react/hooks/useReactiveValue.d.ts +3 -0
- package/dist/react/hooks/useReactiveValue.d.ts.map +1 -0
- package/dist/react/hooks/useReactiveValue.mjs +25 -0
- package/dist/react/hooks/useReactiveValue.mjs.map +1 -0
- package/dist/react/index.cjs +2 -1
- package/dist/react/index.cjs.map +1 -0
- package/dist/react/index.d.ts +9 -3
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.mjs +13 -6
- package/dist/react/index.mjs.map +1 -0
- package/dist/react/types.d.ts +0 -1
- package/dist/react/types.d.ts.map +1 -1
- package/dist/reactive-engine.umd.js +2 -2
- package/dist/reactive-engine.umd.js.map +1 -1
- package/dist/report/reactive-framework-test-suite/scripts/update-readme.d.mts +2 -0
- package/dist/report/reactive-framework-test-suite/scripts/update-readme.d.mts.map +1 -0
- package/dist/report/reactive-framework-test-suite/src/assert.d.ts +10 -0
- package/dist/report/reactive-framework-test-suite/src/assert.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/src/batching.d.ts +19 -0
- package/dist/report/reactive-framework-test-suite/src/batching.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/src/behaviorDifferences.d.ts +19 -0
- package/dist/report/reactive-framework-test-suite/src/behaviorDifferences.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/src/computedEval.d.ts +19 -0
- package/dist/report/reactive-framework-test-suite/src/computedEval.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/src/cycleDetection.d.ts +18 -0
- package/dist/report/reactive-framework-test-suite/src/cycleDetection.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/src/dynamicDeps.d.ts +20 -0
- package/dist/report/reactive-framework-test-suite/src/dynamicDeps.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/src/effectLifecycle.d.ts +20 -0
- package/dist/report/reactive-framework-test-suite/src/effectLifecycle.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/src/equality.d.ts +19 -0
- package/dist/report/reactive-framework-test-suite/src/equality.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/src/errorHandling.d.ts +20 -0
- package/dist/report/reactive-framework-test-suite/src/errorHandling.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/src/framework.d.ts +24 -0
- package/dist/report/reactive-framework-test-suite/src/framework.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/src/graphPropagation.d.ts +18 -0
- package/dist/report/reactive-framework-test-suite/src/graphPropagation.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/src/index.d.ts +11 -0
- package/dist/report/reactive-framework-test-suite/src/index.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/src/innerWrite.d.ts +20 -0
- package/dist/report/reactive-framework-test-suite/src/innerWrite.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/src/memoryGc.d.ts +18 -0
- package/dist/report/reactive-framework-test-suite/src/memoryGc.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/src/nestedEffects.d.ts +20 -0
- package/dist/report/reactive-framework-test-suite/src/nestedEffects.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/src/reactiveEngine.test.d.ts +2 -0
- package/dist/report/reactive-framework-test-suite/src/reactiveEngine.test.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/src/staleEvaluation.d.ts +18 -0
- package/dist/report/reactive-framework-test-suite/src/staleEvaluation.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/src/untracked.d.ts +18 -0
- package/dist/report/reactive-framework-test-suite/src/untracked.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/alienSignals.d.ts +3 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/alienSignals.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/angularSignals.d.ts +3 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/angularSignals.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/anod.d.ts +3 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/anod.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/index.d.ts +3 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/index.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/mobx.d.ts +3 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/mobx.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/pota.d.ts +3 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/pota.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/preactSignals.d.ts +3 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/preactSignals.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/reactively.d.ts +3 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/reactively.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/reatom.d.ts +3 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/reatom.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/sjs.d.ts +3 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/sjs.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/solid.d.ts +3 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/solid.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/solidSignals.d.ts +3 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/solidSignals.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/svelte.d.ts +3 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/svelte.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/tansu.d.ts +3 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/tansu.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/tc39Signals.d.ts +3 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/tc39Signals.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/vueReactivity.d.ts +3 -0
- package/dist/report/reactive-framework-test-suite/test/frameworks/vueReactivity.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/test/run.test.d.ts +2 -0
- package/dist/report/reactive-framework-test-suite/test/run.test.d.ts.map +1 -0
- package/dist/report/reactive-framework-test-suite/vitest.config.d.ts +3 -0
- package/dist/report/reactive-framework-test-suite/vitest.config.d.ts.map +1 -0
- package/dist/utils/getExtractedValues.cjs +2 -0
- package/dist/utils/getExtractedValues.cjs.map +1 -0
- package/dist/utils/getExtractedValues.mjs +24 -0
- package/dist/utils/getExtractedValues.mjs.map +1 -0
- package/dist/vue/core.vue-adapter.cjs +2 -0
- package/dist/vue/core.vue-adapter.cjs.map +1 -0
- package/dist/vue/core.vue-adapter.d.ts +8 -0
- package/dist/vue/core.vue-adapter.d.ts.map +1 -0
- package/dist/vue/core.vue-adapter.mjs +22 -0
- package/dist/vue/core.vue-adapter.mjs.map +1 -0
- package/dist/vue/core.vue-adapter.test.d.ts +2 -0
- package/dist/vue/core.vue-adapter.test.d.ts.map +1 -0
- package/dist/vue/index.cjs +2 -1
- package/dist/vue/index.cjs.map +1 -0
- package/dist/vue/index.d.ts +14 -2
- package/dist/vue/index.d.ts.map +1 -1
- package/dist/vue/index.mjs +54 -3
- package/dist/vue/index.mjs.map +1 -0
- package/package.json +4 -3
- package/dist/angular/ReactiveEngine4Angular.cjs +0 -2
- package/dist/angular/ReactiveEngine4Angular.cjs.map +0 -1
- package/dist/angular/ReactiveEngine4Angular.d.ts +0 -37
- package/dist/angular/ReactiveEngine4Angular.d.ts.map +0 -1
- package/dist/angular/ReactiveEngine4Angular.mjs +0 -45
- package/dist/angular/ReactiveEngine4Angular.mjs.map +0 -1
- package/dist/angular/core.angular.auto.test.d.ts +0 -2
- package/dist/angular/core.angular.auto.test.d.ts.map +0 -1
- package/dist/angular/core.angular.test.d.ts +0 -2
- package/dist/angular/core.angular.test.d.ts.map +0 -1
- package/dist/core/core.auto.test.d.ts +0 -2
- package/dist/core/core.auto.test.d.ts.map +0 -1
- package/dist/react/ReactiveEngine4React.cjs +0 -2
- package/dist/react/ReactiveEngine4React.cjs.map +0 -1
- package/dist/react/ReactiveEngine4React.d.ts +0 -34
- package/dist/react/ReactiveEngine4React.d.ts.map +0 -1
- package/dist/react/ReactiveEngine4React.mjs +0 -51
- package/dist/react/ReactiveEngine4React.mjs.map +0 -1
- package/dist/react/core.react.auto.test.d.ts +0 -2
- package/dist/react/core.react.auto.test.d.ts.map +0 -1
- package/dist/react/core.react.test.d.ts +0 -2
- package/dist/react/core.react.test.d.ts.map +0 -1
- package/dist/react/hooks/FilteredCatalog.auto.test.d.ts +0 -2
- package/dist/react/hooks/FilteredCatalog.auto.test.d.ts.map +0 -1
- package/dist/react/hooks/FilteredCatalog.test.d.ts +0 -2
- package/dist/react/hooks/FilteredCatalog.test.d.ts.map +0 -1
- package/dist/react/hooks/index.cjs +0 -1
- package/dist/react/hooks/index.d.ts +0 -4
- package/dist/react/hooks/index.d.ts.map +0 -1
- package/dist/react/hooks/index.mjs +0 -7
- package/dist/react/hooks/types.d.ts +0 -20
- package/dist/react/hooks/types.d.ts.map +0 -1
- package/dist/react/hooks/useReactiveSubscription/index.cjs +0 -1
- package/dist/react/hooks/useReactiveSubscription/index.d.ts +0 -2
- package/dist/react/hooks/useReactiveSubscription/index.d.ts.map +0 -1
- package/dist/react/hooks/useReactiveSubscription/index.mjs +0 -2
- package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.auto.test.d.ts +0 -2
- package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.auto.test.d.ts.map +0 -1
- package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.cjs +0 -2
- package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.cjs.map +0 -1
- package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.d.ts +0 -7
- package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.d.ts.map +0 -1
- package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.mjs +0 -27
- package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.mjs.map +0 -1
- package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.test.d.ts +0 -2
- package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.test.d.ts.map +0 -1
- package/dist/react/hooks/useReactiveValue/index.cjs +0 -1
- package/dist/react/hooks/useReactiveValue/index.d.ts +0 -2
- package/dist/react/hooks/useReactiveValue/index.d.ts.map +0 -1
- package/dist/react/hooks/useReactiveValue/index.mjs +0 -2
- package/dist/react/hooks/useReactiveValue/useReactiveValue.auto.test.d.ts +0 -2
- package/dist/react/hooks/useReactiveValue/useReactiveValue.auto.test.d.ts.map +0 -1
- package/dist/react/hooks/useReactiveValue/useReactiveValue.cjs +0 -2
- package/dist/react/hooks/useReactiveValue/useReactiveValue.cjs.map +0 -1
- package/dist/react/hooks/useReactiveValue/useReactiveValue.d.ts +0 -18
- package/dist/react/hooks/useReactiveValue/useReactiveValue.d.ts.map +0 -1
- package/dist/react/hooks/useReactiveValue/useReactiveValue.mjs +0 -25
- package/dist/react/hooks/useReactiveValue/useReactiveValue.mjs.map +0 -1
- package/dist/react/hooks/useReactiveValue/useReactiveValue.test.d.ts +0 -2
- package/dist/react/hooks/useReactiveValue/useReactiveValue.test.d.ts.map +0 -1
- package/dist/react/hooks/useReactiveValue0/index.cjs +0 -1
- package/dist/react/hooks/useReactiveValue0/index.d.ts +0 -2
- package/dist/react/hooks/useReactiveValue0/index.d.ts.map +0 -1
- package/dist/react/hooks/useReactiveValue0/index.mjs +0 -2
- package/dist/react/hooks/useReactiveValue0/useReactiveValue0.cjs +0 -2
- package/dist/react/hooks/useReactiveValue0/useReactiveValue0.cjs.map +0 -1
- package/dist/react/hooks/useReactiveValue0/useReactiveValue0.d.ts +0 -51
- package/dist/react/hooks/useReactiveValue0/useReactiveValue0.d.ts.map +0 -1
- package/dist/react/hooks/useReactiveValue0/useReactiveValue0.mjs +0 -23
- package/dist/react/hooks/useReactiveValue0/useReactiveValue0.mjs.map +0 -1
- package/dist/vue/ReactiveEngine4Vue.cjs +0 -2
- package/dist/vue/ReactiveEngine4Vue.cjs.map +0 -1
- package/dist/vue/ReactiveEngine4Vue.d.ts +0 -37
- package/dist/vue/ReactiveEngine4Vue.d.ts.map +0 -1
- package/dist/vue/ReactiveEngine4Vue.mjs +0 -53
- package/dist/vue/ReactiveEngine4Vue.mjs.map +0 -1
- package/dist/vue/composables/index.d.ts +0 -2
- package/dist/vue/composables/index.d.ts.map +0 -1
- package/dist/vue/composables/useReactiveValue.auto.test.d.ts +0 -2
- package/dist/vue/composables/useReactiveValue.auto.test.d.ts.map +0 -1
- package/dist/vue/composables/useReactiveValue.cjs +0 -2
- package/dist/vue/composables/useReactiveValue.cjs.map +0 -1
- package/dist/vue/composables/useReactiveValue.d.ts +0 -12
- package/dist/vue/composables/useReactiveValue.d.ts.map +0 -1
- package/dist/vue/composables/useReactiveValue.mjs +0 -19
- package/dist/vue/composables/useReactiveValue.mjs.map +0 -1
- package/dist/vue/composables/useReactiveValue.test.d.ts +0 -2
- package/dist/vue/composables/useReactiveValue.test.d.ts.map +0 -1
- package/dist/vue/core.vue.auto.test.d.ts +0 -2
- package/dist/vue/core.vue.auto.test.d.ts.map +0 -1
- package/dist/vue/core.vue.test.d.ts +0 -2
- package/dist/vue/core.vue.test.d.ts.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useReactiveValue0.cjs","names":[],"sources":["../../../../src/react/hooks/useReactiveValue0/useReactiveValue0.ts"],"sourcesContent":["import { useState, useEffect, useRef, useMemo } from 'react'\nimport { CleanupFn } from '../../../core'\n\ninterface ObservableItem<T> {\n readonly value: T\n subscribe: (cb: (val: T) => void) => CleanupFn\n destroy?: () => void\n}\n\ntype ReactiveInput<T> = ObservableItem<T> | (() => ObservableItem<T>)\n\n/**\n * Изоморфный фоллбэк-хук для извлечения текущего значения из реактивных примитивов ядра\n * (Signal, Computed, Resource) и управления подпиской в окружениях **React 16.8+ и React 17**.\n *\n * В отличие от современной версии `useReactiveValue`, данный хук спроектирован на базе классической\n * связки `useState` + `useEffect`. Он содержит встроенный механизм упреждающей синхронизации\n * (Pre-emptive Synchronization Pattern), предотвращающий рассинхронизацию данных (Tearing) и мерцание UI\n * во время асинхронных микрозадач планировщика React.\n *\n * ### Особенности управления памятью:\n * 1. **Глобальные сигналы (Сервисы/Синглтоны):** При размонтировании компонента хук выполняет\n * только стандартную отписку от обновлений. Метод `.destroy()` **не вызывается**,\n * что сохраняет глобальное состояние системы в безопасности.\n * 2. **Локальные фабрики (`() => engine.computed(...)`):** Если в качестве аргумента передана\n * функция-фабрика, хук понимает, что вычисление создано локально для этого экрана.\n * При анмаунте компонента хук автоматически вызовет `.destroy()`, предотвращая утечки памяти в ядре.\n *\n * @template T - Тип данных, инкапсулированных внутри реактивного элемента.\n * @param {ReactiveInput<T>} input - Готовый реактивный элемент ядра или ленивая функция-фабрика, возвращающая его.\n * @returns {T} Актуальное синхронизированное значение реактивного элемента.\n *\n * @example\n * ```tsx\n * import { useReactiveValue0 } from '@pravosleva/reactive-engine/react';\n * import { userInfoService } from '~/store';\n *\n * // Сценарий 1: Прямая подписка на долгоживущий сигнал сервиса в legacy-компоненте\n * export const LegacyCounterDisplay = () => {\n * const counter = useReactiveValue0(userInfoService.counter);\n * return <span>Значение: {counter}</span>;\n * };\n *\n * // Сценарий 2: Использование ленивой фабрики во React 17 проектах (авто-очистка ядра при анмаунте)\n * export const LegacyFilteredList = ({ query }: { query: string }) => {\n * const filteredData = useReactiveValue0(() =>\n * engine.computed(() => userInfoService.list.value.filter(item => item.includes(query)))\n * );\n * return <ul>{filteredData.map(item => <li key={item}>{item}</li>)}</ul>;\n * };\n * ```\n */\nexport const useReactiveValue0 = <T>(input: ReactiveInput<T>): T => {\n const isFactory = typeof input === 'function'\n\n // NOTE: СТАБИЛИЗАЦИЯ ИНПУТА: защищает от бесконечных циклов при инлайн-стрелочных фабриках\n const factoryRef = useRef(input)\n useEffect(() => {\n factoryRef.current = input\n }, [input])\n\n // Вычисляем элемент строго 1 раз при монтировании, либо при смене ссылки на готовый сигнал\n const reactiveItem = useMemo(() => {\n if (typeof input === 'function') {\n return input() // Ленивый вызов фабрики ровно один раз за жизнь компонента\n }\n return input\n }, [isFactory ? undefined : input]) // Игнорируем ссылки инлайн-функций\n\n const [state, setState] = useState<T>(reactiveItem.value)\n const setStateRef = useRef(setState)\n\n // Держим ссылку на setState всегда актуальной для безопасных асинхронных вызовов\n useEffect(() => {\n setStateRef.current = setState\n }, [setState])\n\n // NOTE: СИНХРОНИЗАЦИЯ НА ОПЕРЕЖЕНИЕ (Теккущее значение):\n // Если между фазой рендера и выполнением useEffect значение в ядре библиотеки успело измениться,\n // мы синхронно подтягиваем актуальный стейт, исключая \"слепые пятна\" и мерцание UI.\n if (state !== reactiveItem.value) {\n setState(reactiveItem.value)\n }\n\n useEffect(() => {\n // Привязываем подписку ядра к триггеру обновлений React\n const unsubscribe = reactiveItem.subscribe((newValue) => {\n setStateRef.current(newValue)\n })\n\n return () => {\n unsubscribe()\n\n // NOTE: БЕЗОПАСНАЯ ОЧИСТКА ПАМЯТИ:\n // Метод .destroy() вызывается СТРОГО если объект был порожден локальной фабрикой.\n // Глобальные сигналы сервисов остаются в безопасности и не стираются из движка!\n if (isFactory && reactiveItem && typeof reactiveItem.destroy === 'function') {\n reactiveItem.destroy()\n }\n }\n }, [reactiveItem, isFactory])\n\n return state\n}\n"],"mappings":"uBAoDA,IAAa,EAAwB,GAA+B,CAClE,IAAM,EAAY,OAAO,GAAU,WAG7B,GAAA,EAAA,EAAA,OAAA,CAAoB,CAAK,GAC/B,EAAA,EAAA,UAAA,KAAgB,CACd,EAAW,QAAU,CACvB,EAAG,CAAC,CAAK,CAAC,EAGV,IAAM,GAAA,EAAA,EAAA,QAAA,KACA,OAAO,GAAU,WACZ,EAAM,EAER,EACN,CAAC,EAAY,IAAA,GAAY,CAAK,CAAC,EAE5B,CAAC,EAAO,IAAA,EAAA,EAAA,SAAA,CAAwB,EAAa,KAAK,EAClD,GAAA,EAAA,EAAA,OAAA,CAAqB,CAAQ,EAgCnC,OA7BA,EAAA,EAAA,UAAA,KAAgB,CACd,EAAY,QAAU,CACxB,EAAG,CAAC,CAAQ,CAAC,EAKT,IAAU,EAAa,OACzB,EAAS,EAAa,KAAK,GAG7B,EAAA,EAAA,UAAA,KAAgB,CAEd,IAAM,EAAc,EAAa,UAAW,GAAa,CACvD,EAAY,QAAQ,CAAQ,CAC9B,CAAC,EAED,UAAa,CACX,EAAY,EAKR,GAAa,GAAgB,OAAO,EAAa,SAAY,YAC/D,EAAa,QAAQ,CAEzB,CACF,EAAG,CAAC,EAAc,CAAS,CAAC,EAErB,CACT"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { CleanupFn } from '../../../core';
|
|
2
|
-
interface ObservableItem<T> {
|
|
3
|
-
readonly value: T;
|
|
4
|
-
subscribe: (cb: (val: T) => void) => CleanupFn;
|
|
5
|
-
destroy?: () => void;
|
|
6
|
-
}
|
|
7
|
-
type ReactiveInput<T> = ObservableItem<T> | (() => ObservableItem<T>);
|
|
8
|
-
/**
|
|
9
|
-
* Изоморфный фоллбэк-хук для извлечения текущего значения из реактивных примитивов ядра
|
|
10
|
-
* (Signal, Computed, Resource) и управления подпиской в окружениях **React 16.8+ и React 17**.
|
|
11
|
-
*
|
|
12
|
-
* В отличие от современной версии `useReactiveValue`, данный хук спроектирован на базе классической
|
|
13
|
-
* связки `useState` + `useEffect`. Он содержит встроенный механизм упреждающей синхронизации
|
|
14
|
-
* (Pre-emptive Synchronization Pattern), предотвращающий рассинхронизацию данных (Tearing) и мерцание UI
|
|
15
|
-
* во время асинхронных микрозадач планировщика React.
|
|
16
|
-
*
|
|
17
|
-
* ### Особенности управления памятью:
|
|
18
|
-
* 1. **Глобальные сигналы (Сервисы/Синглтоны):** При размонтировании компонента хук выполняет
|
|
19
|
-
* только стандартную отписку от обновлений. Метод `.destroy()` **не вызывается**,
|
|
20
|
-
* что сохраняет глобальное состояние системы в безопасности.
|
|
21
|
-
* 2. **Локальные фабрики (`() => engine.computed(...)`):** Если в качестве аргумента передана
|
|
22
|
-
* функция-фабрика, хук понимает, что вычисление создано локально для этого экрана.
|
|
23
|
-
* При анмаунте компонента хук автоматически вызовет `.destroy()`, предотвращая утечки памяти в ядре.
|
|
24
|
-
*
|
|
25
|
-
* @template T - Тип данных, инкапсулированных внутри реактивного элемента.
|
|
26
|
-
* @param {ReactiveInput<T>} input - Готовый реактивный элемент ядра или ленивая функция-фабрика, возвращающая его.
|
|
27
|
-
* @returns {T} Актуальное синхронизированное значение реактивного элемента.
|
|
28
|
-
*
|
|
29
|
-
* @example
|
|
30
|
-
* ```tsx
|
|
31
|
-
* import { useReactiveValue0 } from '@pravosleva/reactive-engine/react';
|
|
32
|
-
* import { userInfoService } from '~/store';
|
|
33
|
-
*
|
|
34
|
-
* // Сценарий 1: Прямая подписка на долгоживущий сигнал сервиса в legacy-компоненте
|
|
35
|
-
* export const LegacyCounterDisplay = () => {
|
|
36
|
-
* const counter = useReactiveValue0(userInfoService.counter);
|
|
37
|
-
* return <span>Значение: {counter}</span>;
|
|
38
|
-
* };
|
|
39
|
-
*
|
|
40
|
-
* // Сценарий 2: Использование ленивой фабрики во React 17 проектах (авто-очистка ядра при анмаунте)
|
|
41
|
-
* export const LegacyFilteredList = ({ query }: { query: string }) => {
|
|
42
|
-
* const filteredData = useReactiveValue0(() =>
|
|
43
|
-
* engine.computed(() => userInfoService.list.value.filter(item => item.includes(query)))
|
|
44
|
-
* );
|
|
45
|
-
* return <ul>{filteredData.map(item => <li key={item}>{item}</li>)}</ul>;
|
|
46
|
-
* };
|
|
47
|
-
* ```
|
|
48
|
-
*/
|
|
49
|
-
export declare const useReactiveValue0: <T>(input: ReactiveInput<T>) => T;
|
|
50
|
-
export {};
|
|
51
|
-
//# sourceMappingURL=useReactiveValue0.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useReactiveValue0.d.ts","sourceRoot":"","sources":["../../../../src/react/hooks/useReactiveValue0/useReactiveValue0.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAEzC,UAAU,cAAc,CAAC,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;IACjB,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,KAAK,SAAS,CAAA;IAC9C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB;AAED,KAAK,aAAa,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;AAErE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,eAAO,MAAM,iBAAiB,GAAI,CAAC,EAAE,OAAO,aAAa,CAAC,CAAC,CAAC,KAAG,CAmD9D,CAAA"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { useEffect as e, useMemo as t, useRef as n, useState as r } from "react";
|
|
2
|
-
//#region src/react/hooks/useReactiveValue0/useReactiveValue0.ts
|
|
3
|
-
var i = (i) => {
|
|
4
|
-
let a = typeof i == "function", o = n(i);
|
|
5
|
-
e(() => {
|
|
6
|
-
o.current = i;
|
|
7
|
-
}, [i]);
|
|
8
|
-
let s = t(() => typeof i == "function" ? i() : i, [a ? void 0 : i]), [c, l] = r(s.value), u = n(l);
|
|
9
|
-
return e(() => {
|
|
10
|
-
u.current = l;
|
|
11
|
-
}, [l]), c !== s.value && l(s.value), e(() => {
|
|
12
|
-
let e = s.subscribe((e) => {
|
|
13
|
-
u.current(e);
|
|
14
|
-
});
|
|
15
|
-
return () => {
|
|
16
|
-
e(), a && s && typeof s.destroy == "function" && s.destroy();
|
|
17
|
-
};
|
|
18
|
-
}, [s, a]), c;
|
|
19
|
-
};
|
|
20
|
-
//#endregion
|
|
21
|
-
export { i as useReactiveValue0 };
|
|
22
|
-
|
|
23
|
-
//# sourceMappingURL=useReactiveValue0.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useReactiveValue0.mjs","names":[],"sources":["../../../../src/react/hooks/useReactiveValue0/useReactiveValue0.ts"],"sourcesContent":["import { useState, useEffect, useRef, useMemo } from 'react'\nimport { CleanupFn } from '../../../core'\n\ninterface ObservableItem<T> {\n readonly value: T\n subscribe: (cb: (val: T) => void) => CleanupFn\n destroy?: () => void\n}\n\ntype ReactiveInput<T> = ObservableItem<T> | (() => ObservableItem<T>)\n\n/**\n * Изоморфный фоллбэк-хук для извлечения текущего значения из реактивных примитивов ядра\n * (Signal, Computed, Resource) и управления подпиской в окружениях **React 16.8+ и React 17**.\n *\n * В отличие от современной версии `useReactiveValue`, данный хук спроектирован на базе классической\n * связки `useState` + `useEffect`. Он содержит встроенный механизм упреждающей синхронизации\n * (Pre-emptive Synchronization Pattern), предотвращающий рассинхронизацию данных (Tearing) и мерцание UI\n * во время асинхронных микрозадач планировщика React.\n *\n * ### Особенности управления памятью:\n * 1. **Глобальные сигналы (Сервисы/Синглтоны):** При размонтировании компонента хук выполняет\n * только стандартную отписку от обновлений. Метод `.destroy()` **не вызывается**,\n * что сохраняет глобальное состояние системы в безопасности.\n * 2. **Локальные фабрики (`() => engine.computed(...)`):** Если в качестве аргумента передана\n * функция-фабрика, хук понимает, что вычисление создано локально для этого экрана.\n * При анмаунте компонента хук автоматически вызовет `.destroy()`, предотвращая утечки памяти в ядре.\n *\n * @template T - Тип данных, инкапсулированных внутри реактивного элемента.\n * @param {ReactiveInput<T>} input - Готовый реактивный элемент ядра или ленивая функция-фабрика, возвращающая его.\n * @returns {T} Актуальное синхронизированное значение реактивного элемента.\n *\n * @example\n * ```tsx\n * import { useReactiveValue0 } from '@pravosleva/reactive-engine/react';\n * import { userInfoService } from '~/store';\n *\n * // Сценарий 1: Прямая подписка на долгоживущий сигнал сервиса в legacy-компоненте\n * export const LegacyCounterDisplay = () => {\n * const counter = useReactiveValue0(userInfoService.counter);\n * return <span>Значение: {counter}</span>;\n * };\n *\n * // Сценарий 2: Использование ленивой фабрики во React 17 проектах (авто-очистка ядра при анмаунте)\n * export const LegacyFilteredList = ({ query }: { query: string }) => {\n * const filteredData = useReactiveValue0(() =>\n * engine.computed(() => userInfoService.list.value.filter(item => item.includes(query)))\n * );\n * return <ul>{filteredData.map(item => <li key={item}>{item}</li>)}</ul>;\n * };\n * ```\n */\nexport const useReactiveValue0 = <T>(input: ReactiveInput<T>): T => {\n const isFactory = typeof input === 'function'\n\n // NOTE: СТАБИЛИЗАЦИЯ ИНПУТА: защищает от бесконечных циклов при инлайн-стрелочных фабриках\n const factoryRef = useRef(input)\n useEffect(() => {\n factoryRef.current = input\n }, [input])\n\n // Вычисляем элемент строго 1 раз при монтировании, либо при смене ссылки на готовый сигнал\n const reactiveItem = useMemo(() => {\n if (typeof input === 'function') {\n return input() // Ленивый вызов фабрики ровно один раз за жизнь компонента\n }\n return input\n }, [isFactory ? undefined : input]) // Игнорируем ссылки инлайн-функций\n\n const [state, setState] = useState<T>(reactiveItem.value)\n const setStateRef = useRef(setState)\n\n // Держим ссылку на setState всегда актуальной для безопасных асинхронных вызовов\n useEffect(() => {\n setStateRef.current = setState\n }, [setState])\n\n // NOTE: СИНХРОНИЗАЦИЯ НА ОПЕРЕЖЕНИЕ (Теккущее значение):\n // Если между фазой рендера и выполнением useEffect значение в ядре библиотеки успело измениться,\n // мы синхронно подтягиваем актуальный стейт, исключая \"слепые пятна\" и мерцание UI.\n if (state !== reactiveItem.value) {\n setState(reactiveItem.value)\n }\n\n useEffect(() => {\n // Привязываем подписку ядра к триггеру обновлений React\n const unsubscribe = reactiveItem.subscribe((newValue) => {\n setStateRef.current(newValue)\n })\n\n return () => {\n unsubscribe()\n\n // NOTE: БЕЗОПАСНАЯ ОЧИСТКА ПАМЯТИ:\n // Метод .destroy() вызывается СТРОГО если объект был порожден локальной фабрикой.\n // Глобальные сигналы сервисов остаются в безопасности и не стираются из движка!\n if (isFactory && reactiveItem && typeof reactiveItem.destroy === 'function') {\n reactiveItem.destroy()\n }\n }\n }, [reactiveItem, isFactory])\n\n return state\n}\n"],"mappings":";;AAoDA,IAAa,KAAwB,MAA+B;CAClE,IAAM,IAAY,OAAO,KAAU,YAG7B,IAAa,EAAO,CAAK;CAC/B,QAAgB;EACd,EAAW,UAAU;CACvB,GAAG,CAAC,CAAK,CAAC;CAGV,IAAM,IAAe,QACf,OAAO,KAAU,aACZ,EAAM,IAER,GACN,CAAC,IAAY,KAAA,IAAY,CAAK,CAAC,GAE5B,CAAC,GAAO,KAAY,EAAY,EAAa,KAAK,GAClD,IAAc,EAAO,CAAQ;CAgCnC,OA7BA,QAAgB;EACd,EAAY,UAAU;CACxB,GAAG,CAAC,CAAQ,CAAC,GAKT,MAAU,EAAa,SACzB,EAAS,EAAa,KAAK,GAG7B,QAAgB;EAEd,IAAM,IAAc,EAAa,WAAW,MAAa;GACvD,EAAY,QAAQ,CAAQ;EAC9B,CAAC;EAED,aAAa;GAMX,AALA,EAAY,GAKR,KAAa,KAAgB,OAAO,EAAa,WAAY,cAC/D,EAAa,QAAQ;EAEzB;CACF,GAAG,CAAC,GAAc,CAAS,CAAC,GAErB;AACT"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const e=require("../core.cjs");let t=require("vue");var n=class extends e.ReactiveEngineAutomatic{frameworkPrefix=`vue-auto`;reactive(e,t){let n=e=>{if(!(!e||typeof e!=`object`||Symbol.iterator in e)){Reflect.has(e,`__subscribe`)||Object.defineProperty(e,"__subscribe",{get:()=>e=>this.effect(()=>{try{JSON.stringify(r)}catch{Object.values(r)}e()},`vue-proxy-internal-subscription`),configurable:!0,enumerable:!1}),Reflect.has(e,`__v_skip`)||Object.defineProperty(e,"__v_skip",{get:()=>!0,configurable:!0,enumerable:!1});for(let t in e)Object.prototype.hasOwnProperty.call(e,t)&&typeof e[t]==`object`&&n(e[t])}};n(e);let r=super.reactive(e,t);return r}use(e){if(typeof e!=`object`||!e)return(0,t.shallowRef)(e);if(`subscribe`in e&&typeof e.subscribe==`function`){let n=e,r=(0,t.shallowRef)(n.value),i=n.subscribe(e=>{r.value=e,(0,t.triggerRef)(r)});return(0,t.getCurrentInstance)()?(0,t.onUnmounted)(()=>i()):(0,t.getCurrentScope)()&&(0,t.onScopeDispose)(()=>i()),r}let n=(0,t.shallowRef)(e);if(`__subscribe`in e&&typeof e.__subscribe==`function`){let r=e.__subscribe(()=>{(0,t.triggerRef)(n)});(0,t.getCurrentInstance)()?(0,t.onUnmounted)(()=>r()):(0,t.getCurrentScope)()&&(0,t.onScopeDispose)(()=>r())}return n}};exports.ReactiveEngine4VueAutomatic=n;
|
|
2
|
-
//# sourceMappingURL=ReactiveEngine4Vue.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ReactiveEngine4Vue.cjs","names":[],"sources":["../../src/vue/ReactiveEngine4Vue.ts"],"sourcesContent":["import { shallowRef, onUnmounted, getCurrentInstance, getCurrentScope, onScopeDispose, triggerRef, type ShallowRef } from 'vue'\nimport { ReactiveEngine, ReactiveEngineAutomatic } from '../core/core'\nimport { CleanupFn } from '../core/types'\n\nexport interface ISignalLike<V> {\n value: V;\n subscribe: (cb: (v: V) => void) => CleanupFn;\n}\n\n/**\n * 💚 1. СИНХРОННЫЙ РЕАКТИВНЫЙ АДАПТЕР ДЛЯ VUE 3\n * Базируется на плоском синхронном Push/Pull графе ядра.\n */\nexport class ReactiveEngine4Vue extends ReactiveEngine {\n protected override frameworkPrefix = 'vue'\n\n /**\n * Переопределяем метод создания реактивных объектов для Vue-версии движка.\n * Рекурсивно внедряет свойства __subscribe и __v_skip в target, защищая глубокие структуры от Vue 3.\n */\n public override reactive<T extends object>(target: T, name?: string): T {\n // Вспомогательная функция для глубокого рекурсивного внедрения маркеров фреймворка\n const injectVueMarkers = (obj: any) => {\n if (!obj || typeof obj !== 'object' || Symbol.iterator in obj) return\n\n // 1. Внедряем мост подписки __subscribe\n if (!Reflect.has(obj, '__subscribe')) {\n Object.defineProperty(obj, '__subscribe', {\n get: () => {\n return (cb: () => void) => {\n return this.effect(() => {\n try {\n JSON.stringify(originalProxy)\n } catch (e) {\n Object.values(originalProxy as Record<string, unknown>)\n }\n cb()\n }, 'vue-proxy-internal-subscription')\n }\n },\n configurable: true,\n enumerable: false\n })\n }\n\n // 2. Внедряем маркер __v_skip непосредственно в target\n // Благодаря Reflect.get в ядре, этот маркер будет возвращаться для ВСЕХ уровней вложенности графа!\n if (!Reflect.has(obj, '__v_skip')) {\n Object.defineProperty(obj, '__v_skip', {\n get: () => true,\n configurable: true,\n enumerable: false\n })\n }\n\n // Рекурсивно обходим все дочерние свойства, чтобы застраховать вложенные массивы и объекты\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key) && typeof obj[key] === 'object') {\n injectVueMarkers(obj[key])\n }\n }\n }\n\n // Запускаем глубокую инжекцию маркеров во все узлы дерева target\n injectVueMarkers(target)\n\n const originalProxy = super.reactive(target, name)\n return originalProxy\n }\n\n /**\n * Использование реактивного значения во Vue-компоненте или EffectScope.\n */\n public use<T>(item: T): T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T> {\n if (item === null || item === undefined || typeof item !== 'object') {\n const state = shallowRef(item)\n return state as (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\n }\n\n const isSignal = 'subscribe' in item && typeof (item as Record<string, unknown>).subscribe === 'function'\n\n if (isSignal) {\n const signalItem = (item as unknown) as ISignalLike<unknown>\n const state = shallowRef(signalItem.value)\n\n const unsubscribe = signalItem.subscribe((newValue) => {\n state.value = newValue\n triggerRef(state)\n })\n\n if (getCurrentInstance()) {\n onUnmounted(() => unsubscribe())\n } else if (getCurrentScope()) {\n onScopeDispose(() => unsubscribe())\n }\n\n return state as (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\n }\n\n const state = shallowRef(item)\n\n if ('__subscribe' in item && typeof (item as Record<string, unknown>).__subscribe === 'function') {\n const unsubscribe = ((item as Record<string, unknown>).__subscribe as (cb: () => void) => CleanupFn)(() => {\n triggerRef(state)\n })\n\n if (getCurrentInstance()) {\n onUnmounted(() => unsubscribe())\n } else if (getCurrentScope()) {\n onScopeDispose(() => unsubscribe())\n }\n }\n\n return state as (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\n }\n}\n\n/**\n * 🤖 2. АВТОМАТИЧЕСКИЙ РЕАКТИВНЫЙ АДАПТЕР ДЛЯ VUE 3 (АСИНХРОННЫЙ ШЕДУЛЕР)\n * Наследует ReactiveEngineAutomatic и аппаратно склеивает цепочки мутаций в микрозадачи.\n */\nexport class ReactiveEngine4VueAutomatic extends ReactiveEngineAutomatic {\n protected override frameworkPrefix = 'vue-auto'\n\n /**\n * Переопределяем метод создания реактивных объектов для Vue-версии движка.\n * Рекурсивно внедряет свойства __subscribe и __v_skip в target, защищая глубокие структуры от Vue 3.\n */\n public override reactive<T extends object>(target: T, name?: string): T {\n // Вспомогательная функция для глубокого рекурсивного внедрения маркеров фреймворка\n const injectVueMarkers = (obj: any) => {\n if (!obj || typeof obj !== 'object' || Symbol.iterator in obj) return\n\n // 1. Внедряем мост подписки __subscribe\n if (!Reflect.has(obj, '__subscribe')) {\n Object.defineProperty(obj, '__subscribe', {\n get: () => {\n return (cb: () => void) => {\n return this.effect(() => {\n try {\n JSON.stringify(originalProxy)\n } catch (e) {\n Object.values(originalProxy as Record<string, unknown>)\n }\n cb()\n }, 'vue-proxy-internal-subscription')\n }\n },\n configurable: true,\n enumerable: false\n })\n }\n\n // 2. Внедряем маркер __v_skip непосредственно в target\n // Благодаря Reflect.get в ядре, этот маркер будет возвращаться для ВСЕХ уровней вложенности графа!\n if (!Reflect.has(obj, '__v_skip')) {\n Object.defineProperty(obj, '__v_skip', {\n get: () => true,\n configurable: true,\n enumerable: false\n })\n }\n\n // Рекурсивно обходим все дочерние свойства, чтобы застраховать вложенные массивы и объекты\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key) && typeof obj[key] === 'object') {\n injectVueMarkers(obj[key])\n }\n }\n }\n\n // Запускаем глубокую инжекцию маркеров во все узлы дерева target\n injectVueMarkers(target)\n\n const originalProxy = super.reactive(target, name)\n return originalProxy\n }\n\n public use<T>(item: T): T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T> {\n if (item === null || item === undefined || typeof item !== 'object') {\n const state = shallowRef(item)\n return state as (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\n }\n\n const isSignal = 'subscribe' in item && typeof (item as Record<string, unknown>).subscribe === 'function'\n\n if (isSignal) {\n const signalItem = (item as unknown) as ISignalLike<unknown>\n const state = shallowRef(signalItem.value)\n\n const unsubscribe = signalItem.subscribe((newValue) => {\n state.value = newValue\n triggerRef(state)\n })\n\n if (getCurrentInstance()) {\n onUnmounted(() => unsubscribe())\n } else if (getCurrentScope()) {\n onScopeDispose(() => unsubscribe())\n }\n\n return state as (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\n }\n\n const state = shallowRef(item)\n\n if ('__subscribe' in item && typeof (item as Record<string, unknown>).__subscribe === 'function') {\n const unsubscribe = ((item as Record<string, unknown>).__subscribe as (cb: () => void) => CleanupFn)(() => {\n triggerRef(state) // triggerRef теперь будет вызван строго 1 раз на выходе в Event Loop\n })\n\n if (getCurrentInstance()) {\n onUnmounted(() => unsubscribe())\n } else if (getCurrentScope()) {\n onScopeDispose(() => unsubscribe())\n }\n }\n\n return state as (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\n }\n}\n"],"mappings":"oDAyHA,IAAa,EAAb,cAAiD,EAAA,uBAAwB,CACvE,gBAAqC,WAMrC,SAA2C,EAAW,EAAkB,CAEtE,IAAM,EAAoB,GAAa,CACjC,MAAC,GAAO,OAAO,GAAQ,UAAY,OAAO,YAAY,GAwB1D,CArBK,QAAQ,IAAI,EAAK,aAAa,GACjC,OAAO,eAAe,EAAK,cAAe,CACxC,QACU,GACC,KAAK,WAAa,CACvB,GAAI,CACF,KAAK,UAAU,CAAa,CAC9B,MAAY,CACV,OAAO,OAAO,CAAwC,CACxD,CACA,EAAG,CACL,EAAG,iCAAiC,EAGxC,aAAc,GACd,WAAY,EACd,CAAC,EAKE,QAAQ,IAAI,EAAK,UAAU,GAC9B,OAAO,eAAe,EAAK,WAAY,CACrC,QAAW,GACX,aAAc,GACd,WAAY,EACd,CAAC,EAIH,IAAK,IAAM,KAAO,EACZ,OAAO,UAAU,eAAe,KAAK,EAAK,CAAG,GAAK,OAAO,EAAI,IAAS,UACxE,EAAiB,EAAI,EAAI,CAN1B,CASL,EAGA,EAAiB,CAAM,EAEvB,IAAM,EAAgB,MAAM,SAAS,EAAQ,CAAI,EACjD,OAAO,CACT,CAEA,IAAc,EAAyE,CACrF,GAA2C,OAAO,GAAS,WAAvD,EAEF,OAAA,EAAA,EAAA,WAAA,CADyB,CAClB,EAKT,GAFiB,cAAe,GAAQ,OAAQ,EAAiC,WAAc,WAEjF,CACZ,IAAM,EAAc,EACd,GAAA,EAAA,EAAA,WAAA,CAAmB,EAAW,KAAK,EAEnC,EAAc,EAAW,UAAW,GAAa,CACrD,EAAM,MAAQ,GACd,EAAA,EAAA,WAAA,CAAW,CAAK,CAClB,CAAC,EAQD,OANA,EAAA,EAAA,mBAAA,CAAuB,GACrB,EAAA,EAAA,YAAA,KAAkB,EAAY,CAAC,GAC1B,EAAA,EAAA,gBAAA,CAAoB,IACzB,EAAA,EAAA,eAAA,KAAqB,EAAY,CAAC,EAG7B,CACT,CAEA,IAAM,GAAA,EAAA,EAAA,WAAA,CAAmB,CAAI,EAE7B,GAAI,gBAAiB,GAAQ,OAAQ,EAAiC,aAAgB,WAAY,CAChG,IAAM,EAAgB,EAAiC,gBAAoD,EACzG,EAAA,EAAA,WAAA,CAAW,CAAK,CAClB,CAAC,GAED,EAAA,EAAA,mBAAA,CAAuB,GACrB,EAAA,EAAA,YAAA,KAAkB,EAAY,CAAC,GAC1B,EAAA,EAAA,gBAAA,CAAoB,IACzB,EAAA,EAAA,eAAA,KAAqB,EAAY,CAAC,CAEtC,CAEA,OAAO,CACT,CACF"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { ShallowRef } from 'vue';
|
|
2
|
-
import { ReactiveEngine, ReactiveEngineAutomatic } from '../core/core';
|
|
3
|
-
import { CleanupFn } from '../core/types';
|
|
4
|
-
export interface ISignalLike<V> {
|
|
5
|
-
value: V;
|
|
6
|
-
subscribe: (cb: (v: V) => void) => CleanupFn;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* 💚 1. СИНХРОННЫЙ РЕАКТИВНЫЙ АДАПТЕР ДЛЯ VUE 3
|
|
10
|
-
* Базируется на плоском синхронном Push/Pull графе ядра.
|
|
11
|
-
*/
|
|
12
|
-
export declare class ReactiveEngine4Vue extends ReactiveEngine {
|
|
13
|
-
protected frameworkPrefix: string;
|
|
14
|
-
/**
|
|
15
|
-
* Переопределяем метод создания реактивных объектов для Vue-версии движка.
|
|
16
|
-
* Рекурсивно внедряет свойства __subscribe и __v_skip в target, защищая глубокие структуры от Vue 3.
|
|
17
|
-
*/
|
|
18
|
-
reactive<T extends object>(target: T, name?: string): T;
|
|
19
|
-
/**
|
|
20
|
-
* Использование реактивного значения во Vue-компоненте или EffectScope.
|
|
21
|
-
*/
|
|
22
|
-
use<T>(item: T): T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* 🤖 2. АВТОМАТИЧЕСКИЙ РЕАКТИВНЫЙ АДАПТЕР ДЛЯ VUE 3 (АСИНХРОННЫЙ ШЕДУЛЕР)
|
|
26
|
-
* Наследует ReactiveEngineAutomatic и аппаратно склеивает цепочки мутаций в микрозадачи.
|
|
27
|
-
*/
|
|
28
|
-
export declare class ReactiveEngine4VueAutomatic extends ReactiveEngineAutomatic {
|
|
29
|
-
protected frameworkPrefix: string;
|
|
30
|
-
/**
|
|
31
|
-
* Переопределяем метод создания реактивных объектов для Vue-версии движка.
|
|
32
|
-
* Рекурсивно внедряет свойства __subscribe и __v_skip в target, защищая глубокие структуры от Vue 3.
|
|
33
|
-
*/
|
|
34
|
-
reactive<T extends object>(target: T, name?: string): T;
|
|
35
|
-
use<T>(item: T): T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>;
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=ReactiveEngine4Vue.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ReactiveEngine4Vue.d.ts","sourceRoot":"","sources":["../../src/vue/ReactiveEngine4Vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4F,KAAK,UAAU,EAAE,MAAM,KAAK,CAAA;AAC/H,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAEzC,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAC;IACT,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,KAAK,SAAS,CAAC;CAC9C;AAED;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,cAAc;IACpD,UAAmB,eAAe,SAAQ;IAE1C;;;OAGG;IACa,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,CAAC;IAkDvE;;OAEG;IACI,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;CA0CvF;AAED;;;GAGG;AACH,qBAAa,2BAA4B,SAAQ,uBAAuB;IACtE,UAAmB,eAAe,SAAa;IAE/C;;;OAGG;IACa,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,CAAC;IAkDhE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;CA0CvF"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { ReactiveEngineAutomatic as e } from "../core.mjs";
|
|
2
|
-
import { getCurrentInstance as t, getCurrentScope as n, onScopeDispose as r, onUnmounted as i, shallowRef as a, triggerRef as o } from "vue";
|
|
3
|
-
//#region src/vue/ReactiveEngine4Vue.ts
|
|
4
|
-
var s = class extends e {
|
|
5
|
-
frameworkPrefix = "vue-auto";
|
|
6
|
-
reactive(e, t) {
|
|
7
|
-
let n = (e) => {
|
|
8
|
-
if (!(!e || typeof e != "object" || Symbol.iterator in e)) {
|
|
9
|
-
Reflect.has(e, "__subscribe") || Object.defineProperty(e, "__subscribe", {
|
|
10
|
-
get: () => (e) => this.effect(() => {
|
|
11
|
-
try {
|
|
12
|
-
JSON.stringify(r);
|
|
13
|
-
} catch {
|
|
14
|
-
Object.values(r);
|
|
15
|
-
}
|
|
16
|
-
e();
|
|
17
|
-
}, "vue-proxy-internal-subscription"),
|
|
18
|
-
configurable: !0,
|
|
19
|
-
enumerable: !1
|
|
20
|
-
}), Reflect.has(e, "__v_skip") || Object.defineProperty(e, "__v_skip", {
|
|
21
|
-
get: () => !0,
|
|
22
|
-
configurable: !0,
|
|
23
|
-
enumerable: !1
|
|
24
|
-
});
|
|
25
|
-
for (let t in e) Object.prototype.hasOwnProperty.call(e, t) && typeof e[t] == "object" && n(e[t]);
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
n(e);
|
|
29
|
-
let r = super.reactive(e, t);
|
|
30
|
-
return r;
|
|
31
|
-
}
|
|
32
|
-
use(e) {
|
|
33
|
-
if (typeof e != "object" || !e) return a(e);
|
|
34
|
-
if ("subscribe" in e && typeof e.subscribe == "function") {
|
|
35
|
-
let s = e, c = a(s.value), l = s.subscribe((e) => {
|
|
36
|
-
c.value = e, o(c);
|
|
37
|
-
});
|
|
38
|
-
return t() ? i(() => l()) : n() && r(() => l()), c;
|
|
39
|
-
}
|
|
40
|
-
let s = a(e);
|
|
41
|
-
if ("__subscribe" in e && typeof e.__subscribe == "function") {
|
|
42
|
-
let a = e.__subscribe(() => {
|
|
43
|
-
o(s);
|
|
44
|
-
});
|
|
45
|
-
t() ? i(() => a()) : n() && r(() => a());
|
|
46
|
-
}
|
|
47
|
-
return s;
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
//#endregion
|
|
51
|
-
export { s as ReactiveEngine4VueAutomatic };
|
|
52
|
-
|
|
53
|
-
//# sourceMappingURL=ReactiveEngine4Vue.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ReactiveEngine4Vue.mjs","names":[],"sources":["../../src/vue/ReactiveEngine4Vue.ts"],"sourcesContent":["import { shallowRef, onUnmounted, getCurrentInstance, getCurrentScope, onScopeDispose, triggerRef, type ShallowRef } from 'vue'\nimport { ReactiveEngine, ReactiveEngineAutomatic } from '../core/core'\nimport { CleanupFn } from '../core/types'\n\nexport interface ISignalLike<V> {\n value: V;\n subscribe: (cb: (v: V) => void) => CleanupFn;\n}\n\n/**\n * 💚 1. СИНХРОННЫЙ РЕАКТИВНЫЙ АДАПТЕР ДЛЯ VUE 3\n * Базируется на плоском синхронном Push/Pull графе ядра.\n */\nexport class ReactiveEngine4Vue extends ReactiveEngine {\n protected override frameworkPrefix = 'vue'\n\n /**\n * Переопределяем метод создания реактивных объектов для Vue-версии движка.\n * Рекурсивно внедряет свойства __subscribe и __v_skip в target, защищая глубокие структуры от Vue 3.\n */\n public override reactive<T extends object>(target: T, name?: string): T {\n // Вспомогательная функция для глубокого рекурсивного внедрения маркеров фреймворка\n const injectVueMarkers = (obj: any) => {\n if (!obj || typeof obj !== 'object' || Symbol.iterator in obj) return\n\n // 1. Внедряем мост подписки __subscribe\n if (!Reflect.has(obj, '__subscribe')) {\n Object.defineProperty(obj, '__subscribe', {\n get: () => {\n return (cb: () => void) => {\n return this.effect(() => {\n try {\n JSON.stringify(originalProxy)\n } catch (e) {\n Object.values(originalProxy as Record<string, unknown>)\n }\n cb()\n }, 'vue-proxy-internal-subscription')\n }\n },\n configurable: true,\n enumerable: false\n })\n }\n\n // 2. Внедряем маркер __v_skip непосредственно в target\n // Благодаря Reflect.get в ядре, этот маркер будет возвращаться для ВСЕХ уровней вложенности графа!\n if (!Reflect.has(obj, '__v_skip')) {\n Object.defineProperty(obj, '__v_skip', {\n get: () => true,\n configurable: true,\n enumerable: false\n })\n }\n\n // Рекурсивно обходим все дочерние свойства, чтобы застраховать вложенные массивы и объекты\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key) && typeof obj[key] === 'object') {\n injectVueMarkers(obj[key])\n }\n }\n }\n\n // Запускаем глубокую инжекцию маркеров во все узлы дерева target\n injectVueMarkers(target)\n\n const originalProxy = super.reactive(target, name)\n return originalProxy\n }\n\n /**\n * Использование реактивного значения во Vue-компоненте или EffectScope.\n */\n public use<T>(item: T): T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T> {\n if (item === null || item === undefined || typeof item !== 'object') {\n const state = shallowRef(item)\n return state as (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\n }\n\n const isSignal = 'subscribe' in item && typeof (item as Record<string, unknown>).subscribe === 'function'\n\n if (isSignal) {\n const signalItem = (item as unknown) as ISignalLike<unknown>\n const state = shallowRef(signalItem.value)\n\n const unsubscribe = signalItem.subscribe((newValue) => {\n state.value = newValue\n triggerRef(state)\n })\n\n if (getCurrentInstance()) {\n onUnmounted(() => unsubscribe())\n } else if (getCurrentScope()) {\n onScopeDispose(() => unsubscribe())\n }\n\n return state as (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\n }\n\n const state = shallowRef(item)\n\n if ('__subscribe' in item && typeof (item as Record<string, unknown>).__subscribe === 'function') {\n const unsubscribe = ((item as Record<string, unknown>).__subscribe as (cb: () => void) => CleanupFn)(() => {\n triggerRef(state)\n })\n\n if (getCurrentInstance()) {\n onUnmounted(() => unsubscribe())\n } else if (getCurrentScope()) {\n onScopeDispose(() => unsubscribe())\n }\n }\n\n return state as (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\n }\n}\n\n/**\n * 🤖 2. АВТОМАТИЧЕСКИЙ РЕАКТИВНЫЙ АДАПТЕР ДЛЯ VUE 3 (АСИНХРОННЫЙ ШЕДУЛЕР)\n * Наследует ReactiveEngineAutomatic и аппаратно склеивает цепочки мутаций в микрозадачи.\n */\nexport class ReactiveEngine4VueAutomatic extends ReactiveEngineAutomatic {\n protected override frameworkPrefix = 'vue-auto'\n\n /**\n * Переопределяем метод создания реактивных объектов для Vue-версии движка.\n * Рекурсивно внедряет свойства __subscribe и __v_skip в target, защищая глубокие структуры от Vue 3.\n */\n public override reactive<T extends object>(target: T, name?: string): T {\n // Вспомогательная функция для глубокого рекурсивного внедрения маркеров фреймворка\n const injectVueMarkers = (obj: any) => {\n if (!obj || typeof obj !== 'object' || Symbol.iterator in obj) return\n\n // 1. Внедряем мост подписки __subscribe\n if (!Reflect.has(obj, '__subscribe')) {\n Object.defineProperty(obj, '__subscribe', {\n get: () => {\n return (cb: () => void) => {\n return this.effect(() => {\n try {\n JSON.stringify(originalProxy)\n } catch (e) {\n Object.values(originalProxy as Record<string, unknown>)\n }\n cb()\n }, 'vue-proxy-internal-subscription')\n }\n },\n configurable: true,\n enumerable: false\n })\n }\n\n // 2. Внедряем маркер __v_skip непосредственно в target\n // Благодаря Reflect.get в ядре, этот маркер будет возвращаться для ВСЕХ уровней вложенности графа!\n if (!Reflect.has(obj, '__v_skip')) {\n Object.defineProperty(obj, '__v_skip', {\n get: () => true,\n configurable: true,\n enumerable: false\n })\n }\n\n // Рекурсивно обходим все дочерние свойства, чтобы застраховать вложенные массивы и объекты\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key) && typeof obj[key] === 'object') {\n injectVueMarkers(obj[key])\n }\n }\n }\n\n // Запускаем глубокую инжекцию маркеров во все узлы дерева target\n injectVueMarkers(target)\n\n const originalProxy = super.reactive(target, name)\n return originalProxy\n }\n\n public use<T>(item: T): T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T> {\n if (item === null || item === undefined || typeof item !== 'object') {\n const state = shallowRef(item)\n return state as (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\n }\n\n const isSignal = 'subscribe' in item && typeof (item as Record<string, unknown>).subscribe === 'function'\n\n if (isSignal) {\n const signalItem = (item as unknown) as ISignalLike<unknown>\n const state = shallowRef(signalItem.value)\n\n const unsubscribe = signalItem.subscribe((newValue) => {\n state.value = newValue\n triggerRef(state)\n })\n\n if (getCurrentInstance()) {\n onUnmounted(() => unsubscribe())\n } else if (getCurrentScope()) {\n onScopeDispose(() => unsubscribe())\n }\n\n return state as (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\n }\n\n const state = shallowRef(item)\n\n if ('__subscribe' in item && typeof (item as Record<string, unknown>).__subscribe === 'function') {\n const unsubscribe = ((item as Record<string, unknown>).__subscribe as (cb: () => void) => CleanupFn)(() => {\n triggerRef(state) // triggerRef теперь будет вызван строго 1 раз на выходе в Event Loop\n })\n\n if (getCurrentInstance()) {\n onUnmounted(() => unsubscribe())\n } else if (getCurrentScope()) {\n onScopeDispose(() => unsubscribe())\n }\n }\n\n return state as (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\n }\n}\n"],"mappings":";;;AAyHA,IAAa,IAAb,cAAiD,EAAwB;CACvE,kBAAqC;CAMrC,SAA2C,GAAW,GAAkB;EAEtE,IAAM,KAAoB,MAAa;GACjC,OAAC,KAAO,OAAO,KAAQ,YAAY,OAAO,YAAY,IAwB1D;IArBK,QAAQ,IAAI,GAAK,aAAa,KACjC,OAAO,eAAe,GAAK,eAAe;KACxC,YACU,MACC,KAAK,aAAa;MACvB,IAAI;OACF,KAAK,UAAU,CAAa;MAC9B,QAAY;OACV,OAAO,OAAO,CAAwC;MACxD;MACA,EAAG;KACL,GAAG,iCAAiC;KAGxC,cAAc;KACd,YAAY;IACd,CAAC,GAKE,QAAQ,IAAI,GAAK,UAAU,KAC9B,OAAO,eAAe,GAAK,YAAY;KACrC,WAAW;KACX,cAAc;KACd,YAAY;IACd,CAAC;IAIH,KAAK,IAAM,KAAO,GAChB,AAAI,OAAO,UAAU,eAAe,KAAK,GAAK,CAAG,KAAK,OAAO,EAAI,MAAS,YACxE,EAAiB,EAAI,EAAI;GAN1B;EASL;EAGA,EAAiB,CAAM;EAEvB,IAAM,IAAgB,MAAM,SAAS,GAAQ,CAAI;EACjD,OAAO;CACT;CAEA,IAAc,GAAyE;EACrF,IAA2C,OAAO,KAAS,aAAvD,GAEF,OADc,EAAW,CAClB;EAKT,IAFiB,eAAe,KAAQ,OAAQ,EAAiC,aAAc,YAEjF;GACZ,IAAM,IAAc,GACd,IAAQ,EAAW,EAAW,KAAK,GAEnC,IAAc,EAAW,WAAW,MAAa;IAErD,AADA,EAAM,QAAQ,GACd,EAAW,CAAK;GAClB,CAAC;GAQD,OANI,EAAmB,IACrB,QAAkB,EAAY,CAAC,IACtB,EAAgB,KACzB,QAAqB,EAAY,CAAC,GAG7B;EACT;EAEA,IAAM,IAAQ,EAAW,CAAI;EAE7B,IAAI,iBAAiB,KAAQ,OAAQ,EAAiC,eAAgB,YAAY;GAChG,IAAM,IAAgB,EAAiC,kBAAoD;IACzG,EAAW,CAAK;GAClB,CAAC;GAED,AAAI,EAAmB,IACrB,QAAkB,EAAY,CAAC,IACtB,EAAgB,KACzB,QAAqB,EAAY,CAAC;EAEtC;EAEA,OAAO;CACT;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/vue/composables/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useReactiveValue.auto.test.d.ts","sourceRoot":"","sources":["../../../src/vue/composables/useReactiveValue.auto.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
let e=require("vue");function t(t){let n=t&&typeof t==`object`&&`subscribe`in t&&typeof t.subscribe==`function`,r=(0,e.shallowRef)(n?t.value:t),i=typeof window>`u`||typeof process<`u`&&process.server,a=(0,e.getCurrentInstance)()||(0,e.getCurrentScope)();if(i||!a)return r;let o=()=>{};if(n)o=t.subscribe(t=>{r.value=t,(0,e.triggerRef)(r)});else if(t&&typeof t==`object`)o=`__subscribe`in t&&typeof t.__subscribe==`function`?t.__subscribe(()=>{(0,e.triggerRef)(r)}):()=>{};else return r;return(0,e.getCurrentInstance)()?(0,e.onUnmounted)(o):(0,e.getCurrentScope)()&&(0,e.onScopeDispose)(o),r}exports.useReactiveValue=t;
|
|
2
|
-
//# sourceMappingURL=useReactiveValue.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useReactiveValue.cjs","names":[],"sources":["../../../src/vue/composables/useReactiveValue.ts"],"sourcesContent":["import { shallowRef, onUnmounted, getCurrentInstance, getCurrentScope, onScopeDispose, triggerRef, getCurrentScope as getCurrentVueScope, effect as vueEffect, type ShallowRef } from 'vue'\n\ntype CleanupFn = () => void\n\nexport interface ISignalLike<V> {\n value: V\n subscribe: (cb: (v: V) => void) => CleanupFn\n}\n\n/**\n * Хук-композибл для бесшовной интеграции примитивов реактивного ядра с системой рендеринга Vue 3.\n */\nexport function useReactiveValue<T>(item: T): T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T> {\n const isSignal = item &&\n typeof item === 'object' &&\n 'subscribe' in item &&\n typeof (item as Record<string, unknown>).subscribe === 'function'\n\n const initialValue = isSignal\n ? ((item as unknown) as ISignalLike<unknown>).value\n : item\n\n const state = shallowRef(initialValue)\n\n const isServer = typeof window === 'undefined' || (typeof process !== 'undefined' && (process as any).server)\n const hasInstance = getCurrentInstance() || getCurrentScope()\n\n if (isServer || !hasInstance) {\n return state as (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\n }\n\n let unsubscribe: CleanupFn = () => {}\n\n // ------------------------------------------------====\n // СЦЕНАРИЙ А: Подписка на примитивный Сигнал / Computed\n // ------------------------------------------------====\n if (isSignal) {\n const signalItem = (item as unknown) as ISignalLike<unknown>\n unsubscribe = signalItem.subscribe((newValue) => {\n state.value = newValue\n triggerRef(state)\n })\n }\n // ------------------------------------------------====\n // СЦЕНАРИЙ Б: Подписка на глубокий Proxy-объект / Массив\n // ------------------------------------------------====\n else if (item && typeof item === 'object') {\n if ('__subscribe' in item && typeof (item as Record<string, unknown>).__subscribe === 'function') {\n unsubscribe = ((item as Record<string, unknown>).__subscribe as (cb: () => void) => CleanupFn)(() => {\n triggerRef(state)\n })\n } else {\n // НАДЕЖНЫЙ ФОЛЛБЭК: Если объект создан не через ReactiveEngine4Vue,\n // заставляем реф мутировать принудительно (но в тестах переводим на честный ReactiveEngine4Vue)\n unsubscribe = () => {}\n }\n }\n else {\n return state as (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\n }\n\n if (getCurrentInstance()) {\n onUnmounted(unsubscribe)\n } else if (getCurrentVueScope()) {\n onScopeDispose(unsubscribe)\n }\n\n return state as (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\n}\n"],"mappings":"qBAYA,SAAgB,EAAoB,EAAyE,CAC3G,IAAM,EAAW,GACA,OAAO,GAAS,UAChB,cAAe,GACf,OAAQ,EAAiC,WAAc,WAMlE,GAAA,EAAA,EAAA,WAAA,CAJe,EACf,EAA0C,MAC5C,CAEiC,EAE/B,EAAW,OAAO,OAAW,KAAgB,OAAO,QAAY,KAAgB,QAAgB,OAChG,GAAA,EAAA,EAAA,mBAAA,CAAiC,IAAA,EAAA,EAAA,gBAAA,CAAqB,EAE5D,GAAI,GAAY,CAAC,EACf,OAAO,EAGT,IAAI,MAA+B,CAAC,EAKpC,GAAI,EAEF,EAAc,EAAW,UAAW,GAAa,CAC/C,EAAM,MAAQ,GACd,EAAA,EAAA,WAAA,CAAW,CAAK,CAClB,CAAC,OAKE,GAAI,GAAQ,OAAO,GAAS,SAC/B,AAOE,EAPE,gBAAiB,GAAQ,OAAQ,EAAiC,aAAgB,WACpE,EAAiC,gBAAoD,EACnG,EAAA,EAAA,WAAA,CAAW,CAAK,CAClB,CAAC,MAImB,CAAC,OAIvB,OAAO,EAST,OANA,EAAA,EAAA,mBAAA,CAAuB,GACrB,EAAA,EAAA,YAAA,CAAY,CAAW,GAClB,EAAA,EAAA,gBAAA,CAAuB,IAC5B,EAAA,EAAA,eAAA,CAAe,CAAW,EAGrB,CACT"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { ShallowRef } from 'vue';
|
|
2
|
-
type CleanupFn = () => void;
|
|
3
|
-
export interface ISignalLike<V> {
|
|
4
|
-
value: V;
|
|
5
|
-
subscribe: (cb: (v: V) => void) => CleanupFn;
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Хук-композибл для бесшовной интеграции примитивов реактивного ядра с системой рендеринга Vue 3.
|
|
9
|
-
*/
|
|
10
|
-
export declare function useReactiveValue<T>(item: T): T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>;
|
|
11
|
-
export {};
|
|
12
|
-
//# sourceMappingURL=useReactiveValue.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useReactiveValue.d.ts","sourceRoot":"","sources":["../../../src/vue/composables/useReactiveValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwJ,KAAK,UAAU,EAAE,MAAM,KAAK,CAAA;AAE3L,KAAK,SAAS,GAAG,MAAM,IAAI,CAAA;AAE3B,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAA;IACR,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,KAAK,SAAS,CAAA;CAC7C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAwD3G"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { getCurrentInstance as e, getCurrentScope as t, onScopeDispose as n, onUnmounted as r, shallowRef as i, triggerRef as a } from "vue";
|
|
2
|
-
//#region src/vue/composables/useReactiveValue.ts
|
|
3
|
-
function o(o) {
|
|
4
|
-
let s = o && typeof o == "object" && "subscribe" in o && typeof o.subscribe == "function", c = i(s ? o.value : o), l = typeof window > "u" || typeof process < "u" && process.server, u = e() || t();
|
|
5
|
-
if (l || !u) return c;
|
|
6
|
-
let d = () => {};
|
|
7
|
-
if (s) d = o.subscribe((e) => {
|
|
8
|
-
c.value = e, a(c);
|
|
9
|
-
});
|
|
10
|
-
else if (o && typeof o == "object") d = "__subscribe" in o && typeof o.__subscribe == "function" ? o.__subscribe(() => {
|
|
11
|
-
a(c);
|
|
12
|
-
}) : () => {};
|
|
13
|
-
else return c;
|
|
14
|
-
return e() ? r(d) : t() && n(d), c;
|
|
15
|
-
}
|
|
16
|
-
//#endregion
|
|
17
|
-
export { o as useReactiveValue };
|
|
18
|
-
|
|
19
|
-
//# sourceMappingURL=useReactiveValue.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useReactiveValue.mjs","names":[],"sources":["../../../src/vue/composables/useReactiveValue.ts"],"sourcesContent":["import { shallowRef, onUnmounted, getCurrentInstance, getCurrentScope, onScopeDispose, triggerRef, getCurrentScope as getCurrentVueScope, effect as vueEffect, type ShallowRef } from 'vue'\n\ntype CleanupFn = () => void\n\nexport interface ISignalLike<V> {\n value: V\n subscribe: (cb: (v: V) => void) => CleanupFn\n}\n\n/**\n * Хук-композибл для бесшовной интеграции примитивов реактивного ядра с системой рендеринга Vue 3.\n */\nexport function useReactiveValue<T>(item: T): T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T> {\n const isSignal = item &&\n typeof item === 'object' &&\n 'subscribe' in item &&\n typeof (item as Record<string, unknown>).subscribe === 'function'\n\n const initialValue = isSignal\n ? ((item as unknown) as ISignalLike<unknown>).value\n : item\n\n const state = shallowRef(initialValue)\n\n const isServer = typeof window === 'undefined' || (typeof process !== 'undefined' && (process as any).server)\n const hasInstance = getCurrentInstance() || getCurrentScope()\n\n if (isServer || !hasInstance) {\n return state as (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\n }\n\n let unsubscribe: CleanupFn = () => {}\n\n // ------------------------------------------------====\n // СЦЕНАРИЙ А: Подписка на примитивный Сигнал / Computed\n // ------------------------------------------------====\n if (isSignal) {\n const signalItem = (item as unknown) as ISignalLike<unknown>\n unsubscribe = signalItem.subscribe((newValue) => {\n state.value = newValue\n triggerRef(state)\n })\n }\n // ------------------------------------------------====\n // СЦЕНАРИЙ Б: Подписка на глубокий Proxy-объект / Массив\n // ------------------------------------------------====\n else if (item && typeof item === 'object') {\n if ('__subscribe' in item && typeof (item as Record<string, unknown>).__subscribe === 'function') {\n unsubscribe = ((item as Record<string, unknown>).__subscribe as (cb: () => void) => CleanupFn)(() => {\n triggerRef(state)\n })\n } else {\n // НАДЕЖНЫЙ ФОЛЛБЭК: Если объект создан не через ReactiveEngine4Vue,\n // заставляем реф мутировать принудительно (но в тестах переводим на честный ReactiveEngine4Vue)\n unsubscribe = () => {}\n }\n }\n else {\n return state as (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\n }\n\n if (getCurrentInstance()) {\n onUnmounted(unsubscribe)\n } else if (getCurrentVueScope()) {\n onScopeDispose(unsubscribe)\n }\n\n return state as (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\n}\n"],"mappings":";;AAYA,SAAgB,EAAoB,GAAyE;CAC3G,IAAM,IAAW,KACA,OAAO,KAAS,YAChB,eAAe,KACf,OAAQ,EAAiC,aAAc,YAMlE,IAAQ,EAJO,IACf,EAA0C,QAC5C,CAEiC,GAE/B,IAAW,OAAO,SAAW,OAAgB,OAAO,UAAY,OAAgB,QAAgB,QAChG,IAAc,EAAmB,KAAK,EAAgB;CAE5D,IAAI,KAAY,CAAC,GACf,OAAO;CAGT,IAAI,UAA+B,CAAC;CAKpC,IAAI,GAEF,IAAc,EAAW,WAAW,MAAa;EAE/C,AADA,EAAM,QAAQ,GACd,EAAW,CAAK;CAClB,CAAC;MAKE,IAAI,KAAQ,OAAO,KAAS,UAC/B,AAOE,IAPE,iBAAiB,KAAQ,OAAQ,EAAiC,eAAgB,aACpE,EAAiC,kBAAoD;EACnG,EAAW,CAAK;CAClB,CAAC,UAImB,CAAC;MAIvB,OAAO;CAST,OANI,EAAmB,IACrB,EAAY,CAAW,IACd,EAAmB,KAC5B,EAAe,CAAW,GAGrB;AACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useReactiveValue.test.d.ts","sourceRoot":"","sources":["../../../src/vue/composables/useReactiveValue.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"core.vue.auto.test.d.ts","sourceRoot":"","sources":["../../src/vue/core.vue.auto.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"core.vue.test.d.ts","sourceRoot":"","sources":["../../src/vue/core.vue.test.ts"],"names":[],"mappings":""}
|