Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
94 commits
Select commit Hold shift + click to select a range
2329127
Add support for updating `package.json` versions and improve version …
AnnaSasDev Apr 26, 2026
0240f58
Refactor: Rename `HostMessaging` to `InfiniFrameHostMessaging` for cl…
AnnaSasDev Apr 26, 2026
0053e8c
Refactor Windows Playwright workflow: Add matrix strategy for framewo…
AnnaSasDev Apr 26, 2026
81cc94c
Refactor: Organize TypeScript modules under `Utils`, rename imports, …
AnnaSasDev Apr 26, 2026
e3a378c
Refactor: Encapsulate pointer capture logic in new `InfiniFrameUtils`…
AnnaSasDev Apr 26, 2026
e5e8d91
Refactor: Restructure module organization by updating import paths an…
AnnaSasDev Apr 26, 2026
553a13e
Fix: Exclude `InfiniFrame.Native` from `package.json` version bump sc…
AnnaSasDev Apr 26, 2026
8240366
Chore: Remove unused `Iterable` import from `bump_version.py`
AnnaSasDev Apr 26, 2026
0c67991
Fix: Add null and pointer capture checks to `InfiniFrameUtils` methods
AnnaSasDev Apr 26, 2026
ceccfdb
Refactor: Update import paths for `InteropEnvelope` to align with upd…
AnnaSasDev Apr 26, 2026
ad95ed4
Refactor: Rename `InteropEnvelope` to `EnvelopeProtocol`, update refe…
AnnaSasDev Apr 26, 2026
672f624
Test: Add `@ts-ignore` comments to suppress TypeScript errors in `Int…
AnnaSasDev Apr 26, 2026
4823fc7
Feat: Add `InfiniFrameWindow` class and associated interface, central…
AnnaSasDev Apr 26, 2026
872e6a9
Refactor: Rename `postMessage` to `postData`, update `receiveMessage`…
AnnaSasDev Apr 26, 2026
1198976
Fix: Resolve incorrect module handle in `LoadResourceStringW`, add RC…
AnnaSasDev Apr 26, 2026
bb8e6c0
Refactor: Replace `MessageHandlers` with `MessageHandler`, consolidat…
AnnaSasDev Apr 26, 2026
bb1047e
Refactor: Add `Count` property to `IInfiniFrameWindowMessageHandler`,…
AnnaSasDev Apr 26, 2026
01c067c
Chore: Update Dependabot config to include commit message prefix and …
AnnaSasDev Apr 27, 2026
3806ad3
Refactor: Simplify frontend build targets, optimize condition checks,…
AnnaSasDev Apr 27, 2026
7884277
Refactor: Use conditional `Configuration` constant in `PublishService…
AnnaSasDev Apr 27, 2026
d6c53ea
Chore: Bump TUnit package versions to 1.40.10 in `Directory.Packages.…
AnnaSasDev Apr 28, 2026
de50d26
Refactor: Remove legacy message handling logic, simplify message pars…
AnnaSasDev Apr 28, 2026
3062aeb
Refactor: Rename native controlled `infiniframe` to `__infiniframe`, …
AnnaSasDev Apr 28, 2026
5634dd4
Refactor: Rename `getData` to `getDataAsync`, update usages across Ty…
AnnaSasDev Apr 28, 2026
a3818b9
Refactor: Replace Windows resource-based script embedding with compil…
AnnaSasDev Apr 28, 2026
49164c1
Chore: Remove obsolete localdev-ubuntu.bash script
AnnaSasDev Apr 28, 2026
5d4b325
Refactor: Modularize JS embedding by introducing `Embedded.h`, stream…
AnnaSasDev Apr 28, 2026
7110a86
Chore: Update `.gitattributes` to mark shell scripts with LF line end…
AnnaSasDev Apr 28, 2026
8db273d
Embed InfiniFrame host JS, simplify injection logic, refactor `infini…
AnnaSasDev Apr 28, 2026
b071900
Embed InfiniFrame host JS into `InfiniFrameHostJs.h`, simplify initia…
AnnaSasDev Apr 28, 2026
35e9ef8
Embed InfiniFrame messaging logic into `InfiniFrameHostJs.h`, streaml…
AnnaSasDev Apr 28, 2026
ec2ebb0
Embed additional InfiniFrame setup logic into `InfiniFrameHostJs.h` a…
AnnaSasDev Apr 29, 2026
0f618d2
Embed InfiniFrame host message handling logic into `InfiniFrameHostJs…
AnnaSasDev Apr 29, 2026
dde4602
Refactor test setup: move `SetTitle` call to ensure consistent state …
AnnaSasDev Apr 29, 2026
258143f
Refactor InfiniFrame message handling: introduce `InteropGetCommand` …
AnnaSasDev Apr 29, 2026
c801a69
Add `simdutf` dependency to macOS and Linux platform builds
AnnaSasDev Apr 29, 2026
442fb36
Refactor workflow: expand framework matrix configuration for readability
AnnaSasDev Apr 29, 2026
bddac2e
Simplify workflow job naming in Windows Playwright configuration.
AnnaSasDev Apr 29, 2026
3918c56
Add `simdutf` include to `Embedded.h` for UTF-16 string handling.
AnnaSasDev Apr 29, 2026
c228441
Add `simdutf` include to `Embedded.h` for UTF-16 string handling.
AnnaSasDev Apr 29, 2026
ca0731d
Add `#pragma once` to `InfiniFrameHostJs.h` to ensure single inclusion.
AnnaSasDev Apr 29, 2026
64f6c43
Add `.idea/cmake.xml` to configure CMake profiles for Windows and Lin…
AnnaSasDev Apr 29, 2026
b3f372a
Refactor InfiniFrame messaging: introduce `HostMessaging` namespace, …
AnnaSasDev Apr 29, 2026
5e2e952
Refactor Windows Playwright workflow: replace `matrix.project` with `…
AnnaSasDev Apr 29, 2026
628ebd8
Refactor Playwright projects and workflows: enable incremental fronte…
AnnaSasDev Apr 29, 2026
45e3422
Refactor Linux scripts and Docker setup: update compose file referenc…
AnnaSasDev Apr 29, 2026
3e97fc2
Refactor Linux scripts and Docker setup: consolidate into `docker/inf…
AnnaSasDev Apr 29, 2026
31f8896
Update Docker Compose volumes for Linux services: rename shared volum…
AnnaSasDev Apr 29, 2026
54661f1
Refactor Docker Compose and CI workflows: update Linux compose file p…
AnnaSasDev Apr 29, 2026
2f7caec
Refactor InfiniFrame Linux setup: update script and config file paths…
AnnaSasDev Apr 29, 2026
9c030e3
Remove `InfiniFrame.Tools.Pack` project from solution filter.
AnnaSasDev Apr 29, 2026
fb2ee32
Add early return for ignored InteropEnvelope messages to optimize mes…
AnnaSasDev Apr 29, 2026
58c7f82
Fix typo in JavaScript interop method names (`InfiniFrame` to `infini…
AnnaSasDev Apr 29, 2026
cca4db4
Refactor tests: fix JavaScript interop method name casing, improve `G…
AnnaSasDev Apr 29, 2026
a4ea942
Refactor `InfiniFrameWebViewManager`: improve logging formatting, enh…
AnnaSasDev Apr 29, 2026
d022894
Remove unused `--framework` argument from Playwright testing workflow.
AnnaSasDev Apr 29, 2026
1a7530a
Refactor Windows Playwright workflow: rename matrix keys, update proj…
AnnaSasDev Apr 29, 2026
b781b2b
Potential fix for pull request finding 'CodeQL / Poor error handling:…
AnnaSasDev Apr 29, 2026
e795e4a
Potential fix for pull request finding 'CodeQL / Poor error handling:…
AnnaSasDev Apr 29, 2026
0b8952e
Potential fix for pull request finding 'CodeQL / Unused variable, imp…
AnnaSasDev Apr 29, 2026
3c8dfba
Remove redundant return statement in WebView message pump cancellatio…
AnnaSasDev Apr 29, 2026
c8c45cc
Add pending and finalize jobs to Windows Playwright workflow for impr…
AnnaSasDev Apr 29, 2026
bfec430
Remove redundant `[DisplayName]` attributes from test methods across …
AnnaSasDev Apr 29, 2026
c5be170
Potential fix for pull request finding 'CodeQL / Workflow does not co…
AnnaSasDev Apr 29, 2026
88fbca6
Add checkout steps to pending and final status jobs in Windows Playwr…
AnnaSasDev Apr 29, 2026
0913588
Add conditional `ref` and `fetch-depth` to checkout steps in Windows …
AnnaSasDev Apr 29, 2026
5e20717
Refactor Playwright workflows and project files: streamline frontend …
AnnaSasDev Apr 29, 2026
27f313d
Update Windows Playwright workflow: add `sourceFolder` for project co…
AnnaSasDev Apr 29, 2026
4f89303
Potential fix for pull request finding 'CodeQL / Poor error handling:…
AnnaSasDev Apr 29, 2026
5566c6a
Update Windows Playwright workflow: add .NET 8.0, 9.0, and 10.0 frame…
AnnaSasDev Apr 29, 2026
a83f69f
Refactor exception handling: reuse `IInfiniFrameWindow` service insta…
AnnaSasDev Apr 29, 2026
24d5508
Refactor `DisposeAsync` logic to improve exception handling and optim…
AnnaSasDev Apr 29, 2026
1f7f3cf
Remove `GlobalUnhandledExceptionHandler_RoutesToWindowAndStopsAfterDi…
AnnaSasDev Apr 29, 2026
74fdbf2
Refactor frontend build scripts and project files: add `npm ci` befor…
AnnaSasDev Apr 29, 2026
3b02e9f
Update Windows Playwright workflow: export `ACTIONS_RUNTIME_TOKEN` an…
AnnaSasDev Apr 29, 2026
000a463
Refactor frontend build logic: update build message in React project,…
AnnaSasDev Apr 29, 2026
dfe86b7
Update Windows Playwright workflow: replace solution-based builds wit…
AnnaSasDev Apr 29, 2026
2d10af5
Improve exception handling: safely invoke `IInfiniFrameWindow` in glo…
AnnaSasDev Apr 29, 2026
00d062a
Simplify Windows Playwright workflow: remove redundant `--project` fl…
AnnaSasDev Apr 29, 2026
d4f66d6
Run npm ci before frontend builds
AnnaSasDev Apr 29, 2026
02977db
Fix React frontend build path in test project: update WorkingDirector…
AnnaSasDev Apr 30, 2026
7c3b1ab
Refactor JavaScript embedding: split generated `InfiniFrameHostJs` in…
AnnaSasDev Apr 30, 2026
c5ca3b7
Fix `std::wstring` conversion: resize buffer before constructing stri…
AnnaSasDev Apr 30, 2026
ee0188a
Add CI condition to `npm ci` steps in React and Vue test project builds
AnnaSasDev Apr 30, 2026
8221b85
Update dependencies in Vue and React projects: bump versions for `vue…
AnnaSasDev Apr 30, 2026
4add698
Refactor Playwright tests: centralize DOMContentLoaded wait logic usi…
AnnaSasDev Apr 30, 2026
b89d546
Update Windows Playwright workflow: refine job-status logic for accur…
AnnaSasDev Apr 30, 2026
e5f34b6
Update InfiniFrame.Js dependencies: bump `jsdom` to 29.1.1, `@asamuza…
AnnaSasDev Apr 30, 2026
739f0f6
Add standard GET web message handling: Implement `StandardGetWebMessa…
AnnaSasDev Apr 30, 2026
4a3a5ff
Potential fix for pull request finding 'CodeQL / Generic catch clause'
AnnaSasDev Apr 30, 2026
eeb12dd
Merge branch 'JS' of https://github.com/InfiniLore/InfiniFrame into JS
AnnaSasDev Apr 30, 2026
92fcef8
Enhance message-passing APIs in InfiniFrame.js: Add `getRequest` and …
AnnaSasDev Apr 30, 2026
352b616
Remove `titleGet` message and related handlers: refactor tests and cl…
AnnaSasDev Apr 30, 2026
94af8b8
Update minified InfiniFrame.js: Regenerate minified file to reflect r…
AnnaSasDev Apr 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
src/InfiniFrame.Native/Dependencies/* linguist-vendored
src/InfiniFrame.Native/Dependencies/**/* linguist-vendored
src/InfiniFrame.Native/Dependencies/**/* linguist-vendored

*.sh text eol=lf
4 changes: 4 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,7 @@ updates:
directory: "/"
schedule:
interval: "weekly"
commit-message:
prefix: "Chore(deps): "
include: "scope"

57 changes: 56 additions & 1 deletion .github/scripts/bump_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import xml.etree.ElementTree as Et
from pathlib import Path
from typing import Final, Literal, Never
import json

# Resolve paths from the repository root: .github/scripts -> repo root is three levels up.
REPO_ROOT: Final[Path] = Path(__file__).parent.parent.parent
Expand All @@ -14,7 +15,6 @@
VERSION_PATTERN: Final[re.Pattern[str]] = re.compile(r"^\d+\.\d+\.\d+(-preview\.\d+)?$")
BumpPart = Literal["major", "minor", "patch", "preview"]


def fail(message: str) -> Never:
print(message)
raise SystemExit(1)
Expand Down Expand Up @@ -82,6 +82,60 @@ def update_cmake_version(cmake_path: Path, new_version: str) -> None:
fail("Error: Could not find InfiniFrame.Native version in CMakeLists.txt")
cmake_path.write_text(updated, encoding="utf-8")

def update_package_json_version(pkg_path: Path, new_version: str) -> None:
"""
Updates:
- package.json "version"
- optionally replaces version placeholders inside scripts
"""
data = json.loads(pkg_path.read_text(encoding="utf-8"))

# Update top-level version
if "version" in data:
data["version"] = new_version

# Optional: update version strings inside scripts
scripts = data.get("scripts", {})
for key, value in scripts.items():
if isinstance(value, str):
scripts[key] = _replace_version_in_string(value, new_version)

data["scripts"] = scripts

pkg_path.write_text(
json.dumps(data, indent=2, ensure_ascii=False) + "\n",
encoding="utf-8",
)

def _replace_version_in_string(text: str, new_version: str) -> str:
"""
Replace common version patterns inside arbitrary strings.
Extend this as needed per repo conventions.
"""
# Example patterns you might have in scripts:
# - --version 1.2.3
# - v1.2.3
# - 1.2.3-preview.4

text = re.sub(
r"\d+\.\d+\.\d+(?:-preview\.\d+)?",
new_version,
text,
)
return text

def update_all_package_json_files(repo_root: Path, new_version: str) -> None:
"""
Recursively updates all package.json files in the repository.
"""
for pkg_path in repo_root.rglob("package.json"):
# skip certain folders just in case
if "node_modules" in pkg_path.parts:
continue
if "InfiniFrame.Native" in pkg_path.parts:
continue

update_package_json_version(pkg_path, new_version)

def main() -> int:
if len(sys.argv) < 2:
Expand Down Expand Up @@ -122,6 +176,7 @@ def main() -> int:
version_elem.text = new_version
tree.write(FILE, encoding="utf-8", xml_declaration=True)
update_cmake_version(CMAKE_FILE, new_version)
update_all_package_json_files(REPO_ROOT, new_version)

print(f"Bumped version: {old_version} -> {new_version}")
print(new_version) # Output for GitHub Actions to capture
Expand Down
43 changes: 42 additions & 1 deletion .github/scripts/test_bump_version.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
#!/usr/bin/env python3
from __future__ import annotations

import json
import sys
import tempfile
from pathlib import Path

import pytest
Expand All @@ -10,7 +12,12 @@
if str(SCRIPT_DIR) not in sys.path:
sys.path.insert(0, str(SCRIPT_DIR))

from bump_version import bump, validate_version
from bump_version import (
bump,
validate_version,
update_package_json_version,
_replace_version_in_string,
)


@pytest.mark.parametrize(
Expand Down Expand Up @@ -49,3 +56,37 @@ def test_bump_unknown_part_raises_value_error() -> None:
with pytest.raises(ValueError):
# noinspection PyTypeChecker
bump("1.2.3", "banana")

def test_replace_version_in_string() -> None:
assert _replace_version_in_string(
"build --version 1.2.3",
"9.8.7",
) == "build --version 9.8.7"

assert _replace_version_in_string(
"tool v1.2.3-preview.4 run",
"0.0.1",
) == "tool v0.0.1 run"

def test_update_package_json_version_updates_version_and_scripts() -> None:
with tempfile.TemporaryDirectory() as tmp:
pkg_path = Path(tmp) / "package.json"

original = {
"name": "test",
"version": "1.0.0",
"scripts": {
"build": "echo 1.0.0",
"deploy": "echo deploying v1.0.0-preview.3",
},
}

pkg_path.write_text(json.dumps(original), encoding="utf-8")

update_package_json_version(pkg_path, "2.3.4")

updated = json.loads(pkg_path.read_text(encoding="utf-8"))

assert updated["version"] == "2.3.4"
assert updated["scripts"]["build"] == "echo 2.3.4"
assert updated["scripts"]["deploy"] == "echo deploying v2.3.4"
73 changes: 42 additions & 31 deletions .github/scripts/update_native_vendor_deps.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import json
import os
import urllib.request
import urllib.error
from pathlib import Path
from typing import Any

Expand Down Expand Up @@ -39,27 +40,31 @@ def download_file(url: str, destination: Path, token: str) -> None:
with urllib.request.urlopen(request, timeout=120) as response:
destination.write_bytes(response.read())


def get_latest_release(repo: str, token: str) -> tuple[str, dict[str, str]]:
def get_latest_release(repo: str, token: str) -> tuple[str | None, dict[str, str]]:
url = f"https://api.github.com/repos/{repo}/releases/latest"
payload = request_json(url, token)
try:
payload = request_json(url, token)
except urllib.error.HTTPError as e:
if e.code == 404:
# No releases → fallback mode
return None, {}
raise

tag = payload.get("tag_name")
if not isinstance(tag, str) or not tag:
raise RuntimeError(f"Missing tag_name for {repo}")
return None, {}

assets_payload = payload.get("assets", [])
if not isinstance(assets_payload, list):
raise RuntimeError(f"Unexpected assets payload for {repo}")

assets: dict[str, str] = {}
for asset in assets_payload:
if not isinstance(asset, dict):
continue
name = asset.get("name")
download_url = asset.get("browser_download_url")
if isinstance(name, str) and isinstance(download_url, str):
assets[name] = download_url

if isinstance(assets_payload, list):
for asset in assets_payload:
if not isinstance(asset, dict):
continue
name = asset.get("name")
download_url = asset.get("browser_download_url")
if isinstance(name, str) and isinstance(download_url, str):
assets[name] = download_url

return tag, assets

Expand Down Expand Up @@ -92,6 +97,10 @@ def update_manifest(manifest_path: Path, check_only: bool) -> int:

latest_tag, latest_assets = get_latest_release(repo, token)

# If no releases, stick to manifest tag (or empty)
if latest_tag is None:
latest_tag = current_tag or ""

has_missing_files = False
for entries in (assets, source_files, licenses):
for asset_entry in entries:
Expand All @@ -104,7 +113,8 @@ def update_manifest(manifest_path: Path, check_only: bool) -> int:
if has_missing_files:
break

needs_update = latest_tag != current_tag
has_release = latest_tag is not None and latest_tag != ""
needs_update = has_release and latest_tag != current_tag
needs_download = needs_update or has_missing_files

if not needs_download:
Expand All @@ -117,22 +127,23 @@ def update_manifest(manifest_path: Path, check_only: bool) -> int:
if check_only:
continue

for asset_entry in assets:
if not isinstance(asset_entry, dict):
raise RuntimeError(f"Library {name} has invalid asset entry")

asset_name = asset_entry.get("asset")
destination = asset_entry.get("destination")
if not isinstance(asset_name, str) or not isinstance(destination, str):
raise RuntimeError(f"Library {name} has invalid asset definition")

download_url = latest_assets.get(asset_name)
if not download_url:
raise RuntimeError(f"Asset '{asset_name}' not found in latest release for {repo}")

destination_path = REPO_ROOT / destination
print(f" downloading {asset_name} -> {destination}")
download_file(download_url, destination_path, token)
if latest_assets:
for asset_entry in assets:
if not isinstance(asset_entry, dict):
raise RuntimeError(f"Library {name} has invalid asset entry")

asset_name = asset_entry.get("asset")
destination = asset_entry.get("destination")
if not isinstance(asset_name, str) or not isinstance(destination, str):
raise RuntimeError(f"Library {name} has invalid asset definition")

download_url = latest_assets.get(asset_name)
if not download_url:
raise RuntimeError(f"Asset '{asset_name}' not found in latest release for {repo}")

destination_path = REPO_ROOT / destination
print(f" downloading {asset_name} -> {destination}")
download_file(download_url, destination_path, token)

for source_entry in source_files:
if not isinstance(source_entry, dict):
Expand Down
Loading
Loading