clapp-pm 1.0.18__py3-none-any.whl → 1.0.19__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.
- {clapp_pm-1.0.18.data → clapp_pm-1.0.19.data}/data/version.json +1 -1
- {clapp_pm-1.0.18.dist-info → clapp_pm-1.0.19.dist-info}/METADATA +1 -1
- {clapp_pm-1.0.18.dist-info → clapp_pm-1.0.19.dist-info}/RECORD +23 -14
- {clapp_pm-1.0.18.dist-info → clapp_pm-1.0.19.dist-info}/top_level.txt +3 -0
- cli_commands.py +5 -1
- docs/developer_guide.md +361 -0
- main.py +25 -16
- manifest_schema.py +20 -5
- manifest_validator.py +3 -3
- package_runner.py +134 -34
- package_signing.py +47 -269
- templates/dart/manifest.json +11 -0
- templates/lua/manifest.json +11 -0
- templates/python/README.md +51 -0
- templates/python/main.py +55 -0
- templates/python/manifest.json +11 -0
- test-app/README.md +51 -0
- test-app/main.py +55 -0
- test-app/manifest.json +15 -0
- version.py +1 -1
- {clapp_pm-1.0.18.dist-info → clapp_pm-1.0.19.dist-info}/WHEEL +0 -0
- {clapp_pm-1.0.18.dist-info → clapp_pm-1.0.19.dist-info}/entry_points.txt +0 -0
- {clapp_pm-1.0.18.dist-info → clapp_pm-1.0.19.dist-info}/licenses/LICENSE +0 -0
@@ -2,26 +2,26 @@ cache_manager.py,sha256=HdQ3vnZO_YP0vyotzjP5wozltVNgkJAxrvYFXhGLGCI,13287
|
|
2
2
|
check_env.py,sha256=9O8CrdWGcxd_WBV5bsAAZG9iAaiO-nGYDYY-gYZ9G3M,4132
|
3
3
|
clapp_core.py,sha256=5tkzt7J4GKSv7Chv5Zoe9N0dv_sWlYGqYxmIn3dhEPY,1764
|
4
4
|
clean_command.py,sha256=nmzitkdNo0Ovgi-tGPUxa9mkAIFzwEzGNaTm82MUdvw,6806
|
5
|
-
cli_commands.py,sha256=
|
5
|
+
cli_commands.py,sha256=CLKimHefiMjXzBfS4wHiG1tj7C54BpwVIlVU_fDjRqI,12740
|
6
6
|
dependency_resolver.py,sha256=OyzWOW45OWTr8BX0gcy5fFbk9qIVBP9JQyMtXrKPmEM,24499
|
7
7
|
doctor_command.py,sha256=8Tv_em4mp-ibaDPXli6uyhYV--Fb6lHyDnnS2S0_d7c,7654
|
8
8
|
info_command.py,sha256=b74Pl1-x_PSezALx-lS3FkEcVNTF7a9McTKk5XTDhjM,5629
|
9
9
|
install_command.py,sha256=1Ogy_4nOsnLXzoUBys9yeLf5jKkGv9C40wuGZo2COC0,9445
|
10
10
|
installer.py,sha256=EkQ5Z1Cq_Z5u_Ssv2Nc8hryI5E97x4D1QVjSqEHe0dE,10619
|
11
11
|
list_command.py,sha256=qbeocvrg2eXRklxbYS3audQhYHGXTlMBk_tNh1cMxd0,8391
|
12
|
-
main.py,sha256=
|
13
|
-
manifest_schema.py,sha256=
|
14
|
-
manifest_validator.py,sha256=
|
12
|
+
main.py,sha256=uf2-LzBBFIwIiyg1kcyZG4J1B9f5U33VHieBXu1uLi8,23889
|
13
|
+
manifest_schema.py,sha256=qR6dIpYL1zwAJmrij05gkgE_urN3qVamoUi2BgR7Lv4,2801
|
14
|
+
manifest_validator.py,sha256=JW0mETHDQCSMhodZ5sntr5KPU8T5LYv4IiVoAp4zOIY,8092
|
15
15
|
package_registry.py,sha256=Rco15cvz-6lpCEDdCzwGZNCKtvVhlFIsEPy-WFAESMM,4233
|
16
|
-
package_runner.py,sha256=
|
17
|
-
package_signing.py,sha256=
|
16
|
+
package_runner.py,sha256=GqLPlQRxh7g3bDgGDSVpmHdeRXaP5f6s8kp8QVnw5LM,5783
|
17
|
+
package_signing.py,sha256=ModMAzLk08rkI6zd8QKhyCH5BFbB-7dy8pwqKYatFQo,4579
|
18
18
|
post_install_hint.py,sha256=wjMPCgRurZiGu6hv_se-XA36KqBCdeYdRCD1q7FrJzQ,4918
|
19
19
|
publish_command.py,sha256=P05AFbu_mxcc1yAiwShN5Yi9PX1o_7TFXD1mowJcqJE,8589
|
20
20
|
remote_registry.py,sha256=rPBIM_ESXUt0br5cARQ4YbzUoTda0G4e1KGzfyYMbpQ,8235
|
21
21
|
smart_search.py,sha256=R5O5CDXqlQc-N-6R6D5k36_-arCB-wnKfmWr5zMYWUI,15741
|
22
22
|
uninstall_command.py,sha256=rQYbZ-XMw8Xxw1fmgGdDaBQmgBGqyJ_rTBZkvEV5HV0,7066
|
23
23
|
validate_command.py,sha256=idaujErzrwuZNT6DYCVTVwZqBDEEi1GTxIXAGBgKMKM,7623
|
24
|
-
version.py,sha256=
|
24
|
+
version.py,sha256=OnZFRa6JP1bAWkOBVf8P5NTFNziBsBUhGuKbE1Kzuy4,224
|
25
25
|
version_command.py,sha256=DZuYWtohSeM5PJNYCflBy36_k0vex3tYV2C8ixEA9ho,4259
|
26
26
|
version_manager.py,sha256=fpC7jxhIW1wZhJ9IkVwyqkgJN4mhBjUUbaLefXLDMiM,11423
|
27
27
|
where_command.py,sha256=TcLoXLGmrPSHQuvlceVuuKBsfeadIwz-E0G_5okH14g,6420
|
@@ -60,16 +60,25 @@ clapp-packages-repo/packages/test-app/main.py,sha256=rN4Zo9u53bIVjcUlul059knx6v-
|
|
60
60
|
clapp-packages-repo/packages/test-app/manifest.json,sha256=kJe4sjYdPRNZD5hEeca80jj3lxeEWBMJoZ59RW7tiKI,118
|
61
61
|
clapp-packages-repo/packages/test-app2/main.py,sha256=lHkbjTmehFY4VuYYF2dYiVBH7W0oqHHeY0I5W85iPTY,35
|
62
62
|
clapp-packages-repo/packages/test-app2/manifest.json,sha256=vshXJrtRxBc_ISM6E8KT5BSmveMbjWszenlgxgSN86w,121
|
63
|
-
clapp_pm-1.0.
|
64
|
-
clapp_pm-1.0.
|
63
|
+
clapp_pm-1.0.19.data/data/version.json,sha256=XPwOQqKgrCzt75qizoYTYTOOtnYG9KEw9v0kX_E7OV0,239
|
64
|
+
clapp_pm-1.0.19.dist-info/licenses/LICENSE,sha256=_hryv9pKR6udRexceUYuoYCJGmYBz7e-vRuFWmm38UY,1075
|
65
|
+
docs/developer_guide.md,sha256=B-S141TSNy7e8T9KaV6Fr-ZAFhYqqgcwqWijjX0C2Xc,7336
|
65
66
|
packages/hello-python/main.py,sha256=Dy-Ov-Vumj8oQYI6qKWU6fIKD0gCB8b7KzAJVrGyLMg,1429
|
66
67
|
packages/hello-python/manifest.json,sha256=fJOVJk_2rwpRJ6IeWMPieklJD3gAR279jvuqRH69s90,179
|
67
68
|
packages/test-app/main.py,sha256=rN4Zo9u53bIVjcUlul059knx6v-2Cd1MFftPS57FIRU,33
|
68
69
|
packages/test-app/manifest.json,sha256=kJe4sjYdPRNZD5hEeca80jj3lxeEWBMJoZ59RW7tiKI,118
|
69
70
|
packages/test-app2/main.py,sha256=lHkbjTmehFY4VuYYF2dYiVBH7W0oqHHeY0I5W85iPTY,35
|
70
71
|
packages/test-app2/manifest.json,sha256=vshXJrtRxBc_ISM6E8KT5BSmveMbjWszenlgxgSN86w,121
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
72
|
+
templates/dart/manifest.json,sha256=ycVKZxrArzcSoRZ5LKKe8aOerwk5Z-7VX0td86aim0M,267
|
73
|
+
templates/lua/manifest.json,sha256=CRIy0dP6Pr3vH6IV4dObGs4KqqJ_sURsY0wAgK2av7E,262
|
74
|
+
templates/python/README.md,sha256=AqVgCZ-cwXBuDHFoJdYkAHAuB6SjSjqXQrjhLu0q7cc,964
|
75
|
+
templates/python/main.py,sha256=24IEuyHSuPWJp2-xYhInUNEWqeueGxAO3NBgHkEgLdQ,1562
|
76
|
+
templates/python/manifest.json,sha256=hjmKqsEkWEBTwxFgm35MkvuwWZ2CQWq9Zo8uHodqHrE,273
|
77
|
+
test-app/README.md,sha256=AqVgCZ-cwXBuDHFoJdYkAHAuB6SjSjqXQrjhLu0q7cc,964
|
78
|
+
test-app/main.py,sha256=24IEuyHSuPWJp2-xYhInUNEWqeueGxAO3NBgHkEgLdQ,1562
|
79
|
+
test-app/manifest.json,sha256=MM1nl5Bljrnsik3fwsrgFBchfgwIb2REoBwwzNpFHQU,284
|
80
|
+
clapp_pm-1.0.19.dist-info/METADATA,sha256=iuBWYnuIEotxHmSd-FXUKu15kOJNUPYoIGG7Udzncsk,3980
|
81
|
+
clapp_pm-1.0.19.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
82
|
+
clapp_pm-1.0.19.dist-info/entry_points.txt,sha256=7j-3pQVpQfnaVzUV83g7zlCA30ePlnXkhHLAGGz9xrQ,36
|
83
|
+
clapp_pm-1.0.19.dist-info/top_level.txt,sha256=sXrnwBW_jVjAEv4wOWMwbUXRZ22PpUseU9O9XOnCtFY,457
|
84
|
+
clapp_pm-1.0.19.dist-info/RECORD,,
|
@@ -6,6 +6,7 @@ clapp_core
|
|
6
6
|
clean_command
|
7
7
|
cli_commands
|
8
8
|
dependency_resolver
|
9
|
+
docs
|
9
10
|
doctor_command
|
10
11
|
info_command
|
11
12
|
install_command
|
@@ -22,6 +23,8 @@ post_install_hint
|
|
22
23
|
publish_command
|
23
24
|
remote_registry
|
24
25
|
smart_search
|
26
|
+
templates
|
27
|
+
test-app
|
25
28
|
uninstall_command
|
26
29
|
validate_command
|
27
30
|
version
|
cli_commands.py
CHANGED
@@ -118,7 +118,11 @@ def list_installed_apps(format_type="table", language_filter=None, search_term=N
|
|
118
118
|
tuple: (success: bool, message: str)
|
119
119
|
"""
|
120
120
|
try:
|
121
|
-
output = list_apps(
|
121
|
+
output = list_apps(
|
122
|
+
format_type,
|
123
|
+
language_filter or "",
|
124
|
+
search_term or ""
|
125
|
+
)
|
122
126
|
print(output)
|
123
127
|
return True, "Liste gösterildi"
|
124
128
|
except Exception as e:
|
docs/developer_guide.md
ADDED
@@ -0,0 +1,361 @@
|
|
1
|
+
# clapp Geliştirici Rehberi
|
2
|
+
|
3
|
+
Bu rehber, clapp için uygulama geliştirmek isteyen geliştiriciler için hazırlanmıştır.
|
4
|
+
|
5
|
+
## 📋 İçindekiler
|
6
|
+
|
7
|
+
1. [Başlangıç](#başlangıç)
|
8
|
+
2. [Manifest Dosyası](#manifest-dosyası)
|
9
|
+
3. [Desteklenen Diller](#desteklenen-diller)
|
10
|
+
4. [Uygulama Yapısı](#uygulama-yapısı)
|
11
|
+
5. [Bağımlılık Yönetimi](#bağımlılık-yönetimi)
|
12
|
+
6. [Test ve Doğrulama](#test-ve-doğrulama)
|
13
|
+
7. [Yayınlama](#yayınlama)
|
14
|
+
8. [En İyi Uygulamalar](#en-iyi-uygulamalar)
|
15
|
+
|
16
|
+
## 🚀 Başlangıç
|
17
|
+
|
18
|
+
### Yeni Uygulama Oluşturma
|
19
|
+
|
20
|
+
Yeni bir clapp uygulaması oluşturmak için:
|
21
|
+
|
22
|
+
```bash
|
23
|
+
# Python uygulaması oluştur
|
24
|
+
clapp new python my-app
|
25
|
+
|
26
|
+
# Lua uygulaması oluştur
|
27
|
+
clapp new lua my-lua-app
|
28
|
+
|
29
|
+
# Diğer diller için
|
30
|
+
clapp new dart my-dart-app
|
31
|
+
clapp new go my-go-app
|
32
|
+
clapp new rust my-rust-app
|
33
|
+
```
|
34
|
+
|
35
|
+
### Manuel Oluşturma
|
36
|
+
|
37
|
+
Eğer `clapp new` komutu henüz mevcut değilse, manuel olarak oluşturabilirsiniz:
|
38
|
+
|
39
|
+
1. Yeni bir klasör oluşturun
|
40
|
+
2. `manifest.json` dosyası ekleyin
|
41
|
+
3. Giriş dosyanızı oluşturun
|
42
|
+
4. Gerekli dosyaları ekleyin
|
43
|
+
|
44
|
+
## 📄 Manifest Dosyası
|
45
|
+
|
46
|
+
Her clapp uygulaması bir `manifest.json` dosyasına sahip olmalıdır.
|
47
|
+
|
48
|
+
### Zorunlu Alanlar
|
49
|
+
|
50
|
+
```json
|
51
|
+
{
|
52
|
+
"name": "my-app",
|
53
|
+
"version": "1.0.0",
|
54
|
+
"language": "python",
|
55
|
+
"entry": "main.py"
|
56
|
+
}
|
57
|
+
```
|
58
|
+
|
59
|
+
### Opsiyonel Alanlar
|
60
|
+
|
61
|
+
```json
|
62
|
+
{
|
63
|
+
"name": "my-app",
|
64
|
+
"version": "1.0.0",
|
65
|
+
"language": "python",
|
66
|
+
"entry": "main.py",
|
67
|
+
"description": "Uygulama açıklaması",
|
68
|
+
"author": "Geliştirici Adı",
|
69
|
+
"license": "MIT",
|
70
|
+
"dependencies": ["other-app"],
|
71
|
+
"tags": ["utility", "tool"],
|
72
|
+
"category": "productivity"
|
73
|
+
}
|
74
|
+
```
|
75
|
+
|
76
|
+
### Alan Açıklamaları
|
77
|
+
|
78
|
+
- **name**: Uygulama adı (benzersiz olmalı)
|
79
|
+
- **version**: Sürüm numarası (semantic versioning önerilir)
|
80
|
+
- **language**: Programlama dili (python, lua, dart, go, rust, vb.)
|
81
|
+
- **entry**: Giriş dosyası (uygulamanın başlangıç noktası)
|
82
|
+
- **description**: Uygulama açıklaması
|
83
|
+
- **author**: Geliştirici bilgisi
|
84
|
+
- **license**: Lisans bilgisi
|
85
|
+
- **dependencies**: Bağımlılık listesi (diğer clapp uygulamaları)
|
86
|
+
- **tags**: Etiketler (arama için)
|
87
|
+
- **category**: Kategori (store, productivity, game, vb.)
|
88
|
+
|
89
|
+
## 🌐 Desteklenen Diller
|
90
|
+
|
91
|
+
### Python
|
92
|
+
- **Dosya uzantısı**: `.py`
|
93
|
+
- **Giriş noktası**: `python main.py`
|
94
|
+
- **Örnek**: `main.py`
|
95
|
+
|
96
|
+
### Lua
|
97
|
+
- **Dosya uzantısı**: `.lua`
|
98
|
+
- **Giriş noktası**: `lua main.lua`
|
99
|
+
- **Örnek**: `main.lua`
|
100
|
+
|
101
|
+
### Dart
|
102
|
+
- **Dosya uzantısı**: `.dart`
|
103
|
+
- **Giriş noktası**: `dart main.dart`
|
104
|
+
- **Örnek**: `main.dart`
|
105
|
+
|
106
|
+
### Go
|
107
|
+
- **Dosya uzantısı**: `.go`
|
108
|
+
- **Giriş noktası**: `go run main.go`
|
109
|
+
- **Örnek**: `main.go`
|
110
|
+
|
111
|
+
### Rust
|
112
|
+
- **Dosya uzantısı**: `.rs`
|
113
|
+
- **Giriş noktası**: `cargo run`
|
114
|
+
- **Örnek**: `Cargo.toml` + `src/main.rs`
|
115
|
+
|
116
|
+
### Node.js
|
117
|
+
- **Dosya uzantısı**: `.js`
|
118
|
+
- **Giriş noktası**: `node main.js`
|
119
|
+
- **Örnek**: `main.js`
|
120
|
+
|
121
|
+
### Bash
|
122
|
+
- **Dosya uzantısı**: `.sh`
|
123
|
+
- **Giriş noktası**: `bash main.sh`
|
124
|
+
- **Örnek**: `main.sh`
|
125
|
+
|
126
|
+
### Perl
|
127
|
+
- **Dosya uzantısı**: `.pl`
|
128
|
+
- **Giriş noktası**: `perl main.pl`
|
129
|
+
- **Örnek**: `main.pl`
|
130
|
+
|
131
|
+
### Ruby
|
132
|
+
- **Dosya uzantısı**: `.rb`
|
133
|
+
- **Giriş noktası**: `ruby main.rb`
|
134
|
+
- **Örnek**: `main.rb`
|
135
|
+
|
136
|
+
### PHP
|
137
|
+
- **Dosya uzantısı**: `.php`
|
138
|
+
- **Giriş noktası**: `php main.php`
|
139
|
+
- **Örnek**: `main.php`
|
140
|
+
|
141
|
+
## 📁 Uygulama Yapısı
|
142
|
+
|
143
|
+
### Temel Yapı
|
144
|
+
|
145
|
+
```
|
146
|
+
my-app/
|
147
|
+
├── manifest.json # Zorunlu
|
148
|
+
├── main.py # Giriş dosyası (manifest'te belirtilen)
|
149
|
+
├── README.md # Opsiyonel
|
150
|
+
├── requirements.txt # Python bağımlılıkları (opsiyonel)
|
151
|
+
└── assets/ # Statik dosyalar (opsiyonel)
|
152
|
+
├── images/
|
153
|
+
└── data/
|
154
|
+
```
|
155
|
+
|
156
|
+
### Örnek Python Uygulaması
|
157
|
+
|
158
|
+
**manifest.json:**
|
159
|
+
```json
|
160
|
+
{
|
161
|
+
"name": "hello-world",
|
162
|
+
"version": "1.0.0",
|
163
|
+
"language": "python",
|
164
|
+
"entry": "main.py",
|
165
|
+
"description": "Basit bir Hello World uygulaması",
|
166
|
+
"author": "Geliştirici",
|
167
|
+
"tags": ["example", "hello"]
|
168
|
+
}
|
169
|
+
```
|
170
|
+
|
171
|
+
**main.py:**
|
172
|
+
```python
|
173
|
+
#!/usr/bin/env python3
|
174
|
+
|
175
|
+
def main():
|
176
|
+
print("Merhaba Dünya!")
|
177
|
+
print("Bu bir clapp uygulamasıdır.")
|
178
|
+
|
179
|
+
if __name__ == "__main__":
|
180
|
+
main()
|
181
|
+
```
|
182
|
+
|
183
|
+
### Örnek Lua Uygulaması
|
184
|
+
|
185
|
+
**manifest.json:**
|
186
|
+
```json
|
187
|
+
{
|
188
|
+
"name": "lua-calculator",
|
189
|
+
"version": "1.0.0",
|
190
|
+
"language": "lua",
|
191
|
+
"entry": "main.lua",
|
192
|
+
"description": "Basit hesap makinesi",
|
193
|
+
"tags": ["calculator", "math"]
|
194
|
+
}
|
195
|
+
```
|
196
|
+
|
197
|
+
**main.lua:**
|
198
|
+
```lua
|
199
|
+
#!/usr/bin/env lua
|
200
|
+
|
201
|
+
function main()
|
202
|
+
print("Lua Hesap Makinesi")
|
203
|
+
print("2 + 2 = " .. (2 + 2))
|
204
|
+
end
|
205
|
+
|
206
|
+
main()
|
207
|
+
```
|
208
|
+
|
209
|
+
## 🔗 Bağımlılık Yönetimi
|
210
|
+
|
211
|
+
### clapp Bağımlılıkları
|
212
|
+
|
213
|
+
Manifest dosyasında diğer clapp uygulamalarını bağımlılık olarak belirtebilirsiniz:
|
214
|
+
|
215
|
+
```json
|
216
|
+
{
|
217
|
+
"name": "my-app",
|
218
|
+
"version": "1.0.0",
|
219
|
+
"language": "python",
|
220
|
+
"entry": "main.py",
|
221
|
+
"dependencies": ["database-app", "auth-app"]
|
222
|
+
}
|
223
|
+
```
|
224
|
+
|
225
|
+
### Sistem Bağımlılıkları
|
226
|
+
|
227
|
+
Her dil için sistem bağımlılıkları farklı şekilde yönetilir:
|
228
|
+
|
229
|
+
#### Python
|
230
|
+
- `requirements.txt` dosyası kullanın
|
231
|
+
- `pip install -r requirements.txt` otomatik çalışır
|
232
|
+
|
233
|
+
#### Node.js
|
234
|
+
- `package.json` dosyası kullanın
|
235
|
+
- `npm install` otomatik çalışır
|
236
|
+
|
237
|
+
#### Rust
|
238
|
+
- `Cargo.toml` dosyası kullanın
|
239
|
+
- `cargo build` otomatik çalışır
|
240
|
+
|
241
|
+
### Bağımlılık Kontrolü
|
242
|
+
|
243
|
+
```bash
|
244
|
+
# Uygulama bağımlılıklarını kontrol et
|
245
|
+
clapp dependency check my-app
|
246
|
+
|
247
|
+
# Bağımlılık ağacını göster
|
248
|
+
clapp dependency tree my-app
|
249
|
+
```
|
250
|
+
|
251
|
+
## 🧪 Test ve Doğrulama
|
252
|
+
|
253
|
+
### Uygulama Doğrulama
|
254
|
+
|
255
|
+
```bash
|
256
|
+
# Uygulama klasörünü doğrula
|
257
|
+
clapp validate ./my-app
|
258
|
+
```
|
259
|
+
|
260
|
+
### Test Çalıştırma
|
261
|
+
|
262
|
+
```bash
|
263
|
+
# Uygulamayı test et
|
264
|
+
clapp run my-app
|
265
|
+
```
|
266
|
+
|
267
|
+
### Bağımlılık Testi
|
268
|
+
|
269
|
+
```bash
|
270
|
+
# Bağımlılıkları test et
|
271
|
+
clapp dependency check my-app
|
272
|
+
```
|
273
|
+
|
274
|
+
## 📦 Yayınlama
|
275
|
+
|
276
|
+
### Yerel Test
|
277
|
+
|
278
|
+
```bash
|
279
|
+
# Uygulamayı yerel olarak test et
|
280
|
+
clapp install ./my-app
|
281
|
+
clapp run my-app
|
282
|
+
```
|
283
|
+
|
284
|
+
### Paket Oluşturma
|
285
|
+
|
286
|
+
```bash
|
287
|
+
# Paket oluştur
|
288
|
+
clapp publish ./my-app
|
289
|
+
```
|
290
|
+
|
291
|
+
### GitHub'a Yükleme
|
292
|
+
|
293
|
+
```bash
|
294
|
+
# GitHub'a otomatik yükle
|
295
|
+
clapp publish ./my-app --push
|
296
|
+
```
|
297
|
+
|
298
|
+
## ✅ En İyi Uygulamalar
|
299
|
+
|
300
|
+
### 1. İsimlendirme
|
301
|
+
- Uygulama adları küçük harf ve tire kullanın: `my-app`
|
302
|
+
- Açıklayıcı isimler seçin
|
303
|
+
- Benzersiz isimler kullanın
|
304
|
+
|
305
|
+
### 2. Sürüm Yönetimi
|
306
|
+
- Semantic versioning kullanın: `1.0.0`
|
307
|
+
- Her değişiklikte sürüm artırın
|
308
|
+
- CHANGELOG.md dosyası ekleyin
|
309
|
+
|
310
|
+
### 3. Dokümantasyon
|
311
|
+
- README.md dosyası ekleyin
|
312
|
+
- Kullanım örnekleri verin
|
313
|
+
- API dokümantasyonu ekleyin
|
314
|
+
|
315
|
+
### 4. Hata Yönetimi
|
316
|
+
- Uygun hata mesajları verin
|
317
|
+
- Graceful degradation sağlayın
|
318
|
+
- Log dosyaları kullanın
|
319
|
+
|
320
|
+
### 5. Güvenlik
|
321
|
+
- Hassas bilgileri kodlamayın
|
322
|
+
- Input validation yapın
|
323
|
+
- Güvenli dosya işlemleri kullanın
|
324
|
+
|
325
|
+
### 6. Performans
|
326
|
+
- Gereksiz bağımlılıklardan kaçının
|
327
|
+
- Hızlı başlangıç sağlayın
|
328
|
+
- Bellek kullanımını optimize edin
|
329
|
+
|
330
|
+
## 🆘 Yardım
|
331
|
+
|
332
|
+
### Hata Ayıklama
|
333
|
+
|
334
|
+
```bash
|
335
|
+
# Sistem durumunu kontrol et
|
336
|
+
clapp doctor
|
337
|
+
|
338
|
+
# Ortam kontrolü
|
339
|
+
clapp check-env
|
340
|
+
|
341
|
+
# Uygulama konumunu bul
|
342
|
+
clapp where my-app
|
343
|
+
```
|
344
|
+
|
345
|
+
### Destek
|
346
|
+
|
347
|
+
- GitHub Issues: [clapp repository](https://github.com/mburakmmm/clapp)
|
348
|
+
- Dokümantasyon: Bu rehber
|
349
|
+
- Örnekler: `templates/` klasörü
|
350
|
+
|
351
|
+
## 📝 Örnekler
|
352
|
+
|
353
|
+
Daha fazla örnek için `templates/` klasörünü inceleyin:
|
354
|
+
|
355
|
+
- `templates/python/` - Python örnekleri
|
356
|
+
- `templates/lua/` - Lua örnekleri
|
357
|
+
- `templates/dart/` - Dart örnekleri
|
358
|
+
- `templates/go/` - Go örnekleri
|
359
|
+
- `templates/rust/` - Rust örnekleri
|
360
|
+
|
361
|
+
Her örnek tam çalışan bir uygulama içerir ve kopyalanıp değiştirilebilir.
|
main.py
CHANGED
@@ -33,7 +33,7 @@ from where_command import locate_app_path, list_all_app_locations
|
|
33
33
|
from version_command import print_version, print_detailed_version
|
34
34
|
|
35
35
|
# Yeni güvenlik ve performans modülleri
|
36
|
-
from package_signing import
|
36
|
+
from package_signing import check_package_security
|
37
37
|
from version_manager import check_app_updates, get_app_latest_version, increment_app_version
|
38
38
|
from cache_manager import get_cache_stats, clear_all_caches, download_packages_parallel
|
39
39
|
from smart_search import search_packages, get_search_suggestions, get_search_analytics, clear_search_history
|
@@ -52,6 +52,9 @@ from dependency_resolver import (
|
|
52
52
|
handle_dependency_tree
|
53
53
|
)
|
54
54
|
|
55
|
+
# Yeni uygulama oluşturma komutu
|
56
|
+
from new_command import handle_new_command
|
57
|
+
|
55
58
|
def main():
|
56
59
|
"""Ana CLI fonksiyonu"""
|
57
60
|
|
@@ -69,6 +72,7 @@ def main():
|
|
69
72
|
clapp list # Yüklü uygulamaları listele
|
70
73
|
clapp run hello-python # hello-python uygulamasını çalıştır
|
71
74
|
clapp info hello-python # Uygulama bilgilerini göster
|
75
|
+
clapp new python my-app # Yeni Python uygulaması oluştur
|
72
76
|
|
73
77
|
🔧 Yönetim Komutları:
|
74
78
|
clapp install app.zip # ZIP dosyasından uygulama yükle
|
@@ -228,6 +232,13 @@ def main():
|
|
228
232
|
dep_tree_parser = dependency_subparsers.add_parser('tree', help='Bağımlılık ağacı')
|
229
233
|
dep_tree_parser.add_argument('app_name', help='Uygulama adı')
|
230
234
|
|
235
|
+
# new komutu (yeni)
|
236
|
+
new_parser = subparsers.add_parser('new', help='Yeni uygulama oluştur')
|
237
|
+
new_parser.add_argument('language', nargs='?', help='Programlama dili')
|
238
|
+
new_parser.add_argument('app_name', nargs='?', help='Uygulama adı')
|
239
|
+
new_parser.add_argument('--list', action='store_true', help='Mevcut şablonları listele')
|
240
|
+
new_parser.add_argument('--target-dir', help='Hedef dizin (opsiyonel)')
|
241
|
+
|
231
242
|
# Argümanları parse et
|
232
243
|
args = parser.parse_args()
|
233
244
|
|
@@ -376,22 +387,17 @@ def main():
|
|
376
387
|
print("❌ Geçersiz dependency komutu")
|
377
388
|
sys.exit(1)
|
378
389
|
|
390
|
+
elif args.command == 'new':
|
391
|
+
# Yeni uygulama oluşturma komutu
|
392
|
+
success, message = handle_new_command(args)
|
393
|
+
if success:
|
394
|
+
print(message)
|
395
|
+
else:
|
396
|
+
print(f"❌ {message}")
|
397
|
+
sys.exit(1)
|
398
|
+
|
379
399
|
elif args.command == 'security':
|
380
|
-
if args.action == '
|
381
|
-
success, message = sign_package_file(args.package_path)
|
382
|
-
if success:
|
383
|
-
print(f"✅ {message}")
|
384
|
-
else:
|
385
|
-
print(f"❌ {message}")
|
386
|
-
sys.exit(1)
|
387
|
-
|
388
|
-
elif args.action == 'verify':
|
389
|
-
signature_path = args.signature or args.package_path.replace('.zip', '.sig')
|
390
|
-
success, message = verify_package_file(args.package_path, signature_path)
|
391
|
-
print(f"{'✅' if success else '❌'} {message}")
|
392
|
-
sys.exit(0 if success else 1)
|
393
|
-
|
394
|
-
elif args.action == 'check':
|
400
|
+
if args.action == 'check':
|
395
401
|
results = check_package_security(args.package_path)
|
396
402
|
print("🔒 Paket Güvenlik Kontrolü")
|
397
403
|
print("=" * 40)
|
@@ -402,6 +408,9 @@ def main():
|
|
402
408
|
print("\n⚠️ Uyarılar:")
|
403
409
|
for warning in results['warnings']:
|
404
410
|
print(f" - {warning}")
|
411
|
+
else:
|
412
|
+
print("❌ İmzalama özelliği geçici olarak devre dışı")
|
413
|
+
sys.exit(1)
|
405
414
|
|
406
415
|
elif args.command == 'update':
|
407
416
|
if args.action == 'check':
|
manifest_schema.py
CHANGED
@@ -42,7 +42,11 @@ def validate_manifest(manifest):
|
|
42
42
|
# Opsiyonel alanlar
|
43
43
|
optional_fields = {
|
44
44
|
'description': str,
|
45
|
-
'dependencies': list
|
45
|
+
'dependencies': list,
|
46
|
+
'author': str,
|
47
|
+
'license': str,
|
48
|
+
'tags': list,
|
49
|
+
'category': str
|
46
50
|
}
|
47
51
|
|
48
52
|
# Gerekli alanları kontrol et
|
@@ -52,9 +56,16 @@ def validate_manifest(manifest):
|
|
52
56
|
if not isinstance(manifest[field], expected_type):
|
53
57
|
return False
|
54
58
|
|
55
|
-
# Dil kontrolü
|
56
|
-
|
57
|
-
|
59
|
+
# Dil kontrolü - package_runner'dan desteklenen dilleri al
|
60
|
+
try:
|
61
|
+
from package_runner import get_supported_languages
|
62
|
+
supported_languages = get_supported_languages()
|
63
|
+
if manifest['language'] not in supported_languages:
|
64
|
+
return False
|
65
|
+
except ImportError:
|
66
|
+
# Fallback: Temel diller
|
67
|
+
if manifest['language'] not in ['python', 'lua', 'dart', 'go', 'rust', 'node', 'bash', 'perl', 'ruby', 'php']:
|
68
|
+
return False
|
58
69
|
|
59
70
|
# Opsiyonel alanları kontrol et (varsa)
|
60
71
|
for field, expected_type in optional_fields.items():
|
@@ -79,6 +90,10 @@ def get_schema():
|
|
79
90
|
},
|
80
91
|
"optional_fields": {
|
81
92
|
"description": "string",
|
82
|
-
"dependencies": "list"
|
93
|
+
"dependencies": "list",
|
94
|
+
"author": "string",
|
95
|
+
"license": "string",
|
96
|
+
"tags": "list",
|
97
|
+
"category": "string"
|
83
98
|
}
|
84
99
|
}
|
manifest_validator.py
CHANGED
@@ -39,8 +39,8 @@ def validate_manifest_verbose(manifest):
|
|
39
39
|
elif field == "language":
|
40
40
|
if not isinstance(value, str):
|
41
41
|
errors.append(f"'{field}' alanı string olmalı")
|
42
|
-
elif value.lower() not in ["python", "lua"]:
|
43
|
-
errors.append(f"'{field}' alanı
|
42
|
+
elif value.lower() not in ["python", "lua", "dart", "go", "rust", "node", "bash", "perl", "ruby", "php"]:
|
43
|
+
errors.append(f"'{field}' alanı desteklenen bir dil olmalı, '{value}' geçersiz")
|
44
44
|
elif field == "entry":
|
45
45
|
if not isinstance(value, str) or not value.strip():
|
46
46
|
errors.append(f"'{field}' alanı boş olmayan bir string olmalı")
|
@@ -61,7 +61,7 @@ def validate_manifest_verbose(manifest):
|
|
61
61
|
errors.append(f"'dependencies[{i}]' boş olmayan bir string olmalı")
|
62
62
|
|
63
63
|
# Bilinmeyen alanları kontrol et
|
64
|
-
known_fields = set(required_fields.keys()) | {"description", "dependencies"}
|
64
|
+
known_fields = set(required_fields.keys()) | {"description", "dependencies", "author", "license", "tags", "category"}
|
65
65
|
for field in manifest.keys():
|
66
66
|
if field not in known_fields:
|
67
67
|
errors.append(f"Bilinmeyen alan: '{field}' (göz ardı edilecek)")
|