pulse-framework 0.1.48__tar.gz → 0.1.49__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/PKG-INFO +1 -1
  2. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/pyproject.toml +1 -1
  3. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/proxy.py +2 -2
  4. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/transpiler/imports.py +7 -2
  5. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/README.md +0 -0
  6. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/__init__.py +0 -0
  7. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/app.py +0 -0
  8. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/channel.py +0 -0
  9. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/cli/__init__.py +0 -0
  10. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/cli/cmd.py +0 -0
  11. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/cli/dependencies.py +0 -0
  12. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/cli/folder_lock.py +0 -0
  13. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/cli/helpers.py +0 -0
  14. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/cli/models.py +0 -0
  15. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/cli/packages.py +0 -0
  16. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/cli/processes.py +0 -0
  17. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/cli/secrets.py +0 -0
  18. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/cli/uvicorn_log_config.py +0 -0
  19. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/codegen/__init__.py +0 -0
  20. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/codegen/codegen.py +0 -0
  21. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/codegen/js.py +0 -0
  22. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/codegen/templates/__init__.py +0 -0
  23. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/codegen/templates/layout.py +0 -0
  24. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/codegen/templates/route.py +0 -0
  25. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/codegen/templates/routes_ts.py +0 -0
  26. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/codegen/utils.py +0 -0
  27. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/components/__init__.py +0 -0
  28. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/components/for_.py +0 -0
  29. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/components/if_.py +0 -0
  30. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/components/react_router.py +0 -0
  31. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/context.py +0 -0
  32. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/cookies.py +0 -0
  33. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/decorators.py +0 -0
  34. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/env.py +0 -0
  35. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/form.py +0 -0
  36. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/helpers.py +0 -0
  37. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/hooks/__init__.py +0 -0
  38. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/hooks/core.py +0 -0
  39. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/hooks/effects.py +0 -0
  40. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/hooks/init.py +0 -0
  41. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/hooks/runtime.py +0 -0
  42. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/hooks/setup.py +0 -0
  43. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/hooks/stable.py +0 -0
  44. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/hooks/states.py +0 -0
  45. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/html/__init__.py +0 -0
  46. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/html/elements.py +0 -0
  47. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/html/events.py +0 -0
  48. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/html/props.py +0 -0
  49. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/html/svg.py +0 -0
  50. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/html/tags.py +0 -0
  51. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/html/tags.pyi +0 -0
  52. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/js/__init__.py +0 -0
  53. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/js/__init__.pyi +0 -0
  54. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/js/_types.py +0 -0
  55. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/js/array.py +0 -0
  56. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/js/console.py +0 -0
  57. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/js/date.py +0 -0
  58. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/js/document.py +0 -0
  59. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/js/error.py +0 -0
  60. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/js/json.py +0 -0
  61. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/js/map.py +0 -0
  62. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/js/math.py +0 -0
  63. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/js/navigator.py +0 -0
  64. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/js/number.py +0 -0
  65. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/js/object.py +0 -0
  66. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/js/promise.py +0 -0
  67. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/js/regexp.py +0 -0
  68. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/js/set.py +0 -0
  69. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/js/string.py +0 -0
  70. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/js/weakmap.py +0 -0
  71. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/js/weakset.py +0 -0
  72. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/js/window.py +0 -0
  73. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/messages.py +0 -0
  74. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/middleware.py +0 -0
  75. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/plugin.py +0 -0
  76. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/py.typed +0 -0
  77. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/queries/__init__.py +0 -0
  78. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/queries/client.py +0 -0
  79. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/queries/common.py +0 -0
  80. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/queries/effect.py +0 -0
  81. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/queries/infinite_query.py +0 -0
  82. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/queries/mutation.py +0 -0
  83. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/queries/protocol.py +0 -0
  84. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/queries/query.py +0 -0
  85. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/queries/store.py +0 -0
  86. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/react_component.py +0 -0
  87. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/reactive.py +0 -0
  88. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/reactive_extensions.py +0 -0
  89. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/render_session.py +0 -0
  90. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/renderer.py +0 -0
  91. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/request.py +0 -0
  92. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/routing.py +0 -0
  93. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/serializer.py +0 -0
  94. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/state.py +0 -0
  95. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/transpiler/__init__.py +0 -0
  96. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/transpiler/builtins.py +0 -0
  97. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/transpiler/constants.py +0 -0
  98. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/transpiler/context.py +0 -0
  99. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/transpiler/errors.py +0 -0
  100. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/transpiler/function.py +0 -0
  101. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/transpiler/ids.py +0 -0
  102. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/transpiler/js_module.py +0 -0
  103. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/transpiler/modules/__init__.py +0 -0
  104. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/transpiler/modules/asyncio.py +0 -0
  105. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/transpiler/modules/json.py +0 -0
  106. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/transpiler/modules/math.py +0 -0
  107. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/transpiler/modules/re.py +0 -0
  108. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/transpiler/modules/tags.py +0 -0
  109. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/transpiler/modules/typing.py +0 -0
  110. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/transpiler/nodes.py +0 -0
  111. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/transpiler/py_module.py +0 -0
  112. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/transpiler/transpiler.py +0 -0
  113. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/transpiler/utils.py +0 -0
  114. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/types/__init__.py +0 -0
  115. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/types/event_handler.py +0 -0
  116. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/user_session.py +0 -0
  117. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/vdom.py +0 -0
  118. {pulse_framework-0.1.48 → pulse_framework-0.1.49}/src/pulse/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pulse-framework
3
- Version: 0.1.48
3
+ Version: 0.1.49
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pulse-framework"
3
- version = "0.1.48"
3
+ version = "0.1.49"
4
4
  description = "Pulse - Full-stack framework for building real-time React applications in Python"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -41,7 +41,7 @@ class ReactProxy:
41
41
  self.server_address = server_address
42
42
  self._client = None
43
43
 
44
- def _rewrite_url(self, url: str) -> str:
44
+ def rewrite_url(self, url: str) -> str:
45
45
  """Rewrite internal React server URLs to external server address."""
46
46
  if self.react_server_address in url:
47
47
  return url.replace(self.react_server_address, self.server_address)
@@ -207,7 +207,7 @@ class ReactProxy:
207
207
  response_headers: dict[str, str] = {}
208
208
  for k, v in r.headers.items():
209
209
  if k.lower() in ("location", "content-location"):
210
- v = self._rewrite_url(v)
210
+ v = self.rewrite_url(v)
211
211
  response_headers[k] = v
212
212
 
213
213
  return StreamingResponse(
@@ -293,6 +293,7 @@ class CssImport(Import):
293
293
  - Absolute path (e.g., "/path/to/styles.css")
294
294
  module: If True, import as a CSS module (default export for class access).
295
295
  If False, import for side effects only (global styles).
296
+ Automatically set to True if path ends with ".module.css".
296
297
  relative: If True, resolve path relative to the caller's file.
297
298
  before: List of import sources that should come after this import.
298
299
 
@@ -300,8 +301,8 @@ class CssImport(Import):
300
301
  # Side-effect CSS import (global styles)
301
302
  CssImport("@mantine/core/styles.css")
302
303
 
303
- # CSS module for class access
304
- styles = CssImport("./styles.module.css", module=True, relative=True)
304
+ # CSS module for class access (module=True auto-detected from .module.css)
305
+ styles = CssImport("./styles.module.css", relative=True)
305
306
  styles.container # Returns JSMember for 'container' class
306
307
 
307
308
  # Local CSS file (will be copied during codegen)
@@ -316,6 +317,10 @@ class CssImport(Import):
316
317
  relative: bool = False,
317
318
  before: Sequence[str] = (),
318
319
  ) -> None:
320
+ # Auto-detect CSS modules based on filename
321
+ if path.endswith(".module.css"):
322
+ module = True
323
+
319
324
  source_path: Path | None = None
320
325
  import_src = path
321
326