simple-module-cli 0.0.9__tar.gz → 0.0.11__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 (86) hide show
  1. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/PKG-INFO +1 -1
  2. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/pyproject.toml +1 -1
  3. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/host/client_app/vite.config.ts +12 -1
  4. simple_module_cli-0.0.11/tests/test_cli_new_regressions.py +61 -0
  5. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/.gitignore +0 -0
  6. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/LICENSE +0 -0
  7. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/README.md +0 -0
  8. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/__init__.py +0 -0
  9. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/_env.py +0 -0
  10. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/app_project.py +0 -0
  11. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/case.py +0 -0
  12. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/catalog.py +0 -0
  13. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/cli.py +0 -0
  14. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/new.py +0 -0
  15. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/package_update.py +0 -0
  16. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/plugins.py +0 -0
  17. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/recipes.py +0 -0
  18. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/scaffolding.py +0 -0
  19. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/skills/README.md +0 -0
  20. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/skills/simple-module-cli/SKILL.md +0 -0
  21. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/skills/simple-module-conventions/SKILL.md +0 -0
  22. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/skills/simple-module-creating/SKILL.md +0 -0
  23. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/skills/simple-module-database/SKILL.md +0 -0
  24. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/skills/simple-module-doctor/SKILL.md +0 -0
  25. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/skills/simple-module-inertia-pages/SKILL.md +0 -0
  26. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/skills/simple-module-locales/SKILL.md +0 -0
  27. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/skills/simple-module-migrations/SKILL.md +0 -0
  28. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/skills/simple-module-registries/SKILL.md +0 -0
  29. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/skills/simple-module-testing/SKILL.md +0 -0
  30. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/skills_cmd.py +0 -0
  31. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/host/.env.example +0 -0
  32. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/host/.gitignore +0 -0
  33. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/host/Makefile +0 -0
  34. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/host/README.md.tpl +0 -0
  35. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/host/_optional/background_tasks/Makefile.snippet +0 -0
  36. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/host/_optional/background_tasks/docker-compose.yml +0 -0
  37. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/host/_optional/background_tasks/host.Dockerfile +0 -0
  38. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/host/_optional/background_tasks/run_worker.py +0 -0
  39. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/host/_optional/background_tasks/worker.Dockerfile +0 -0
  40. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/host/alembic.ini +0 -0
  41. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/host/client_app/app.tsx +0 -0
  42. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/host/client_app/main.tsx +0 -0
  43. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/host/client_app/package.json.tpl +0 -0
  44. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/host/client_app/pages/Error.tsx +0 -0
  45. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/host/client_app/pages.ts +0 -0
  46. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/host/client_app/styles.css +0 -0
  47. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/host/client_app/tsconfig.json +0 -0
  48. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/host/main.py +0 -0
  49. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/host/migrations/env.py +0 -0
  50. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/host/migrations/script.py.mako +0 -0
  51. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/host/migrations/versions/.gitkeep +0 -0
  52. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/host/pyproject.toml.tpl +0 -0
  53. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/host/templates/index.html +0 -0
  54. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/module/.github/workflows/ci.yml +0 -0
  55. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/module/.github/workflows/publish.yml.tpl +0 -0
  56. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/module/.gitignore +0 -0
  57. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/module/README.md.tpl +0 -0
  58. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/module/__PACKAGE__/__init__.py +0 -0
  59. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/module/__PACKAGE__/endpoints/__init__.py +0 -0
  60. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/module/__PACKAGE__/endpoints/api.py.tpl +0 -0
  61. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/module/__PACKAGE__/module.py.tpl +0 -0
  62. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/module/__PACKAGE__/pages/.gitkeep +0 -0
  63. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/module/__PACKAGE__/services.py.tpl +0 -0
  64. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/module/__PACKAGE__/settings.py.tpl +0 -0
  65. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/module/package.json.tpl +0 -0
  66. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/module/pyproject.toml.tpl +0 -0
  67. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/module/tests/test_module.py.tpl +0 -0
  68. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/module/tsconfig.json.tpl +0 -0
  69. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/workspace/.env.example +0 -0
  70. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/workspace/.gitignore +0 -0
  71. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/workspace/Makefile +0 -0
  72. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/workspace/README.md.tpl +0 -0
  73. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/workspace/package.json.tpl +0 -0
  74. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/templates/workspace/pyproject.toml.tpl +0 -0
  75. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/simple_module_cli/wizard.py +0 -0
  76. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/tests/test_build_packaging.py +0 -0
  77. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/tests/test_cli_catalog.py +0 -0
  78. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/tests/test_cli_new.py +0 -0
  79. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/tests/test_cli_package_update.py +0 -0
  80. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/tests/test_cli_recipes.py +0 -0
  81. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/tests/test_cli_wizard.py +0 -0
  82. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/tests/test_no_framework_deps.py +0 -0
  83. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/tests/test_plugin_discovery.py +0 -0
  84. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/tests/test_scaffolding_host.py +0 -0
  85. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/tests/test_scaffolding_module.py +0 -0
  86. {simple_module_cli-0.0.9 → simple_module_cli-0.0.11}/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.9
3
+ Version: 0.0.11
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "simple_module_cli"
3
- version = "0.0.9"
3
+ version = "0.0.11"
4
4
  description = "Standalone scaffolder for the SimpleModule framework — `sm new`, `sm create-module`, plugin host."
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -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"