skeleton-framework 0.1.1__tar.gz → 0.1.3__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 (112) hide show
  1. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/PKG-INFO +30 -13
  2. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/README.md +29 -12
  3. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/pyproject.toml +1 -1
  4. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/cli.py +5 -0
  5. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/client.py +3 -1
  6. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/commands/client/init.py +1 -0
  7. skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/config.py +153 -0
  8. skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/copy.py +279 -0
  9. {skeleton_framework-0.1.1/skeleton/infrastructure/bootstrap/src/templates/app/frontend/src → skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles/react}/main.tsx +1 -1
  10. skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles/react/skeleton-config.json +30 -0
  11. skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles/react/skeleton-dependencies.json +21 -0
  12. {skeleton_framework-0.1.1/skeleton/infrastructure/bootstrap/src/templates/app/frontend → skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles}/skeleton-config.json +1 -1
  13. skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles/solid/main.tsx +20 -0
  14. skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles/solid/skeleton-config.json +30 -0
  15. skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles/solid/skeleton-dependencies.json +22 -0
  16. skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles/solid/tsconfig.json +93 -0
  17. skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles/vue/main.ts +20 -0
  18. skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles/vue/skeleton-config.json +30 -0
  19. skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles/vue/skeleton-dependencies.json +21 -0
  20. skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles/vue/tsconfig.json +91 -0
  21. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/common/src/config.py +3 -3
  22. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/main.py +1 -1
  23. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/main.py +1 -1
  24. skeleton_framework-0.1.3/skeleton/packages/.skeleton/skeleton-cli-1.0.0.tgz +0 -0
  25. skeleton_framework-0.1.3/skeleton/packages/.skeleton/skeleton-webpack-1.0.0.tgz +0 -0
  26. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton_framework.egg-info/PKG-INFO +30 -13
  27. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton_framework.egg-info/SOURCES.txt +13 -3
  28. skeleton_framework-0.1.1/skeleton/infrastructure/bootstrap/src/config.py +0 -54
  29. skeleton_framework-0.1.1/skeleton/infrastructure/bootstrap/src/copy.py +0 -56
  30. skeleton_framework-0.1.1/skeleton/packages/.skeleton/skeleton-cli-1.0.0.tgz +0 -0
  31. skeleton_framework-0.1.1/skeleton/packages/.skeleton/skeleton-webpack-1.0.0.tgz +0 -0
  32. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/LICENSE +0 -0
  33. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/setup.cfg +0 -0
  34. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/__init__.py +0 -0
  35. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/__init__.py +0 -0
  36. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/__init__.py +0 -0
  37. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/__init__.py +0 -0
  38. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/commands/__init__.py +0 -0
  39. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/commands/client/__init__.py +0 -0
  40. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/commands/client/install.py +0 -0
  41. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/commands/dev/__init__.py +0 -0
  42. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/commands/dev/build.py +0 -0
  43. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/commands/dev/init.py +0 -0
  44. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/commands/dev/install.py +0 -0
  45. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/commands/dev/pack.py +0 -0
  46. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/load.py +0 -0
  47. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/app/backend/requirements.txt +0 -0
  48. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/app/backend/routes.json +0 -0
  49. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/app/backend/src/__init__.py +0 -0
  50. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/app/backend/src/main.py +0 -0
  51. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/app/frontend/package.json +0 -0
  52. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/app/frontend/src/index.html +0 -0
  53. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/app/frontend/src/static/css/styles.css +0 -0
  54. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/app/frontend/src/static/img/skeleton.png +0 -0
  55. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/app/frontend/src/static/js/script.js +0 -0
  56. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/config/.gitignore +0 -0
  57. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/config/skeleton-dependencies.json +0 -0
  58. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/config/skeleton-layout.json +0 -0
  59. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/config/skeleton-schemas.json +0 -0
  60. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/bootstrap/src/templates/config/skeleton-servers.json +0 -0
  61. {skeleton_framework-0.1.1/skeleton/infrastructure/bootstrap/src/templates/app/frontend → skeleton_framework-0.1.3/skeleton/infrastructure/bootstrap/src/templates/profiles/react}/tsconfig.json +0 -0
  62. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/common/__init__.py +0 -0
  63. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/common/config.json +0 -0
  64. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/common/src/__init__.py +0 -0
  65. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/common/src/constants.py +0 -0
  66. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/common/src/context.py +0 -0
  67. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/common/src/env.py +0 -0
  68. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/common/src/layout.py +0 -0
  69. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/common/src/loader.py +0 -0
  70. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/common/src/repository.py +0 -0
  71. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/common/src/utils.py +0 -0
  72. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/__init__.py +0 -0
  73. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/settings/proxy.json +0 -0
  74. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/settings/services.json +0 -0
  75. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/__init__.py +0 -0
  76. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/app.py +0 -0
  77. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/client.py +0 -0
  78. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/config.py +0 -0
  79. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/context.py +0 -0
  80. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/headers.py +0 -0
  81. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/lifespan.py +0 -0
  82. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/loader.py +0 -0
  83. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/logging.py +0 -0
  84. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/parser.py +0 -0
  85. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/registry.py +0 -0
  86. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/reverseproxy.py +0 -0
  87. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/router.py +0 -0
  88. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/schemas.py +0 -0
  89. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/service.py +0 -0
  90. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/utils.py +0 -0
  91. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/gateway/src/validation.py +0 -0
  92. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/layout.json +0 -0
  93. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/__init__.py +0 -0
  94. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/__init__.py +0 -0
  95. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/actions.py +0 -0
  96. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/browser.py +0 -0
  97. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/cmd.py +0 -0
  98. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/command.py +0 -0
  99. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/frontend.py +0 -0
  100. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/gateway.py +0 -0
  101. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/hook.py +0 -0
  102. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/packages.py +0 -0
  103. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/parser.py +0 -0
  104. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/process.py +0 -0
  105. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/services.py +0 -0
  106. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/utils.py +0 -0
  107. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/infrastructure/runners/src/validation.py +0 -0
  108. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton/root.py +0 -0
  109. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton_framework.egg-info/dependency_links.txt +0 -0
  110. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton_framework.egg-info/entry_points.txt +0 -0
  111. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton_framework.egg-info/requires.txt +0 -0
  112. {skeleton_framework-0.1.1 → skeleton_framework-0.1.3}/skeleton_framework.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skeleton-framework
3
- Version: 0.1.1
3
+ Version: 0.1.3
4
4
  Summary: A full-stack app framework: Python orchestration + FastAPI + WebPack frontend.
5
5
  Author-email: lambdadotjoburg <lambdadotjoburg@gmail.com>
6
6
  License-Expression: LicenseRef-Proprietary
@@ -68,9 +68,9 @@ Install Skeleton from PyPI:
68
68
  python -m pip install skeleton-framework
69
69
  ```
70
70
 
71
- ![client-venv](docs/gif/client/00_client_venv.gif)
71
+ ![client-venv](https://raw.githubusercontent.com/lambdadotjoburg/skeleton/main/docs/gif/client/00_client_venv.gif)
72
72
 
73
- ![client-pip-install-skeleton-framework](docs/gif/client/01_client_pip_install_skeleton_framework.gif)
73
+ ![client-pip-install-skeleton-framework](https://raw.githubusercontent.com/lambdadotjoburg/skeleton/main/docs/gif/client/01_client_pip_install_skeleton_framework.gif)
74
74
 
75
75
  The installed Python distribution provides the `skeleton` command.
76
76
 
@@ -89,7 +89,7 @@ Configure the project, initialize its files, and install its dependencies:
89
89
  skeleton --quickstart
90
90
  ```
91
91
 
92
- ![client-venv](docs/gif/client/04_client_quickstart.gif)
92
+ ![client-venv](https://raw.githubusercontent.com/lambdadotjoburg/skeleton/main/docs/gif/client/04_client_quickstart.gif)
93
93
 
94
94
  This combines the configuration, initialization, and installation stages.
95
95
 
@@ -107,11 +107,28 @@ Skeleton also exposes the individual stages when you want to configure the appli
107
107
 
108
108
  ### 1. Generate configuration
109
109
 
110
+ Generate the project configuration files before initialization.
111
+ Skeleton supports React and SolidJS frontend profiles.
112
+
113
+ Select the desired frontend framework using the `--config` command:
114
+
115
+ ```bash
116
+ skeleton --config react
117
+ ```
118
+
119
+ Or select SolidJS:
120
+
121
+ ```bash
122
+ skeleton --config solid
123
+ ```
124
+
125
+ If no framework is specified, React is selected by default:
126
+
110
127
  ```bash
111
128
  skeleton --config
112
129
  ```
113
130
 
114
- ![client-config-init](docs/gif/client/02_client_config_init.gif)
131
+ ![client-config-init](https://raw.githubusercontent.com/lambdadotjoburg/skeleton/main/docs/gif/client/02_client_config_init.gif)
115
132
 
116
133
  This generates the project's configuration files:
117
134
 
@@ -129,7 +146,7 @@ Review and customize these files before initialization if necessary.
129
146
  skeleton --init
130
147
  ```
131
148
 
132
- ![client-config-init](docs/gif/client/02_client_config_init.gif)
149
+ ![client-config-init](https://raw.githubusercontent.com/lambdadotjoburg/skeleton/main/docs/gif/client/02_client_config_init.gif)
133
150
 
134
151
  Initialization creates the configured frontend and backend structure from the framework's templates, prepares dependency manifests, and configures the local frontend tooling packages.
135
152
 
@@ -139,7 +156,7 @@ Initialization creates the configured frontend and backend structure from the fr
139
156
  skeleton --install
140
157
  ```
141
158
 
142
- ![client-install](docs/gif/client/03_client_install.gif)
159
+ ![client-install](https://raw.githubusercontent.com/lambdadotjoburg/skeleton/main/docs/gif/client/03_client_install.gif)
143
160
 
144
161
  This installs frontend dependencies using npm and backend Python dependencies into the backend's `.venv` environment.
145
162
 
@@ -155,7 +172,7 @@ You can also explicitly select services:
155
172
  skeleton --start frontend gateway --open
156
173
  ```
157
174
 
158
- ![client-start](docs/gif/client/05_client_start.gif)
175
+ ![client-start](https://raw.githubusercontent.com/lambdadotjoburg/skeleton/main/docs/gif/client/05_client_start.gif)
159
176
 
160
177
  The selected services and runtime options determine which processes are started.
161
178
 
@@ -321,9 +338,9 @@ These commands are intended for contributors working in the Skeleton framework s
321
338
 
322
339
  To get the skeleton framework onto your local machine for development, clone:
323
340
 
324
- [https://github.com/lambdadotjoburg/skeleton.git](https://github.com/lambdadotjoburg/skeleton.git)
341
+ [Skeleton Github repository](https://github.com/lambdadotjoburg/skeleton.git)
325
342
 
326
- ![dev-clone](docs/gif/dev/00_dev_clone.gif)
343
+ ![dev-clone](https://raw.githubusercontent.com/lambdadotjoburg/skeleton/main/docs/gif/dev/00_dev_clone.gif)
327
344
 
328
345
  ### Initialize the framework development environment
329
346
 
@@ -331,7 +348,7 @@ To get the skeleton framework onto your local machine for development, clone:
331
348
  python run.py --bootstrap
332
349
  ```
333
350
 
334
- ![dev-bootstrap](docs/gif/dev/01_dev_bootstrap.gif)
351
+ ![dev-bootstrap](https://raw.githubusercontent.com/lambdadotjoburg/skeleton/main/docs/gif/dev/01_dev_bootstrap.gif)
335
352
 
336
353
  This combines `--init` and `--install` to initialize and install the framework's development environment.
337
354
 
@@ -341,7 +358,7 @@ This combines `--init` and `--install` to initialize and install the framework's
341
358
  python run.py --dist
342
359
  ```
343
360
 
344
- ![dev-dist](docs/gif/dev/02_dev_dist.gif)
361
+ ![dev-dist](https://raw.githubusercontent.com/lambdadotjoburg/skeleton/main/docs/gif/dev/02_dev_dist.gif)
345
362
 
346
363
  This combines `--pack` and `--build`.
347
364
 
@@ -400,7 +417,7 @@ source .venv/bin/activate
400
417
  From the test project directory:
401
418
 
402
419
  ```bash
403
- python -m pip install --force-reinstall ../framework/dist/skeleton_framework-0.1.0-py3-none-any.whl
420
+ python -m pip install --force-reinstall ../framework/dist/skeleton_framework-0.1.3-py3-none-any.whl
404
421
  ```
405
422
 
406
423
  Adjust the relative path, wheel filename & version to match your framework checkout and build output.
@@ -50,9 +50,9 @@ Install Skeleton from PyPI:
50
50
  python -m pip install skeleton-framework
51
51
  ```
52
52
 
53
- ![client-venv](docs/gif/client/00_client_venv.gif)
53
+ ![client-venv](https://raw.githubusercontent.com/lambdadotjoburg/skeleton/main/docs/gif/client/00_client_venv.gif)
54
54
 
55
- ![client-pip-install-skeleton-framework](docs/gif/client/01_client_pip_install_skeleton_framework.gif)
55
+ ![client-pip-install-skeleton-framework](https://raw.githubusercontent.com/lambdadotjoburg/skeleton/main/docs/gif/client/01_client_pip_install_skeleton_framework.gif)
56
56
 
57
57
  The installed Python distribution provides the `skeleton` command.
58
58
 
@@ -71,7 +71,7 @@ Configure the project, initialize its files, and install its dependencies:
71
71
  skeleton --quickstart
72
72
  ```
73
73
 
74
- ![client-venv](docs/gif/client/04_client_quickstart.gif)
74
+ ![client-venv](https://raw.githubusercontent.com/lambdadotjoburg/skeleton/main/docs/gif/client/04_client_quickstart.gif)
75
75
 
76
76
  This combines the configuration, initialization, and installation stages.
77
77
 
@@ -89,11 +89,28 @@ Skeleton also exposes the individual stages when you want to configure the appli
89
89
 
90
90
  ### 1. Generate configuration
91
91
 
92
+ Generate the project configuration files before initialization.
93
+ Skeleton supports React and SolidJS frontend profiles.
94
+
95
+ Select the desired frontend framework using the `--config` command:
96
+
97
+ ```bash
98
+ skeleton --config react
99
+ ```
100
+
101
+ Or select SolidJS:
102
+
103
+ ```bash
104
+ skeleton --config solid
105
+ ```
106
+
107
+ If no framework is specified, React is selected by default:
108
+
92
109
  ```bash
93
110
  skeleton --config
94
111
  ```
95
112
 
96
- ![client-config-init](docs/gif/client/02_client_config_init.gif)
113
+ ![client-config-init](https://raw.githubusercontent.com/lambdadotjoburg/skeleton/main/docs/gif/client/02_client_config_init.gif)
97
114
 
98
115
  This generates the project's configuration files:
99
116
 
@@ -111,7 +128,7 @@ Review and customize these files before initialization if necessary.
111
128
  skeleton --init
112
129
  ```
113
130
 
114
- ![client-config-init](docs/gif/client/02_client_config_init.gif)
131
+ ![client-config-init](https://raw.githubusercontent.com/lambdadotjoburg/skeleton/main/docs/gif/client/02_client_config_init.gif)
115
132
 
116
133
  Initialization creates the configured frontend and backend structure from the framework's templates, prepares dependency manifests, and configures the local frontend tooling packages.
117
134
 
@@ -121,7 +138,7 @@ Initialization creates the configured frontend and backend structure from the fr
121
138
  skeleton --install
122
139
  ```
123
140
 
124
- ![client-install](docs/gif/client/03_client_install.gif)
141
+ ![client-install](https://raw.githubusercontent.com/lambdadotjoburg/skeleton/main/docs/gif/client/03_client_install.gif)
125
142
 
126
143
  This installs frontend dependencies using npm and backend Python dependencies into the backend's `.venv` environment.
127
144
 
@@ -137,7 +154,7 @@ You can also explicitly select services:
137
154
  skeleton --start frontend gateway --open
138
155
  ```
139
156
 
140
- ![client-start](docs/gif/client/05_client_start.gif)
157
+ ![client-start](https://raw.githubusercontent.com/lambdadotjoburg/skeleton/main/docs/gif/client/05_client_start.gif)
141
158
 
142
159
  The selected services and runtime options determine which processes are started.
143
160
 
@@ -303,9 +320,9 @@ These commands are intended for contributors working in the Skeleton framework s
303
320
 
304
321
  To get the skeleton framework onto your local machine for development, clone:
305
322
 
306
- [https://github.com/lambdadotjoburg/skeleton.git](https://github.com/lambdadotjoburg/skeleton.git)
323
+ [Skeleton Github repository](https://github.com/lambdadotjoburg/skeleton.git)
307
324
 
308
- ![dev-clone](docs/gif/dev/00_dev_clone.gif)
325
+ ![dev-clone](https://raw.githubusercontent.com/lambdadotjoburg/skeleton/main/docs/gif/dev/00_dev_clone.gif)
309
326
 
310
327
  ### Initialize the framework development environment
311
328
 
@@ -313,7 +330,7 @@ To get the skeleton framework onto your local machine for development, clone:
313
330
  python run.py --bootstrap
314
331
  ```
315
332
 
316
- ![dev-bootstrap](docs/gif/dev/01_dev_bootstrap.gif)
333
+ ![dev-bootstrap](https://raw.githubusercontent.com/lambdadotjoburg/skeleton/main/docs/gif/dev/01_dev_bootstrap.gif)
317
334
 
318
335
  This combines `--init` and `--install` to initialize and install the framework's development environment.
319
336
 
@@ -323,7 +340,7 @@ This combines `--init` and `--install` to initialize and install the framework's
323
340
  python run.py --dist
324
341
  ```
325
342
 
326
- ![dev-dist](docs/gif/dev/02_dev_dist.gif)
343
+ ![dev-dist](https://raw.githubusercontent.com/lambdadotjoburg/skeleton/main/docs/gif/dev/02_dev_dist.gif)
327
344
 
328
345
  This combines `--pack` and `--build`.
329
346
 
@@ -382,7 +399,7 @@ source .venv/bin/activate
382
399
  From the test project directory:
383
400
 
384
401
  ```bash
385
- python -m pip install --force-reinstall ../framework/dist/skeleton_framework-0.1.0-py3-none-any.whl
402
+ python -m pip install --force-reinstall ../framework/dist/skeleton_framework-0.1.3-py3-none-any.whl
386
403
  ```
387
404
 
388
405
  Adjust the relative path, wheel filename & version to match your framework checkout and build output.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "skeleton-framework"
7
- version = "0.1.1"
7
+ version = "0.1.3"
8
8
  description = "A full-stack app framework: Python orchestration + FastAPI + WebPack frontend."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -27,10 +27,15 @@ from pathlib import Path
27
27
  # ============================================================
28
28
 
29
29
  # skeleton --config
30
+ # skeleton --config react
31
+ # skeleton --config solid
32
+ # skeleton --config vue
33
+
30
34
  # skeleton --init
31
35
  # skeleton --install
32
36
  # skeleton --start
33
37
  # skeleton --start frontend gateway --open
38
+
34
39
  # skeleton --quickstart
35
40
 
36
41
  # skeleton --serve
@@ -176,11 +176,13 @@ def main(
176
176
 
177
177
  from skeleton.infrastructure.bootstrap.src.config import config
178
178
 
179
+ framework = args[1] if len(args) > 1 else None
180
+
179
181
  config(
180
182
  framework_root=framework_root,
181
183
  project_root=project_root,
184
+ framework=framework,
182
185
  )
183
-
184
186
  return 0
185
187
 
186
188
  if command == "--init":
@@ -362,6 +362,7 @@ def init(
362
362
  target=project_root,
363
363
  frontend=layout["frontend"],
364
364
  backend=layout["backend"],
365
+ framework_root=framework_root,
365
366
  )
366
367
 
367
368
  # ---------------------------------------------------------
@@ -0,0 +1,153 @@
1
+ import json, shutil
2
+ from pathlib import Path
3
+
4
+ SUPPORTED_FRAMEWORKS = {"react", "solid"} # add vue
5
+
6
+ def read_json(path: Path) -> dict:
7
+ with path.open("r", encoding="utf-8") as file:
8
+ data = json.load(file)
9
+
10
+ if not isinstance(data, dict):
11
+ raise ValueError(f"Expected a JSON object: {path}")
12
+
13
+ return data
14
+
15
+
16
+ def write_json(path: Path, data: dict) -> None:
17
+ with path.open("w", encoding="utf-8") as file:
18
+ json.dump(data, file, indent=4)
19
+ file.write("\n")
20
+
21
+
22
+ def config(
23
+ framework_root: Path,
24
+ project_root: Path,
25
+ framework: str | None = None,
26
+ ) -> None:
27
+
28
+ templates_root = (
29
+ framework_root
30
+ / "skeleton"
31
+ / "infrastructure"
32
+ / "bootstrap"
33
+ / "src"
34
+ / "templates"
35
+ )
36
+
37
+ config_templates = templates_root / "config"
38
+ profiles_root = templates_root / "profiles"
39
+
40
+ if not config_templates.is_dir():
41
+ raise FileNotFoundError(
42
+ f"Configuration templates not found: {config_templates}"
43
+ )
44
+
45
+ if not profiles_root.is_dir():
46
+ raise FileNotFoundError(
47
+ f"Framework profiles not found: {profiles_root}"
48
+ )
49
+
50
+ if framework is not None:
51
+ framework = framework.strip().lower()
52
+
53
+ if framework not in SUPPORTED_FRAMEWORKS:
54
+ supported = ", ".join(sorted(SUPPORTED_FRAMEWORKS))
55
+ raise ValueError(
56
+ f"Unsupported frontend framework: {framework!r}. "
57
+ f"Choose one of: {supported}"
58
+ )
59
+
60
+ project_root = project_root.resolve()
61
+ project_root.mkdir(parents=True, exist_ok=True)
62
+
63
+ # ---------------------------------------------------------
64
+ # Copy shared project configuration.
65
+ # ---------------------------------------------------------
66
+
67
+ for template in config_templates.iterdir():
68
+ destination = project_root / template.name
69
+
70
+ if destination.exists():
71
+ print(f"INFO: Preserving existing file: {destination}")
72
+ continue
73
+
74
+ if template.is_dir():
75
+ shutil.copytree(template, destination)
76
+ else:
77
+ shutil.copy2(template, destination)
78
+
79
+ print(f"INFO: Created: {destination}")
80
+
81
+ # ---------------------------------------------------------
82
+ # Determine the selected framework.
83
+ # ---------------------------------------------------------
84
+
85
+ frontend_config_path = project_root / "skeleton-config.json"
86
+ dependencies_path = project_root / "skeleton-dependencies.json"
87
+
88
+ if framework is not None:
89
+ selected_framework = framework
90
+
91
+ elif frontend_config_path.is_file():
92
+ existing_config = read_json(frontend_config_path)
93
+ selected_framework = existing_config.get("framework", "react")
94
+
95
+ if (
96
+ not isinstance(selected_framework, str)
97
+ or selected_framework not in SUPPORTED_FRAMEWORKS
98
+ ):
99
+ raise ValueError(
100
+ f"Invalid framework in {frontend_config_path}: "
101
+ f"{selected_framework!r}"
102
+ )
103
+
104
+ else:
105
+ selected_framework = "react"
106
+
107
+ profile = profiles_root / selected_framework
108
+
109
+ if not profile.is_dir():
110
+ raise FileNotFoundError(
111
+ f"Framework profile not found: {profile}"
112
+ )
113
+
114
+ profile_config_path = profile / "skeleton-config.json"
115
+ profile_dependencies_path = profile / "skeleton-dependencies.json"
116
+
117
+ for path in (profile_config_path, profile_dependencies_path):
118
+ if not path.is_file():
119
+ raise FileNotFoundError(
120
+ f"Required framework profile file not found: {path}"
121
+ )
122
+
123
+ # Read and validate both profile files before writing either.
124
+ frontend_config = read_json(profile_config_path)
125
+ dependencies = read_json(profile_dependencies_path)
126
+
127
+ # Ensure the selected profile identifies itself correctly.
128
+ frontend_config["framework"] = selected_framework
129
+
130
+ # ---------------------------------------------------------
131
+ # Generate the root-level framework configuration.
132
+ # ---------------------------------------------------------
133
+
134
+ # Explicit selection resets both framework-managed files
135
+ # to the chosen profile defaults.
136
+ #
137
+ # Without an explicit selection, preserve existing files
138
+ # and create only files that are missing.
139
+
140
+ if framework is not None or not frontend_config_path.exists():
141
+ write_json(frontend_config_path, frontend_config)
142
+ print(f"INFO: Created/updated: {frontend_config_path}")
143
+ else:
144
+ print(f"INFO: Preserving existing file: {frontend_config_path}")
145
+
146
+ if framework is not None or not dependencies_path.exists():
147
+ write_json(dependencies_path, dependencies)
148
+ print(f"INFO: Created/updated: {dependencies_path}")
149
+ else:
150
+ print(f"INFO: Preserving existing file: {dependencies_path}")
151
+
152
+ print(f"INFO: Selected frontend framework: {selected_framework}")
153
+ print("INFO: Configuration complete")