pulse-framework 0.1.51__py3-none-any.whl → 0.1.52__py3-none-any.whl
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.
- pulse/__init__.py +542 -562
- pulse/_examples.py +29 -0
- pulse/app.py +0 -14
- pulse/cli/cmd.py +96 -80
- pulse/cli/dependencies.py +10 -41
- pulse/cli/folder_lock.py +3 -3
- pulse/cli/helpers.py +40 -67
- pulse/cli/logging.py +102 -0
- pulse/cli/packages.py +16 -0
- pulse/cli/processes.py +40 -23
- pulse/codegen/codegen.py +70 -35
- pulse/codegen/js.py +2 -4
- pulse/codegen/templates/route.py +94 -146
- pulse/component.py +115 -0
- pulse/components/for_.py +1 -1
- pulse/components/if_.py +1 -1
- pulse/components/react_router.py +16 -22
- pulse/{html → dom}/events.py +1 -1
- pulse/{html → dom}/props.py +6 -6
- pulse/{html → dom}/tags.py +11 -11
- pulse/dom/tags.pyi +480 -0
- pulse/form.py +7 -6
- pulse/hooks/init.py +1 -13
- pulse/js/__init__.py +37 -41
- pulse/js/__init__.pyi +22 -2
- pulse/js/_types.py +5 -3
- pulse/js/array.py +121 -38
- pulse/js/console.py +9 -9
- pulse/js/date.py +22 -19
- pulse/js/document.py +8 -4
- pulse/js/error.py +12 -14
- pulse/js/json.py +4 -3
- pulse/js/map.py +17 -7
- pulse/js/math.py +2 -2
- pulse/js/navigator.py +4 -4
- pulse/js/number.py +8 -8
- pulse/js/object.py +9 -13
- pulse/js/promise.py +25 -9
- pulse/js/regexp.py +6 -6
- pulse/js/set.py +20 -8
- pulse/js/string.py +7 -7
- pulse/js/weakmap.py +6 -6
- pulse/js/weakset.py +6 -6
- pulse/js/window.py +17 -14
- pulse/messages.py +1 -4
- pulse/react_component.py +3 -1001
- pulse/render_session.py +74 -66
- pulse/renderer.py +311 -238
- pulse/routing.py +1 -10
- pulse/transpiler/__init__.py +84 -114
- pulse/transpiler/builtins.py +661 -343
- pulse/transpiler/errors.py +78 -2
- pulse/transpiler/function.py +463 -133
- pulse/transpiler/id.py +18 -0
- pulse/transpiler/imports.py +230 -325
- pulse/transpiler/js_module.py +218 -209
- pulse/transpiler/modules/__init__.py +16 -13
- pulse/transpiler/modules/asyncio.py +45 -26
- pulse/transpiler/modules/json.py +12 -8
- pulse/transpiler/modules/math.py +161 -216
- pulse/transpiler/modules/pulse/__init__.py +5 -0
- pulse/transpiler/modules/pulse/tags.py +231 -0
- pulse/transpiler/modules/typing.py +33 -28
- pulse/transpiler/nodes.py +1607 -923
- pulse/transpiler/py_module.py +118 -95
- pulse/transpiler/react_component.py +51 -0
- pulse/transpiler/transpiler.py +593 -437
- pulse/transpiler/vdom.py +255 -0
- {pulse_framework-0.1.51.dist-info → pulse_framework-0.1.52.dist-info}/METADATA +1 -1
- pulse_framework-0.1.52.dist-info/RECORD +120 -0
- pulse/html/tags.pyi +0 -470
- pulse/transpiler/constants.py +0 -110
- pulse/transpiler/context.py +0 -26
- pulse/transpiler/ids.py +0 -16
- pulse/transpiler/modules/re.py +0 -466
- pulse/transpiler/modules/tags.py +0 -268
- pulse/transpiler/utils.py +0 -4
- pulse/vdom.py +0 -599
- pulse_framework-0.1.51.dist-info/RECORD +0 -119
- /pulse/{html → dom}/__init__.py +0 -0
- /pulse/{html → dom}/elements.py +0 -0
- /pulse/{html → dom}/svg.py +0 -0
- {pulse_framework-0.1.51.dist-info → pulse_framework-0.1.52.dist-info}/WHEEL +0 -0
- {pulse_framework-0.1.51.dist-info → pulse_framework-0.1.52.dist-info}/entry_points.txt +0 -0
pulse/transpiler/vdom.py
ADDED
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
"""Typed JSON VDOM format for transpiler.
|
|
2
|
+
|
|
3
|
+
This module defines the JSON-serializable format produced by the v2 renderer.
|
|
4
|
+
|
|
5
|
+
Key goals:
|
|
6
|
+
- The VDOM tree is rebuilt into React elements on the client.
|
|
7
|
+
- Any embedded expression tree is evaluated on the client.
|
|
8
|
+
- Only nodes representable in this JSON format are renderable.
|
|
9
|
+
|
|
10
|
+
Notes:
|
|
11
|
+
- This is a *wire format* (JSON). It is intentionally more restrictive than the
|
|
12
|
+
Python-side node graph in `pulse.transpiler.nodes`.
|
|
13
|
+
- Server-side-only nodes (e.g. `PulseNode`, `Transformer`, statement nodes) must
|
|
14
|
+
be rejected during rendering.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
from __future__ import annotations
|
|
18
|
+
|
|
19
|
+
from typing import Literal, NotRequired, TypeAlias, TypedDict
|
|
20
|
+
|
|
21
|
+
# =============================================================================
|
|
22
|
+
# JSON atoms
|
|
23
|
+
# =============================================================================
|
|
24
|
+
|
|
25
|
+
JsonPrimitive: TypeAlias = str | int | float | bool | None
|
|
26
|
+
JsonValue: TypeAlias = JsonPrimitive | list["JsonValue"] | dict[str, "JsonValue"]
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# =============================================================================
|
|
30
|
+
# Expression tree (client-evaluable)
|
|
31
|
+
# =============================================================================
|
|
32
|
+
|
|
33
|
+
# The expression format is a small tagged-union.
|
|
34
|
+
#
|
|
35
|
+
# - The client should treat these nodes as *pure*, deterministic expressions.
|
|
36
|
+
# - Identifiers should generally be avoided unless the client runtime provides
|
|
37
|
+
# them (e.g. `Math`). Prefer `RegistryRef` for server-provided values.
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class RegistryRef(TypedDict):
|
|
41
|
+
"""Reference to an entry in the unified client registry."""
|
|
42
|
+
|
|
43
|
+
t: Literal["ref"]
|
|
44
|
+
key: str
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class IdentifierExpr(TypedDict):
|
|
48
|
+
t: Literal["id"]
|
|
49
|
+
name: str
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class LiteralExpr(TypedDict):
|
|
53
|
+
t: Literal["lit"]
|
|
54
|
+
value: JsonPrimitive
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class UndefinedExpr(TypedDict):
|
|
58
|
+
t: Literal["undef"]
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class ArrayExpr(TypedDict):
|
|
62
|
+
t: Literal["array"]
|
|
63
|
+
items: list["VDOMNode"]
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class ObjectExpr(TypedDict):
|
|
67
|
+
t: Literal["object"]
|
|
68
|
+
props: dict[str, "VDOMNode"]
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class MemberExpr(TypedDict):
|
|
72
|
+
t: Literal["member"]
|
|
73
|
+
obj: "VDOMNode"
|
|
74
|
+
prop: str
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class SubscriptExpr(TypedDict):
|
|
78
|
+
t: Literal["sub"]
|
|
79
|
+
obj: "VDOMNode"
|
|
80
|
+
key: "VDOMNode"
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
class CallExpr(TypedDict):
|
|
84
|
+
t: Literal["call"]
|
|
85
|
+
callee: "VDOMNode"
|
|
86
|
+
args: list["VDOMNode"]
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class UnaryExpr(TypedDict):
|
|
90
|
+
t: Literal["unary"]
|
|
91
|
+
op: str
|
|
92
|
+
arg: "VDOMNode"
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
class BinaryExpr(TypedDict):
|
|
96
|
+
t: Literal["binary"]
|
|
97
|
+
op: str
|
|
98
|
+
left: "VDOMNode"
|
|
99
|
+
right: "VDOMNode"
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
class TernaryExpr(TypedDict):
|
|
103
|
+
t: Literal["ternary"]
|
|
104
|
+
cond: "VDOMNode"
|
|
105
|
+
then: "VDOMNode"
|
|
106
|
+
else_: "VDOMNode"
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
class TemplateExpr(TypedDict):
|
|
110
|
+
"""Template literal parts.
|
|
111
|
+
|
|
112
|
+
Parts alternate: [str, expr, str, expr, str, ...].
|
|
113
|
+
Always starts and ends with a string segment (may be empty).
|
|
114
|
+
"""
|
|
115
|
+
|
|
116
|
+
t: Literal["template"]
|
|
117
|
+
parts: list["str | VDOMNode"]
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
class ArrowExpr(TypedDict):
|
|
121
|
+
t: Literal["arrow"]
|
|
122
|
+
params: list[str]
|
|
123
|
+
body: "VDOMNode"
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
class NewExpr(TypedDict):
|
|
127
|
+
t: Literal["new"]
|
|
128
|
+
ctor: "VDOMNode"
|
|
129
|
+
args: list["VDOMNode"]
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
VDOMExpr: TypeAlias = (
|
|
133
|
+
RegistryRef
|
|
134
|
+
| IdentifierExpr
|
|
135
|
+
| LiteralExpr
|
|
136
|
+
| UndefinedExpr
|
|
137
|
+
| ArrayExpr
|
|
138
|
+
| ObjectExpr
|
|
139
|
+
| MemberExpr
|
|
140
|
+
| SubscriptExpr
|
|
141
|
+
| CallExpr
|
|
142
|
+
| UnaryExpr
|
|
143
|
+
| BinaryExpr
|
|
144
|
+
| TernaryExpr
|
|
145
|
+
| TemplateExpr
|
|
146
|
+
| ArrowExpr
|
|
147
|
+
| NewExpr
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
# =============================================================================
|
|
152
|
+
# VDOM tree (React element reconstruction)
|
|
153
|
+
# =============================================================================
|
|
154
|
+
|
|
155
|
+
CallbackPlaceholder: TypeAlias = Literal["$cb"]
|
|
156
|
+
"""Callback placeholder value.
|
|
157
|
+
|
|
158
|
+
The callback invocation target is derived from the element path + prop name.
|
|
159
|
+
Because the prop name is known from `VDOMElement.eval`, the placeholder can be a
|
|
160
|
+
single sentinel string.
|
|
161
|
+
"""
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
VDOMPropValue: TypeAlias = "JsonValue | VDOMExpr | VDOMElement | CallbackPlaceholder"
|
|
165
|
+
"""Allowed prop value types.
|
|
166
|
+
|
|
167
|
+
Hot path:
|
|
168
|
+
- If `VDOMElement.eval` is absent, props MUST be plain JSON (JsonValue).
|
|
169
|
+
- If `VDOMElement.eval` is present, only the listed prop keys may contain
|
|
170
|
+
non-JSON values (VDOMExpr / VDOMElement / "$cb:...").
|
|
171
|
+
"""
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
class VDOMElement(TypedDict):
|
|
175
|
+
"""A React element in wire format.
|
|
176
|
+
|
|
177
|
+
Special tags:
|
|
178
|
+
- "": React Fragment
|
|
179
|
+
- "$$<ComponentKey>": mount point for client component registry
|
|
180
|
+
"""
|
|
181
|
+
|
|
182
|
+
tag: str
|
|
183
|
+
key: NotRequired[str]
|
|
184
|
+
# Default: plain JSON props (no interpretation).
|
|
185
|
+
# When `eval` is present, listed keys may contain VDOMExpr / VDOMElement / "$cb:...".
|
|
186
|
+
props: NotRequired[dict[str, VDOMPropValue]]
|
|
187
|
+
children: NotRequired[list["VDOMNode"]]
|
|
188
|
+
# Marks which prop keys should be interpreted (evaluate expr / render node / bind callback).
|
|
189
|
+
# The interpreter determines the action by inspecting the value shape:
|
|
190
|
+
# - dict with "t": VDOMExpr
|
|
191
|
+
# - dict with "tag": VDOMElement (render-prop subtree)
|
|
192
|
+
# - "$cb": callback placeholder
|
|
193
|
+
eval: NotRequired[list[str]]
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
VDOMPrimitive: TypeAlias = JsonPrimitive
|
|
197
|
+
|
|
198
|
+
# A node is either a primitive, an element, or an expression node.
|
|
199
|
+
VDOMNode: TypeAlias = VDOMPrimitive | VDOMElement | VDOMExpr
|
|
200
|
+
|
|
201
|
+
VDOM: TypeAlias = VDOMNode
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
# =============================================================================
|
|
205
|
+
# Update operations (reconciliation output)
|
|
206
|
+
# =============================================================================
|
|
207
|
+
|
|
208
|
+
RenderPath: TypeAlias = str
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
class ReplaceOperation(TypedDict):
|
|
212
|
+
type: Literal["replace"]
|
|
213
|
+
path: RenderPath
|
|
214
|
+
data: VDOM
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
class ReconciliationOperation(TypedDict):
|
|
218
|
+
type: Literal["reconciliation"]
|
|
219
|
+
path: RenderPath
|
|
220
|
+
N: int
|
|
221
|
+
new: tuple[list[int], list[VDOM]]
|
|
222
|
+
reuse: tuple[list[int], list[int]]
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
class UpdatePropsDelta(TypedDict, total=False):
|
|
226
|
+
# Prop deltas only affect `element.props`.
|
|
227
|
+
# If the element has `eval`, only those keys may use non-JSON values.
|
|
228
|
+
set: dict[str, VDOMPropValue]
|
|
229
|
+
remove: list[str]
|
|
230
|
+
# Optional eval key list replacement for this element.
|
|
231
|
+
# - If present, replaces `element.eval` entirely.
|
|
232
|
+
# - Use [] to clear the eval list.
|
|
233
|
+
eval: list[str]
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
class UpdatePropsOperation(TypedDict):
|
|
237
|
+
type: Literal["update_props"]
|
|
238
|
+
path: RenderPath
|
|
239
|
+
data: UpdatePropsDelta
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
VDOMOperation: TypeAlias = (
|
|
243
|
+
ReplaceOperation | UpdatePropsOperation | ReconciliationOperation
|
|
244
|
+
)
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
# =============================================================================
|
|
248
|
+
# View payload (initial render)
|
|
249
|
+
# =============================================================================
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
class PrerenderView(TypedDict):
|
|
253
|
+
"""Minimal payload required by the client to render + apply updates."""
|
|
254
|
+
|
|
255
|
+
vdom: VDOM
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
pulse/__init__.py,sha256=TZW4PEV1WHpVHFHZ0zOGiT1LtmR5azYXl0uclYtKXtw,31990
|
|
2
|
+
pulse/_examples.py,sha256=dFuhD2EVXsbvAeexoG57s4VuN4gWLaTMOEMNYvlPm9A,561
|
|
3
|
+
pulse/app.py,sha256=hrEV8fLgO0IXkIo41HYq4ckRjvwGymcOeyaaY0hnVb4,31087
|
|
4
|
+
pulse/channel.py,sha256=d9eLxgyB0P9UBVkPkXV7MHkC4LWED1Cq3GKsEu_SYy4,13056
|
|
5
|
+
pulse/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
pulse/cli/cmd.py,sha256=rTcqt_hg89n2FMJhf7ODUPClCx8dzcuKUe1Jv062UmQ,15339
|
|
7
|
+
pulse/cli/dependencies.py,sha256=ezFw-7YWnJcvB1k25b0nB_OaOaP-EKtleNtBE2oJUUk,4603
|
|
8
|
+
pulse/cli/folder_lock.py,sha256=-AKld2iM91G0uHB3F5ARD0QAjOw0TmsYYGaFgy_V350,3477
|
|
9
|
+
pulse/cli/helpers.py,sha256=XXRRXeGFgeq-jbp0QGFFVq_aGg_Kp7_AkYsTK8LfSdg,7810
|
|
10
|
+
pulse/cli/logging.py,sha256=3uuB1dqI-lHJkodNUURN6UMWdKF5UQ9spNG-hBG7bA4,2516
|
|
11
|
+
pulse/cli/models.py,sha256=NBV5byBDNoAQSk0vKwibLjoxuA85XBYIyOVJn64L8oU,858
|
|
12
|
+
pulse/cli/packages.py,sha256=DSnhxz61AoLVvBre3c0dnVYSpiKPI0rKFq4YmgM_VlA,7220
|
|
13
|
+
pulse/cli/processes.py,sha256=BFSKTRoNlCTAi3lDAjKHsKN1c-S032eol0tFd84pdVQ,7566
|
|
14
|
+
pulse/cli/secrets.py,sha256=dNfQe6AzSYhZuWveesjCRHIbvaPd3-F9lEJ-kZA7ROw,921
|
|
15
|
+
pulse/cli/uvicorn_log_config.py,sha256=f7ikDc5foXh3TmFMrnfnW8yev48ZAdlo8F4F_aMVoVk,2391
|
|
16
|
+
pulse/codegen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
|
+
pulse/codegen/codegen.py,sha256=M5X-TpLwI25wfZhI2G0DjM3Op4kvoDF0HQeeGD3xujE,10296
|
|
18
|
+
pulse/codegen/js.py,sha256=fm2aL3RdnL7KlgrXDkKbM0E6BkXYBkID0XlKTDAX26c,1521
|
|
19
|
+
pulse/codegen/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
|
+
pulse/codegen/templates/layout.py,sha256=nmWPQcO9SRXc3mCCVLCmykreSF96TqQfdDY7dvUBxRg,4737
|
|
21
|
+
pulse/codegen/templates/route.py,sha256=yWNoThsTivsK-8gtFF-ShDxT5Rj1QP1-26Yw66pvME8,7929
|
|
22
|
+
pulse/codegen/templates/routes_ts.py,sha256=nPgKCvU0gzue2k6KlOL1TJgrBqqRLmyy7K_qKAI8zAE,1129
|
|
23
|
+
pulse/codegen/utils.py,sha256=QoXcV-h-DLLmq_t03hDNUePS0fNnofUQLoR-TXzDFCY,539
|
|
24
|
+
pulse/component.py,sha256=3YVsiK0GvCzhsOEknd-hL-vPsij_UwcxksVVb-7tH2M,2922
|
|
25
|
+
pulse/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
26
|
+
pulse/components/for_.py,sha256=HBTwrIsCUwJcJa57wJ6NZNjWUxMWBVpuPQpt3Ih6v04,1314
|
|
27
|
+
pulse/components/if_.py,sha256=jXOrZ6sbSA-qgjJg-_-buppjS1wDDfRnKRF4Y7pQNTc,1636
|
|
28
|
+
pulse/components/react_router.py,sha256=uQ08mdvcqA_i4EaFcfIR80DZkpMW_kqmBS1U5rNblqc,1068
|
|
29
|
+
pulse/context.py,sha256=fMK6GdQY4q_3452v5DJli2f2_urVihnpzb-O-O9cJ1Q,1734
|
|
30
|
+
pulse/cookies.py,sha256=c7ua1Lv6mNe1nYnA4SFVvewvRQAbYy9fN5G3Hr_Dr5c,5000
|
|
31
|
+
pulse/decorators.py,sha256=ywNgLN6VFcKOM5fbFdUUzh-DWk4BuSXdD1BTfd1N-0U,4827
|
|
32
|
+
pulse/dom/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
|
+
pulse/dom/elements.py,sha256=YHXkVpfMAC4-0o61fK-E0LGTOM3KMCtBfpHHAwLx7dw,23241
|
|
34
|
+
pulse/dom/events.py,sha256=yHioH8Y-b7raOaZ43JuCxk2lUBryUAcDSc-5VhXtiSI,14699
|
|
35
|
+
pulse/dom/props.py,sha256=WrPwOYSoJmn-VWxU2KvJC1j64L4tlT8X2JpabK94gYQ,26721
|
|
36
|
+
pulse/dom/svg.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
37
|
+
pulse/dom/tags.py,sha256=U6mKmwB9JAFM6LTESMJcoIejNfnyxIdQo2-TLM5OaZ0,7585
|
|
38
|
+
pulse/dom/tags.pyi,sha256=0BC7zTh22roPBuMQawL8hgI6IrfN8xJZuDIoKMd4QKc,14393
|
|
39
|
+
pulse/env.py,sha256=p3XI8KG1ZCcXPD3LJP7fW8JPYfyvoYY5ENwae2o0PiA,2889
|
|
40
|
+
pulse/form.py,sha256=KSCr8UrWnP4zuO7xhndkSgG-YyU_oFGVPuz743GD1k0,9081
|
|
41
|
+
pulse/helpers.py,sha256=v054teQPOFNJZMgs_G7-BIGsvTLvolTEABgtoSUR3_c,14890
|
|
42
|
+
pulse/hooks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
43
|
+
pulse/hooks/core.py,sha256=QfYRz2O8-drNSQx_xnv8mK8ksWcw3LNM1H2hoInT0Rk,7457
|
|
44
|
+
pulse/hooks/effects.py,sha256=pVq5OndlhFLHLpM9Pn9Bp5rEpnpmJEpbIp2UaHHyJFQ,2428
|
|
45
|
+
pulse/hooks/init.py,sha256=OWd6TrUJq3Z1kv1cayI9Kz4tAvdvQg-zLACD6GZEDbk,11663
|
|
46
|
+
pulse/hooks/runtime.py,sha256=61CGZ9B0ScwCx8bwUrXIWYPAJIZtGCp3GcdBqa33dgo,5145
|
|
47
|
+
pulse/hooks/setup.py,sha256=c_uVi0S0HPioEvjdWUaSdAGT9M3Cxpw8J-llvtmDOGo,4496
|
|
48
|
+
pulse/hooks/stable.py,sha256=mLNS6WyA4tC-65gNybPOE0DLEz1YlxOCddD9odElArU,1772
|
|
49
|
+
pulse/hooks/states.py,sha256=fFqN3gf7v7rY6QmieKWN1hVCQRRnL-5H4TeG9LTnKSc,6778
|
|
50
|
+
pulse/js/__init__.py,sha256=KeXqLtBly5K2Vyh7SuPorZylXOh1W4vk_UAXRnaNh0Q,3394
|
|
51
|
+
pulse/js/__init__.pyi,sha256=WN22WsJB-XFk6auL9zklwG2Kof3zeOsc56A56dJ3MWg,3097
|
|
52
|
+
pulse/js/_types.py,sha256=F4Go2JtJ2dbxq1fXpc2ablG_nyvhvHzOlZLlEv0VmyU,7421
|
|
53
|
+
pulse/js/array.py,sha256=fMs0ykV7PwJawGN4lugtTe_yxBFfBRgjm1ley1IA_no,8892
|
|
54
|
+
pulse/js/console.py,sha256=7OCC_Zh7OECt0kO0KlkNBBC05muefipeNbsOY5mcWuo,1804
|
|
55
|
+
pulse/js/date.py,sha256=_HyoRk0qIY3pWtTk2NYQvesVZhoqjvwtxdwlFzhg4zI,3372
|
|
56
|
+
pulse/js/document.py,sha256=C6hmd5yQkI3LPKxLRILDUu1Jl5ZhA6_Mps8iudBFWAs,2997
|
|
57
|
+
pulse/js/error.py,sha256=80AVD5hcowHfd3AyUGM-_AFFOnUhP2q8mC8QZBJgIPQ,2612
|
|
58
|
+
pulse/js/json.py,sha256=971jJLVrKjMIU7pxtI-JQ7Nh4BlrPdtGlCdQnxrLPCA,1917
|
|
59
|
+
pulse/js/map.py,sha256=VdWVOwIex_jTmB9OqHfxkSMw-tbAZcejJCFQB581wIg,2248
|
|
60
|
+
pulse/js/math.py,sha256=UdOe2ri_Rxuu1qDhSiS270WrUMJj6VtSwnGZPpbq-k8,1766
|
|
61
|
+
pulse/js/navigator.py,sha256=pilMh8e39XjM7DcVkOV-hlRg61Ldsgxil70h51d0fEo,1510
|
|
62
|
+
pulse/js/number.py,sha256=rByDqG1La8Ijb8qcj740SgEK5ZQJUlV3V30ORkMewOc,1271
|
|
63
|
+
pulse/js/object.py,sha256=wMULUSjTPNRalnDkmmYjzeplm1N7ClVgMt7VoKQjzsI,4442
|
|
64
|
+
pulse/js/promise.py,sha256=ipJTLXef5ub5tqexQY69M9AwxW-JyEhXg8DiSgo7OtA,4676
|
|
65
|
+
pulse/js/regexp.py,sha256=5gpfDDe72uoOu2-uC8LvOPqrQH1HF6G-u77kPmIohbQ,1056
|
|
66
|
+
pulse/js/set.py,sha256=nKSIxe0W4ZfA4NQ_-Jd401GTDfnQWRqMxag7eadoP70,3022
|
|
67
|
+
pulse/js/string.py,sha256=VMjHDEF260-AVRqUBDKR0FXShmCU06y9IMAMpxVCc0E,822
|
|
68
|
+
pulse/js/weakmap.py,sha256=XDCNykrHE2bjjKEd1TB-vToKE6Yz2W8-VSA79ajUoMA,1417
|
|
69
|
+
pulse/js/weakset.py,sha256=nixXyjnSKRLFIACebzxTSXm0ZVUy09OY9BXF97ua9lU,1261
|
|
70
|
+
pulse/js/window.py,sha256=kP57l2nYjJy6h6Zt-BbB4cdhs1Et0pB32AcViN7n1rw,4094
|
|
71
|
+
pulse/messages.py,sha256=yrKbJhQagNuwlPq3OOMFNRv5tl4fQWB7MDBlBSOXZBA,3895
|
|
72
|
+
pulse/middleware.py,sha256=9uyAhVUEGMSwqWC3WXqs7x5JMMNEcSTTu3g7DjsR8w8,9812
|
|
73
|
+
pulse/plugin.py,sha256=RfGl6Vtr7VRHb8bp4Ob4dOX9dVzvc4Riu7HWnStMPpk,580
|
|
74
|
+
pulse/proxy.py,sha256=jv2IdOEbF-qbtN5hmSqnyhZedOX1597XBye8cerWIyE,7253
|
|
75
|
+
pulse/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
76
|
+
pulse/queries/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
77
|
+
pulse/queries/client.py,sha256=GGckE0P3YCBO4Mj-08AO_I9eXVC4sIDSNw_xTLrBFuE,15224
|
|
78
|
+
pulse/queries/common.py,sha256=Cr_NV0dWz5DQ7Qg771jvUms1o2-EnTYqjZJe4tVeoVk,1160
|
|
79
|
+
pulse/queries/effect.py,sha256=7KvV_yK7OHTWhfQbZFGzg_pRhyI2mn25pKIF9AmSmcU,1471
|
|
80
|
+
pulse/queries/infinite_query.py,sha256=oUHWjP2OliB7h8VDJooGocefHm4m9TDy4WaJesSrsdI,40457
|
|
81
|
+
pulse/queries/mutation.py,sha256=px1fprFL-RxNfbRSoRtdsOLkEbjSsMrJxGHKBIPYQTM,4959
|
|
82
|
+
pulse/queries/protocol.py,sha256=R8n238Ex9DbYIAVKB83a8FAPtnCiPNhWar-F01K2fTo,3345
|
|
83
|
+
pulse/queries/query.py,sha256=G8eXCaT5wuvVcstlqWU8VBxuuUUS7K1R5Y-VtDpMIG0,35065
|
|
84
|
+
pulse/queries/store.py,sha256=Ct7a-h1-Cq07zEfe9vw-LM85Fm7jIJx7CLAIlsiznlU,3444
|
|
85
|
+
pulse/react_component.py,sha256=7uspzLhjQrosVFFHVMmeE3_P8XnAbMAt56i8116TQcw,197
|
|
86
|
+
pulse/reactive.py,sha256=v8a9IttkabeWwYrrHAx33zqzW9WC4WlS4iXbIh2KQkU,24374
|
|
87
|
+
pulse/reactive_extensions.py,sha256=T1V3AasHtvJkmGO55miC9RVPxDFIj7qrooMsn89x5SI,32076
|
|
88
|
+
pulse/render_session.py,sha256=azNbLpMZmHt4AqX1zXoLNCicVXWUH1kRBPshD7VdgFQ,18478
|
|
89
|
+
pulse/renderer.py,sha256=87_f2vpwzVXmRwU-QXlxq0O4Z6rhGy-P_pWyMB2bKZI,16982
|
|
90
|
+
pulse/request.py,sha256=sPsSRWi5KvReSPBLIs_kzqomn1wlRk1BTLZ5s0chQr4,4979
|
|
91
|
+
pulse/routing.py,sha256=BObgI9cRPCXy24Gir-KeOdMh-Yxnh88hET2qddC0Fss,12847
|
|
92
|
+
pulse/serializer.py,sha256=7YF8ZjDZYgA5Wmxd9CT-lPvakSb4zjUI1YbTd9m4jQM,5733
|
|
93
|
+
pulse/state.py,sha256=ikQbK4R8PieV96qd4uWREUvs0jXo9sCapawY7i6oCYo,10776
|
|
94
|
+
pulse/transpiler/__init__.py,sha256=WiC1SHcrkHTo5tiM1KynPWDkvFl5I_hkna28BoAKB1o,4226
|
|
95
|
+
pulse/transpiler/builtins.py,sha256=u0r458I9BwlQ0mjAl6xydmTKx4Cr98Vvcq07H9JsAOA,31389
|
|
96
|
+
pulse/transpiler/errors.py,sha256=stChy-qs1hKsQPpF2Hf0Y7GqJs9CjRYHISRRChvqA6w,2158
|
|
97
|
+
pulse/transpiler/function.py,sha256=psXqIAa2UO3smoGyoXYytBVVa6Xdw__khrjScFcll2g,16134
|
|
98
|
+
pulse/transpiler/id.py,sha256=CdgA1NndBpZjv0Hp4XiYbKn7wi-x4zWsFSjEiViKxVk,434
|
|
99
|
+
pulse/transpiler/imports.py,sha256=SpiZDLOdml3TTEz04mVJbX4y7owVqqTBSWollncZQsg,9255
|
|
100
|
+
pulse/transpiler/js_module.py,sha256=Mx0FcM4WnX6b8ttnvXqlQ8ty3DNetMIZLd7Tl7umbxo,9215
|
|
101
|
+
pulse/transpiler/modules/__init__.py,sha256=JGi3CuZoF4sug4dNhQg3MFhpEQqnXec4xRJM2cHNP3c,1184
|
|
102
|
+
pulse/transpiler/modules/asyncio.py,sha256=kWMuFU2vZbqutCM_EXJMvy5SdlB66XiT0czs8lELj_o,1584
|
|
103
|
+
pulse/transpiler/modules/json.py,sha256=Zxe8dsaQ0Eoq3yHUiJeKEx6ibiN36HCT61ScFkLFCeY,676
|
|
104
|
+
pulse/transpiler/modules/math.py,sha256=8gjvdYTMqtuOnXrvX_Lwuo0ywAdSl7cpss4TMk6mQtQ,7044
|
|
105
|
+
pulse/transpiler/modules/pulse/__init__.py,sha256=TfMsiiB53ZFlxdNl7jfCAiMZs-vSRUTxUmqzkLTj-po,91
|
|
106
|
+
pulse/transpiler/modules/pulse/tags.py,sha256=4IWxjTvFvDRJxXzBdl_Aj0qyIGvvjf0FprcPo1uUcDk,5929
|
|
107
|
+
pulse/transpiler/modules/typing.py,sha256=hMGff6gBscFJE2GPV9xUFNfLuff2QCMIbMJUs3f24BY,1771
|
|
108
|
+
pulse/transpiler/nodes.py,sha256=uOOBoPQnSuOwp2oEX99YVhoBj4KBbMWHIUFYGtIRe28,47568
|
|
109
|
+
pulse/transpiler/py_module.py,sha256=Ez6jTgqeaBxpHVYGTbomuZfRgTnqrPDNOaqsDSwVD6c,4628
|
|
110
|
+
pulse/transpiler/react_component.py,sha256=Fqi51YpmfG3jILN5VB2OSU9WIWx9TQ-TeyFwoxj5H3E,1434
|
|
111
|
+
pulse/transpiler/transpiler.py,sha256=RUi7T9d7pd2lJKqgOkUIKvUe5eJV8di1wnTgrriFRiM,32273
|
|
112
|
+
pulse/transpiler/vdom.py,sha256=l4CKQlt-wSSFJ7j7cF4dVwqYHWyAT1uAmbgsx0Kk4Jc,6310
|
|
113
|
+
pulse/types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
114
|
+
pulse/types/event_handler.py,sha256=psQCydj-WEtBcFU5JU4mDwvyzkW8V2O0g_VFRU2EOHI,1618
|
|
115
|
+
pulse/user_session.py,sha256=FITxLSEl3JU-jod6UWuUYC6EpnPG2rbaLCnIOdkQPtg,7803
|
|
116
|
+
pulse/version.py,sha256=711vaM1jVIQPgkisGgKZqwmw019qZIsc_QTae75K2pg,1895
|
|
117
|
+
pulse_framework-0.1.52.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
|
|
118
|
+
pulse_framework-0.1.52.dist-info/entry_points.txt,sha256=i7aohd3QaPu5IcuGKKvsQQEiMYMe5HcF56QEsaLVO64,46
|
|
119
|
+
pulse_framework-0.1.52.dist-info/METADATA,sha256=Lh5FVANVderYIR7EPbgi5-YmcmbLyowt9igyFzJrqwE,580
|
|
120
|
+
pulse_framework-0.1.52.dist-info/RECORD,,
|