pulse-framework 0.1.55__py3-none-any.whl → 0.1.56__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 +5 -6
- pulse/app.py +144 -57
- pulse/channel.py +139 -7
- pulse/cli/cmd.py +16 -2
- pulse/codegen/codegen.py +43 -12
- pulse/component.py +104 -0
- pulse/components/for_.py +30 -4
- pulse/components/if_.py +28 -5
- pulse/components/react_router.py +61 -3
- pulse/context.py +39 -5
- pulse/cookies.py +108 -4
- pulse/decorators.py +193 -24
- pulse/env.py +56 -2
- pulse/form.py +198 -5
- pulse/helpers.py +7 -1
- pulse/hooks/core.py +135 -5
- pulse/hooks/effects.py +61 -77
- pulse/hooks/init.py +60 -1
- pulse/hooks/runtime.py +241 -0
- pulse/hooks/setup.py +77 -0
- pulse/hooks/stable.py +58 -1
- pulse/hooks/state.py +107 -20
- pulse/js/__init__.py +40 -24
- pulse/js/array.py +9 -6
- pulse/js/console.py +15 -12
- pulse/js/date.py +9 -6
- pulse/js/document.py +5 -2
- pulse/js/error.py +7 -4
- pulse/js/json.py +9 -6
- pulse/js/map.py +8 -5
- pulse/js/math.py +9 -6
- pulse/js/navigator.py +5 -2
- pulse/js/number.py +9 -6
- pulse/js/obj.py +16 -13
- pulse/js/object.py +9 -6
- pulse/js/promise.py +19 -13
- pulse/js/pulse.py +28 -25
- pulse/js/react.py +94 -55
- pulse/js/regexp.py +7 -4
- pulse/js/set.py +8 -5
- pulse/js/string.py +9 -6
- pulse/js/weakmap.py +8 -5
- pulse/js/weakset.py +8 -5
- pulse/js/window.py +6 -3
- pulse/messages.py +5 -0
- pulse/middleware.py +147 -76
- pulse/plugin.py +76 -5
- pulse/queries/client.py +186 -39
- pulse/queries/common.py +52 -3
- pulse/queries/infinite_query.py +154 -2
- pulse/queries/mutation.py +127 -7
- pulse/queries/query.py +112 -11
- pulse/react_component.py +66 -3
- pulse/reactive.py +314 -30
- pulse/reactive_extensions.py +106 -26
- pulse/render_session.py +304 -173
- pulse/request.py +46 -11
- pulse/routing.py +140 -4
- pulse/serializer.py +71 -0
- pulse/state.py +177 -9
- pulse/test_helpers.py +15 -0
- pulse/transpiler/__init__.py +0 -3
- pulse/transpiler/py_module.py +1 -7
- pulse/user_session.py +119 -18
- {pulse_framework-0.1.55.dist-info → pulse_framework-0.1.56.dist-info}/METADATA +5 -5
- pulse_framework-0.1.56.dist-info/RECORD +127 -0
- pulse/transpiler/react_component.py +0 -44
- pulse_framework-0.1.55.dist-info/RECORD +0 -127
- {pulse_framework-0.1.55.dist-info → pulse_framework-0.1.56.dist-info}/WHEEL +0 -0
- {pulse_framework-0.1.55.dist-info → pulse_framework-0.1.56.dist-info}/entry_points.txt +0 -0
pulse/user_session.py
CHANGED
|
@@ -117,42 +117,106 @@ class UserSession(Disposable):
|
|
|
117
117
|
|
|
118
118
|
|
|
119
119
|
class SessionStore(ABC):
|
|
120
|
-
"""Abstract base for server-backed session stores
|
|
120
|
+
"""Abstract base class for server-backed session stores.
|
|
121
121
|
|
|
122
|
-
Implementations persist session state on the server and place only a
|
|
123
|
-
identifier in the cookie. Override methods to integrate with
|
|
122
|
+
Implementations persist session state on the server and place only a
|
|
123
|
+
stable identifier in the cookie. Override methods to integrate with
|
|
124
|
+
your storage backend (database, cache, memory, etc.).
|
|
125
|
+
|
|
126
|
+
Example:
|
|
127
|
+
```python
|
|
128
|
+
class RedisSessionStore(SessionStore):
|
|
129
|
+
async def init(self) -> None:
|
|
130
|
+
self.redis = await aioredis.from_url("redis://localhost")
|
|
131
|
+
|
|
132
|
+
async def get(self, sid: str) -> dict[str, Any] | None:
|
|
133
|
+
data = await self.redis.get(f"session:{sid}")
|
|
134
|
+
return json.loads(data) if data else None
|
|
135
|
+
|
|
136
|
+
async def create(self, sid: str) -> dict[str, Any]:
|
|
137
|
+
session = {}
|
|
138
|
+
await self.save(sid, session)
|
|
139
|
+
return session
|
|
140
|
+
|
|
141
|
+
async def delete(self, sid: str) -> None:
|
|
142
|
+
await self.redis.delete(f"session:{sid}")
|
|
143
|
+
|
|
144
|
+
async def save(self, sid: str, session: dict[str, Any]) -> None:
|
|
145
|
+
await self.redis.set(f"session:{sid}", json.dumps(session))
|
|
146
|
+
```
|
|
124
147
|
"""
|
|
125
148
|
|
|
126
149
|
async def init(self) -> None:
|
|
127
|
-
"""
|
|
150
|
+
"""Async initialization, called on app start.
|
|
128
151
|
|
|
129
|
-
Override
|
|
130
|
-
perform startup work. Default is a no-op.
|
|
152
|
+
Override to establish connections or perform startup work.
|
|
131
153
|
"""
|
|
132
154
|
return None
|
|
133
155
|
|
|
134
156
|
async def close(self) -> None:
|
|
135
|
-
"""
|
|
157
|
+
"""Async cleanup, called on app shutdown.
|
|
136
158
|
|
|
137
|
-
Override
|
|
138
|
-
perform cleanup. Default is a no-op.
|
|
159
|
+
Override to tear down connections or perform cleanup.
|
|
139
160
|
"""
|
|
140
161
|
return None
|
|
141
162
|
|
|
142
163
|
@abstractmethod
|
|
143
|
-
async def get(self, sid: str) -> dict[str, Any] | None:
|
|
164
|
+
async def get(self, sid: str) -> dict[str, Any] | None:
|
|
165
|
+
"""Retrieve session by ID.
|
|
166
|
+
|
|
167
|
+
Args:
|
|
168
|
+
sid: Session identifier.
|
|
169
|
+
|
|
170
|
+
Returns:
|
|
171
|
+
Session data dict if found, None otherwise.
|
|
172
|
+
"""
|
|
173
|
+
...
|
|
144
174
|
|
|
145
175
|
@abstractmethod
|
|
146
|
-
async def create(self, sid: str) -> dict[str, Any]:
|
|
176
|
+
async def create(self, sid: str) -> dict[str, Any]:
|
|
177
|
+
"""Create a new session.
|
|
178
|
+
|
|
179
|
+
Args:
|
|
180
|
+
sid: Session identifier.
|
|
181
|
+
|
|
182
|
+
Returns:
|
|
183
|
+
New empty session dict.
|
|
184
|
+
"""
|
|
185
|
+
...
|
|
147
186
|
|
|
148
187
|
@abstractmethod
|
|
149
|
-
async def delete(self, sid: str) -> None:
|
|
188
|
+
async def delete(self, sid: str) -> None:
|
|
189
|
+
"""Delete a session.
|
|
190
|
+
|
|
191
|
+
Args:
|
|
192
|
+
sid: Session identifier.
|
|
193
|
+
"""
|
|
194
|
+
...
|
|
150
195
|
|
|
151
196
|
@abstractmethod
|
|
152
|
-
async def save(self, sid: str, session: dict[str, Any]) -> None:
|
|
197
|
+
async def save(self, sid: str, session: dict[str, Any]) -> None:
|
|
198
|
+
"""Persist session data.
|
|
199
|
+
|
|
200
|
+
Args:
|
|
201
|
+
sid: Session identifier.
|
|
202
|
+
session: Session data to persist.
|
|
203
|
+
"""
|
|
204
|
+
...
|
|
153
205
|
|
|
154
206
|
|
|
155
207
|
class InMemorySessionStore(SessionStore):
|
|
208
|
+
"""In-memory session store implementation.
|
|
209
|
+
|
|
210
|
+
Sessions are stored in memory and lost on restart. Suitable for
|
|
211
|
+
development and testing.
|
|
212
|
+
|
|
213
|
+
Example:
|
|
214
|
+
```python
|
|
215
|
+
store = ps.InMemorySessionStore()
|
|
216
|
+
app = ps.App(session_store=store)
|
|
217
|
+
```
|
|
218
|
+
"""
|
|
219
|
+
|
|
156
220
|
def __init__(self) -> None:
|
|
157
221
|
self._sessions: dict[str, dict[str, Any]] = {}
|
|
158
222
|
|
|
@@ -167,7 +231,7 @@ class InMemorySessionStore(SessionStore):
|
|
|
167
231
|
return session
|
|
168
232
|
|
|
169
233
|
@override
|
|
170
|
-
async def save(self, sid: str, session: dict[str, Any]):
|
|
234
|
+
async def save(self, sid: str, session: dict[str, Any]) -> None:
|
|
171
235
|
# Should not matter as the session ReactiveDict is normally mutated directly
|
|
172
236
|
self._sessions[sid] = session
|
|
173
237
|
|
|
@@ -182,10 +246,31 @@ class SessionCookiePayload(TypedDict):
|
|
|
182
246
|
|
|
183
247
|
|
|
184
248
|
class CookieSessionStore:
|
|
185
|
-
"""
|
|
249
|
+
"""Store sessions in signed cookies. Default session store.
|
|
250
|
+
|
|
251
|
+
The cookie stores a compact JSON of the session signed with HMAC-SHA256
|
|
252
|
+
to prevent tampering. Keep session data small (<4KB).
|
|
253
|
+
|
|
254
|
+
Args:
|
|
255
|
+
secret: Signing secret. Uses PULSE_SECRET env var if not provided.
|
|
256
|
+
Required in production.
|
|
257
|
+
salt: Salt for HMAC. Default: "pulse.session".
|
|
258
|
+
digestmod: Hash algorithm. Default: "sha256".
|
|
259
|
+
max_cookie_bytes: Maximum cookie size. Default: 3800.
|
|
260
|
+
|
|
261
|
+
Environment Variables:
|
|
262
|
+
PULSE_SECRET: Session signing secret (required in production).
|
|
186
263
|
|
|
187
|
-
|
|
188
|
-
|
|
264
|
+
Example:
|
|
265
|
+
```python
|
|
266
|
+
# Uses PULSE_SECRET environment variable
|
|
267
|
+
store = ps.CookieSessionStore()
|
|
268
|
+
|
|
269
|
+
# Explicit secret
|
|
270
|
+
store = ps.CookieSessionStore(secret="your-secret-key")
|
|
271
|
+
|
|
272
|
+
app = ps.App(session_store=store)
|
|
273
|
+
```
|
|
189
274
|
"""
|
|
190
275
|
|
|
191
276
|
digestmod: str
|
|
@@ -218,6 +303,15 @@ class CookieSessionStore:
|
|
|
218
303
|
self.max_cookie_bytes = max_cookie_bytes
|
|
219
304
|
|
|
220
305
|
def encode(self, sid: str, session: dict[str, Any]) -> str:
|
|
306
|
+
"""Encode session to signed cookie value.
|
|
307
|
+
|
|
308
|
+
Args:
|
|
309
|
+
sid: Session identifier.
|
|
310
|
+
session: Session data to encode.
|
|
311
|
+
|
|
312
|
+
Returns:
|
|
313
|
+
Signed cookie value string.
|
|
314
|
+
"""
|
|
221
315
|
# Encode the entire session into the cookie (compressed v1)
|
|
222
316
|
try:
|
|
223
317
|
data = SessionCookiePayload(sid=sid, data=dict(session))
|
|
@@ -235,7 +329,14 @@ class CookieSessionStore:
|
|
|
235
329
|
return self.encode(sid, session)
|
|
236
330
|
|
|
237
331
|
def decode(self, cookie: str) -> tuple[str, Session] | None:
|
|
238
|
-
"""Decode
|
|
332
|
+
"""Decode and verify signed cookie.
|
|
333
|
+
|
|
334
|
+
Args:
|
|
335
|
+
cookie: Signed cookie value string.
|
|
336
|
+
|
|
337
|
+
Returns:
|
|
338
|
+
Tuple of (sid, session) if valid, None if invalid or tampered.
|
|
339
|
+
"""
|
|
239
340
|
if not cookie:
|
|
240
341
|
return None
|
|
241
342
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: pulse-framework
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.56
|
|
4
4
|
Summary: Pulse - Full-stack framework for building real-time React applications in Python
|
|
5
5
|
Requires-Dist: websockets>=12.0
|
|
6
6
|
Requires-Dist: fastapi>=0.104.0
|
|
@@ -154,10 +154,10 @@ def counter():
|
|
|
154
154
|
|
|
155
155
|
### Hooks
|
|
156
156
|
|
|
157
|
-
Server-side hooks via `ps.
|
|
158
|
-
- `
|
|
159
|
-
-
|
|
160
|
-
- `setup
|
|
157
|
+
Server-side hooks via `ps.state`, `ps.effect`, `ps.setup`:
|
|
158
|
+
- `ps.state(StateClass)` - reactive state (auto-keyed by callsite; use `key=` for manual control)
|
|
159
|
+
- `@ps.effect` - side effects decorator
|
|
160
|
+
- `ps.setup(fn)` - one-time initialization
|
|
161
161
|
|
|
162
162
|
### Queries
|
|
163
163
|
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
pulse/__init__.py,sha256=_7WUYtxNI78XXdnVu0CFTxRInlCEaP1tGEf-WXMU48I,31993
|
|
2
|
+
pulse/_examples.py,sha256=dFuhD2EVXsbvAeexoG57s4VuN4gWLaTMOEMNYvlPm9A,561
|
|
3
|
+
pulse/app.py,sha256=G26TprJ566Dhzr_31QUR41WnOyBbRfJ6weVZ-sk21sU,35120
|
|
4
|
+
pulse/channel.py,sha256=sQrDLh3k9Z8CyJQkEHzKu4h-yR4XSTgAA3OCQax3Ciw,15766
|
|
5
|
+
pulse/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
pulse/cli/cmd.py,sha256=hlAZcuTlqE4qKY96mkNm9cpxqWO3Pm3tDWrPN0lnrE8,15653
|
|
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/code_analysis.py,sha256=NBba_7VtOxZYMyfku_p-bWkG0O_1pi1AxcaNyVM1nmY,1024
|
|
17
|
+
pulse/codegen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
|
+
pulse/codegen/codegen.py,sha256=86zmG6QGJpNe1uZEATSbM-FeQby6BJOaDXxLndzVVbo,10038
|
|
19
|
+
pulse/codegen/js.py,sha256=fm2aL3RdnL7KlgrXDkKbM0E6BkXYBkID0XlKTDAX26c,1521
|
|
20
|
+
pulse/codegen/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
|
+
pulse/codegen/templates/layout.py,sha256=nmWPQcO9SRXc3mCCVLCmykreSF96TqQfdDY7dvUBxRg,4737
|
|
22
|
+
pulse/codegen/templates/route.py,sha256=UjBrb3e_8tMkd1OjBjEsnYmK6PCQqOYZBWDuU59FcrI,9234
|
|
23
|
+
pulse/codegen/templates/routes_ts.py,sha256=nPgKCvU0gzue2k6KlOL1TJgrBqqRLmyy7K_qKAI8zAE,1129
|
|
24
|
+
pulse/codegen/utils.py,sha256=QoXcV-h-DLLmq_t03hDNUePS0fNnofUQLoR-TXzDFCY,539
|
|
25
|
+
pulse/component.py,sha256=TVgV0dgNDf2Smt2xsJVD0-Wejsnqm14n-NxBzsdObjc,6227
|
|
26
|
+
pulse/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
27
|
+
pulse/components/for_.py,sha256=lrt1JHegf4OkBbL9nrMOy7zxmbuD8Kn11x32ZGS72lY,2390
|
|
28
|
+
pulse/components/if_.py,sha256=5IOq3R70B-JdI-fvDNYDyAaSEtO8L5OaiqHp-jUn-Kw,2153
|
|
29
|
+
pulse/components/react_router.py,sha256=4dmp2yPNneyodi1PtT9VuO36bsAplbZg_TKZILlEzqs,3038
|
|
30
|
+
pulse/context.py,sha256=odTQlOhVRIwNvtatrmPe_Fd8Zk0rMcbcqQHBxvWYH5o,2677
|
|
31
|
+
pulse/cookies.py,sha256=ozfdBKExdbpeM5ileIA1z8BZA5hoUrZ5_iO9fIMrgRk,8768
|
|
32
|
+
pulse/decorators.py,sha256=BtNaisiqaJvlCuoqBgqQWbeFklDYLDrO1o1MRzFlybY,9932
|
|
33
|
+
pulse/dom/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
34
|
+
pulse/dom/elements.py,sha256=YHXkVpfMAC4-0o61fK-E0LGTOM3KMCtBfpHHAwLx7dw,23241
|
|
35
|
+
pulse/dom/events.py,sha256=yHioH8Y-b7raOaZ43JuCxk2lUBryUAcDSc-5VhXtiSI,14699
|
|
36
|
+
pulse/dom/props.py,sha256=WrPwOYSoJmn-VWxU2KvJC1j64L4tlT8X2JpabK94gYQ,26721
|
|
37
|
+
pulse/dom/svg.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
38
|
+
pulse/dom/tags.py,sha256=U6mKmwB9JAFM6LTESMJcoIejNfnyxIdQo2-TLM5OaZ0,7585
|
|
39
|
+
pulse/dom/tags.pyi,sha256=0BC7zTh22roPBuMQawL8hgI6IrfN8xJZuDIoKMd4QKc,14393
|
|
40
|
+
pulse/env.py,sha256=etfubfwq7VWlo2iKy_972WtHZSiVe4StAnjFga0xgj8,4244
|
|
41
|
+
pulse/form.py,sha256=XJiDJU0WQBkDHhtruDwOwYQqfvLsEQwlsqi5OwPbn7I,14011
|
|
42
|
+
pulse/helpers.py,sha256=feHkC2g3DgfGN7FrvgRPZjmXzBjBYXwFu6wRPdy3w_I,15056
|
|
43
|
+
pulse/hooks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
44
|
+
pulse/hooks/core.py,sha256=tDEcB_CTD4yI5bNKn7CtB40sRKIanGNqPD5_qLgSzf4,10982
|
|
45
|
+
pulse/hooks/effects.py,sha256=cEPurXwRQoFmxasI0tZE1cQsZYnZr6VB5mWMUK0Db8c,2604
|
|
46
|
+
pulse/hooks/init.py,sha256=PhjVBLlHpodPzVrRcx_QfEUrsx_6gEX_NuVhe6ojiYI,17834
|
|
47
|
+
pulse/hooks/runtime.py,sha256=nxqwl8ByclIh5i3ZcCN6L3f0X3ZpwOBWajLb_FSbcDw,11839
|
|
48
|
+
pulse/hooks/setup.py,sha256=ILbn2v6UFJPFBOWnJef1X2A9JLpIagEHN9Mx0d9947I,6925
|
|
49
|
+
pulse/hooks/stable.py,sha256=y3V6gFEs7XU1ru92krOpjv2_rj_EzqUpy4lncSyLkQ4,3707
|
|
50
|
+
pulse/hooks/state.py,sha256=ORaYNoPhqpwFBlKleBOSNZebJgFHtt7oMOuHxrmnBHk,5288
|
|
51
|
+
pulse/js/__init__.py,sha256=tj1A6-eR5WS83UNgHb3Dw23m37oJsEuyV0ezUB6kXbg,3636
|
|
52
|
+
pulse/js/__init__.pyi,sha256=WN22WsJB-XFk6auL9zklwG2Kof3zeOsc56A56dJ3MWg,3097
|
|
53
|
+
pulse/js/_types.py,sha256=F4Go2JtJ2dbxq1fXpc2ablG_nyvhvHzOlZLlEv0VmyU,7421
|
|
54
|
+
pulse/js/array.py,sha256=_tC6QZlflWCXOXXUMMtowM3UK7iDWAtFM8BKqR5rjKk,8883
|
|
55
|
+
pulse/js/console.py,sha256=A-GNKEnPby10gdcTdYsBPVfz4m94PYzTXRwGhfaPRpc,1775
|
|
56
|
+
pulse/js/date.py,sha256=qJjdwupuUtKS95u8N8C8FKMKOIB8qjVMsYA3VYfe-tA,3363
|
|
57
|
+
pulse/js/document.py,sha256=SBinVGfb05jFpeyxAE0yk5Z__dkdW_mFsTI-rvgc-S8,3004
|
|
58
|
+
pulse/js/error.py,sha256=v0_DmpN5ESt_CJTrIYfy8980eerjK8mHhQatNV_1M_8,2611
|
|
59
|
+
pulse/js/json.py,sha256=P8nxOANjIxrzUA1XkBrd0SmNyAGyB3pVXZDPnA1OKks,1908
|
|
60
|
+
pulse/js/map.py,sha256=bhw75CUMIearH4JACCs9zAffdzfla3Rae7SKGcCLGoc,2243
|
|
61
|
+
pulse/js/math.py,sha256=OBbMlgoa6ZHLDgmXGNKMj5wYrvroV5ICIx-VsSE5_II,1757
|
|
62
|
+
pulse/js/navigator.py,sha256=2QWSr9xyyBfgd76P472qmayXQRYXIEo-b8zLzvfhHfg,1517
|
|
63
|
+
pulse/js/number.py,sha256=fX2M6hZ5ry2FPsYaHhGlqgO6reBEXw7C-gtu0-8_Zyw,1262
|
|
64
|
+
pulse/js/obj.py,sha256=75NlJ7gsaMAXyYGXEeG5E4QKuKCy3ls9mDexodwxPyw,2085
|
|
65
|
+
pulse/js/object.py,sha256=95WvnGWgB-PL-D7l12UgdxNy_fxO5sJXool3Rx5ahUQ,4433
|
|
66
|
+
pulse/js/promise.py,sha256=vBXcL-U9BuZN-q1jbYhyzQaOL2niDPw4LsD7q7Y_yco,4670
|
|
67
|
+
pulse/js/pulse.py,sha256=m-LgqwhYygVBj7GzjeO-uo8fK5ThyVe7c3QvOJt_vc0,2962
|
|
68
|
+
pulse/js/react.py,sha256=tf3pUXu1BQO1KF7yestW4gfzCjLiejfAZ78vf_53sfI,12135
|
|
69
|
+
pulse/js/regexp.py,sha256=qO-3nmt7uGN7V_bwimPCN-2RSsPfE6YiY7G1MjoP3YY,1055
|
|
70
|
+
pulse/js/set.py,sha256=omG3g-25GRHxgoKISSB4x-M8UDFlaXtFV9cSIpd5uB0,3017
|
|
71
|
+
pulse/js/string.py,sha256=VsvDF_ve8R9QIiBdDotLP2KpCKwmpEfGgRQWckOCmHk,813
|
|
72
|
+
pulse/js/weakmap.py,sha256=HACZEZ8EZk1xoaCmTXk__opvJLxlJ9_0U3y-01KQkHU,1412
|
|
73
|
+
pulse/js/weakset.py,sha256=jerMG9ubroR29HvOLIm6lkLxMj-GGWbiE57U9F6zRuQ,1256
|
|
74
|
+
pulse/js/window.py,sha256=yC1BjyH2jqp1x-CXJCUFta-ASyZ5668ozQ0AmAjZcxA,4097
|
|
75
|
+
pulse/messages.py,sha256=hz5EUFVHbzXHkcByZcV_Y199vb-M9cGjMMBL1HXPctE,4024
|
|
76
|
+
pulse/middleware.py,sha256=2syzmJ0r9fEa0k1pD7zC_1DHUMs9qLSWRzo5XXtKqsA,10896
|
|
77
|
+
pulse/plugin.py,sha256=bu90qaUVFtZsIsW41dpshVK1vvIGHUsg6mFoiF0Wfso,2370
|
|
78
|
+
pulse/proxy.py,sha256=Rj0hOVnwyI36lrkK9fEKAgFK-WCwt5X526J87A2EvMs,7773
|
|
79
|
+
pulse/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
80
|
+
pulse/queries/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
81
|
+
pulse/queries/client.py,sha256=AW42ZPdZJfDkCERpoxQnsiU5cYLfOlZX0sIb9BdIL4E,18495
|
|
82
|
+
pulse/queries/common.py,sha256=TYhn6LyldfmOKYYurxINgCEr3C3WSEwB0cIki1a5iBM,2488
|
|
83
|
+
pulse/queries/effect.py,sha256=7KvV_yK7OHTWhfQbZFGzg_pRhyI2mn25pKIF9AmSmcU,1471
|
|
84
|
+
pulse/queries/infinite_query.py,sha256=oPZq_TEVPHTdMy6-XfjN0hGFy_uhU14vdtn-UsCUHBQ,45764
|
|
85
|
+
pulse/queries/mutation.py,sha256=fhEpOZ7CuHImH4Y02QapYdTJrwe6K52-keb0d67wmms,8274
|
|
86
|
+
pulse/queries/protocol.py,sha256=R8n238Ex9DbYIAVKB83a8FAPtnCiPNhWar-F01K2fTo,3345
|
|
87
|
+
pulse/queries/query.py,sha256=GTZY6xvan4mC3GgLbkRnzo6lSvfRhriN2UznyjyiEWE,38682
|
|
88
|
+
pulse/queries/store.py,sha256=Ct7a-h1-Cq07zEfe9vw-LM85Fm7jIJx7CLAIlsiznlU,3444
|
|
89
|
+
pulse/react_component.py,sha256=4Zd2H9XJ2fVxVzznW5xMpcnPqx33S-c9V5KgPKjjtmo,1845
|
|
90
|
+
pulse/reactive.py,sha256=FxxpH7NBtQr7G89iCVN7y1EG21f23GcRi1M-XIxcRQA,31280
|
|
91
|
+
pulse/reactive_extensions.py,sha256=yQ1PpdAh4kMvll7R15T72FOg8NFdG_HGBsGc63dawYk,33754
|
|
92
|
+
pulse/render_session.py,sha256=Sek343ViDdS2r8IhLUTyZvzrb10kXTr4zDMNig2TwnA,21371
|
|
93
|
+
pulse/renderer.py,sha256=bH7MWaQB1BVk6s60yEgZhUIoAuXO9olY5IA8dUqc_64,16002
|
|
94
|
+
pulse/request.py,sha256=N0oFOLiGxpbgSgxznjvu64lG3YyOcZPKC8JFyKx6X7w,6023
|
|
95
|
+
pulse/routing.py,sha256=LzTITvGgaLI1w7qTDZjFwoBcWAb4O8Dz7AmXeTNYrFU,16903
|
|
96
|
+
pulse/serializer.py,sha256=HmQZgxQiaCx2SL2XwmEQLd_xsk_P8XfLtGciLLLOxx0,7616
|
|
97
|
+
pulse/state.py,sha256=VMphVpYNU1CyHMMg1_kNJO3cfqLXJPAuq9gr9RYyUAw,15922
|
|
98
|
+
pulse/test_helpers.py,sha256=4iO5Ymy3SMvSjh-UaAaSdqm1I_SAJMNjdY2iYVro5f8,436
|
|
99
|
+
pulse/transpiler/__init__.py,sha256=wDDnzqxgHpp_OLtcgyrJEg2jVoTnFIe3SSSTOsMDW8w,4700
|
|
100
|
+
pulse/transpiler/assets.py,sha256=FHielogI5NrFwst5H94E49YWYFX7Tp1rwJHCcowT3P0,1974
|
|
101
|
+
pulse/transpiler/builtins.py,sha256=QZrow7XJ2wxGMAE-mgZmaUD03egOnXCbikOg8yMx9vQ,30807
|
|
102
|
+
pulse/transpiler/dynamic_import.py,sha256=wyIA-QzRi2-1cdzxGuFJleVKyVp5dEud6M-eP9SA_EY,3464
|
|
103
|
+
pulse/transpiler/emit_context.py,sha256=GyK6VdsBSTVIewQRhBagaV0hlqLTlPZ1i8EAZGi8SaY,1321
|
|
104
|
+
pulse/transpiler/errors.py,sha256=LSBjLBnMglbl2D94p9JR4y-3jDefk6iHSlUVBaBOTu4,2823
|
|
105
|
+
pulse/transpiler/function.py,sha256=Pf5eoyzKHpn3d2EvCCYtARMnn_ixpAl7IZmY1fhmDIk,17036
|
|
106
|
+
pulse/transpiler/id.py,sha256=CdgA1NndBpZjv0Hp4XiYbKn7wi-x4zWsFSjEiViKxVk,434
|
|
107
|
+
pulse/transpiler/imports.py,sha256=2pxKZzjmMyAMgkfs_gBc01mxbAv8euyW8FTBBy5GaNw,9420
|
|
108
|
+
pulse/transpiler/js_module.py,sha256=EWX8ZZ248H6kMQs9u6zsve3SPLy4lzf9F1cNEDdY1bA,11193
|
|
109
|
+
pulse/transpiler/modules/__init__.py,sha256=JGi3CuZoF4sug4dNhQg3MFhpEQqnXec4xRJM2cHNP3c,1184
|
|
110
|
+
pulse/transpiler/modules/asyncio.py,sha256=kWMuFU2vZbqutCM_EXJMvy5SdlB66XiT0czs8lELj_o,1584
|
|
111
|
+
pulse/transpiler/modules/json.py,sha256=Zxe8dsaQ0Eoq3yHUiJeKEx6ibiN36HCT61ScFkLFCeY,676
|
|
112
|
+
pulse/transpiler/modules/math.py,sha256=8gjvdYTMqtuOnXrvX_Lwuo0ywAdSl7cpss4TMk6mQtQ,7044
|
|
113
|
+
pulse/transpiler/modules/pulse/__init__.py,sha256=TfMsiiB53ZFlxdNl7jfCAiMZs-vSRUTxUmqzkLTj-po,91
|
|
114
|
+
pulse/transpiler/modules/pulse/tags.py,sha256=YFodKrhmt4DH7QtjTBdVvK5J6Qq2ntfhzb50tP-PTac,6273
|
|
115
|
+
pulse/transpiler/modules/typing.py,sha256=hMGff6gBscFJE2GPV9xUFNfLuff2QCMIbMJUs3f24BY,1771
|
|
116
|
+
pulse/transpiler/nodes.py,sha256=PvTHSLlau4xaf35UjI24FV_L4jhT2BwiIRmCtGowQ8A,50392
|
|
117
|
+
pulse/transpiler/py_module.py,sha256=YYSeroGInkXsoy39Y34Oxj1mrwDQnbSFVEgWru7vqG0,4465
|
|
118
|
+
pulse/transpiler/transpiler.py,sha256=28diEp1yZTs3RsUEJZZdCv1DfzgO9WyOGI-xSHe7y_4,32562
|
|
119
|
+
pulse/transpiler/vdom.py,sha256=l4CKQlt-wSSFJ7j7cF4dVwqYHWyAT1uAmbgsx0Kk4Jc,6310
|
|
120
|
+
pulse/types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
121
|
+
pulse/types/event_handler.py,sha256=psQCydj-WEtBcFU5JU4mDwvyzkW8V2O0g_VFRU2EOHI,1618
|
|
122
|
+
pulse/user_session.py,sha256=nsnsMgqq2xGJZLpbHRMHUHcLrElMP8WcA4gjGMrcoBk,10208
|
|
123
|
+
pulse/version.py,sha256=711vaM1jVIQPgkisGgKZqwmw019qZIsc_QTae75K2pg,1895
|
|
124
|
+
pulse_framework-0.1.56.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
|
|
125
|
+
pulse_framework-0.1.56.dist-info/entry_points.txt,sha256=i7aohd3QaPu5IcuGKKvsQQEiMYMe5HcF56QEsaLVO64,46
|
|
126
|
+
pulse_framework-0.1.56.dist-info/METADATA,sha256=MtCUAC4lSouiraf7sHDEJWUCPDmL6k3w2ugU7Mvha5I,8229
|
|
127
|
+
pulse_framework-0.1.56.dist-info/RECORD,,
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"""React component integration for transpiler.
|
|
2
|
-
|
|
3
|
-
In v2, client React components are represented as Expr nodes (typically Import or Member).
|
|
4
|
-
The @react_component decorator wraps an expression in Jsx(expr) to provide:
|
|
5
|
-
|
|
6
|
-
- JSX call semantics via Jsx (transpile to Element nodes)
|
|
7
|
-
- Type-safe Python call signature via .as_(fn)
|
|
8
|
-
"""
|
|
9
|
-
|
|
10
|
-
from __future__ import annotations
|
|
11
|
-
|
|
12
|
-
from collections.abc import Callable
|
|
13
|
-
from typing import Any, ParamSpec
|
|
14
|
-
|
|
15
|
-
from pulse.transpiler.nodes import Element, Expr, Jsx, Node
|
|
16
|
-
|
|
17
|
-
P = ParamSpec("P")
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
def default_signature(
|
|
21
|
-
*children: Node, key: str | None = None, **props: Any
|
|
22
|
-
) -> Element: ...
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
def react_component(expr: Expr):
|
|
26
|
-
"""Decorator that uses the decorated function solely as a typed signature.
|
|
27
|
-
|
|
28
|
-
Returns a Jsx(expr) that preserves the function's type signature for type
|
|
29
|
-
checkers and produces Element nodes when called in transpiled code.
|
|
30
|
-
|
|
31
|
-
For lazy loading, use Import(lazy=True) directly:
|
|
32
|
-
LazyChart = Import("Chart", "./Chart", kind="default", lazy=True)
|
|
33
|
-
React.lazy(LazyChart) # LazyChart is already a factory
|
|
34
|
-
"""
|
|
35
|
-
|
|
36
|
-
def decorator(fn: Callable[P, Any]) -> Callable[P, Element]:
|
|
37
|
-
if not isinstance(expr, Expr):
|
|
38
|
-
raise TypeError("react_component expects an Expr")
|
|
39
|
-
|
|
40
|
-
# Wrap expr: Jsx provides Element generation
|
|
41
|
-
jsx_wrapper = expr if isinstance(expr, Jsx) else Jsx(expr)
|
|
42
|
-
return jsx_wrapper
|
|
43
|
-
|
|
44
|
-
return decorator
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
pulse/__init__.py,sha256=WN17B77pSD_Slz75YV3b1ove8GXsqeXhO-b1S_ZIrVE,31983
|
|
2
|
-
pulse/_examples.py,sha256=dFuhD2EVXsbvAeexoG57s4VuN4gWLaTMOEMNYvlPm9A,561
|
|
3
|
-
pulse/app.py,sha256=D2T7K7HX87yg2UBIW9YYvT895Xp8UiiLSL8gWFZsaqQ,31635
|
|
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/code_analysis.py,sha256=NBba_7VtOxZYMyfku_p-bWkG0O_1pi1AxcaNyVM1nmY,1024
|
|
17
|
-
pulse/codegen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
|
-
pulse/codegen/codegen.py,sha256=Etr_0UpZY7EKE-SjcMiuGENDKuEZbyPWuFfccaQcdAs,9260
|
|
19
|
-
pulse/codegen/js.py,sha256=fm2aL3RdnL7KlgrXDkKbM0E6BkXYBkID0XlKTDAX26c,1521
|
|
20
|
-
pulse/codegen/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
|
-
pulse/codegen/templates/layout.py,sha256=nmWPQcO9SRXc3mCCVLCmykreSF96TqQfdDY7dvUBxRg,4737
|
|
22
|
-
pulse/codegen/templates/route.py,sha256=UjBrb3e_8tMkd1OjBjEsnYmK6PCQqOYZBWDuU59FcrI,9234
|
|
23
|
-
pulse/codegen/templates/routes_ts.py,sha256=nPgKCvU0gzue2k6KlOL1TJgrBqqRLmyy7K_qKAI8zAE,1129
|
|
24
|
-
pulse/codegen/utils.py,sha256=QoXcV-h-DLLmq_t03hDNUePS0fNnofUQLoR-TXzDFCY,539
|
|
25
|
-
pulse/component.py,sha256=QiIFNtYraljwDmTCCjYiuGT9BlOjO8VgHpFCj1GO2i0,3543
|
|
26
|
-
pulse/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
27
|
-
pulse/components/for_.py,sha256=OF7hso4hg0_X_FDwEzto6CoMcZ_fJho7TIp2ag0F_N0,1784
|
|
28
|
-
pulse/components/if_.py,sha256=jXOrZ6sbSA-qgjJg-_-buppjS1wDDfRnKRF4Y7pQNTc,1636
|
|
29
|
-
pulse/components/react_router.py,sha256=uQ08mdvcqA_i4EaFcfIR80DZkpMW_kqmBS1U5rNblqc,1068
|
|
30
|
-
pulse/context.py,sha256=fMK6GdQY4q_3452v5DJli2f2_urVihnpzb-O-O9cJ1Q,1734
|
|
31
|
-
pulse/cookies.py,sha256=R-gf_x25SKqfJFGxdOazf91lQp-YUpd3HyUYF-nMji4,6184
|
|
32
|
-
pulse/decorators.py,sha256=ywNgLN6VFcKOM5fbFdUUzh-DWk4BuSXdD1BTfd1N-0U,4827
|
|
33
|
-
pulse/dom/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
34
|
-
pulse/dom/elements.py,sha256=YHXkVpfMAC4-0o61fK-E0LGTOM3KMCtBfpHHAwLx7dw,23241
|
|
35
|
-
pulse/dom/events.py,sha256=yHioH8Y-b7raOaZ43JuCxk2lUBryUAcDSc-5VhXtiSI,14699
|
|
36
|
-
pulse/dom/props.py,sha256=WrPwOYSoJmn-VWxU2KvJC1j64L4tlT8X2JpabK94gYQ,26721
|
|
37
|
-
pulse/dom/svg.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
38
|
-
pulse/dom/tags.py,sha256=U6mKmwB9JAFM6LTESMJcoIejNfnyxIdQo2-TLM5OaZ0,7585
|
|
39
|
-
pulse/dom/tags.pyi,sha256=0BC7zTh22roPBuMQawL8hgI6IrfN8xJZuDIoKMd4QKc,14393
|
|
40
|
-
pulse/env.py,sha256=BXbyPWlCb045_RhjzEbg1LUIA0ppwwO2OE5CilGxGqY,2884
|
|
41
|
-
pulse/form.py,sha256=KSCr8UrWnP4zuO7xhndkSgG-YyU_oFGVPuz743GD1k0,9081
|
|
42
|
-
pulse/helpers.py,sha256=v054teQPOFNJZMgs_G7-BIGsvTLvolTEABgtoSUR3_c,14890
|
|
43
|
-
pulse/hooks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
44
|
-
pulse/hooks/core.py,sha256=QfYRz2O8-drNSQx_xnv8mK8ksWcw3LNM1H2hoInT0Rk,7457
|
|
45
|
-
pulse/hooks/effects.py,sha256=pVq5OndlhFLHLpM9Pn9Bp5rEpnpmJEpbIp2UaHHyJFQ,2428
|
|
46
|
-
pulse/hooks/init.py,sha256=QZUfdOCqW7xcy_jn-lFBN8h_68ppmKDraF-2bhjWr1g,15848
|
|
47
|
-
pulse/hooks/runtime.py,sha256=61CGZ9B0ScwCx8bwUrXIWYPAJIZtGCp3GcdBqa33dgo,5145
|
|
48
|
-
pulse/hooks/setup.py,sha256=c_uVi0S0HPioEvjdWUaSdAGT9M3Cxpw8J-llvtmDOGo,4496
|
|
49
|
-
pulse/hooks/stable.py,sha256=mLNS6WyA4tC-65gNybPOE0DLEz1YlxOCddD9odElArU,1772
|
|
50
|
-
pulse/hooks/state.py,sha256=2EX_N0YO_Jycx7CGE4xQEm3DjlPk97gaNYwhXPkfVJ8,2827
|
|
51
|
-
pulse/js/__init__.py,sha256=bl6RVTTrA_JInHcFtPDuUoYDYFeymkixrGXT24ZiisQ,3644
|
|
52
|
-
pulse/js/__init__.pyi,sha256=WN22WsJB-XFk6auL9zklwG2Kof3zeOsc56A56dJ3MWg,3097
|
|
53
|
-
pulse/js/_types.py,sha256=F4Go2JtJ2dbxq1fXpc2ablG_nyvhvHzOlZLlEv0VmyU,7421
|
|
54
|
-
pulse/js/array.py,sha256=fMs0ykV7PwJawGN4lugtTe_yxBFfBRgjm1ley1IA_no,8892
|
|
55
|
-
pulse/js/console.py,sha256=7OCC_Zh7OECt0kO0KlkNBBC05muefipeNbsOY5mcWuo,1804
|
|
56
|
-
pulse/js/date.py,sha256=_HyoRk0qIY3pWtTk2NYQvesVZhoqjvwtxdwlFzhg4zI,3372
|
|
57
|
-
pulse/js/document.py,sha256=C6hmd5yQkI3LPKxLRILDUu1Jl5ZhA6_Mps8iudBFWAs,2997
|
|
58
|
-
pulse/js/error.py,sha256=80AVD5hcowHfd3AyUGM-_AFFOnUhP2q8mC8QZBJgIPQ,2612
|
|
59
|
-
pulse/js/json.py,sha256=971jJLVrKjMIU7pxtI-JQ7Nh4BlrPdtGlCdQnxrLPCA,1917
|
|
60
|
-
pulse/js/map.py,sha256=VdWVOwIex_jTmB9OqHfxkSMw-tbAZcejJCFQB581wIg,2248
|
|
61
|
-
pulse/js/math.py,sha256=UdOe2ri_Rxuu1qDhSiS270WrUMJj6VtSwnGZPpbq-k8,1766
|
|
62
|
-
pulse/js/navigator.py,sha256=pilMh8e39XjM7DcVkOV-hlRg61Ldsgxil70h51d0fEo,1510
|
|
63
|
-
pulse/js/number.py,sha256=rByDqG1La8Ijb8qcj740SgEK5ZQJUlV3V30ORkMewOc,1271
|
|
64
|
-
pulse/js/obj.py,sha256=sxOve2ny8mm40iBxLO6QxY0OmcBZheIkoqUimfBks8E,2078
|
|
65
|
-
pulse/js/object.py,sha256=wMULUSjTPNRalnDkmmYjzeplm1N7ClVgMt7VoKQjzsI,4442
|
|
66
|
-
pulse/js/promise.py,sha256=ipJTLXef5ub5tqexQY69M9AwxW-JyEhXg8DiSgo7OtA,4676
|
|
67
|
-
pulse/js/pulse.py,sha256=onWrfsagiXQk0VAIHAWj1pdPb17VchDgNVyuIMx9GKA,3027
|
|
68
|
-
pulse/js/react.py,sha256=0O4lENAQlHHVJ8zWZjJsEed3At5XvN-wz2ZjA-EOwII,11931
|
|
69
|
-
pulse/js/regexp.py,sha256=5gpfDDe72uoOu2-uC8LvOPqrQH1HF6G-u77kPmIohbQ,1056
|
|
70
|
-
pulse/js/set.py,sha256=nKSIxe0W4ZfA4NQ_-Jd401GTDfnQWRqMxag7eadoP70,3022
|
|
71
|
-
pulse/js/string.py,sha256=VMjHDEF260-AVRqUBDKR0FXShmCU06y9IMAMpxVCc0E,822
|
|
72
|
-
pulse/js/weakmap.py,sha256=XDCNykrHE2bjjKEd1TB-vToKE6Yz2W8-VSA79ajUoMA,1417
|
|
73
|
-
pulse/js/weakset.py,sha256=nixXyjnSKRLFIACebzxTSXm0ZVUy09OY9BXF97ua9lU,1261
|
|
74
|
-
pulse/js/window.py,sha256=kP57l2nYjJy6h6Zt-BbB4cdhs1Et0pB32AcViN7n1rw,4094
|
|
75
|
-
pulse/messages.py,sha256=03It_vMMLRDpDeXkxiwV_5LO_vcYUA79-SWw0dVX6MA,3936
|
|
76
|
-
pulse/middleware.py,sha256=9uyAhVUEGMSwqWC3WXqs7x5JMMNEcSTTu3g7DjsR8w8,9812
|
|
77
|
-
pulse/plugin.py,sha256=RfGl6Vtr7VRHb8bp4Ob4dOX9dVzvc4Riu7HWnStMPpk,580
|
|
78
|
-
pulse/proxy.py,sha256=Rj0hOVnwyI36lrkK9fEKAgFK-WCwt5X526J87A2EvMs,7773
|
|
79
|
-
pulse/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
80
|
-
pulse/queries/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
81
|
-
pulse/queries/client.py,sha256=GGckE0P3YCBO4Mj-08AO_I9eXVC4sIDSNw_xTLrBFuE,15224
|
|
82
|
-
pulse/queries/common.py,sha256=Cr_NV0dWz5DQ7Qg771jvUms1o2-EnTYqjZJe4tVeoVk,1160
|
|
83
|
-
pulse/queries/effect.py,sha256=7KvV_yK7OHTWhfQbZFGzg_pRhyI2mn25pKIF9AmSmcU,1471
|
|
84
|
-
pulse/queries/infinite_query.py,sha256=oUHWjP2OliB7h8VDJooGocefHm4m9TDy4WaJesSrsdI,40457
|
|
85
|
-
pulse/queries/mutation.py,sha256=px1fprFL-RxNfbRSoRtdsOLkEbjSsMrJxGHKBIPYQTM,4959
|
|
86
|
-
pulse/queries/protocol.py,sha256=R8n238Ex9DbYIAVKB83a8FAPtnCiPNhWar-F01K2fTo,3345
|
|
87
|
-
pulse/queries/query.py,sha256=G8eXCaT5wuvVcstlqWU8VBxuuUUS7K1R5Y-VtDpMIG0,35065
|
|
88
|
-
pulse/queries/store.py,sha256=Ct7a-h1-Cq07zEfe9vw-LM85Fm7jIJx7CLAIlsiznlU,3444
|
|
89
|
-
pulse/react_component.py,sha256=7uspzLhjQrosVFFHVMmeE3_P8XnAbMAt56i8116TQcw,197
|
|
90
|
-
pulse/reactive.py,sha256=v8a9IttkabeWwYrrHAx33zqzW9WC4WlS4iXbIh2KQkU,24374
|
|
91
|
-
pulse/reactive_extensions.py,sha256=T1V3AasHtvJkmGO55miC9RVPxDFIj7qrooMsn89x5SI,32076
|
|
92
|
-
pulse/render_session.py,sha256=oEKJ-RXqUUm1Dvc-7sgHIqfkVgayywvl3jcHb-bEQQo,17343
|
|
93
|
-
pulse/renderer.py,sha256=bH7MWaQB1BVk6s60yEgZhUIoAuXO9olY5IA8dUqc_64,16002
|
|
94
|
-
pulse/request.py,sha256=sPsSRWi5KvReSPBLIs_kzqomn1wlRk1BTLZ5s0chQr4,4979
|
|
95
|
-
pulse/routing.py,sha256=BObgI9cRPCXy24Gir-KeOdMh-Yxnh88hET2qddC0Fss,12847
|
|
96
|
-
pulse/serializer.py,sha256=SQaoUsYLj2hkSleAJ5ML1BzSKt04lwGKlCAw15_MaOA,5838
|
|
97
|
-
pulse/state.py,sha256=ikQbK4R8PieV96qd4uWREUvs0jXo9sCapawY7i6oCYo,10776
|
|
98
|
-
pulse/transpiler/__init__.py,sha256=BKemf-3llEAuiN0DID8gmz03qlC0T9GxvPZC19W3DGY,4840
|
|
99
|
-
pulse/transpiler/assets.py,sha256=FHielogI5NrFwst5H94E49YWYFX7Tp1rwJHCcowT3P0,1974
|
|
100
|
-
pulse/transpiler/builtins.py,sha256=QZrow7XJ2wxGMAE-mgZmaUD03egOnXCbikOg8yMx9vQ,30807
|
|
101
|
-
pulse/transpiler/dynamic_import.py,sha256=wyIA-QzRi2-1cdzxGuFJleVKyVp5dEud6M-eP9SA_EY,3464
|
|
102
|
-
pulse/transpiler/emit_context.py,sha256=GyK6VdsBSTVIewQRhBagaV0hlqLTlPZ1i8EAZGi8SaY,1321
|
|
103
|
-
pulse/transpiler/errors.py,sha256=LSBjLBnMglbl2D94p9JR4y-3jDefk6iHSlUVBaBOTu4,2823
|
|
104
|
-
pulse/transpiler/function.py,sha256=Pf5eoyzKHpn3d2EvCCYtARMnn_ixpAl7IZmY1fhmDIk,17036
|
|
105
|
-
pulse/transpiler/id.py,sha256=CdgA1NndBpZjv0Hp4XiYbKn7wi-x4zWsFSjEiViKxVk,434
|
|
106
|
-
pulse/transpiler/imports.py,sha256=2pxKZzjmMyAMgkfs_gBc01mxbAv8euyW8FTBBy5GaNw,9420
|
|
107
|
-
pulse/transpiler/js_module.py,sha256=EWX8ZZ248H6kMQs9u6zsve3SPLy4lzf9F1cNEDdY1bA,11193
|
|
108
|
-
pulse/transpiler/modules/__init__.py,sha256=JGi3CuZoF4sug4dNhQg3MFhpEQqnXec4xRJM2cHNP3c,1184
|
|
109
|
-
pulse/transpiler/modules/asyncio.py,sha256=kWMuFU2vZbqutCM_EXJMvy5SdlB66XiT0czs8lELj_o,1584
|
|
110
|
-
pulse/transpiler/modules/json.py,sha256=Zxe8dsaQ0Eoq3yHUiJeKEx6ibiN36HCT61ScFkLFCeY,676
|
|
111
|
-
pulse/transpiler/modules/math.py,sha256=8gjvdYTMqtuOnXrvX_Lwuo0ywAdSl7cpss4TMk6mQtQ,7044
|
|
112
|
-
pulse/transpiler/modules/pulse/__init__.py,sha256=TfMsiiB53ZFlxdNl7jfCAiMZs-vSRUTxUmqzkLTj-po,91
|
|
113
|
-
pulse/transpiler/modules/pulse/tags.py,sha256=YFodKrhmt4DH7QtjTBdVvK5J6Qq2ntfhzb50tP-PTac,6273
|
|
114
|
-
pulse/transpiler/modules/typing.py,sha256=hMGff6gBscFJE2GPV9xUFNfLuff2QCMIbMJUs3f24BY,1771
|
|
115
|
-
pulse/transpiler/nodes.py,sha256=PvTHSLlau4xaf35UjI24FV_L4jhT2BwiIRmCtGowQ8A,50392
|
|
116
|
-
pulse/transpiler/py_module.py,sha256=z971TX958GEai8bP--4fnsMvE8ZhTWfWkIImUQwRpSo,4628
|
|
117
|
-
pulse/transpiler/react_component.py,sha256=GnATqqnDu55W6QbfHAXwhoE-B5k1CVA5t8FVdd7jBWc,1350
|
|
118
|
-
pulse/transpiler/transpiler.py,sha256=28diEp1yZTs3RsUEJZZdCv1DfzgO9WyOGI-xSHe7y_4,32562
|
|
119
|
-
pulse/transpiler/vdom.py,sha256=l4CKQlt-wSSFJ7j7cF4dVwqYHWyAT1uAmbgsx0Kk4Jc,6310
|
|
120
|
-
pulse/types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
121
|
-
pulse/types/event_handler.py,sha256=psQCydj-WEtBcFU5JU4mDwvyzkW8V2O0g_VFRU2EOHI,1618
|
|
122
|
-
pulse/user_session.py,sha256=1xVui3jjom4mtECqGLbIbQyPNsDVKquqq1NECI6yRa0,8129
|
|
123
|
-
pulse/version.py,sha256=711vaM1jVIQPgkisGgKZqwmw019qZIsc_QTae75K2pg,1895
|
|
124
|
-
pulse_framework-0.1.55.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
|
|
125
|
-
pulse_framework-0.1.55.dist-info/entry_points.txt,sha256=i7aohd3QaPu5IcuGKKvsQQEiMYMe5HcF56QEsaLVO64,46
|
|
126
|
-
pulse_framework-0.1.55.dist-info/METADATA,sha256=MO26KPIrV8TuADZl8JaGkGVPqlquzRLwydm66XiEXfY,8176
|
|
127
|
-
pulse_framework-0.1.55.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|