pulse-framework 0.1.38a3__tar.gz → 0.1.38a4__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.
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/PKG-INFO +1 -1
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/pyproject.toml +1 -1
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/cli/cmd.py +38 -38
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/README.md +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/__init__.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/app.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/channel.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/cli/__init__.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/cli/dependencies.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/cli/folder_lock.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/cli/helpers.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/cli/models.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/cli/packages.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/cli/processes.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/cli/secrets.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/cli/uvicorn_log_config.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/codegen/__init__.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/codegen/codegen.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/codegen/imports.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/codegen/js.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/codegen/templates/__init__.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/codegen/templates/layout.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/codegen/templates/route.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/codegen/templates/routes_ts.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/codegen/utils.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/components/__init__.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/components/for_.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/components/if_.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/components/react_router.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/context.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/cookies.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/css.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/decorators.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/env.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/form.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/helpers.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/hooks/__init__.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/hooks/core.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/hooks/effects.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/hooks/runtime.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/hooks/setup.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/hooks/stable.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/hooks/states.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/html/__init__.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/html/elements.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/html/events.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/html/props.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/html/svg.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/html/tags.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/html/tags.pyi +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/messages.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/middleware.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/plugin.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/proxy.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/py.typed +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/query.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/react_component.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/reactive.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/reactive_extensions.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/render_session.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/renderer.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/request.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/routing.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/serializer.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/state.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/types/__init__.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/types/event_handler.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/user_session.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/vdom.py +0 -0
- {pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/version.py +0 -0
|
@@ -139,37 +139,54 @@ def run(
|
|
|
139
139
|
web_root if web_root.exists() else app_ctx.app_file
|
|
140
140
|
)
|
|
141
141
|
|
|
142
|
-
if not server_only:
|
|
143
|
-
|
|
144
|
-
|
|
142
|
+
if env.pulse_env == "dev" and not server_only:
|
|
143
|
+
try:
|
|
144
|
+
to_add = check_web_dependencies(
|
|
145
|
+
web_root,
|
|
146
|
+
pulse_version=PULSE_PY_VERSION,
|
|
147
|
+
)
|
|
148
|
+
except DependencyResolutionError as exc:
|
|
149
|
+
console.log(f"❌ {exc}")
|
|
150
|
+
raise typer.Exit(1) from None
|
|
151
|
+
except DependencyError as exc:
|
|
152
|
+
console.log(f"❌ {exc}")
|
|
153
|
+
raise typer.Exit(1) from None
|
|
154
|
+
|
|
155
|
+
if to_add:
|
|
145
156
|
try:
|
|
146
|
-
|
|
157
|
+
dep_plan = prepare_web_dependencies(
|
|
147
158
|
web_root,
|
|
148
159
|
pulse_version=PULSE_PY_VERSION,
|
|
149
160
|
)
|
|
150
|
-
|
|
151
|
-
|
|
161
|
+
if dep_plan:
|
|
162
|
+
_run_dependency_plan(console, web_root, dep_plan)
|
|
163
|
+
except subprocess.CalledProcessError:
|
|
164
|
+
console.log("❌ Failed to install web dependencies with Bun.")
|
|
152
165
|
raise typer.Exit(1) from None
|
|
153
|
-
except DependencyError as exc:
|
|
154
|
-
console.log(f"❌ {exc}")
|
|
155
|
-
raise typer.Exit(1) from None
|
|
156
|
-
|
|
157
|
-
if to_add:
|
|
158
|
-
try:
|
|
159
|
-
dep_plan = prepare_web_dependencies(
|
|
160
|
-
web_root,
|
|
161
|
-
pulse_version=PULSE_PY_VERSION,
|
|
162
|
-
)
|
|
163
|
-
if dep_plan:
|
|
164
|
-
_run_dependency_plan(console, web_root, dep_plan)
|
|
165
|
-
except subprocess.CalledProcessError:
|
|
166
|
-
console.log("❌ Failed to install web dependencies with Bun.")
|
|
167
|
-
raise typer.Exit(1) from None
|
|
168
166
|
|
|
169
167
|
server_args = extra_flags if not web_only else []
|
|
170
168
|
web_args = extra_flags if web_only else []
|
|
171
169
|
|
|
172
170
|
commands: list[CommandSpec] = []
|
|
171
|
+
# Build web command first (when needed) so we can set PULSE_REACT_SERVER_ADDRESS
|
|
172
|
+
# before building the uvicorn command, which needs that env var
|
|
173
|
+
if not server_only:
|
|
174
|
+
if is_single_server:
|
|
175
|
+
web_port = find_available_port(5173)
|
|
176
|
+
commands.append(
|
|
177
|
+
build_web_command(
|
|
178
|
+
web_root=web_root,
|
|
179
|
+
extra_args=web_args,
|
|
180
|
+
port=web_port,
|
|
181
|
+
mode=app_instance.env,
|
|
182
|
+
)
|
|
183
|
+
)
|
|
184
|
+
# Set env var so app can read the React server address
|
|
185
|
+
react_server_address = f"http://localhost:{web_port}"
|
|
186
|
+
os.environ[ENV_PULSE_REACT_SERVER_ADDRESS] = react_server_address
|
|
187
|
+
else:
|
|
188
|
+
commands.append(build_web_command(web_root=web_root, extra_args=web_args))
|
|
189
|
+
|
|
173
190
|
if not web_only:
|
|
174
191
|
commands.append(
|
|
175
192
|
build_uvicorn_command(
|
|
@@ -187,23 +204,6 @@ def run(
|
|
|
187
204
|
)
|
|
188
205
|
)
|
|
189
206
|
|
|
190
|
-
# In single-server mode, start web server separately (not managed by app lifecycle)
|
|
191
|
-
if is_single_server and not server_only:
|
|
192
|
-
web_port = find_available_port(5173)
|
|
193
|
-
commands.append(
|
|
194
|
-
build_web_command(
|
|
195
|
-
web_root=web_root,
|
|
196
|
-
extra_args=web_args,
|
|
197
|
-
port=web_port,
|
|
198
|
-
mode=app_instance.env,
|
|
199
|
-
)
|
|
200
|
-
)
|
|
201
|
-
# Set env var so app can read the React server address
|
|
202
|
-
react_server_address = f"http://localhost:{web_port}"
|
|
203
|
-
os.environ[ENV_PULSE_REACT_SERVER_ADDRESS] = react_server_address
|
|
204
|
-
elif not is_single_server and not server_only:
|
|
205
|
-
commands.append(build_web_command(web_root=web_root, extra_args=web_args))
|
|
206
|
-
|
|
207
207
|
tag_colors = {"server": "cyan", "web": "orange1"}
|
|
208
208
|
|
|
209
209
|
with FolderLock(web_root):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/codegen/templates/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulse_framework-0.1.38a3 → pulse_framework-0.1.38a4}/src/pulse/codegen/templates/routes_ts.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|