simple-module-cli 0.0.9__tar.gz → 0.0.10__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.
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/PKG-INFO +1 -1
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/pyproject.toml +1 -1
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/client_app/vite.config.ts +12 -1
- simple_module_cli-0.0.10/tests/test_cli_new_regressions.py +61 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/.gitignore +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/LICENSE +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/README.md +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/__init__.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/_env.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/app_project.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/case.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/catalog.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/cli.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/new.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/package_update.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/plugins.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/recipes.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/scaffolding.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/skills/README.md +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/skills/simple-module-cli/SKILL.md +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/skills/simple-module-conventions/SKILL.md +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/skills/simple-module-creating/SKILL.md +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/skills/simple-module-database/SKILL.md +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/skills/simple-module-doctor/SKILL.md +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/skills/simple-module-inertia-pages/SKILL.md +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/skills/simple-module-locales/SKILL.md +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/skills/simple-module-migrations/SKILL.md +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/skills/simple-module-registries/SKILL.md +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/skills/simple-module-testing/SKILL.md +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/skills_cmd.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/.env.example +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/.gitignore +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/Makefile +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/README.md.tpl +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/_optional/background_tasks/Makefile.snippet +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/_optional/background_tasks/docker-compose.yml +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/_optional/background_tasks/host.Dockerfile +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/_optional/background_tasks/run_worker.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/_optional/background_tasks/worker.Dockerfile +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/alembic.ini +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/client_app/app.tsx +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/client_app/main.tsx +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/client_app/package.json.tpl +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/client_app/pages/Error.tsx +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/client_app/pages.ts +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/client_app/styles.css +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/client_app/tsconfig.json +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/main.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/migrations/env.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/migrations/script.py.mako +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/migrations/versions/.gitkeep +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/pyproject.toml.tpl +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/templates/index.html +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/module/.github/workflows/ci.yml +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/module/.github/workflows/publish.yml.tpl +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/module/.gitignore +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/module/README.md.tpl +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/module/__PACKAGE__/__init__.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/module/__PACKAGE__/endpoints/__init__.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/module/__PACKAGE__/endpoints/api.py.tpl +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/module/__PACKAGE__/module.py.tpl +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/module/__PACKAGE__/pages/.gitkeep +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/module/__PACKAGE__/services.py.tpl +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/module/__PACKAGE__/settings.py.tpl +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/module/package.json.tpl +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/module/pyproject.toml.tpl +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/module/tests/test_module.py.tpl +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/module/tsconfig.json.tpl +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/workspace/.env.example +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/workspace/.gitignore +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/workspace/Makefile +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/workspace/README.md.tpl +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/workspace/package.json.tpl +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/workspace/pyproject.toml.tpl +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/wizard.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/tests/test_build_packaging.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/tests/test_cli_catalog.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/tests/test_cli_new.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/tests/test_cli_package_update.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/tests/test_cli_recipes.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/tests/test_cli_wizard.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/tests/test_no_framework_deps.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/tests/test_plugin_discovery.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/tests/test_scaffolding_host.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/tests/test_scaffolding_module.py +0 -0
- {simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/tests/test_skills_cmd.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: simple_module_cli
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.10
|
|
4
4
|
Summary: Standalone scaffolder for the SimpleModule framework — `sm new`, `sm create-module`, plugin host.
|
|
5
5
|
Project-URL: Homepage, https://github.com/antosubash/simple_module_python
|
|
6
6
|
Project-URL: Repository, https://github.com/antosubash/simple_module_python
|
|
@@ -35,14 +35,25 @@ const fsRoot = findNodeModulesRoot(__dirname);
|
|
|
35
35
|
// dev server can read files outside the host root, and in
|
|
36
36
|
// optimizeDeps.entries so its dependency scanner discovers bare imports
|
|
37
37
|
// from wheel-installed pages and pre-bundles them.
|
|
38
|
+
//
|
|
39
|
+
// We also collect each module's package.json (one level up from pages/,
|
|
40
|
+
// where Hatch's force-include drops it) so the dependency walk in
|
|
41
|
+
// `collectOptimizeIncludes` reaches packages a wheel-installed page imports
|
|
42
|
+
// directly (`sonner`, `lucide-react`, ...). Without this seed, Vite's
|
|
43
|
+
// pre-bundler never sees those bare specifiers and Node module resolution
|
|
44
|
+
// walks up from inside .venv/site-packages — never reaching
|
|
45
|
+
// host/client_app/node_modules.
|
|
38
46
|
const manifestPath = path.resolve(__dirname, 'modules.manifest.json');
|
|
39
47
|
const moduleFsAllow: string[] = [];
|
|
40
48
|
const moduleOptimizeEntries: string[] = [];
|
|
49
|
+
const modulePkgJsonPaths: string[] = [];
|
|
41
50
|
if (fs.existsSync(manifestPath)) {
|
|
42
51
|
const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8')) as Record<string, string>;
|
|
43
52
|
for (const pagesDir of Object.values(manifest)) {
|
|
44
53
|
moduleFsAllow.push(path.dirname(pagesDir));
|
|
45
54
|
moduleOptimizeEntries.push(path.join(pagesDir, '**/*.tsx'));
|
|
55
|
+
const modulePkgJson = path.join(path.dirname(pagesDir), 'package.json');
|
|
56
|
+
if (fs.existsSync(modulePkgJson)) modulePkgJsonPaths.push(modulePkgJson);
|
|
46
57
|
}
|
|
47
58
|
}
|
|
48
59
|
|
|
@@ -99,7 +110,7 @@ function collectOptimizeIncludes(): string[] {
|
|
|
99
110
|
'use-sync-external-store/shim/with-selector',
|
|
100
111
|
]);
|
|
101
112
|
const visited = new Set<string>();
|
|
102
|
-
const queue: string[] = [path.join(__dirname, 'package.json')];
|
|
113
|
+
const queue: string[] = [path.join(__dirname, 'package.json'), ...modulePkgJsonPaths];
|
|
103
114
|
while (queue.length > 0) {
|
|
104
115
|
const pkgJsonPath = queue.shift();
|
|
105
116
|
if (!pkgJsonPath || visited.has(pkgJsonPath)) continue;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"""Regression tests for ``sm new`` scaffold bugs filed against released wheels.
|
|
2
|
+
|
|
3
|
+
Each test pins a specific issue's repro so the bug can't sneak back in
|
|
4
|
+
without a CI failure pointing at the fix.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import json
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
|
|
12
|
+
from simple_module_cli.cli import app
|
|
13
|
+
from typer.testing import CliRunner
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def test_sm_new_flat_pins_inertia_react_to_v2(tmp_path: Path) -> None:
|
|
17
|
+
"""Issue #128: flat scaffold's root package.json must peer-match
|
|
18
|
+
@simple-module-py/ui's ``@inertiajs/react: ^2.0.0`` peer dep."""
|
|
19
|
+
runner = CliRunner()
|
|
20
|
+
target = tmp_path / "demo"
|
|
21
|
+
runner.invoke(
|
|
22
|
+
app,
|
|
23
|
+
["new", "demo", "--yes", "--flat", "--no-install", "--dest", str(target)],
|
|
24
|
+
)
|
|
25
|
+
data = json.loads((target / "package.json").read_text())
|
|
26
|
+
inertia = data.get("dependencies", {}).get("@inertiajs/react")
|
|
27
|
+
assert inertia is not None
|
|
28
|
+
assert inertia.startswith("^2."), f"expected ^2.x, got {inertia!r}"
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def test_sm_new_sample_module_pins_match_framework_version(tmp_path: Path) -> None:
|
|
32
|
+
"""Issue #126/#119: sample hello module must pin framework deps to the
|
|
33
|
+
actual published framework version, not the future ``>=1.0,<2.0`` range."""
|
|
34
|
+
from importlib.metadata import version
|
|
35
|
+
|
|
36
|
+
expected = version("simple_module_cli")
|
|
37
|
+
runner = CliRunner()
|
|
38
|
+
target = tmp_path / "demo"
|
|
39
|
+
runner.invoke(
|
|
40
|
+
app,
|
|
41
|
+
["new", "demo", "--yes", "--db", "sqlite", "--no-install", "--dest", str(target)],
|
|
42
|
+
)
|
|
43
|
+
text = (target / "modules" / "hello" / "pyproject.toml").read_text()
|
|
44
|
+
for pkg in ("simple_module_core", "simple_module_db", "simple_module_hosting"):
|
|
45
|
+
assert f"{pkg}=={expected}" in text, f"{pkg} should be pinned to =={expected}"
|
|
46
|
+
# Dev pin: simple_module_test was the original >=0.1,<1.0 unsatisfiable case.
|
|
47
|
+
assert f"simple_module_test=={expected}" in text
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def test_sm_new_sample_module_seeds_static_dist_placeholder(tmp_path: Path) -> None:
|
|
51
|
+
"""Issue #127: hatch's force-include resolves at uv-sync time. A fresh
|
|
52
|
+
scaffold must ship an empty ``static/dist/`` so the build doesn't fail
|
|
53
|
+
before vite has had a chance to run."""
|
|
54
|
+
runner = CliRunner()
|
|
55
|
+
target = tmp_path / "demo"
|
|
56
|
+
runner.invoke(
|
|
57
|
+
app,
|
|
58
|
+
["new", "demo", "--yes", "--db", "sqlite", "--no-install", "--dest", str(target)],
|
|
59
|
+
)
|
|
60
|
+
static_dist = target / "modules" / "hello" / "hello" / "static" / "dist"
|
|
61
|
+
assert static_dist.is_dir(), "static/dist/ must exist for hatch force-include"
|
|
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
|
{simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/.env.example
RENAMED
|
File without changes
|
{simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/.gitignore
RENAMED
|
File without changes
|
{simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/Makefile
RENAMED
|
File without changes
|
{simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/README.md.tpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/alembic.ini
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
|
{simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/host/main.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
|
{simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/module/.gitignore
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
|
{simple_module_cli-0.0.9 → simple_module_cli-0.0.10}/simple_module_cli/templates/workspace/Makefile
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
|