wexample-wex-addon-dev-javascript 0.0.58__py3-none-any.whl → 0.1.1__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.
@@ -74,11 +74,10 @@ class JavascriptPackageJsonFile(AppDependenciesConfigFileMixin, JsonFile):
74
74
  def get_dependencies_versions(
75
75
  self, optional: bool = False, group: str = "dev"
76
76
  ) -> dict[str, str]:
77
- return (
78
- self.read_config()
79
- .search(path="dependencies")
80
- .get_dict_or_default(default={})
81
- )
77
+ config = self.read_config()
78
+ deps = config.search(path="dependencies").get_dict_or_default(default={})
79
+ peer = config.search(path="peerDependencies").get_dict_or_default(default={})
80
+ return {**deps, **peer}
82
81
 
83
82
  def _apply_default_publish_config(self, content: dict) -> None:
84
83
  content.setdefault("type", "module")
File without changes
@@ -0,0 +1,58 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from wexample_wex_core.const.globals import COMMAND_TYPE_SERVICE
6
+ from wexample_wex_core.decorator.command import command
7
+
8
+ if TYPE_CHECKING:
9
+ from wexample_wex_addon_app.service.app_service import AppService
10
+ from wexample_wex_core.context.execution_context import ExecutionContext
11
+
12
+
13
+ @command(
14
+ type=COMMAND_TYPE_SERVICE,
15
+ description="Patch vite.config.ts to allow all hosts (needed behind a reverse proxy)",
16
+ )
17
+ def vite__service__install(
18
+ context: ExecutionContext,
19
+ service: AppService,
20
+ ) -> None:
21
+ import re
22
+
23
+ app_path = service.app_workdir.get_path()
24
+
25
+ for config_name in ["vite.config.ts", "vite.config.js"]:
26
+ config_path = app_path / config_name
27
+ if not config_path.exists():
28
+ continue
29
+
30
+ content = config_path.read_text()
31
+
32
+ if "allowedHosts" in content:
33
+ context.io.log(f" {config_name}: allowedHosts already set, skipping")
34
+ return
35
+
36
+ # defineConfig() → defineConfig({ vite: { server: { allowedHosts: true } } })
37
+ # defineConfig({ ... }) → add server.allowedHosts: true inside vite: {}
38
+ if "defineConfig()" in content:
39
+ content = content.replace(
40
+ "defineConfig()",
41
+ "defineConfig({ vite: { server: { allowedHosts: true } } })",
42
+ )
43
+ elif re.search(r"defineConfig\(\s*\{", content):
44
+ content = re.sub(
45
+ r"(defineConfig\(\s*\{)",
46
+ r"\1 vite: { server: { allowedHosts: true } },",
47
+ content,
48
+ count=1,
49
+ )
50
+ else:
51
+ context.io.log(f" {config_name}: unrecognized format, skipping")
52
+ return
53
+
54
+ config_path.write_text(content)
55
+ context.io.log(f" ✓ {config_name}: allowedHosts patched")
56
+ return
57
+
58
+ context.io.log(" No vite.config.ts/js found, skipping allowedHosts patch")
@@ -0,0 +1,42 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from wexample_wex_core.const.globals import COMMAND_TYPE_SERVICE
6
+ from wexample_wex_core.decorator.command import command
7
+
8
+ if TYPE_CHECKING:
9
+ from wexample_app.response.boolean_response import BooleanResponse
10
+ from wexample_wex_addon_app.service.app_service import AppService
11
+ from wexample_wex_core.context.execution_context import ExecutionContext
12
+
13
+
14
+ @command(
15
+ type=COMMAND_TYPE_SERVICE, description="Check if the Vite dev server is responding"
16
+ )
17
+ def vite__service__ready(
18
+ context: ExecutionContext,
19
+ service: AppService,
20
+ ) -> BooleanResponse:
21
+ import subprocess
22
+
23
+ from wexample_app.response.boolean_response import BooleanResponse
24
+
25
+ runtime = service.app_workdir.get_runtime_config()
26
+ app_project_name = runtime.search("app.project_name").get_str()
27
+ container_name = f"{app_project_name}_vite"
28
+ port = service.manifest.get("vars", {}).get("VITE_PORT", {}).get("default", "8080")
29
+
30
+ result = subprocess.run(
31
+ [
32
+ "docker",
33
+ "exec",
34
+ container_name,
35
+ "bun",
36
+ "-e",
37
+ f"await fetch('http://localhost:{port}')",
38
+ ],
39
+ capture_output=True,
40
+ )
41
+
42
+ return BooleanResponse(kernel=context.kernel, content=result.returncode == 0)
@@ -0,0 +1,26 @@
1
+ services:
2
+
3
+ vite:
4
+ container_name: ${APP_PROJECT_NAME}_vite
5
+ image: oven/bun:latest
6
+ working_dir: /app
7
+ command: sh -c "bun install && bun run dev --host"
8
+ environment:
9
+ VIRTUAL_HOST: ${APP_DOMAINS_STRING}
10
+ VIRTUAL_PORT: ${VITE_PORT:-8080}
11
+ volumes:
12
+ - ${APP_PATH}:/app
13
+ - vite_node_modules:/app/node_modules
14
+ healthcheck:
15
+ test: ["CMD", "bun", "-e", "await fetch('http://localhost:8080')"]
16
+ interval: 10s
17
+ timeout: 5s
18
+ retries: 10
19
+ start_period: 60s
20
+ networks:
21
+ wex_net:
22
+ aliases:
23
+ - vite
24
+
25
+ volumes:
26
+ vite_node_modules:
@@ -0,0 +1,10 @@
1
+ name: vite
2
+ tags:
3
+ - frontend
4
+ - javascript
5
+ docker:
6
+ compose: docker/docker-compose.yml
7
+ vars:
8
+ VITE_PORT:
9
+ default: "8080"
10
+ description: "Port exposed by the Vite dev server"
@@ -76,6 +76,49 @@ class JavascriptPackageWorkdir(JavascriptWorkdir):
76
76
 
77
77
  return raw_value
78
78
 
79
+ def _classify_version_bump(self, last_tag: str) -> str:
80
+ from wexample_helpers.const.types import (
81
+ UPGRADE_TYPE_MAJOR,
82
+ UPGRADE_TYPE_MINOR,
83
+ )
84
+ from wexample_helpers.helpers.shell import shell_run
85
+ from wexample_helpers_git.helpers.git import git_has_changes_since_tag
86
+
87
+ if not git_has_changes_since_tag(last_tag, "src", cwd=self.get_path()):
88
+ return UPGRADE_TYPE_MINOR
89
+
90
+ # Check if all changes in src/ are whitespace-only — safe to treat as patch
91
+ result = shell_run(
92
+ ["git", "diff", "-w", "--ignore-blank-lines", last_tag, "--", "src/"],
93
+ cwd=self.get_path(),
94
+ check=False,
95
+ capture=True,
96
+ )
97
+ if not result.stdout.strip():
98
+ self.log("Only whitespace changes in src/, treating as patch.")
99
+ return UPGRADE_TYPE_MINOR
100
+
101
+ # Check if all changed files in src/ are non-TypeScript — cannot break the TS API
102
+ changed_files = shell_run(
103
+ ["git", "diff", "--name-only", last_tag, "--", "src/"],
104
+ cwd=self.get_path(),
105
+ check=False,
106
+ capture=True,
107
+ )
108
+ ts_files = [
109
+ f
110
+ for f in changed_files.stdout.splitlines()
111
+ if f.endswith(".ts") or f.endswith(".tsx")
112
+ ]
113
+ if not ts_files:
114
+ self.log("Only non-TypeScript files changed in src/, treating as minor.")
115
+ return UPGRADE_TYPE_INTERMEDIATE
116
+
117
+ return UPGRADE_TYPE_MAJOR
118
+
119
+ def _get_critical_directories(self) -> list[str]:
120
+ return ["src"]
121
+
79
122
  def _get_readme_content(self) -> ReadmeContentConfigValue | None:
80
123
  from wexample_wex_addon_dev_javascript.config_value.javascript_package_readme_config_value import (
81
124
  JavascriptPackageReadmeContentConfigValue,
@@ -83,7 +126,7 @@ class JavascriptPackageWorkdir(JavascriptWorkdir):
83
126
 
84
127
  return JavascriptPackageReadmeContentConfigValue(workdir=self)
85
128
 
86
- def _get_suite_package_workdir_class(self) -> type[FrameworkPackageSuiteWorkdir]:
129
+ def _get_suite_workdir_class(self) -> type[FrameworkPackageSuiteWorkdir]:
87
130
  from wexample_wex_addon_dev_javascript.workdir.javascript_packages_suite_workdir import (
88
131
  JavascriptPackagesSuiteWorkdir,
89
132
  )
@@ -91,7 +134,14 @@ class JavascriptPackageWorkdir(JavascriptWorkdir):
91
134
  return JavascriptPackagesSuiteWorkdir
92
135
 
93
136
  def _publish(self, force: bool = False) -> None:
94
- """Create a git tag (vX.Y.Z) to trigger Trusted Publisher workflow."""
137
+ """Push a git tag to the deployment remote to trigger a CI/CD publication workflow."""
138
+ from wexample_helpers_git.helpers.git import git_push_tag
139
+
140
+ remote = self._get_deployment_remote_name()
141
+ if not remote:
142
+ self.log("No deployment remote configured, skipping publication.")
143
+ return
144
+
95
145
  tag = f"v{self.get_project_version()}"
96
146
  cwd = self.get_path()
97
147
 
@@ -100,5 +150,61 @@ class JavascriptPackageWorkdir(JavascriptWorkdir):
100
150
  else:
101
151
  git_tag_annotated(tag, f"Release {tag}", cwd=cwd, inherit_stdio=True)
102
152
 
103
- # Uses git repo to deploy packages (tag push triggers GitHub Actions publication).
104
- self.push_to_deployment_remote()
153
+ git_push_tag(tag, cwd=cwd, remote=remote, inherit_stdio=True)
154
+
155
+ def _wait_for_registry(self) -> None:
156
+ """Poll the configured npm registry until the current version is available (max 20 min).
157
+
158
+ Fetches the package manifest and checks for the version in 'versions' — compatible
159
+ with both public npm and private registries (e.g. GitLab) that don't expose
160
+ per-version URLs.
161
+ """
162
+ import json
163
+ import time
164
+ import urllib.error
165
+ import urllib.request
166
+
167
+ package = self.get_project_name()
168
+ version = self.get_project_version()
169
+
170
+ registry_base = (
171
+ self.get_runtime_config().search("npm.registry_url").get_str_or_none()
172
+ )
173
+ token = self.get_runtime_config().search("npm.api_token").get_str_or_none()
174
+
175
+ encoded = package.replace("/", "%2F")
176
+ base = (registry_base or "https://registry.npmjs.org").rstrip("/")
177
+ url = f"{base}/{encoded}"
178
+
179
+ max_attempts = 40
180
+ delay = 30.0
181
+
182
+ self.log(f"Waiting for {package}@{version} to appear on registry…")
183
+
184
+ for attempt in range(1, max_attempts + 1):
185
+ try:
186
+ req = urllib.request.Request(url)
187
+ if token:
188
+ req.add_header("Authorization", f"Bearer {token}")
189
+ with urllib.request.urlopen(req, timeout=10) as resp:
190
+ if resp.status == 200:
191
+ data = json.loads(resp.read())
192
+ if version in data.get("versions", {}):
193
+ self.success(f"{package}@{version} is available.")
194
+ return
195
+ except urllib.error.HTTPError as e:
196
+ if e.code != 404:
197
+ raise
198
+ except Exception:
199
+ pass
200
+
201
+ self.log(
202
+ f"Not yet available (attempt {attempt}/{max_attempts}), "
203
+ f"retrying in {int(delay)}s…"
204
+ )
205
+ time.sleep(delay)
206
+
207
+ raise RuntimeError(
208
+ f"Timed out waiting for {package}@{version} on registry after "
209
+ f"{max_attempts * int(delay) // 60} minutes."
210
+ )
@@ -0,0 +1,169 @@
1
+ Metadata-Version: 2.1
2
+ Name: wexample-wex-addon-dev-javascript
3
+ Version: 0.1.1
4
+ Summary: Python dev addon for wex
5
+ Author-Email: weeger <contact@wexample.com>
6
+ License: MIT
7
+ Classifier: Programming Language :: Python :: 3
8
+ Classifier: License :: OSI Approved :: MIT License
9
+ Classifier: Operating System :: OS Independent
10
+ Project-URL: homepage, https://github.com/wexample/python-wex-dev-python
11
+ Requires-Python: >=3.10
12
+ Requires-Dist: attrs>=23.1.0
13
+ Requires-Dist: cattrs>=23.1.0
14
+ Requires-Dist: wexample-filestate-javascript>=0.1.0
15
+ Requires-Dist: wexample-wex-addon-app>=1.1.0
16
+ Provides-Extra: dev
17
+ Requires-Dist: pytest; extra == "dev"
18
+ Requires-Dist: pytest-cov; extra == "dev"
19
+ Description-Content-Type: text/markdown
20
+
21
+ # wex_addon_dev_javascript
22
+
23
+ Version: 0.1.1
24
+
25
+ Python dev addon for wex
26
+
27
+ ## Table of Contents
28
+
29
+ - [Tests](#tests)
30
+ - [Suite Integration](#suite-integration)
31
+ - [Dependencies](#dependencies)
32
+ - [Versioning](#versioning)
33
+ - [License](#license)
34
+ - [Suite Integration](#suite-integration)
35
+ - [Suite Signature](#suite-signature)
36
+ - [Roadmap](#roadmap)
37
+ - [Status Compatibility](#status-compatibility)
38
+ - [Useful Links](#useful-links)
39
+ - [Migration Notes](#migration-notes)
40
+
41
+ ## Tests
42
+
43
+ This project uses `pytest` for testing and `pytest-cov` for code coverage analysis.
44
+
45
+ ### Installation
46
+
47
+ First, install the required testing dependencies:
48
+ ```bash
49
+ .venv/bin/python -m pip install pytest pytest-cov
50
+ ```
51
+
52
+ ### Basic Usage
53
+
54
+ Run all tests with coverage:
55
+ ```bash
56
+ .venv/bin/python -m pytest --cov --cov-report=html
57
+ ```
58
+
59
+ ### Common Commands
60
+ ```bash
61
+ # Run tests with coverage for a specific module
62
+ .venv/bin/python -m pytest --cov=your_module
63
+
64
+ # Show which lines are not covered
65
+ .venv/bin/python -m pytest --cov=your_module --cov-report=term-missing
66
+
67
+ # Generate an HTML coverage report
68
+ .venv/bin/python -m pytest --cov=your_module --cov-report=html
69
+
70
+ # Combine terminal and HTML reports
71
+ .venv/bin/python -m pytest --cov=your_module --cov-report=term-missing --cov-report=html
72
+
73
+ # Run specific test file with coverage
74
+ .venv/bin/python -m pytest tests/test_file.py --cov=your_module --cov-report=term-missing
75
+ ```
76
+
77
+ ### Viewing HTML Reports
78
+
79
+ After generating an HTML report, open `htmlcov/index.html` in your browser to view detailed line-by-line coverage information.
80
+
81
+ ### Coverage Threshold
82
+
83
+ To enforce a minimum coverage percentage:
84
+ ```bash
85
+ .venv/bin/python -m pytest --cov=your_module --cov-fail-under=80
86
+ ```
87
+
88
+ This will cause the test suite to fail if coverage drops below 80%.
89
+
90
+ ## Integration in the Suite
91
+
92
+ This package is part of the Wexample Suite — a collection of high-quality, modular tools designed to work seamlessly together across multiple languages and environments.
93
+
94
+ ### Related Packages
95
+
96
+ The suite includes packages for configuration management, file handling, prompts, and more. Each package can be used independently or as part of the integrated suite.
97
+
98
+ Visit the [Wexample Suite documentation](https://docs.wexample.com) for the complete package ecosystem.
99
+
100
+ ## Dependencies
101
+
102
+ - attrs: >=23.1.0
103
+ - cattrs: >=23.1.0
104
+ - wexample-filestate-javascript: >=0.1.0
105
+ - wexample-wex-addon-app: >=1.1.0
106
+
107
+ ## Versioning & Compatibility Policy
108
+
109
+ Wexample packages follow **Semantic Versioning** (SemVer):
110
+
111
+ - **MAJOR**: Breaking changes
112
+ - **MINOR**: New features, backward compatible
113
+ - **PATCH**: Bug fixes, backward compatible
114
+
115
+ We maintain backward compatibility within major versions and provide clear migration guides for breaking changes.
116
+
117
+ ## License
118
+
119
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
120
+
121
+ Free to use in both personal and commercial projects.
122
+
123
+ ## Integration in the Suite
124
+
125
+ This package is part of the Wexample Suite — a collection of high-quality, modular tools designed to work seamlessly together across multiple languages and environments.
126
+
127
+ ### Related Packages
128
+
129
+ The suite includes packages for configuration management, file handling, prompts, and more. Each package can be used independently or as part of the integrated suite.
130
+
131
+ Visit the [Wexample Suite documentation](https://docs.wexample.com) for the complete package ecosystem.
132
+
133
+ # About us
134
+
135
+ [Wexample](https://wexample.com) stands as a cornerstone of the digital ecosystem — a collective of seasoned engineers, researchers, and creators driven by a relentless pursuit of technological excellence. More than a media platform, it has grown into a vibrant community where innovation meets craftsmanship, and where every line of code reflects a commitment to clarity, durability, and shared intelligence.
136
+
137
+ This packages suite embodies this spirit. Trusted by professionals and enthusiasts alike, it delivers a consistent, high-quality foundation for modern development — open, elegant, and battle-tested. Its reputation is built on years of collaboration, refinement, and rigorous attention to detail, making it a natural choice for those who demand both robustness and beauty in their tools.
138
+
139
+ Wexample cultivates a culture of mastery. Each package, each contribution carries the mark of a community that values precision, ethics, and innovation — a community proud to shape the future of digital craftsmanship.
140
+
141
+ ## Known Limitations & Roadmap
142
+
143
+ Current limitations and planned features are tracked in the GitHub issues.
144
+
145
+ See the [project roadmap](https://github.com/wexample/python-wex_addon_dev_javascript/issues) for upcoming features and improvements.
146
+
147
+ ## Status & Compatibility
148
+
149
+ **Maturity**: Production-ready
150
+
151
+ **Python Support**: >=3.10
152
+
153
+ **OS Support**: Linux, macOS, Windows
154
+
155
+ **Status**: Actively maintained
156
+
157
+ ## Useful Links
158
+
159
+ - **Homepage**: https://github.com/wexample/python-wex-addon-dev-javascript
160
+ - **Documentation**: [docs.wexample.com](https://docs.wexample.com)
161
+ - **Issue Tracker**: https://github.com/wexample/python-wex-addon-dev-javascript/issues
162
+ - **Discussions**: https://github.com/wexample/python-wex-addon-dev-javascript/discussions
163
+ - **PyPI**: [pypi.org/project/wex_addon_dev_javascript](https://pypi.org/project/wex_addon_dev_javascript/)
164
+
165
+ ## Migration Notes
166
+
167
+ When upgrading between major versions, refer to the migration guides in the documentation.
168
+
169
+ Breaking changes are clearly documented with upgrade paths and examples.
@@ -0,0 +1,28 @@
1
+ wexample_wex_addon_dev_javascript-0.1.1.dist-info/METADATA,sha256=cdAIfCAtUlFaE3tr5LtY-_ecWej56ZNrIN4c-VVIT4c,6147
2
+ wexample_wex_addon_dev_javascript-0.1.1.dist-info/WHEEL,sha256=Z36eTX6lG3PITRleSd5hAZHCcz52yg3c0JQVxKBbLW0,90
3
+ wexample_wex_addon_dev_javascript-0.1.1.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
4
+ wexample_wex_addon_dev_javascript/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ wexample_wex_addon_dev_javascript/__pycache__/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ wexample_wex_addon_dev_javascript/config_value/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ wexample_wex_addon_dev_javascript/config_value/javascript_package_readme_config_value.py,sha256=6r-4ZhTm39LvJxMhoq3-_RRKRv2KNKSqkCv8xbh8T7c,449
8
+ wexample_wex_addon_dev_javascript/file/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
9
+ wexample_wex_addon_dev_javascript/file/javascript_package_json_file.py,sha256=j01MkT5HRUlrlDtTC-QsPsPVzkqQPNK6WyAB7GAwWI4,4325
10
+ wexample_wex_addon_dev_javascript/file/javascript_tsconfig_json_file.py,sha256=VXetEhBlPNgcsW28Oicnrn83n8xSLMKOEublU7s67-4,1423
11
+ wexample_wex_addon_dev_javascript/javascript_addon_manager.py,sha256=Sjr0CEtNtF3211j1lMtg-pw56zd6unCGNIY7nScddpI,180
12
+ wexample_wex_addon_dev_javascript/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
+ wexample_wex_addon_dev_javascript/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
+ wexample_wex_addon_dev_javascript/resources/package_publish.yml,sha256=Omw0Ww4I7jsi2uLSNApRR-Ujt6M_56IsXDyDT7hVncc,421
15
+ wexample_wex_addon_dev_javascript/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
+ wexample_wex_addon_dev_javascript/services/vite/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
+ wexample_wex_addon_dev_javascript/services/vite/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
+ wexample_wex_addon_dev_javascript/services/vite/commands/service/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
+ wexample_wex_addon_dev_javascript/services/vite/commands/service/install.py,sha256=TzFGnZ-KlvXOuiyKP7TyklQykAdZjT39b52I4PlpMks,1949
20
+ wexample_wex_addon_dev_javascript/services/vite/commands/service/ready.py,sha256=74CsRbtoOYFBnsxz1dDxnFn2zJaP8MVXGZqRG-3Jy-U,1319
21
+ wexample_wex_addon_dev_javascript/services/vite/docker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
+ wexample_wex_addon_dev_javascript/services/vite/docker/docker-compose.yml,sha256=Xy6h-qnh1vJWObBssie7vZNTN6ibryRrrpszuwgg6ck,612
23
+ wexample_wex_addon_dev_javascript/services/vite/service.yml,sha256=8mFPv49QbKA3klHFbNK73QOB7ryy38zFeLiQB3gfDys,184
24
+ wexample_wex_addon_dev_javascript/workdir/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
+ wexample_wex_addon_dev_javascript/workdir/javascript_package_workdir.py,sha256=_6PZgdGO39DofyP_ETXyU6CnNm5J4EzDtlbfKkeWJGk,7826
26
+ wexample_wex_addon_dev_javascript/workdir/javascript_packages_suite_workdir.py,sha256=l9zHC5-1v8yPBdZGS7Ibxp3iklI-czXkRuPxALbz4Gk,855
27
+ wexample_wex_addon_dev_javascript/workdir/javascript_workdir.py,sha256=AeDEF34sE7SQKiRqWQEaOjKBZDx0CsbzfngRrqPVSFA,5174
28
+ wexample_wex_addon_dev_javascript-0.1.1.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: pdm-backend (2.4.7)
2
+ Generator: pdm-backend (2.4.8)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,107 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: wexample-wex-addon-dev-javascript
3
- Version: 0.0.58
4
- Summary: Python dev addon for wex
5
- Author-Email: weeger <contact@wexample.com>
6
- License: MIT
7
- Classifier: Programming Language :: Python :: 3
8
- Classifier: License :: OSI Approved :: MIT License
9
- Classifier: Operating System :: OS Independent
10
- Project-URL: homepage, https://github.com/wexample/python-wex-dev-python
11
- Requires-Python: >=3.10
12
- Requires-Dist: attrs>=23.1.0
13
- Requires-Dist: cattrs>=23.1.0
14
- Requires-Dist: wexample-filestate-javascript==0.0.15
15
- Requires-Dist: wexample-wex-addon-app==0.0.56
16
- Provides-Extra: dev
17
- Requires-Dist: pytest; extra == "dev"
18
- Requires-Dist: pytest-cov; extra == "dev"
19
- Description-Content-Type: text/markdown
20
-
21
- # wexample-wex-addon-dev-javascript
22
-
23
- Version: 0.0.58
24
-
25
- Python dev addon for wex
26
-
27
- ## Table of Contents
28
-
29
- - [Status Compatibility](#status-compatibility)
30
- - [Tests](#tests)
31
- - [Roadmap](#roadmap)
32
- - [Useful Links](#useful-links)
33
-
34
-
35
- ## Status & Compatibility
36
-
37
- **Maturity**: Production-ready
38
-
39
- **Python Support**: >=3.10
40
-
41
- **OS Support**: Linux, macOS, Windows
42
-
43
- **Status**: Actively maintained
44
-
45
- ## Tests
46
-
47
- This project uses `pytest` for testing and `pytest-cov` for code coverage analysis.
48
-
49
- ### Installation
50
-
51
- First, install the required testing dependencies:
52
- ```bash
53
- .venv/bin/python -m pip install pytest pytest-cov
54
- ```
55
-
56
- ### Basic Usage
57
-
58
- Run all tests with coverage:
59
- ```bash
60
- .venv/bin/python -m pytest --cov --cov-report=html
61
- ```
62
-
63
- ### Common Commands
64
- ```bash
65
- # Run tests with coverage for a specific module
66
- .venv/bin/python -m pytest --cov=your_module
67
-
68
- # Show which lines are not covered
69
- .venv/bin/python -m pytest --cov=your_module --cov-report=term-missing
70
-
71
- # Generate an HTML coverage report
72
- .venv/bin/python -m pytest --cov=your_module --cov-report=html
73
-
74
- # Combine terminal and HTML reports
75
- .venv/bin/python -m pytest --cov=your_module --cov-report=term-missing --cov-report=html
76
-
77
- # Run specific test file with coverage
78
- .venv/bin/python -m pytest tests/test_file.py --cov=your_module --cov-report=term-missing
79
- ```
80
-
81
- ### Viewing HTML Reports
82
-
83
- After generating an HTML report, open `htmlcov/index.html` in your browser to view detailed line-by-line coverage information.
84
-
85
- ### Coverage Threshold
86
-
87
- To enforce a minimum coverage percentage:
88
- ```bash
89
- .venv/bin/python -m pytest --cov=your_module --cov-fail-under=80
90
- ```
91
-
92
- This will cause the test suite to fail if coverage drops below 80%.
93
-
94
- ## Known Limitations & Roadmap
95
-
96
- Current limitations and planned features are tracked in the GitHub issues.
97
-
98
- See the [project roadmap](https://github.com/wexample/python-wex_addon_dev_javascript/issues) for upcoming features and improvements.
99
-
100
- ## Useful Links
101
-
102
- - **Homepage**: https://github.com/wexample/python-wex-addon-dev-javascript
103
- - **Documentation**: [docs.wexample.com](https://docs.wexample.com)
104
- - **Issue Tracker**: https://github.com/wexample/python-wex-addon-dev-javascript/issues
105
- - **Discussions**: https://github.com/wexample/python-wex-addon-dev-javascript/discussions
106
- - **PyPI**: [pypi.org/project/wexample-wex-addon-dev-javascript](https://pypi.org/project/wexample-wex-addon-dev-javascript/)
107
-
@@ -1,19 +0,0 @@
1
- wexample_wex_addon_dev_javascript-0.0.58.dist-info/METADATA,sha256=F4ngGGun6kwjXLY70L0YJ7J-enHgIF99ceHuf96mtaw,3095
2
- wexample_wex_addon_dev_javascript-0.0.58.dist-info/WHEEL,sha256=Wb0ASbVj8JvWHpOiIpPi7ucfIgJeCi__PzivviEAQFc,90
3
- wexample_wex_addon_dev_javascript-0.0.58.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
4
- wexample_wex_addon_dev_javascript/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- wexample_wex_addon_dev_javascript/__pycache__/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- wexample_wex_addon_dev_javascript/config_value/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- wexample_wex_addon_dev_javascript/config_value/javascript_package_readme_config_value.py,sha256=6r-4ZhTm39LvJxMhoq3-_RRKRv2KNKSqkCv8xbh8T7c,449
8
- wexample_wex_addon_dev_javascript/file/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
9
- wexample_wex_addon_dev_javascript/file/javascript_package_json_file.py,sha256=DuTxUTxADbfgYpuyVpaTHlVzD-GfU7X1OiKAn2VRjZo,4233
10
- wexample_wex_addon_dev_javascript/file/javascript_tsconfig_json_file.py,sha256=VXetEhBlPNgcsW28Oicnrn83n8xSLMKOEublU7s67-4,1423
11
- wexample_wex_addon_dev_javascript/javascript_addon_manager.py,sha256=Sjr0CEtNtF3211j1lMtg-pw56zd6unCGNIY7nScddpI,180
12
- wexample_wex_addon_dev_javascript/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- wexample_wex_addon_dev_javascript/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
- wexample_wex_addon_dev_javascript/resources/package_publish.yml,sha256=Omw0Ww4I7jsi2uLSNApRR-Ujt6M_56IsXDyDT7hVncc,421
15
- wexample_wex_addon_dev_javascript/workdir/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- wexample_wex_addon_dev_javascript/workdir/javascript_package_workdir.py,sha256=gCenhCy3yWQO84qWYLoDJxX6ABKJzq84awb_ukuG96o,3924
17
- wexample_wex_addon_dev_javascript/workdir/javascript_packages_suite_workdir.py,sha256=l9zHC5-1v8yPBdZGS7Ibxp3iklI-czXkRuPxALbz4Gk,855
18
- wexample_wex_addon_dev_javascript/workdir/javascript_workdir.py,sha256=AeDEF34sE7SQKiRqWQEaOjKBZDx0CsbzfngRrqPVSFA,5174
19
- wexample_wex_addon_dev_javascript-0.0.58.dist-info/RECORD,,