@wcstack/state 1.3.14 → 1.3.16
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.ja.md +37 -13
- package/README.md +36 -12
- package/package.json +5 -4
- package/dist/address/AbsolutePathInfo.d.ts +0 -4
- package/dist/address/AbsolutePathInfo.d.ts.map +0 -1
- package/dist/address/AbsolutePathInfo.js +0 -33
- package/dist/address/AbsolutePathInfo.js.map +0 -1
- package/dist/address/AbsoluteStateAddress.d.ts +0 -4
- package/dist/address/AbsoluteStateAddress.d.ts.map +0 -1
- package/dist/address/AbsoluteStateAddress.js +0 -56
- package/dist/address/AbsoluteStateAddress.js.map +0 -1
- package/dist/address/PathInfo.d.ts +0 -3
- package/dist/address/PathInfo.d.ts.map +0 -1
- package/dist/address/PathInfo.js +0 -104
- package/dist/address/PathInfo.js.map +0 -1
- package/dist/address/ResolvedAddress.d.ts +0 -31
- package/dist/address/ResolvedAddress.d.ts.map +0 -1
- package/dist/address/ResolvedAddress.js +0 -110
- package/dist/address/ResolvedAddress.js.map +0 -1
- package/dist/address/StateAddress.d.ts +0 -4
- package/dist/address/StateAddress.d.ts.map +0 -1
- package/dist/address/StateAddress.js +0 -56
- package/dist/address/StateAddress.js.map +0 -1
- package/dist/address/calcWildcardLen.d.ts +0 -3
- package/dist/address/calcWildcardLen.d.ts.map +0 -1
- package/dist/address/calcWildcardLen.js +0 -31
- package/dist/address/calcWildcardLen.js.map +0 -1
- package/dist/address/types.d.ts +0 -54
- package/dist/address/types.d.ts.map +0 -1
- package/dist/address/types.js +0 -2
- package/dist/address/types.js.map +0 -1
- package/dist/apply/applyChange.d.ts +0 -4
- package/dist/apply/applyChange.d.ts.map +0 -1
- package/dist/apply/applyChange.js +0 -116
- package/dist/apply/applyChange.js.map +0 -1
- package/dist/apply/applyChangeFromBindings.d.ts +0 -13
- package/dist/apply/applyChangeFromBindings.d.ts.map +0 -1
- package/dist/apply/applyChangeFromBindings.js +0 -86
- package/dist/apply/applyChangeFromBindings.js.map +0 -1
- package/dist/apply/applyChangeToAttribute.d.ts +0 -4
- package/dist/apply/applyChangeToAttribute.d.ts.map +0 -1
- package/dist/apply/applyChangeToAttribute.js +0 -8
- package/dist/apply/applyChangeToAttribute.js.map +0 -1
- package/dist/apply/applyChangeToCheckbox.d.ts +0 -4
- package/dist/apply/applyChangeToCheckbox.d.ts.map +0 -1
- package/dist/apply/applyChangeToCheckbox.js +0 -11
- package/dist/apply/applyChangeToCheckbox.js.map +0 -1
- package/dist/apply/applyChangeToClass.d.ts +0 -4
- package/dist/apply/applyChangeToClass.d.ts.map +0 -1
- package/dist/apply/applyChangeToClass.js +0 -10
- package/dist/apply/applyChangeToClass.js.map +0 -1
- package/dist/apply/applyChangeToFor.d.ts +0 -9
- package/dist/apply/applyChangeToFor.d.ts.map +0 -1
- package/dist/apply/applyChangeToFor.js +0 -186
- package/dist/apply/applyChangeToFor.js.map +0 -1
- package/dist/apply/applyChangeToIf.d.ts +0 -4
- package/dist/apply/applyChangeToIf.d.ts.map +0 -1
- package/dist/apply/applyChangeToIf.js +0 -42
- package/dist/apply/applyChangeToIf.js.map +0 -1
- package/dist/apply/applyChangeToProperty.d.ts +0 -4
- package/dist/apply/applyChangeToProperty.d.ts.map +0 -1
- package/dist/apply/applyChangeToProperty.js +0 -37
- package/dist/apply/applyChangeToProperty.js.map +0 -1
- package/dist/apply/applyChangeToRadio.d.ts +0 -4
- package/dist/apply/applyChangeToRadio.d.ts.map +0 -1
- package/dist/apply/applyChangeToRadio.js +0 -8
- package/dist/apply/applyChangeToRadio.js.map +0 -1
- package/dist/apply/applyChangeToStyle.d.ts +0 -4
- package/dist/apply/applyChangeToStyle.d.ts.map +0 -1
- package/dist/apply/applyChangeToStyle.js +0 -9
- package/dist/apply/applyChangeToStyle.js.map +0 -1
- package/dist/apply/applyChangeToText.d.ts +0 -4
- package/dist/apply/applyChangeToText.d.ts.map +0 -1
- package/dist/apply/applyChangeToText.js +0 -6
- package/dist/apply/applyChangeToText.js.map +0 -1
- package/dist/apply/applyChangeToWebComponent.d.ts +0 -4
- package/dist/apply/applyChangeToWebComponent.d.ts.map +0 -1
- package/dist/apply/applyChangeToWebComponent.js +0 -15
- package/dist/apply/applyChangeToWebComponent.js.map +0 -1
- package/dist/apply/getFilteredValue.d.ts +0 -3
- package/dist/apply/getFilteredValue.d.ts.map +0 -1
- package/dist/apply/getFilteredValue.js +0 -8
- package/dist/apply/getFilteredValue.js.map +0 -1
- package/dist/apply/getValue.d.ts +0 -4
- package/dist/apply/getValue.d.ts.map +0 -1
- package/dist/apply/getValue.js +0 -20
- package/dist/apply/getValue.js.map +0 -1
- package/dist/apply/rootNodeByFragment.d.ts +0 -3
- package/dist/apply/rootNodeByFragment.d.ts.map +0 -1
- package/dist/apply/rootNodeByFragment.js +0 -13
- package/dist/apply/rootNodeByFragment.js.map +0 -1
- package/dist/apply/types.d.ts +0 -20
- package/dist/apply/types.d.ts.map +0 -1
- package/dist/apply/types.js +0 -2
- package/dist/apply/types.js.map +0 -1
- package/dist/applyChangeToNode.d.ts +0 -2
- package/dist/applyChangeToNode.d.ts.map +0 -1
- package/dist/applyChangeToNode.js +0 -38
- package/dist/applyChangeToNode.js.map +0 -1
- package/dist/bindTextParser/parseBindTextForEmbeddedNode.d.ts +0 -3
- package/dist/bindTextParser/parseBindTextForEmbeddedNode.d.ts.map +0 -1
- package/dist/bindTextParser/parseBindTextForEmbeddedNode.js +0 -13
- package/dist/bindTextParser/parseBindTextForEmbeddedNode.js.map +0 -1
- package/dist/bindTextParser/parseBindTextsForElement.d.ts +0 -3
- package/dist/bindTextParser/parseBindTextsForElement.d.ts.map +0 -1
- package/dist/bindTextParser/parseBindTextsForElement.js +0 -80
- package/dist/bindTextParser/parseBindTextsForElement.js.map +0 -1
- package/dist/bindTextParser/parseFilterArgs.d.ts +0 -2
- package/dist/bindTextParser/parseFilterArgs.d.ts.map +0 -1
- package/dist/bindTextParser/parseFilterArgs.js +0 -31
- package/dist/bindTextParser/parseFilterArgs.js.map +0 -1
- package/dist/bindTextParser/parseFilters.d.ts +0 -4
- package/dist/bindTextParser/parseFilters.d.ts.map +0 -1
- package/dist/bindTextParser/parseFilters.js +0 -52
- package/dist/bindTextParser/parseFilters.js.map +0 -1
- package/dist/bindTextParser/parsePropPart.d.ts +0 -5
- package/dist/bindTextParser/parsePropPart.d.ts.map +0 -1
- package/dist/bindTextParser/parsePropPart.js +0 -44
- package/dist/bindTextParser/parsePropPart.js.map +0 -1
- package/dist/bindTextParser/parseStatePart.d.ts +0 -5
- package/dist/bindTextParser/parseStatePart.d.ts.map +0 -1
- package/dist/bindTextParser/parseStatePart.js +0 -39
- package/dist/bindTextParser/parseStatePart.js.map +0 -1
- package/dist/bindTextParser/types.d.ts +0 -3
- package/dist/bindTextParser/types.d.ts.map +0 -1
- package/dist/bindTextParser/types.js +0 -2
- package/dist/bindTextParser/types.js.map +0 -1
- package/dist/bindTextParser/utils.d.ts +0 -2
- package/dist/bindTextParser/utils.d.ts.map +0 -1
- package/dist/bindTextParser/utils.js +0 -2
- package/dist/bindTextParser/utils.js.map +0 -1
- package/dist/binding/getAbsoluteStateAddressByBinding.d.ts +0 -5
- package/dist/binding/getAbsoluteStateAddressByBinding.d.ts.map +0 -1
- package/dist/binding/getAbsoluteStateAddressByBinding.js +0 -41
- package/dist/binding/getAbsoluteStateAddressByBinding.js.map +0 -1
- package/dist/binding/getBindingSetByAbsoluteStateAddress.d.ts +0 -7
- package/dist/binding/getBindingSetByAbsoluteStateAddress.d.ts.map +0 -1
- package/dist/binding/getBindingSetByAbsoluteStateAddress.js +0 -22
- package/dist/binding/getBindingSetByAbsoluteStateAddress.js.map +0 -1
- package/dist/binding/getStateAddressByBindingInfo.d.ts +0 -5
- package/dist/binding/getStateAddressByBindingInfo.d.ts.map +0 -1
- package/dist/binding/getStateAddressByBindingInfo.js +0 -28
- package/dist/binding/getStateAddressByBindingInfo.js.map +0 -1
- package/dist/binding/types.d.ts +0 -23
- package/dist/binding/types.d.ts.map +0 -1
- package/dist/binding/types.js +0 -2
- package/dist/binding/types.js.map +0 -1
- package/dist/bindings/bindLoopContextToContent.d.ts +0 -5
- package/dist/bindings/bindLoopContextToContent.d.ts.map +0 -1
- package/dist/bindings/bindLoopContextToContent.js +0 -15
- package/dist/bindings/bindLoopContextToContent.js.map +0 -1
- package/dist/bindings/bindingsByContent.d.ts +0 -5
- package/dist/bindings/bindingsByContent.d.ts.map +0 -1
- package/dist/bindings/bindingsByContent.js +0 -8
- package/dist/bindings/bindingsByContent.js.map +0 -1
- package/dist/bindings/collectNodesAndBindingInfos.d.ts +0 -6
- package/dist/bindings/collectNodesAndBindingInfos.d.ts.map +0 -1
- package/dist/bindings/collectNodesAndBindingInfos.js +0 -46
- package/dist/bindings/collectNodesAndBindingInfos.js.map +0 -1
- package/dist/bindings/getBindingInfos.d.ts +0 -4
- package/dist/bindings/getBindingInfos.d.ts.map +0 -1
- package/dist/bindings/getBindingInfos.js +0 -22
- package/dist/bindings/getBindingInfos.js.map +0 -1
- package/dist/bindings/getBindingsByNode.d.ts +0 -5
- package/dist/bindings/getBindingsByNode.d.ts.map +0 -1
- package/dist/bindings/getBindingsByNode.js +0 -17
- package/dist/bindings/getBindingsByNode.js.map +0 -1
- package/dist/bindings/getParseBindTextResults.d.ts +0 -3
- package/dist/bindings/getParseBindTextResults.d.ts.map +0 -1
- package/dist/bindings/getParseBindTextResults.js +0 -36
- package/dist/bindings/getParseBindTextResults.js.map +0 -1
- package/dist/bindings/getSubscriberNodes.d.ts +0 -7
- package/dist/bindings/getSubscriberNodes.d.ts.map +0 -1
- package/dist/bindings/getSubscriberNodes.js +0 -32
- package/dist/bindings/getSubscriberNodes.js.map +0 -1
- package/dist/bindings/indexBindingsByContent.d.ts +0 -5
- package/dist/bindings/indexBindingsByContent.d.ts.map +0 -1
- package/dist/bindings/indexBindingsByContent.js +0 -8
- package/dist/bindings/indexBindingsByContent.js.map +0 -1
- package/dist/bindings/initializeBindingPromiseByNode.d.ts +0 -5
- package/dist/bindings/initializeBindingPromiseByNode.d.ts.map +0 -1
- package/dist/bindings/initializeBindingPromiseByNode.js +0 -28
- package/dist/bindings/initializeBindingPromiseByNode.js.map +0 -1
- package/dist/bindings/initializeBindings.d.ts +0 -6
- package/dist/bindings/initializeBindings.d.ts.map +0 -1
- package/dist/bindings/initializeBindings.js +0 -59
- package/dist/bindings/initializeBindings.js.map +0 -1
- package/dist/bindings/nodesByContent.d.ts +0 -4
- package/dist/bindings/nodesByContent.d.ts.map +0 -1
- package/dist/bindings/nodesByContent.js +0 -8
- package/dist/bindings/nodesByContent.js.map +0 -1
- package/dist/bindings/parseCommentNode.d.ts +0 -3
- package/dist/bindings/parseCommentNode.d.ts.map +0 -1
- package/dist/bindings/parseCommentNode.js +0 -47
- package/dist/bindings/parseCommentNode.js.map +0 -1
- package/dist/bindings/replaceToReplaceNode.d.ts +0 -3
- package/dist/bindings/replaceToReplaceNode.d.ts.map +0 -1
- package/dist/bindings/replaceToReplaceNode.js +0 -13
- package/dist/bindings/replaceToReplaceNode.js.map +0 -1
- package/dist/bindings/types.d.ts +0 -11
- package/dist/bindings/types.d.ts.map +0 -1
- package/dist/bindings/types.js +0 -2
- package/dist/bindings/types.js.map +0 -1
- package/dist/bootstrapState.d.ts +0 -3
- package/dist/bootstrapState.d.ts.map +0 -1
- package/dist/bootstrapState.js +0 -9
- package/dist/bootstrapState.js.map +0 -1
- package/dist/buildBindings.d.ts +0 -2
- package/dist/buildBindings.d.ts.map +0 -1
- package/dist/buildBindings.js +0 -30
- package/dist/buildBindings.js.map +0 -1
- package/dist/cache/cacheEntryByAbsoluteStateAddress.d.ts +0 -6
- package/dist/cache/cacheEntryByAbsoluteStateAddress.d.ts.map +0 -1
- package/dist/cache/cacheEntryByAbsoluteStateAddress.js +0 -19
- package/dist/cache/cacheEntryByAbsoluteStateAddress.js.map +0 -1
- package/dist/cache/types.d.ts +0 -5
- package/dist/cache/types.d.ts.map +0 -1
- package/dist/cache/types.js +0 -2
- package/dist/cache/types.js.map +0 -1
- package/dist/components/State.d.ts +0 -83
- package/dist/components/State.d.ts.map +0 -1
- package/dist/components/State.js +0 -340
- package/dist/components/State.js.map +0 -1
- package/dist/components/types.d.ts +0 -26
- package/dist/components/types.d.ts.map +0 -1
- package/dist/components/types.js +0 -2
- package/dist/components/types.js.map +0 -1
- package/dist/config.d.ts +0 -4
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -49
- package/dist/config.js.map +0 -1
- package/dist/createEmptyArray.d.ts +0 -2
- package/dist/createEmptyArray.d.ts.map +0 -1
- package/dist/createEmptyArray.js +0 -4
- package/dist/createEmptyArray.js.map +0 -1
- package/dist/createEmptySet.d.ts +0 -2
- package/dist/createEmptySet.d.ts.map +0 -1
- package/dist/createEmptySet.js +0 -4
- package/dist/createEmptySet.js.map +0 -1
- package/dist/define.d.ts +0 -14
- package/dist/define.d.ts.map +0 -1
- package/dist/define.js +0 -25
- package/dist/define.js.map +0 -1
- package/dist/dependency/types.d.ts +0 -2
- package/dist/dependency/types.d.ts.map +0 -1
- package/dist/dependency/types.js +0 -2
- package/dist/dependency/types.js.map +0 -1
- package/dist/dependency/walkDependency.d.ts +0 -6
- package/dist/dependency/walkDependency.d.ts.map +0 -1
- package/dist/dependency/walkDependency.js +0 -194
- package/dist/dependency/walkDependency.js.map +0 -1
- package/dist/event/checkboxHandler.d.ts +0 -14
- package/dist/event/checkboxHandler.d.ts.map +0 -1
- package/dist/event/checkboxHandler.js +0 -120
- package/dist/event/checkboxHandler.js.map +0 -1
- package/dist/event/handler.d.ts +0 -8
- package/dist/event/handler.d.ts.map +0 -1
- package/dist/event/handler.js +0 -81
- package/dist/event/handler.js.map +0 -1
- package/dist/event/isPossibleTwoWay.d.ts +0 -2
- package/dist/event/isPossibleTwoWay.d.ts.map +0 -1
- package/dist/event/isPossibleTwoWay.js +0 -29
- package/dist/event/isPossibleTwoWay.js.map +0 -1
- package/dist/event/radioHandler.d.ts +0 -14
- package/dist/event/radioHandler.d.ts.map +0 -1
- package/dist/event/radioHandler.js +0 -101
- package/dist/event/radioHandler.js.map +0 -1
- package/dist/event/twowayHandler.d.ts +0 -14
- package/dist/event/twowayHandler.d.ts.map +0 -1
- package/dist/event/twowayHandler.js +0 -100
- package/dist/event/twowayHandler.js.map +0 -1
- package/dist/exports.d.ts +0 -3
- package/dist/exports.d.ts.map +0 -1
- package/dist/exports.js +0 -2
- package/dist/exports.js.map +0 -1
- package/dist/filters/builtinFilters.d.ts +0 -16
- package/dist/filters/builtinFilters.d.ts.map +0 -1
- package/dist/filters/builtinFilters.js +0 -716
- package/dist/filters/builtinFilters.js.map +0 -1
- package/dist/filters/errorMessages.d.ts +0 -43
- package/dist/filters/errorMessages.d.ts.map +0 -1
- package/dist/filters/errorMessages.js +0 -72
- package/dist/filters/errorMessages.js.map +0 -1
- package/dist/filters/types.d.ts +0 -23
- package/dist/filters/types.d.ts.map +0 -1
- package/dist/filters/types.js +0 -2
- package/dist/filters/types.js.map +0 -1
- package/dist/getUUID.d.ts +0 -2
- package/dist/getUUID.d.ts.map +0 -1
- package/dist/getUUID.js +0 -5
- package/dist/getUUID.js.map +0 -1
- package/dist/hydrater/hydrate.d.ts +0 -1
- package/dist/hydrater/hydrate.d.ts.map +0 -1
- package/dist/hydrater/hydrate.js +0 -2
- package/dist/hydrater/hydrate.js.map +0 -1
- package/dist/isCustomElement.d.ts +0 -2
- package/dist/isCustomElement.d.ts.map +0 -1
- package/dist/isCustomElement.js +0 -26
- package/dist/isCustomElement.js.map +0 -1
- package/dist/list/createListDiff.d.ts +0 -13
- package/dist/list/createListDiff.d.ts.map +0 -1
- package/dist/list/createListDiff.js +0 -181
- package/dist/list/createListDiff.js.map +0 -1
- package/dist/list/createListIndex.d.ts +0 -10
- package/dist/list/createListIndex.d.ts.map +0 -1
- package/dist/list/createListIndex.js +0 -136
- package/dist/list/createListIndex.js.map +0 -1
- package/dist/list/getIndexValueByLoopContext.d.ts +0 -3
- package/dist/list/getIndexValueByLoopContext.d.ts.map +0 -1
- package/dist/list/getIndexValueByLoopContext.js +0 -18
- package/dist/list/getIndexValueByLoopContext.js.map +0 -1
- package/dist/list/getListIndexByBindingInfo.d.ts +0 -4
- package/dist/list/getListIndexByBindingInfo.d.ts.map +0 -1
- package/dist/list/getListIndexByBindingInfo.js +0 -32
- package/dist/list/getListIndexByBindingInfo.js.map +0 -1
- package/dist/list/lastListValueByAbsoluteStateAddress.d.ts +0 -6
- package/dist/list/lastListValueByAbsoluteStateAddress.d.ts.map +0 -1
- package/dist/list/lastListValueByAbsoluteStateAddress.js +0 -14
- package/dist/list/lastListValueByAbsoluteStateAddress.js.map +0 -1
- package/dist/list/listIndexesByList.d.ts +0 -4
- package/dist/list/listIndexesByList.d.ts.map +0 -1
- package/dist/list/listIndexesByList.js +0 -12
- package/dist/list/listIndexesByList.js.map +0 -1
- package/dist/list/loopContext.d.ts +0 -3
- package/dist/list/loopContext.d.ts.map +0 -1
- package/dist/list/loopContext.js +0 -54
- package/dist/list/loopContext.js.map +0 -1
- package/dist/list/loopContextByNode.d.ts +0 -4
- package/dist/list/loopContextByNode.d.ts.map +0 -1
- package/dist/list/loopContextByNode.js +0 -20
- package/dist/list/loopContextByNode.js.map +0 -1
- package/dist/list/types.d.ts +0 -38
- package/dist/list/types.d.ts.map +0 -1
- package/dist/list/types.js +0 -2
- package/dist/list/types.js.map +0 -1
- package/dist/mustache/convertMustacheToComments.d.ts +0 -2
- package/dist/mustache/convertMustacheToComments.d.ts.map +0 -1
- package/dist/mustache/convertMustacheToComments.js +0 -66
- package/dist/mustache/convertMustacheToComments.js.map +0 -1
- package/dist/polyfills.d.ts +0 -8
- package/dist/polyfills.d.ts.map +0 -1
- package/dist/polyfills.js +0 -22
- package/dist/polyfills.js.map +0 -1
- package/dist/proxy/StateHandler.d.ts +0 -32
- package/dist/proxy/StateHandler.d.ts.map +0 -1
- package/dist/proxy/StateHandler.js +0 -91
- package/dist/proxy/StateHandler.js.map +0 -1
- package/dist/proxy/apis/connectedCallback.d.ts +0 -18
- package/dist/proxy/apis/connectedCallback.d.ts.map +0 -1
- package/dist/proxy/apis/connectedCallback.js +0 -23
- package/dist/proxy/apis/connectedCallback.js.map +0 -1
- package/dist/proxy/apis/disconnectedCallback.d.ts +0 -17
- package/dist/proxy/apis/disconnectedCallback.d.ts.map +0 -1
- package/dist/proxy/apis/disconnectedCallback.js +0 -22
- package/dist/proxy/apis/disconnectedCallback.js.map +0 -1
- package/dist/proxy/apis/getAll.d.ts +0 -11
- package/dist/proxy/apis/getAll.d.ts.map +0 -1
- package/dist/proxy/apis/getAll.js +0 -87
- package/dist/proxy/apis/getAll.js.map +0 -1
- package/dist/proxy/apis/postUpdate.d.ts +0 -5
- package/dist/proxy/apis/postUpdate.d.ts.map +0 -1
- package/dist/proxy/apis/postUpdate.js +0 -30
- package/dist/proxy/apis/postUpdate.js.map +0 -1
- package/dist/proxy/apis/resolve.d.ts +0 -22
- package/dist/proxy/apis/resolve.d.ts.map +0 -1
- package/dist/proxy/apis/resolve.js +0 -65
- package/dist/proxy/apis/resolve.js.map +0 -1
- package/dist/proxy/apis/trackDependency.d.ts +0 -34
- package/dist/proxy/apis/trackDependency.d.ts.map +0 -1
- package/dist/proxy/apis/trackDependency.js +0 -32
- package/dist/proxy/apis/trackDependency.js.map +0 -1
- package/dist/proxy/apis/updatedCallback.d.ts +0 -28
- package/dist/proxy/apis/updatedCallback.d.ts.map +0 -1
- package/dist/proxy/apis/updatedCallback.js +0 -56
- package/dist/proxy/apis/updatedCallback.js.map +0 -1
- package/dist/proxy/methods/checkDependency.d.ts +0 -4
- package/dist/proxy/methods/checkDependency.d.ts.map +0 -1
- package/dist/proxy/methods/checkDependency.js +0 -16
- package/dist/proxy/methods/checkDependency.js.map +0 -1
- package/dist/proxy/methods/getByAddress.d.ts +0 -23
- package/dist/proxy/methods/getByAddress.d.ts.map +0 -1
- package/dist/proxy/methods/getByAddress.js +0 -81
- package/dist/proxy/methods/getByAddress.js.map +0 -1
- package/dist/proxy/methods/getContextListIndex.d.ts +0 -21
- package/dist/proxy/methods/getContextListIndex.d.ts.map +0 -1
- package/dist/proxy/methods/getContextListIndex.js +0 -32
- package/dist/proxy/methods/getContextListIndex.js.map +0 -1
- package/dist/proxy/methods/getListIndex.d.ts +0 -22
- package/dist/proxy/methods/getListIndex.d.ts.map +0 -1
- package/dist/proxy/methods/getListIndex.js +0 -55
- package/dist/proxy/methods/getListIndex.js.map +0 -1
- package/dist/proxy/methods/setByAddress.d.ts +0 -21
- package/dist/proxy/methods/setByAddress.d.ts.map +0 -1
- package/dist/proxy/methods/setByAddress.js +0 -135
- package/dist/proxy/methods/setByAddress.js.map +0 -1
- package/dist/proxy/methods/setLoopContext.d.ts +0 -22
- package/dist/proxy/methods/setLoopContext.d.ts.map +0 -1
- package/dist/proxy/methods/setLoopContext.js +0 -43
- package/dist/proxy/methods/setLoopContext.js.map +0 -1
- package/dist/proxy/methods/swapInfo.d.ts +0 -5
- package/dist/proxy/methods/swapInfo.d.ts.map +0 -1
- package/dist/proxy/methods/swapInfo.js +0 -13
- package/dist/proxy/methods/swapInfo.js.map +0 -1
- package/dist/proxy/methods/types.d.ts +0 -6
- package/dist/proxy/methods/types.d.ts.map +0 -1
- package/dist/proxy/methods/types.js +0 -2
- package/dist/proxy/methods/types.js.map +0 -1
- package/dist/proxy/symbols.d.ts +0 -8
- package/dist/proxy/symbols.d.ts.map +0 -1
- package/dist/proxy/symbols.js +0 -8
- package/dist/proxy/symbols.js.map +0 -1
- package/dist/proxy/traps/get.d.ts +0 -21
- package/dist/proxy/traps/get.d.ts.map +0 -1
- package/dist/proxy/traps/get.js +0 -120
- package/dist/proxy/traps/get.js.map +0 -1
- package/dist/proxy/traps/set.d.ts +0 -18
- package/dist/proxy/traps/set.d.ts.map +0 -1
- package/dist/proxy/traps/set.js +0 -31
- package/dist/proxy/traps/set.js.map +0 -1
- package/dist/proxy/types.d.ts +0 -27
- package/dist/proxy/types.d.ts.map +0 -1
- package/dist/proxy/types.js +0 -2
- package/dist/proxy/types.js.map +0 -1
- package/dist/raiseError.d.ts +0 -2
- package/dist/raiseError.d.ts.map +0 -1
- package/dist/raiseError.js +0 -4
- package/dist/raiseError.js.map +0 -1
- package/dist/registerComponents.d.ts +0 -2
- package/dist/registerComponents.d.ts.map +0 -1
- package/dist/registerComponents.js +0 -9
- package/dist/registerComponents.js.map +0 -1
- package/dist/stateElementByName.d.ts +0 -4
- package/dist/stateElementByName.d.ts.map +0 -1
- package/dist/stateElementByName.js +0 -53
- package/dist/stateElementByName.js.map +0 -1
- package/dist/stateLoader/loadFromInnerScript.d.ts +0 -3
- package/dist/stateLoader/loadFromInnerScript.d.ts.map +0 -1
- package/dist/stateLoader/loadFromInnerScript.js +0 -24
- package/dist/stateLoader/loadFromInnerScript.js.map +0 -1
- package/dist/stateLoader/loadFromJsonFile.d.ts +0 -3
- package/dist/stateLoader/loadFromJsonFile.d.ts.map +0 -1
- package/dist/stateLoader/loadFromJsonFile.js +0 -16
- package/dist/stateLoader/loadFromJsonFile.js.map +0 -1
- package/dist/stateLoader/loadFromScriptFile.d.ts +0 -3
- package/dist/stateLoader/loadFromScriptFile.d.ts.map +0 -1
- package/dist/stateLoader/loadFromScriptFile.js +0 -11
- package/dist/stateLoader/loadFromScriptFile.js.map +0 -1
- package/dist/stateLoader/loadFromScriptJson.d.ts +0 -3
- package/dist/stateLoader/loadFromScriptJson.d.ts.map +0 -1
- package/dist/stateLoader/loadFromScriptJson.js +0 -15
- package/dist/stateLoader/loadFromScriptJson.js.map +0 -1
- package/dist/structural/activateContent.d.ts +0 -6
- package/dist/structural/activateContent.d.ts.map +0 -1
- package/dist/structural/activateContent.js +0 -29
- package/dist/structural/activateContent.js.map +0 -1
- package/dist/structural/collectStructuralFragments.d.ts +0 -2
- package/dist/structural/collectStructuralFragments.d.ts.map +0 -1
- package/dist/structural/collectStructuralFragments.js +0 -160
- package/dist/structural/collectStructuralFragments.js.map +0 -1
- package/dist/structural/contentsByNode.d.ts +0 -5
- package/dist/structural/contentsByNode.d.ts.map +0 -1
- package/dist/structural/contentsByNode.js +0 -29
- package/dist/structural/contentsByNode.js.map +0 -1
- package/dist/structural/createContent.d.ts +0 -4
- package/dist/structural/createContent.d.ts.map +0 -1
- package/dist/structural/createContent.js +0 -92
- package/dist/structural/createContent.js.map +0 -1
- package/dist/structural/createNotFilter.d.ts +0 -3
- package/dist/structural/createNotFilter.d.ts.map +0 -1
- package/dist/structural/createNotFilter.js +0 -17
- package/dist/structural/createNotFilter.js.map +0 -1
- package/dist/structural/define.d.ts +0 -3
- package/dist/structural/define.d.ts.map +0 -1
- package/dist/structural/define.js +0 -7
- package/dist/structural/define.js.map +0 -1
- package/dist/structural/expandShorthandPaths.d.ts +0 -3
- package/dist/structural/expandShorthandPaths.d.ts.map +0 -1
- package/dist/structural/expandShorthandPaths.js +0 -96
- package/dist/structural/expandShorthandPaths.js.map +0 -1
- package/dist/structural/fragmentInfoByUUID.d.ts +0 -4
- package/dist/structural/fragmentInfoByUUID.d.ts.map +0 -1
- package/dist/structural/fragmentInfoByUUID.js +0 -30
- package/dist/structural/fragmentInfoByUUID.js.map +0 -1
- package/dist/structural/getFragmentNodeInfos.d.ts +0 -3
- package/dist/structural/getFragmentNodeInfos.d.ts.map +0 -1
- package/dist/structural/getFragmentNodeInfos.js +0 -16
- package/dist/structural/getFragmentNodeInfos.js.map +0 -1
- package/dist/structural/getNodePath.d.ts +0 -2
- package/dist/structural/getNodePath.d.ts.map +0 -1
- package/dist/structural/getNodePath.js +0 -12
- package/dist/structural/getNodePath.js.map +0 -1
- package/dist/structural/optimizeFragment.d.ts +0 -2
- package/dist/structural/optimizeFragment.d.ts.map +0 -1
- package/dist/structural/optimizeFragment.js +0 -13
- package/dist/structural/optimizeFragment.js.map +0 -1
- package/dist/structural/resolveNodePath.d.ts +0 -2
- package/dist/structural/resolveNodePath.d.ts.map +0 -1
- package/dist/structural/resolveNodePath.js +0 -13
- package/dist/structural/resolveNodePath.js.map +0 -1
- package/dist/structural/types.d.ts +0 -19
- package/dist/structural/types.d.ts.map +0 -1
- package/dist/structural/types.js +0 -2
- package/dist/structural/types.js.map +0 -1
- package/dist/types.d.ts +0 -35
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/updater/types.d.ts +0 -7
- package/dist/updater/types.d.ts.map +0 -1
- package/dist/updater/types.js +0 -2
- package/dist/updater/types.js.map +0 -1
- package/dist/updater/updater.d.ts +0 -14
- package/dist/updater/updater.d.ts.map +0 -1
- package/dist/updater/updater.js +0 -49
- package/dist/updater/updater.js.map +0 -1
- package/dist/version/types.d.ts +0 -5
- package/dist/version/types.d.ts.map +0 -1
- package/dist/version/types.js +0 -2
- package/dist/version/types.js.map +0 -1
- package/dist/version/version.d.ts +0 -3
- package/dist/version/version.d.ts.map +0 -1
- package/dist/version/version.js +0 -9
- package/dist/version/version.js.map +0 -1
- package/dist/waitForStateInitialize.d.ts +0 -2
- package/dist/waitForStateInitialize.d.ts.map +0 -1
- package/dist/waitForStateInitialize.js +0 -12
- package/dist/waitForStateInitialize.js.map +0 -1
- package/dist/webComponent/MappingRule.d.ts +0 -10
- package/dist/webComponent/MappingRule.d.ts.map +0 -1
- package/dist/webComponent/MappingRule.js +0 -120
- package/dist/webComponent/MappingRule.js.map +0 -1
- package/dist/webComponent/bindWebComponent.d.ts +0 -3
- package/dist/webComponent/bindWebComponent.d.ts.map +0 -1
- package/dist/webComponent/bindWebComponent.js +0 -49
- package/dist/webComponent/bindWebComponent.js.map +0 -1
- package/dist/webComponent/completeWebComponent.d.ts +0 -4
- package/dist/webComponent/completeWebComponent.d.ts.map +0 -1
- package/dist/webComponent/completeWebComponent.js +0 -17
- package/dist/webComponent/completeWebComponent.js.map +0 -1
- package/dist/webComponent/innerState.d.ts +0 -3
- package/dist/webComponent/innerState.d.ts.map +0 -1
- package/dist/webComponent/innerState.js +0 -120
- package/dist/webComponent/innerState.js.map +0 -1
- package/dist/webComponent/lastValueByAbsoluteStateAddress.d.ts +0 -4
- package/dist/webComponent/lastValueByAbsoluteStateAddress.d.ts.map +0 -1
- package/dist/webComponent/lastValueByAbsoluteStateAddress.js +0 -10
- package/dist/webComponent/lastValueByAbsoluteStateAddress.js.map +0 -1
- package/dist/webComponent/meltFrozenObject.d.ts +0 -2
- package/dist/webComponent/meltFrozenObject.d.ts.map +0 -1
- package/dist/webComponent/meltFrozenObject.js +0 -17
- package/dist/webComponent/meltFrozenObject.js.map +0 -1
- package/dist/webComponent/outerState.d.ts +0 -3
- package/dist/webComponent/outerState.d.ts.map +0 -1
- package/dist/webComponent/outerState.js +0 -41
- package/dist/webComponent/outerState.js.map +0 -1
- package/dist/webComponent/plainOuterState.d.ts +0 -3
- package/dist/webComponent/plainOuterState.d.ts.map +0 -1
- package/dist/webComponent/plainOuterState.js +0 -36
- package/dist/webComponent/plainOuterState.js.map +0 -1
- package/dist/webComponent/stateElementByWebComponent.d.ts +0 -4
- package/dist/webComponent/stateElementByWebComponent.d.ts.map +0 -1
- package/dist/webComponent/stateElementByWebComponent.js +0 -17
- package/dist/webComponent/stateElementByWebComponent.js.map +0 -1
- package/dist/webComponent/types.d.ts +0 -3
- package/dist/webComponent/types.d.ts.map +0 -1
- package/dist/webComponent/types.js +0 -2
- package/dist/webComponent/types.js.map +0 -1
package/README.ja.md
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
# @wcstack/state
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
**もしHTMLにリアクティブなデータバインディングがあったら?**
|
|
4
|
+
|
|
5
|
+
ブラウザが状態をネイティブに理解する未来を妄想してみる。データをインラインで宣言し、属性でDOMにバインドすれば、すべてが自動で同期する。仮想DOMもコンパイルも不要。ただのHTMLが、勝手にリアクティブになる。
|
|
6
|
+
|
|
7
|
+
それが `<wcs-state>` と `data-wcs` の探求するもの。CDN一発、依存ゼロ、構文はHTML。
|
|
8
|
+
|
|
9
|
+
CDNスクリプトはカスタム要素の定義を登録するだけ — ロード時にはそれ以外何も起きない。`<wcs-state>` 要素がDOMに接続されたとき、状態ソースを読み取り、兄弟要素の `data-wcs` バインディングを走査し、リアクティビティを構築する。すべての初期化は要素のライフサイクルが駆動する。あなたのコードではなく。
|
|
5
10
|
|
|
6
11
|
## 特徴
|
|
7
12
|
|
|
@@ -144,27 +149,33 @@ Web Components のための宣言的リアクティブ状態管理。
|
|
|
144
149
|
|
|
145
150
|
## 状態の更新
|
|
146
151
|
|
|
147
|
-
|
|
152
|
+
`@wcstack/state` では、すべての状態は**パス**を持ちます — `count`、`user.name`、`items` のように。状態をリアクティブに更新するには、**パスに代入**します:
|
|
153
|
+
|
|
154
|
+
```javascript
|
|
155
|
+
this.count = 10; // パス "count"
|
|
156
|
+
this["user.name"] = "Bob"; // パス "user.name"
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
ルールはひとつ: **パスに代入すれば、DOMは自動的に更新される。**
|
|
148
160
|
|
|
149
|
-
###
|
|
161
|
+
### なぜ `this.user.name = "Bob"` では動かないのか
|
|
150
162
|
|
|
151
|
-
|
|
163
|
+
`this.user.name` は、まず `this.user` で `user` オブジェクトを読み取り(パスの読み取り)、そのプレーンオブジェクトの `.name` に設定します — これはパスへの代入ではないため、変更は検知されません:
|
|
152
164
|
|
|
153
165
|
```javascript
|
|
154
|
-
// ✅
|
|
155
|
-
this.count = 10;
|
|
166
|
+
// ✅ パスへの代入 — 変更が検知される
|
|
156
167
|
this["user.name"] = "Bob";
|
|
157
168
|
|
|
158
|
-
// ❌
|
|
159
|
-
this.user.name = "Bob";
|
|
169
|
+
// ❌ パスへの代入ではない — 変更は検知されない
|
|
170
|
+
this.user.name = "Bob";
|
|
160
171
|
```
|
|
161
172
|
|
|
162
173
|
### 配列
|
|
163
174
|
|
|
164
|
-
|
|
175
|
+
同じルールです: パスに新しい配列を代入します。破壊的メソッド(`push`, `splice`, `sort` 等)はパスへの代入なしに配列をその場で変更するため、非破壊的な代替メソッドを使用します:
|
|
165
176
|
|
|
166
177
|
```javascript
|
|
167
|
-
// ✅
|
|
178
|
+
// ✅ 新しい配列をパスに代入 — 変更が検知される
|
|
168
179
|
this.items = this.items.concat({ id: 4, text: "New" });
|
|
169
180
|
this.items = this.items.toSpliced(index, 1);
|
|
170
181
|
this.items = this.items.filter(item => !item.done);
|
|
@@ -172,7 +183,7 @@ this.items = this.items.toSorted((a, b) => a.id - b.id);
|
|
|
172
183
|
this.items = this.items.toReversed();
|
|
173
184
|
this.items = this.items.with(index, newValue);
|
|
174
185
|
|
|
175
|
-
// ❌
|
|
186
|
+
// ❌ その場での変更 — パスへの代入なし、変更は検知されない
|
|
176
187
|
this.items.push({ id: 4, text: "New" });
|
|
177
188
|
this.items.splice(index, 1);
|
|
178
189
|
this.items.sort((a, b) => a.id - b.id);
|
|
@@ -300,6 +311,8 @@ property[#modifier]: path[@state][|filter[|filter(args)...]]
|
|
|
300
311
|
</template>
|
|
301
312
|
```
|
|
302
313
|
|
|
314
|
+
`for:` ディレクティブは**値ベースの差分アルゴリズム**を使用します。配列の各要素の値そのものが識別キーとして機能するため、React の `key` や Vue の `:key` のような明示的なキー属性は不要です。配列が再代入されると、差分アルゴリズムが新旧の要素を値で照合し、変更のない要素の DOM ノードを再利用しつつ、追加・削除・並び替えを効率的に処理します。
|
|
315
|
+
|
|
303
316
|
#### ドット省略記法
|
|
304
317
|
|
|
305
318
|
`for` ループ内では、`.` で始まるパスがループの配列パスを基準に展開されます:
|
|
@@ -543,7 +556,7 @@ export default {
|
|
|
543
556
|
};
|
|
544
557
|
```
|
|
545
558
|
|
|
546
|
-
3階層のネスト、5つの仮想プロパティ — すべてが1つのフラットなオブジェクト内に並んで定義されています。各レベルは任意の深さの値を参照でき、`$getAll`
|
|
559
|
+
3階層のネスト、5つの仮想プロパティ — すべてが1つのフラットなオブジェクト内に並んで定義されています。各レベルは任意の深さの値を参照でき、`$getAll` による集約は下位から上位へ自然に流れます。コンポーネントベースのフレームワークでは、一般的に各ネストレベルに個別のコンポーネントを作成し、算出値をツリーの上位に渡す方法が採られます。パス getter は、すべての定義を1箇所にまとめるという異なるトレードオフを提供します。
|
|
547
560
|
|
|
548
561
|
### getter の戻り値のサブプロパティへのアクセス
|
|
549
562
|
|
|
@@ -827,6 +840,15 @@ export default {
|
|
|
827
840
|
|
|
828
841
|
`@wcstack/state` は Shadow DOM または Light DOM を使用したカスタム要素との双方向状態バインディングに対応しています。
|
|
829
842
|
|
|
843
|
+
多くのフレームワークでは、コンポーネント間の状態共有に props バケツリレー、Context Provider、外部ストア(Redux, Pinia)といったパターンが用いられます。`@wcstack/state` は異なるアプローチを採ります。親子コンポーネントは**パスの契約**で接続されます。親は `data-wcs` で外部の状態パスを子コンポーネントのプロパティにバインドし、子は自身の状態を通常どおり読み書きするだけです:
|
|
844
|
+
|
|
845
|
+
1. 子コンポーネントは自身の状態プロキシを通じて親の状態を参照・更新します — props もイベントも親の存在を意識する必要もありません。
|
|
846
|
+
2. 親の状態が変更されると、Proxy の `set` トラップが影響するパスを参照している子のバインディングへ自動的に通知します。
|
|
847
|
+
3. 結合点は**パス名のみ**であるため、双方とも疎結合を保ち、独立してテスト可能です。
|
|
848
|
+
4. コストはパス解決(初回アクセス後はキャッシュにより O(1))と依存グラフを通じた変更伝播のみです。
|
|
849
|
+
|
|
850
|
+
これは、コンポーネントレベルの抽象化ではなくパス解決に基づく、コンポーネント間状態管理への軽量なアプローチです。
|
|
851
|
+
|
|
830
852
|
### コンポーネント定義(Shadow DOM)
|
|
831
853
|
|
|
832
854
|
```javascript
|
|
@@ -982,6 +1004,8 @@ customElements.define("my-component", MyComponent);
|
|
|
982
1004
|
| `$disconnectedCallback` | 要素が DOM から削除された時 | 不可(同期のみ) |
|
|
983
1005
|
| `$updatedCallback(paths, indexesListByPath)` | 状態変更が適用された後に呼び出し | 戻り値は未使用(待機されない) |
|
|
984
1006
|
|
|
1007
|
+
リアクティブ Proxy は全てのプロパティ代入を変更として検知するため、標準の `async/await` とプロパティへの直接代入だけで非同期処理は完結します。ローディングフラグ、取得データ、エラーメッセージの更新は全てプロパティ代入であり、非同期状態管理のための追加の抽象化を必要としません。
|
|
1008
|
+
|
|
985
1009
|
- フック内の `this` は読み書き可能な状態プロキシです
|
|
986
1010
|
- `$connectedCallback` は要素が接続される**たびに**呼ばれます(削除後の再接続を含む)。再確立が必要なセットアップ処理に適しています
|
|
987
1011
|
- `$disconnectedCallback` は同期的に呼び出されます — タイマーのクリア、イベントリスナーの削除、リソースの解放などのクリーンアップに使用します
|
package/README.md
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
# @wcstack/state
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
**What if HTML had reactive data binding?**
|
|
4
|
+
|
|
5
|
+
Imagine a future where the browser natively understands state — you declare data inline, bind it to the DOM with attributes, and everything stays in sync. No virtual DOM, no compilation, no framework. Just HTML that reacts.
|
|
6
|
+
|
|
7
|
+
That's what `<wcs-state>` and `data-wcs` explore. One CDN import, zero dependencies, pure HTML syntax.
|
|
8
|
+
|
|
9
|
+
The CDN script only registers the custom element definition — nothing else happens at load time. When a `<wcs-state>` element connects to the DOM, it reads its state source, scans sibling elements for `data-wcs` bindings, and wires up reactivity. All initialization is driven by the element's lifecycle, not by your code.
|
|
5
10
|
|
|
6
11
|
## Features
|
|
7
12
|
|
|
@@ -144,27 +149,33 @@ Default name is `"default"` (no `@` needed).
|
|
|
144
149
|
|
|
145
150
|
## Updating State
|
|
146
151
|
|
|
147
|
-
|
|
152
|
+
In `@wcstack/state`, every piece of state has a **path** — like `count`, `user.name`, or `items`. To update state reactively, **assign to the path**:
|
|
153
|
+
|
|
154
|
+
```javascript
|
|
155
|
+
this.count = 10; // path "count"
|
|
156
|
+
this["user.name"] = "Bob"; // path "user.name"
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
That's the one rule: **assign to the path, and the DOM updates automatically.**
|
|
148
160
|
|
|
149
|
-
###
|
|
161
|
+
### Why `this.user.name = "Bob"` Doesn't Work
|
|
150
162
|
|
|
151
|
-
|
|
163
|
+
`this.user.name` first reads the `user` object via `this.user` (a path read), then sets `.name` on that plain object — this is not a path assignment, so the change is not detected:
|
|
152
164
|
|
|
153
165
|
```javascript
|
|
154
166
|
// ✅ Path assignment — change detected
|
|
155
|
-
this.count = 10;
|
|
156
167
|
this["user.name"] = "Bob";
|
|
157
168
|
|
|
158
|
-
// ❌
|
|
159
|
-
this.user.name = "Bob";
|
|
169
|
+
// ❌ Not a path assignment — change NOT detected
|
|
170
|
+
this.user.name = "Bob";
|
|
160
171
|
```
|
|
161
172
|
|
|
162
173
|
### Arrays
|
|
163
174
|
|
|
164
|
-
|
|
175
|
+
The same rule applies: assign a new array to the path. Mutating methods (`push`, `splice`, `sort`, ...) modify the array in place without path assignment, so use non-destructive alternatives:
|
|
165
176
|
|
|
166
177
|
```javascript
|
|
167
|
-
// ✅
|
|
178
|
+
// ✅ New array assigned to path — change detected
|
|
168
179
|
this.items = this.items.concat({ id: 4, text: "New" });
|
|
169
180
|
this.items = this.items.toSpliced(index, 1);
|
|
170
181
|
this.items = this.items.filter(item => !item.done);
|
|
@@ -172,7 +183,7 @@ this.items = this.items.toSorted((a, b) => a.id - b.id);
|
|
|
172
183
|
this.items = this.items.toReversed();
|
|
173
184
|
this.items = this.items.with(index, newValue);
|
|
174
185
|
|
|
175
|
-
// ❌
|
|
186
|
+
// ❌ In-place mutation — no path assignment, change NOT detected
|
|
176
187
|
this.items.push({ id: 4, text: "New" });
|
|
177
188
|
this.items.splice(index, 1);
|
|
178
189
|
this.items.sort((a, b) => a.id - b.id);
|
|
@@ -300,6 +311,8 @@ Structural directives use `<template>` elements:
|
|
|
300
311
|
</template>
|
|
301
312
|
```
|
|
302
313
|
|
|
314
|
+
The `for:` directive uses a **value-based diff algorithm** — each array element's value itself serves as the identity key. There is no need for an explicit `key` attribute (like React's `key` or Vue's `:key`). When the array is reassigned, the differ matches old and new elements by value, reusing existing DOM nodes for unchanged items and efficiently adding, removing, or reordering the rest.
|
|
315
|
+
|
|
303
316
|
#### Dot Shorthand
|
|
304
317
|
|
|
305
318
|
Inside a `for` loop, paths starting with `.` are expanded relative to the loop's array path:
|
|
@@ -543,7 +556,7 @@ export default {
|
|
|
543
556
|
};
|
|
544
557
|
```
|
|
545
558
|
|
|
546
|
-
Three levels of nesting, five virtual properties — all defined side by side in a single flat object. Each level can reference values from any depth, and aggregation flows naturally from bottom to top via `$getAll`. In component-based frameworks
|
|
559
|
+
Three levels of nesting, five virtual properties — all defined side by side in a single flat object. Each level can reference values from any depth, and aggregation flows naturally from bottom to top via `$getAll`. In component-based frameworks, the typical approach is to create a separate component for each nesting level and pass computed values through the tree. Path getters offer a different trade-off by keeping all definitions in one place.
|
|
547
560
|
|
|
548
561
|
### Accessing Sub-Properties of Getter Results
|
|
549
562
|
|
|
@@ -827,6 +840,15 @@ Filters can be chained with `|`:
|
|
|
827
840
|
|
|
828
841
|
`@wcstack/state` supports bidirectional state binding with custom elements using Shadow DOM or Light DOM.
|
|
829
842
|
|
|
843
|
+
Many frameworks use patterns like prop drilling, context providers, or external stores (Redux, Pinia) to share state across components. `@wcstack/state` takes a different approach: parent and child components are connected through **path contracts** — the parent binds an outer state path to an inner component property via `data-wcs`, and the child simply reads and writes its own state as usual:
|
|
844
|
+
|
|
845
|
+
1. The child references and updates the parent's state through its own state proxy — no props, no events, no awareness of the parent.
|
|
846
|
+
2. When the parent's state changes, the Proxy `set` trap automatically notifies any child bindings that reference the affected path.
|
|
847
|
+
3. Because the only coupling is the **path name**, both sides remain loosely coupled and independently testable.
|
|
848
|
+
4. The cost is path resolution (cached at O(1) after first access) plus change propagation through the dependency graph.
|
|
849
|
+
|
|
850
|
+
This provides a lightweight approach to cross-component state management based on path resolution rather than component-level abstractions.
|
|
851
|
+
|
|
830
852
|
### Component Definition (Shadow DOM)
|
|
831
853
|
|
|
832
854
|
```javascript
|
|
@@ -982,6 +1004,8 @@ State objects can define `$connectedCallback`, `$disconnectedCallback`, and `$up
|
|
|
982
1004
|
| `$disconnectedCallback` | When the element is removed from the DOM | No (sync only) |
|
|
983
1005
|
| `$updatedCallback(paths, indexesListByPath)` | After state updates are applied | Return value is ignored (not awaited) |
|
|
984
1006
|
|
|
1007
|
+
Since the reactive proxy detects every property assignment as a change, standard `async/await` with direct property updates is sufficient for asynchronous operations — loading flags, fetched data, and error messages are all just property assignments, without requiring additional abstractions for async state management.
|
|
1008
|
+
|
|
985
1009
|
- `this` inside hooks is the state proxy with full read/write access
|
|
986
1010
|
- `$connectedCallback` is called **every time** the element is connected (including re-insertion after removal), making it suitable for setup that should be re-established
|
|
987
1011
|
- `$disconnectedCallback` is called synchronously — use it for cleanup such as clearing timers, removing event listeners, or releasing resources
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wcstack/state",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.16",
|
|
4
4
|
"description": "Reactive state management with declarative data binding for Web Components. Zero dependencies, buildless.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.esm.js",
|
|
@@ -10,14 +10,15 @@
|
|
|
10
10
|
".": {
|
|
11
11
|
"types": "./dist/index.d.ts",
|
|
12
12
|
"import": "./dist/index.esm.js"
|
|
13
|
-
}
|
|
13
|
+
},
|
|
14
|
+
"./auto": "./dist/auto.min.js"
|
|
14
15
|
},
|
|
15
16
|
"files": [
|
|
16
17
|
"dist"
|
|
17
18
|
],
|
|
18
19
|
"scripts": {
|
|
19
|
-
"clean": "rimraf dist",
|
|
20
|
-
"build": "rimraf dist && tsc && rollup -c",
|
|
20
|
+
"clean": "rimraf dist .tsc-out",
|
|
21
|
+
"build": "rimraf dist .tsc-out && tsc && rollup -c",
|
|
21
22
|
"test": "vitest run",
|
|
22
23
|
"test:watch": "vitest",
|
|
23
24
|
"test:coverage": "vitest run --coverage",
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { IStateElement } from "../components/types";
|
|
2
|
-
import { IAbsolutePathInfo, IPathInfo } from "./types";
|
|
3
|
-
export declare function getAbsolutePathInfo(stateElement: IStateElement, pathInfo: IPathInfo): IAbsolutePathInfo;
|
|
4
|
-
//# sourceMappingURL=AbsolutePathInfo.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AbsolutePathInfo.d.ts","sourceRoot":"","sources":["../../src/address/AbsolutePathInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAIvD,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,GAAG,iBAAiB,CAYvG"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
const _cache = new WeakMap();
|
|
2
|
-
export function getAbsolutePathInfo(stateElement, pathInfo) {
|
|
3
|
-
if (_cache.has(stateElement)) {
|
|
4
|
-
const pathMap = _cache.get(stateElement);
|
|
5
|
-
if (pathMap.has(pathInfo)) {
|
|
6
|
-
return pathMap.get(pathInfo);
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
else {
|
|
10
|
-
_cache.set(stateElement, new WeakMap());
|
|
11
|
-
}
|
|
12
|
-
const absolutePathInfo = Object.freeze(new AbsolutePathInfo(stateElement, pathInfo));
|
|
13
|
-
_cache.get(stateElement).set(pathInfo, absolutePathInfo);
|
|
14
|
-
return absolutePathInfo;
|
|
15
|
-
}
|
|
16
|
-
class AbsolutePathInfo {
|
|
17
|
-
pathInfo;
|
|
18
|
-
stateName;
|
|
19
|
-
stateElement;
|
|
20
|
-
parentAbsolutePathInfo;
|
|
21
|
-
constructor(stateElement, pathInfo) {
|
|
22
|
-
this.pathInfo = pathInfo;
|
|
23
|
-
this.stateName = stateElement.name;
|
|
24
|
-
this.stateElement = stateElement;
|
|
25
|
-
if (pathInfo.parentPathInfo === null) {
|
|
26
|
-
this.parentAbsolutePathInfo = null;
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
this.parentAbsolutePathInfo = getAbsolutePathInfo(stateElement, pathInfo.parentPathInfo);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=AbsolutePathInfo.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AbsolutePathInfo.js","sourceRoot":"","sources":["../../src/address/AbsolutePathInfo.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,GAAkE,IAAI,OAAO,EAAE,CAAC;AAE5F,MAAM,UAAU,mBAAmB,CAAC,YAA2B,EAAE,QAAmB;IAClF,IAAI,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC;QAC1C,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;QAChC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,OAAO,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;IACrF,MAAM,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAC1D,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,MAAM,gBAAgB;IACX,QAAQ,CAAY;IACpB,SAAS,CAAS;IAClB,YAAY,CAAgB;IAC5B,sBAAsB,CAA2B;IAC1D,YAAY,YAA2B,EAAE,QAAmB;QAC1D,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,QAAQ,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;YACrC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,sBAAsB,GAAG,mBAAmB,CAAC,YAAY,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { IListIndex } from "../list/types";
|
|
2
|
-
import { IAbsolutePathInfo, IAbsoluteStateAddress } from "./types";
|
|
3
|
-
export declare function createAbsoluteStateAddress(absolutePathInfo: IAbsolutePathInfo, listIndex: IListIndex | null): IAbsoluteStateAddress;
|
|
4
|
-
//# sourceMappingURL=AbsoluteStateAddress.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AbsoluteStateAddress.d.ts","sourceRoot":"","sources":["../../src/address/AbsoluteStateAddress.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAqCnE,wBAAgB,0BAA0B,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,SAAS,EAAE,UAAU,GAAG,IAAI,GAAG,qBAAqB,CAuBnI"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { WILDCARD } from "../define";
|
|
2
|
-
const _cache = new WeakMap();
|
|
3
|
-
const _cacheNullListIndex = new WeakMap();
|
|
4
|
-
class AbsoluteStateAddress {
|
|
5
|
-
absolutePathInfo;
|
|
6
|
-
listIndex;
|
|
7
|
-
_parentAbsoluteAddress;
|
|
8
|
-
constructor(absolutePathInfo, listIndex) {
|
|
9
|
-
this.absolutePathInfo = absolutePathInfo;
|
|
10
|
-
this.listIndex = listIndex;
|
|
11
|
-
}
|
|
12
|
-
get parentAbsoluteAddress() {
|
|
13
|
-
if (typeof this._parentAbsoluteAddress !== 'undefined') {
|
|
14
|
-
return this._parentAbsoluteAddress;
|
|
15
|
-
}
|
|
16
|
-
const parentAbsolutePathInfo = this.absolutePathInfo.parentAbsolutePathInfo;
|
|
17
|
-
if (parentAbsolutePathInfo === null) {
|
|
18
|
-
return null;
|
|
19
|
-
}
|
|
20
|
-
const lastSegment = this.absolutePathInfo.pathInfo.segments[this.absolutePathInfo.pathInfo.segments.length - 1];
|
|
21
|
-
let parentListIndex = null;
|
|
22
|
-
if (lastSegment === WILDCARD) {
|
|
23
|
-
parentListIndex = this.listIndex?.parentListIndex ?? null;
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
parentListIndex = this.listIndex;
|
|
27
|
-
}
|
|
28
|
-
return this._parentAbsoluteAddress = createAbsoluteStateAddress(parentAbsolutePathInfo, parentListIndex);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
export function createAbsoluteStateAddress(absolutePathInfo, listIndex) {
|
|
32
|
-
if (listIndex === null) {
|
|
33
|
-
let cached = _cacheNullListIndex.get(absolutePathInfo);
|
|
34
|
-
if (typeof cached !== "undefined") {
|
|
35
|
-
return cached;
|
|
36
|
-
}
|
|
37
|
-
cached = new AbsoluteStateAddress(absolutePathInfo, null);
|
|
38
|
-
_cacheNullListIndex.set(absolutePathInfo, cached);
|
|
39
|
-
return cached;
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
let cacheByAbsolutePathInfo = _cache.get(listIndex);
|
|
43
|
-
if (typeof cacheByAbsolutePathInfo === "undefined") {
|
|
44
|
-
cacheByAbsolutePathInfo = new WeakMap();
|
|
45
|
-
_cache.set(listIndex, cacheByAbsolutePathInfo);
|
|
46
|
-
}
|
|
47
|
-
let cached = cacheByAbsolutePathInfo.get(absolutePathInfo);
|
|
48
|
-
if (typeof cached !== "undefined") {
|
|
49
|
-
return cached;
|
|
50
|
-
}
|
|
51
|
-
cached = new AbsoluteStateAddress(absolutePathInfo, listIndex);
|
|
52
|
-
cacheByAbsolutePathInfo.set(absolutePathInfo, cached);
|
|
53
|
-
return cached;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=AbsoluteStateAddress.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AbsoluteStateAddress.js","sourceRoot":"","sources":["../../src/address/AbsoluteStateAddress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAIrC,MAAM,MAAM,GAA2E,IAAI,OAAO,EAAE,CAAC;AACrG,MAAM,mBAAmB,GAAsD,IAAI,OAAO,EAAE,CAAC;AAE7F,MAAM,oBAAoB;IACf,gBAAgB,CAAoB;IACpC,SAAS,CAAoB;IAC9B,sBAAsB,CAA2C;IAEzE,YAAY,gBAAmC,EAAE,SAA4B;QAC3E,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,IAAI,qBAAqB;QACvB,IAAI,OAAO,IAAI,CAAC,sBAAsB,KAAK,WAAW,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC,sBAAsB,CAAC;QACrC,CAAC;QACD,MAAM,sBAAsB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC;QAC5E,IAAI,sBAAsB,KAAK,IAAI,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChH,IAAI,eAAe,GAAsB,IAAI,CAAC;QAC9C,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;YAC7B,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,IAAI,IAAI,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,CAAC,sBAAsB,GAAG,0BAA0B,CAC7D,sBAAsB,EACtB,eAAe,CAChB,CAAC;IACJ,CAAC;CACF;AAED,MAAM,UAAU,0BAA0B,CAAC,gBAAmC,EAAE,SAA4B;IAC1G,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,IAAI,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACvD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,GAAG,IAAI,oBAAoB,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;QAC1D,mBAAmB,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAClD,OAAO,MAAM,CAAC;IAChB,CAAC;SAAM,CAAC;QACN,IAAI,uBAAuB,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,OAAO,uBAAuB,KAAK,WAAW,EAAE,CAAC;YACnD,uBAAuB,GAAG,IAAI,OAAO,EAA4C,CAAC;YAClF,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,MAAM,GAAG,uBAAuB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC3D,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,GAAG,IAAI,oBAAoB,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;QAC/D,uBAAuB,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QACtD,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PathInfo.d.ts","sourceRoot":"","sources":["../../src/address/PathInfo.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAKvC,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAQnD"}
|
package/dist/address/PathInfo.js
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { WILDCARD } from "../define.js";
|
|
2
|
-
const _cache = new Map();
|
|
3
|
-
let id = 0;
|
|
4
|
-
export function getPathInfo(path) {
|
|
5
|
-
let pathInfo = _cache.get(path);
|
|
6
|
-
if (typeof pathInfo !== "undefined") {
|
|
7
|
-
return pathInfo;
|
|
8
|
-
}
|
|
9
|
-
pathInfo = Object.freeze(new PathInfo(path));
|
|
10
|
-
_cache.set(path, pathInfo);
|
|
11
|
-
return pathInfo;
|
|
12
|
-
}
|
|
13
|
-
class PathInfo {
|
|
14
|
-
id = ++id;
|
|
15
|
-
path;
|
|
16
|
-
segments;
|
|
17
|
-
lastSegment;
|
|
18
|
-
cumulativePaths;
|
|
19
|
-
cumulativePathSet;
|
|
20
|
-
cumulativePathInfos;
|
|
21
|
-
cumulativePathInfoSet;
|
|
22
|
-
parentPath;
|
|
23
|
-
wildcardPaths;
|
|
24
|
-
wildcardPathSet;
|
|
25
|
-
indexByWildcardPath;
|
|
26
|
-
wildcardPathInfos;
|
|
27
|
-
wildcardPathInfoSet;
|
|
28
|
-
wildcardParentPaths;
|
|
29
|
-
wildcardParentPathSet;
|
|
30
|
-
wildcardParentPathInfos;
|
|
31
|
-
wildcardParentPathInfoSet;
|
|
32
|
-
wildcardPositions;
|
|
33
|
-
lastWildcardPath;
|
|
34
|
-
lastWildcardInfo;
|
|
35
|
-
wildcardCount;
|
|
36
|
-
parentPathInfo;
|
|
37
|
-
constructor(path) {
|
|
38
|
-
// Helper to get or create StructuredPathInfo instances, avoiding redundant creation for self-reference
|
|
39
|
-
const getPattern = (_path) => {
|
|
40
|
-
return (path === _path) ? this : getPathInfo(_path);
|
|
41
|
-
};
|
|
42
|
-
// Split the pattern into individual path segments (e.g., "items.*.name" → ["items", "*", "name"])
|
|
43
|
-
const segments = path.split(".");
|
|
44
|
-
// Arrays to track all cumulative paths from root to each segment
|
|
45
|
-
const cumulativePaths = [];
|
|
46
|
-
const cumulativePathInfos = [];
|
|
47
|
-
// Arrays to track wildcard-specific information
|
|
48
|
-
const wildcardPaths = [];
|
|
49
|
-
const indexByWildcardPath = {}; // Maps wildcard path to its index position
|
|
50
|
-
const wildcardPathInfos = [];
|
|
51
|
-
const wildcardParentPaths = []; // Paths of parent segments for each wildcard
|
|
52
|
-
const wildcardParentPathInfos = [];
|
|
53
|
-
const wildcardPositions = [];
|
|
54
|
-
let currentPatternPath = "", prevPatternPath = "";
|
|
55
|
-
let wildcardCount = 0;
|
|
56
|
-
// Iterate through each segment to build cumulative paths and identify wildcards
|
|
57
|
-
for (let i = 0; i < segments.length; i++) {
|
|
58
|
-
currentPatternPath += segments[i];
|
|
59
|
-
// If this segment is a wildcard, track it with all wildcard-specific metadata
|
|
60
|
-
if (segments[i] === WILDCARD) {
|
|
61
|
-
wildcardPaths.push(currentPatternPath);
|
|
62
|
-
indexByWildcardPath[currentPatternPath] = wildcardCount; // Store wildcard's ordinal position
|
|
63
|
-
wildcardPathInfos.push(getPattern(currentPatternPath));
|
|
64
|
-
wildcardParentPaths.push(prevPatternPath); // Parent path is the previous cumulative path
|
|
65
|
-
wildcardParentPathInfos.push(getPattern(prevPatternPath));
|
|
66
|
-
wildcardPositions.push(i);
|
|
67
|
-
wildcardCount++;
|
|
68
|
-
}
|
|
69
|
-
// Track all cumulative paths for hierarchical navigation (e.g., "items", "items.*", "items.*.name")
|
|
70
|
-
cumulativePaths.push(currentPatternPath);
|
|
71
|
-
cumulativePathInfos.push(getPattern(currentPatternPath));
|
|
72
|
-
// Save current path as previous for next iteration, then add separator
|
|
73
|
-
prevPatternPath = currentPatternPath;
|
|
74
|
-
currentPatternPath += ".";
|
|
75
|
-
}
|
|
76
|
-
// Determine the deepest (last) wildcard path and the parent path of the entire pattern
|
|
77
|
-
const lastWildcardPath = wildcardPaths.length > 0 ? wildcardPaths[wildcardPaths.length - 1] : null;
|
|
78
|
-
const parentPath = cumulativePaths.length > 1 ? cumulativePaths[cumulativePaths.length - 2] : null;
|
|
79
|
-
// Assign all analyzed data to readonly properties
|
|
80
|
-
this.path = path;
|
|
81
|
-
this.segments = segments;
|
|
82
|
-
this.lastSegment = segments[segments.length - 1];
|
|
83
|
-
this.cumulativePaths = cumulativePaths;
|
|
84
|
-
this.cumulativePathSet = new Set(cumulativePaths); // Set for fast lookup
|
|
85
|
-
this.cumulativePathInfos = cumulativePathInfos;
|
|
86
|
-
this.cumulativePathInfoSet = new Set(cumulativePathInfos);
|
|
87
|
-
this.wildcardPaths = wildcardPaths;
|
|
88
|
-
this.wildcardPathSet = new Set(wildcardPaths);
|
|
89
|
-
this.indexByWildcardPath = indexByWildcardPath;
|
|
90
|
-
this.wildcardPathInfos = wildcardPathInfos;
|
|
91
|
-
this.wildcardPathInfoSet = new Set(wildcardPathInfos);
|
|
92
|
-
this.wildcardParentPaths = wildcardParentPaths;
|
|
93
|
-
this.wildcardParentPathSet = new Set(wildcardParentPaths);
|
|
94
|
-
this.wildcardParentPathInfos = wildcardParentPathInfos;
|
|
95
|
-
this.wildcardParentPathInfoSet = new Set(wildcardParentPathInfos);
|
|
96
|
-
this.wildcardPositions = wildcardPositions;
|
|
97
|
-
this.lastWildcardPath = lastWildcardPath;
|
|
98
|
-
this.lastWildcardInfo = lastWildcardPath ? getPattern(lastWildcardPath) : null;
|
|
99
|
-
this.parentPath = parentPath;
|
|
100
|
-
this.parentPathInfo = parentPath ? getPattern(parentPath) : null;
|
|
101
|
-
this.wildcardCount = wildcardCount;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
//# sourceMappingURL=PathInfo.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PathInfo.js","sourceRoot":"","sources":["../../src/address/PathInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGxC,MAAM,MAAM,GAA2B,IAAI,GAAG,EAAE,CAAC;AAEjD,IAAI,EAAE,GAAW,CAAC,CAAC;AACnB,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;QACpC,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7C,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,QAAQ;IACH,EAAE,GAAW,EAAE,EAAE,CAAC;IAClB,IAAI,CAAS;IACb,QAAQ,CAAW;IACnB,WAAW,CAAS;IACpB,eAAe,CAAW;IAC1B,iBAAiB,CAAc;IAC/B,mBAAmB,CAAc;IACjC,qBAAqB,CAAiB;IACtC,UAAU,CAAgB;IAC1B,aAAa,CAAW;IACxB,eAAe,CAAc;IAC7B,mBAAmB,CAAyB;IAC5C,iBAAiB,CAAc;IAC/B,mBAAmB,CAAiB;IACpC,mBAAmB,CAAW;IAC9B,qBAAqB,CAAc;IACnC,uBAAuB,CAAc;IACrC,yBAAyB,CAAiB;IAC1C,iBAAiB,CAAW;IAC5B,gBAAgB,CAAgB;IAChC,gBAAgB,CAAmB;IACnC,aAAa,CAAS;IACtB,cAAc,CAAmB;IAC1C,YAAY,IAAY;QACtB,uGAAuG;QACvG,MAAM,UAAU,GAAG,CAAC,KAAa,EAAa,EAAE;YAC9C,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACtD,CAAC,CAAC;QAEF,kGAAkG;QAClG,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEjC,iEAAiE;QACjE,MAAM,eAAe,GAAG,EAAE,CAAC;QAC3B,MAAM,mBAAmB,GAAgB,EAAE,CAAC;QAE5C,gDAAgD;QAChD,MAAM,aAAa,GAAG,EAAE,CAAC;QACzB,MAAM,mBAAmB,GAA2B,EAAE,CAAC,CAAC,2CAA2C;QACnG,MAAM,iBAAiB,GAAG,EAAE,CAAC;QAC7B,MAAM,mBAAmB,GAAG,EAAE,CAAC,CAAC,6CAA6C;QAC7E,MAAM,uBAAuB,GAAG,EAAE,CAAC;QACnC,MAAM,iBAAiB,GAAG,EAAE,CAAC;QAE7B,IAAI,kBAAkB,GAAG,EAAE,EAAE,eAAe,GAAG,EAAE,CAAC;QAClD,IAAI,aAAa,GAAG,CAAC,CAAC;QAEtB,gFAAgF;QAChF,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,kBAAkB,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;YAElC,8EAA8E;YAC9E,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC7B,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBACvC,mBAAmB,CAAC,kBAAkB,CAAC,GAAG,aAAa,CAAC,CAAC,oCAAoC;gBAC7F,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBACvD,mBAAmB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,8CAA8C;gBACzF,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC;gBAC1D,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC1B,aAAa,EAAE,CAAC;YAClB,CAAC;YAED,oGAAoG;YACpG,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACzC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAEzD,uEAAuE;YACvE,eAAe,GAAG,kBAAkB,CAAC;YACrC,kBAAkB,IAAI,GAAG,CAAC;QAC5B,CAAC;QAED,uFAAuF;QACvF,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACnG,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEnG,kDAAkD;QAClD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,sBAAsB;QACzE,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QAC/C,IAAI,CAAC,qBAAqB,GAAG,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAC1D,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;QAC9C,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QAC/C,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,mBAAmB,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACtD,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QAC/C,IAAI,CAAC,qBAAqB,GAAG,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAC1D,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;QACvD,IAAI,CAAC,yBAAyB,GAAG,IAAI,GAAG,CAAC,uBAAuB,CAAC,CAAC;QAClE,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/E,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACjE,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;CACF"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* getResolvedPathInfo.ts
|
|
3
|
-
*
|
|
4
|
-
* Utility for parsing and generating detailed path information (IResolvedPathInfo)
|
|
5
|
-
* from State property names (path strings), including wildcard and index information.
|
|
6
|
-
*
|
|
7
|
-
* Main responsibilities:
|
|
8
|
-
* - Breaks down property names to determine presence and type of wildcards and indexes
|
|
9
|
-
* - Automatically determines wildcard type: context/all/partial/none
|
|
10
|
-
* - Caches by path for reusability and performance
|
|
11
|
-
* - Retrieves structured path information via getStructuredPathInfo
|
|
12
|
-
*
|
|
13
|
-
* Design points:
|
|
14
|
-
* - Caches using Map to handle reserved words like "constructor" and "toString"
|
|
15
|
-
* - Flexibly determines wildcards (*) and numeric indexes, storing them in wildcardIndexes
|
|
16
|
-
* - context type indicates unresolved indexes, all type indicates all resolved indexes, partial type indicates mixed
|
|
17
|
-
* - ResolvedPathInfo class centralizes path parsing and information management
|
|
18
|
-
*/
|
|
19
|
-
import { IResolvedAddress } from './types';
|
|
20
|
-
/**
|
|
21
|
-
* Retrieves or creates resolved path information for a property path.
|
|
22
|
-
*
|
|
23
|
-
* This function caches resolved path information for performance.
|
|
24
|
-
* On first access, it parses the path and creates a ResolvedPathInfo instance.
|
|
25
|
-
* Subsequent accesses return the cached result.
|
|
26
|
-
*
|
|
27
|
-
* @param name - Property path string (e.g., "items.*.name", "data.0.value")
|
|
28
|
-
* @returns Resolved path information containing segments, wildcards, and type classification
|
|
29
|
-
*/
|
|
30
|
-
export declare function getResolvedAddress(name: string): IResolvedAddress;
|
|
31
|
-
//# sourceMappingURL=ResolvedAddress.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ResolvedAddress.d.ts","sourceRoot":"","sources":["../../src/address/ResolvedAddress.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,gBAAgB,EAAgB,MAAM,SAAS,CAAC;AAkGzD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAC,MAAM,GAAE,gBAAgB,CAI/D"}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import { getPathInfo } from './PathInfo';
|
|
2
|
-
/**
|
|
3
|
-
* Cache for resolved path information.
|
|
4
|
-
* Uses Map to safely handle property names including reserved words like "constructor" and "toString".
|
|
5
|
-
*/
|
|
6
|
-
const _cache = new Map();
|
|
7
|
-
/**
|
|
8
|
-
* Class that parses and stores resolved path information.
|
|
9
|
-
*
|
|
10
|
-
* Analyzes property path strings to extract:
|
|
11
|
-
* - Path segments and their hierarchy
|
|
12
|
-
* - Wildcard locations and types
|
|
13
|
-
* - Numeric indexes vs unresolved wildcards
|
|
14
|
-
* - Wildcard type classification (none/context/all/partial)
|
|
15
|
-
*/
|
|
16
|
-
class ResolvedAddress {
|
|
17
|
-
path;
|
|
18
|
-
segments;
|
|
19
|
-
paths;
|
|
20
|
-
wildcardCount;
|
|
21
|
-
wildcardType;
|
|
22
|
-
wildcardIndexes;
|
|
23
|
-
pathInfo;
|
|
24
|
-
/**
|
|
25
|
-
* Constructs resolved path information from a property path string.
|
|
26
|
-
*
|
|
27
|
-
* Parses the path to identify wildcards (*) and numeric indexes,
|
|
28
|
-
* classifies the wildcard type, and generates structured path information.
|
|
29
|
-
*
|
|
30
|
-
* @param name - Property path string (e.g., "items.*.name" or "data.0.value")
|
|
31
|
-
*/
|
|
32
|
-
constructor(path) {
|
|
33
|
-
// Split path into individual segments
|
|
34
|
-
const segments = path.split(".");
|
|
35
|
-
const tmpPatternSegments = segments.slice();
|
|
36
|
-
const paths = [];
|
|
37
|
-
let incompleteCount = 0; // Count of unresolved wildcards (*)
|
|
38
|
-
let completeCount = 0; // Count of resolved wildcards (numeric indexes)
|
|
39
|
-
let lastPath = "";
|
|
40
|
-
let wildcardCount = 0;
|
|
41
|
-
let wildcardType = "none";
|
|
42
|
-
const wildcardIndexes = [];
|
|
43
|
-
// Process each segment to identify wildcards and indexes
|
|
44
|
-
for (let i = 0; i < segments.length; i++) {
|
|
45
|
-
const segment = segments[i];
|
|
46
|
-
if (segment === "*") {
|
|
47
|
-
// Unresolved wildcard
|
|
48
|
-
tmpPatternSegments[i] = "*";
|
|
49
|
-
wildcardIndexes.push(null);
|
|
50
|
-
incompleteCount++;
|
|
51
|
-
wildcardCount++;
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
const number = Number(segment);
|
|
55
|
-
if (!Number.isNaN(number)) {
|
|
56
|
-
// Numeric index - treat as resolved wildcard
|
|
57
|
-
tmpPatternSegments[i] = "*";
|
|
58
|
-
wildcardIndexes.push(number);
|
|
59
|
-
completeCount++;
|
|
60
|
-
wildcardCount++;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
// Build cumulative path array
|
|
64
|
-
lastPath += segment;
|
|
65
|
-
paths.push(lastPath);
|
|
66
|
-
lastPath += (i < segment.length - 1 ? "." : "");
|
|
67
|
-
}
|
|
68
|
-
// Generate pattern string with wildcards normalized
|
|
69
|
-
const structuredPath = tmpPatternSegments.join(".");
|
|
70
|
-
const pathInfo = getPathInfo(structuredPath);
|
|
71
|
-
// Classify wildcard type based on resolved vs unresolved counts
|
|
72
|
-
if (incompleteCount > 0 || completeCount > 0) {
|
|
73
|
-
if (incompleteCount === wildcardCount) {
|
|
74
|
-
// All wildcards are unresolved - need context to resolve
|
|
75
|
-
wildcardType = "context";
|
|
76
|
-
}
|
|
77
|
-
else if (completeCount === wildcardCount) {
|
|
78
|
-
// All wildcards are resolved with numeric indexes
|
|
79
|
-
wildcardType = "all";
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
// Mix of resolved and unresolved wildcards
|
|
83
|
-
wildcardType = "partial";
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
this.path = path;
|
|
87
|
-
this.segments = segments;
|
|
88
|
-
this.paths = paths;
|
|
89
|
-
this.wildcardCount = wildcardCount;
|
|
90
|
-
this.wildcardType = wildcardType;
|
|
91
|
-
this.wildcardIndexes = wildcardIndexes;
|
|
92
|
-
this.pathInfo = pathInfo;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Retrieves or creates resolved path information for a property path.
|
|
97
|
-
*
|
|
98
|
-
* This function caches resolved path information for performance.
|
|
99
|
-
* On first access, it parses the path and creates a ResolvedPathInfo instance.
|
|
100
|
-
* Subsequent accesses return the cached result.
|
|
101
|
-
*
|
|
102
|
-
* @param name - Property path string (e.g., "items.*.name", "data.0.value")
|
|
103
|
-
* @returns Resolved path information containing segments, wildcards, and type classification
|
|
104
|
-
*/
|
|
105
|
-
export function getResolvedAddress(name) {
|
|
106
|
-
let nameInfo;
|
|
107
|
-
// Return cached value or create, cache, and return new instance
|
|
108
|
-
return _cache.get(name) ?? (_cache.set(name, nameInfo = new ResolvedAddress(name)), nameInfo);
|
|
109
|
-
}
|
|
110
|
-
//# sourceMappingURL=ResolvedAddress.js.map
|