@appaflytech/zeyrek-ai-mcp 0.0.30 → 0.0.32
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.
- package/.env.example +0 -15
- package/README.md +5 -5
- package/dist/config.js +0 -37
- package/dist/index.js +0 -2
- package/dist/knowledge/backendConstraints.js +1 -18
- package/dist/knowledge/boxSections.js +184 -0
- package/dist/knowledge/componentCatalog.js +232 -562
- package/dist/knowledge/componentEvents.js +21 -141
- package/dist/knowledge/layoutSummary.js +2 -140
- package/dist/knowledge/normalize.js +67 -236
- package/dist/knowledge/outlines.js +0 -36
- package/dist/knowledge/policy.js +4 -18
- package/dist/knowledge/reservedTables.js +0 -79
- package/dist/knowledge/rules.js +21 -319
- package/dist/knowledge/schemaGuard.js +0 -11
- package/dist/knowledge/styleResolve.js +38 -55
- package/dist/knowledge/themeResolve.js +3 -3
- package/dist/observability/trace.js +3 -6
- package/dist/platform/diagnostics.js +4 -10
- package/dist/platform/domSummary.js +1 -1
- package/dist/platform/errors.js +10 -162
- package/dist/platform/http.js +8 -29
- package/dist/platform/responses.js +5 -39
- package/dist/platform/{capture/capture.js → screenshot.js} +519 -105
- package/dist/platform/secrets.js +1 -17
- package/dist/platform/strictArguments.js +12 -68
- package/dist/platform/tokenVault.js +4 -187
- package/dist/resources/examples/layout-app-shell.json +707 -229
- package/dist/resources/examples/page-detail-profile.json +1 -2
- package/dist/resources/examples/page-dynamic-form.json +2 -3
- package/dist/resources/examples/page-flex-sections.json +1 -1
- package/dist/resources/examples/page-html-embed.json +1 -1
- package/dist/resources/examples/workflow-basic.json +2 -8
- package/dist/resources/guides/component.md +4 -91
- package/dist/resources/guides/entity.md +8 -50
- package/dist/resources/guides/expressions.md +5 -14
- package/dist/resources/guides/functions.md +1 -1
- package/dist/resources/guides/getting-started.md +1 -38
- package/dist/resources/guides/layout.md +58 -55
- package/dist/resources/guides/microservice.md +2 -81
- package/dist/resources/guides/middleware.md +2 -44
- package/dist/resources/guides/page.md +75 -454
- package/dist/resources/guides/theme.md +2 -8
- package/dist/resources/guides/translation.md +1 -1
- package/dist/resources/guides/workflow.md +1 -58
- package/dist/resources/rules.js +5 -11
- package/dist/resources/schema-fingerprint.json +5 -7
- package/dist/resources/schemas/CreateEntityCommand.json +0 -118
- package/dist/resources/schemas/CreateMicroserviceCommand.json +1 -13
- package/dist/resources/schemas/CreateQueryCommand.json +0 -4
- package/dist/resources/schemas/CreateWorkflowCommand.json +1 -143
- package/dist/resources/schemas/DataJobDto.json +1 -6
- package/dist/resources/schemas/GlobalFunctionUpdateResultDto.json +1 -21
- package/dist/resources/schemas/MicroserviceDto.json +3 -15
- package/dist/resources/schemas/PreviewMicroserviceCommand.json +1 -10
- package/dist/resources/schemas/PreviewWorkflowCommand.json +1 -22
- package/dist/resources/schemas/StepDto.json +1 -22
- package/dist/resources/schemas/UpdateEntityCommand.json +0 -118
- package/dist/resources/schemas/UpdateMicroserviceCommand.json +1 -13
- package/dist/resources/schemas/UpdateQueryCommand.json +0 -4
- package/dist/resources/schemas/UpdateViewCommand.json +2 -0
- package/dist/resources/schemas/UpdateWorkflowCommand.json +1 -143
- package/dist/server.js +1 -27
- package/dist/tools/access.js +2 -369
- package/dist/tools/applications.js +3 -60
- package/dist/tools/common.js +0 -7
- package/dist/tools/components.js +14 -118
- package/dist/tools/datasources.js +3 -3
- package/dist/tools/dependencies.js +1 -1
- package/dist/tools/deployments.js +2 -2
- package/dist/tools/designSchemaPatch.js +18 -34
- package/dist/tools/dtos.js +5 -36
- package/dist/tools/entities.js +12 -79
- package/dist/tools/externalComponents.js +5 -26
- package/dist/tools/flows.js +14 -122
- package/dist/tools/folders.js +1 -1
- package/dist/tools/imports.js +2 -5
- package/dist/tools/layouts.js +17 -50
- package/dist/tools/merges.js +1 -1
- package/dist/tools/microservices.js +25 -77
- package/dist/tools/pages.js +112 -465
- package/dist/tools/platformInfo.js +8 -27
- package/dist/tools/projects.js +9 -71
- package/dist/tools/rows.js +13 -69
- package/dist/tools/schemaOps.js +1 -61
- package/dist/tools/screenWrite.js +8 -37
- package/dist/tools/screens.js +5 -95
- package/dist/tools/templates.js +1 -26
- package/dist/tools/translations.js +1 -1
- package/dist/tools/variables.js +5 -11
- package/dist/tools/workflows.js +5 -10
- package/package.json +2 -2
- package/dist/knowledge/access.js +0 -802
- package/dist/knowledge/case.js +0 -41
- package/dist/knowledge/connectDataBind.js +0 -819
- package/dist/knowledge/connectDataDefinition.js +0 -341
- package/dist/knowledge/connectDataExecute.js +0 -93
- package/dist/knowledge/connectDataRules.js +0 -128
- package/dist/knowledge/decision.js +0 -121
- package/dist/knowledge/expressionPrelude.js +0 -59
- package/dist/knowledge/microserviceParameters.js +0 -58
- package/dist/knowledge/mining.js +0 -94
- package/dist/knowledge/mobileComponentCatalog.js +0 -859
- package/dist/knowledge/mobileComponentEvents.js +0 -239
- package/dist/knowledge/platform/lint.js +0 -385
- package/dist/knowledge/platform/mobile.js +0 -142
- package/dist/knowledge/platform/mobileLayoutLint.js +0 -324
- package/dist/knowledge/platform/mobileRules.js +0 -231
- package/dist/knowledge/platform/mobileSpacing.js +0 -82
- package/dist/knowledge/platform/mobileTabs.js +0 -108
- package/dist/knowledge/platform/nativeBoxModel.js +0 -44
- package/dist/knowledge/platform/profile.js +0 -25
- package/dist/knowledge/platform/resolve.js +0 -122
- package/dist/knowledge/platform/web.js +0 -39
- package/dist/knowledge/process.js +0 -510
- package/dist/knowledge/rowFilter.js +0 -43
- package/dist/knowledge/styleResolveNative.js +0 -527
- package/dist/platform/argumentAliases.js +0 -128
- package/dist/platform/bodyFile.js +0 -103
- package/dist/platform/capture/actions.js +0 -333
- package/dist/platform/capture/browser.js +0 -1
- package/dist/platform/capture/console-log.js +0 -122
- package/dist/platform/capture/index.js +0 -11
- package/dist/platform/capture/readiness.js +0 -103
- package/dist/platform/capture/summary.js +0 -77
- package/dist/platform/capture/target.js +0 -5
- package/dist/platform/capture/targets/studio-mobile.js +0 -15
- package/dist/platform/capture/targets/studio-web.js +0 -5
- package/dist/platform/impersonation.js +0 -45
- package/dist/platform/jsonArray.js +0 -24
- package/dist/platform/schemaReadMemory.js +0 -60
- package/dist/resources/examples/bpm-gorev-kontrol.json +0 -294
- package/dist/resources/examples/bpm-iso-dokuman.json +0 -228
- package/dist/resources/examples/bpm-satinalma.json +0 -376
- package/dist/resources/examples/connect-data-convert-verify.json +0 -107
- package/dist/resources/examples/connect-data-dropdown-roles.json +0 -66
- package/dist/resources/examples/connect-data-edit-m2m.json +0 -73
- package/dist/resources/examples/connect-data-query-params.json +0 -50
- package/dist/resources/examples/connect-data-table-entity.json +0 -147
- package/dist/resources/examples/connect-data-workflow-microservice.json +0 -65
- package/dist/resources/examples/mobile-app-shell-drawer.json +0 -243
- package/dist/resources/examples/mobile-app-shell-stack.json +0 -157
- package/dist/resources/examples/mobile-app-shell-tab.json +0 -208
- package/dist/resources/examples/mobile-form-screen.json +0 -365
- package/dist/resources/examples/mobile-list-detail-form.json +0 -672
- package/dist/resources/guides/access.md +0 -796
- package/dist/resources/guides/bpm.md +0 -686
- package/dist/resources/guides/case.md +0 -153
- package/dist/resources/guides/decision.md +0 -185
- package/dist/resources/guides/mobile-layout.md +0 -193
- package/dist/resources/guides/mobile.md +0 -495
- package/dist/resources/read.js +0 -41
- package/dist/resources/schemas/AccessExplanationDto.json +0 -144
- package/dist/resources/schemas/AccessMatrixDto.json +0 -170
- package/dist/resources/schemas/AccessPermissionDto.json +0 -57
- package/dist/resources/schemas/AccessPolicyDto.json +0 -223
- package/dist/resources/schemas/AccessResourceDto.json +0 -86
- package/dist/resources/schemas/AppSessionDto.json +0 -53
- package/dist/resources/schemas/ConnectDataDescribeDto.json +0 -344
- package/dist/resources/schemas/ConnectDataRequestModel.json +0 -202
- package/dist/resources/schemas/ConnectDataResultDto.json +0 -421
- package/dist/resources/schemas/ConnectorCredentialDto.json +0 -70
- package/dist/resources/schemas/ConvertConnectDataToMicroserviceCommand.json +0 -37
- package/dist/resources/schemas/CreateAccessPolicyCommand.json +0 -209
- package/dist/resources/schemas/CreateDecisionCommand.json +0 -221
- package/dist/resources/schemas/CreateProcessDefinitionCommand.json +0 -1337
- package/dist/resources/schemas/DecisionDto.json +0 -302
- package/dist/resources/schemas/DetachConnectDataMicroserviceCommand.json +0 -28
- package/dist/resources/schemas/ExplainAccessQuery.json +0 -33
- package/dist/resources/schemas/GenerateProcessDocumentCommand.json +0 -116
- package/dist/resources/schemas/OrganizationProjectDto.json +0 -335
- package/dist/resources/schemas/OrganizationSchemaDto.json +0 -196
- package/dist/resources/schemas/OrganizationSchemaVersionDto.json +0 -207
- package/dist/resources/schemas/PatchProcessDefinitionCommand.json +0 -76
- package/dist/resources/schemas/ProcessDefinitionDto.json +0 -1480
- package/dist/resources/schemas/ProcessSimulationDto.json +0 -96
- package/dist/resources/schemas/SaveConnectorCredentialCommand.json +0 -90
- package/dist/resources/schemas/SaveProcessEventSourceCommand.json +0 -61
- package/dist/resources/schemas/SaveProcessMailSourceCommand.json +0 -89
- package/dist/resources/schemas/SignProcessTaskCommand.json +0 -73
- package/dist/resources/schemas/SimulateProcessDefinitionQuery.json +0 -92
- package/dist/resources/schemas/UpdateAccessPolicyCommand.json +0 -209
- package/dist/resources/schemas/UpdateDecisionCommand.json +0 -216
- package/dist/resources/schemas/UpdateProcessDefinitionCommand.json +0 -1357
- package/dist/resources/schemas/ValidateProcessDefinitionQuery.json +0 -1339
- package/dist/tools/accessOperations.js +0 -135
- package/dist/tools/accessPolicies.js +0 -170
- package/dist/tools/accessRuntime.js +0 -203
- package/dist/tools/bpm.js +0 -343
- package/dist/tools/bpmGovernance.js +0 -266
- package/dist/tools/bpmOperations.js +0 -230
- package/dist/tools/bpmReporting.js +0 -154
- package/dist/tools/bpmRouting.js +0 -150
- package/dist/tools/bpmRuntime.js +0 -396
- package/dist/tools/case.js +0 -178
- package/dist/tools/caseRuntime.js +0 -89
- package/dist/tools/connectData.js +0 -449
- package/dist/tools/connectors.js +0 -193
- package/dist/tools/decisions.js +0 -206
- package/dist/tools/mobile.js +0 -221
- package/dist/tools/modules.js +0 -48
- package/dist/tools/organizationStructure.js +0 -137
- package/dist/tools/profileWrite.js +0 -92
|
@@ -4,10 +4,6 @@ Sayfaların paylaştığı kabuk: yan menü, üst şerit, kullanıcı menüsü v
|
|
|
4
4
|
gireceği delik. Şema gövdesi ve koordinat modeli için `platform_guide('page')` (Kural 1,
|
|
5
5
|
1d, 1f); komponent sözleşmeleri için `platform_guide('component')`.
|
|
6
6
|
|
|
7
|
-
> **Mobil uygulamada** kabuk `app-bar` + tek `slot`'tur; sekmeler uygulama ayarı
|
|
8
|
-
> (`properties.mobile.tabs`), çekmece `drawer` widget'ıdır. Web kabuk bileşenleri (`navigations`,
|
|
9
|
-
> `sidebar`, `header`) `MOB-004` alır — `platform_guide('mobile')` §Gezinme.
|
|
10
|
-
|
|
11
7
|
## Karar kuralları
|
|
12
8
|
|
|
13
9
|
**1. Layout, tek `slot` içeren SIRADAN bir komponent ağacıdır.** Ayrı bir dil yoktur:
|
|
@@ -43,16 +39,20 @@ göre kurmaktır. `version` bir **string**tir (mikrosaniye zaman damgası) — s
|
|
|
43
39
|
**4. TEK slot.** Sayfa şeması **her** slot'a ayrı ayrı kopyalanır — iki slot, sayfayı iki
|
|
44
40
|
kez çizer ve `elementId`'leri tekrarlar. (LAY-002 / LAY-006)
|
|
45
41
|
|
|
46
|
-
**5.
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
42
|
+
**5. VARSAYILAN kabuğu kullan, sonra özelleştir (2026-09-29).** Yeni bir layout kurarken
|
|
43
|
+
önce `ngapps://examples/layout-app-shell` örneğini `layout_create`'in `views` alanına olduğu
|
|
44
|
+
gibi ver — Studio'da "New layout" ile açılan iskeletin birebir aynısıdır (aşağıdaki mini
|
|
45
|
+
tarif). Sonra uygulamaya göre değiştir: menü öğeleri ve `href`'leri, başlık, ikonlar;
|
|
46
|
+
gerekmeyen parçayı (arama, yardım, bildirim) sil. Kullanıcı açıkça başka bir kabuk isterse
|
|
47
|
+
sıfırdan kur. Kabuk sıradan bileşenlerden oluşur: `container` + `navigations` + `icon` +
|
|
48
|
+
`slot`. `layout` monoliti (sabit logo/menü/kullanıcı bandı — yalnız doldurulur) ve
|
|
49
|
+
`layout-shell` + `layout-region` ikilisi **emekliye ayrıldı**; kayıtlı kalırlar ve mevcut
|
|
50
|
+
layout'lar çalışır, ama yeni kabukta kullanılmaz — Studio iskeleti de artık onları kurmaz.
|
|
51
|
+
|
|
52
|
+
**5a. Kök, sayfanın `page_container`'ının yerleşim ikizidir.** Varsayılan kabuk kökü şöyle
|
|
53
|
+
kurar ve sen de aynısını yazmalısın: `states.isWrapper: true` (çerçevesiz, başlıksız,
|
|
54
|
+
saydam) + `appearance.heightType: 'fill'` + `blocks` x0/w12. Sarmalayıcı olmayan bir kök,
|
|
55
|
+
kenarlıklı beyaz bir kart olarak çizilir.
|
|
56
56
|
|
|
57
57
|
**5b. Tam ekran kabuk `heightType: 'fill'` ile kurulur (2026-08-28).** Yükseklik ne
|
|
58
58
|
içerikten (`auto`) ne satır sayısından (`fixed`) gelir — ebeveynin bıraktığı yerden gelir:
|
|
@@ -65,7 +65,7 @@ yapılan eski numaraya artık gerek yok.
|
|
|
65
65
|
NEREDE durduğunu değil, BİÇİMİNİ söyler (dikey kolon / yatay şerit / dolgu yüzeyi). Hem
|
|
66
66
|
runtime hem Studio tuvali bölgeleri 12 kolonluk ızgarayla yerleştirir.
|
|
67
67
|
|
|
68
|
-
**7.
|
|
68
|
+
**7. Mobilde flex YIĞILMAZ.** Runtime'ın mobil kuralı yalnız ızgara özelliklerini ezer.
|
|
69
69
|
Telefonda alt alta düşmesi gereken satırı `layout:'grid'` ile kur; `layout:'flex'` +
|
|
70
70
|
`direction:'row'` telefonda da yan yana kalır (375px'te ölçüldü: ızgara çocukları 375/375px
|
|
71
71
|
alt alta, flex çocukları 49/310px yan yana). Not: `wrap` varsayılanı artık açık (2026-09-01) —
|
|
@@ -76,45 +76,48 @@ yana kalmaya devam eder.
|
|
|
76
76
|
gerçek çıktıyı, layout'a bağlı bir sayfanın runtime paketinde görürsün (slot yerleşimi
|
|
77
77
|
dahil). Slot kurgusu için ayrıca `page_state` → `layoutSlots`.
|
|
78
78
|
|
|
79
|
-
## Mini tarif — uygulama kabuğu
|
|
79
|
+
## Mini tarif — uygulama kabuğu (VARSAYILAN)
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
`layout_create`'in `views` alanına doğrudan verilebilir
|
|
81
|
+
Sol menü + üst şerit + ortada boş içerik alanı ve slot. Studio'nun `getDefaultLayout`
|
|
82
|
+
iskeletiyle birebir aynı ağaç; `layout_create`'in `views` alanına doğrudan verilebilir
|
|
83
|
+
(`resource: layout-app-shell`).
|
|
83
84
|
|
|
84
85
|
```
|
|
85
|
-
container isWrapper
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
86
|
+
container shell_root isWrapper · fill · flex row · gap none · stretch
|
|
87
|
+
└ navigations shell_menu layout:'sidebar' · fill · başlık + menüde arama + daraltma
|
|
88
|
+
└ container shell_main fill · flex column · wrap:false · center · zemin surface-alt · taşma gizli
|
|
89
|
+
├ container shell_topbar fixed 64px · flex row · stretch/middle · wrap:false · alt çizgi
|
|
90
|
+
│ ├ navigations shell_crumbs layout:'breadcrumb' · 30px · fill
|
|
91
|
+
│ ├ navigations shell_search layout:'command' · 393px × 36px · "Sayfa ara…"
|
|
92
|
+
│ ├ icon shell_help help · tooltip "Yardım"
|
|
93
|
+
│ └ icon shell_bell notifications · tooltip "Bildirimler"
|
|
94
|
+
└ container shell_content fill · isScrollable · isWrapper · dolgu 28/32/32/32
|
|
95
|
+
└ container shell_page fill · en fazla 1600px · ortalı
|
|
96
|
+
└ slot shell_slot fill
|
|
93
97
|
```
|
|
94
98
|
|
|
95
|
-
- **
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
`
|
|
100
|
-
|
|
101
|
-
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
`
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
- **
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
ölüdür (bkz. `component_get('navigations')`).
|
|
99
|
+
- **Menü bir kaptır.** `navigations` droppable'dır ve içine bırakılanı KENDİ YANINA çizer:
|
|
100
|
+
`shell_main` kökün değil menünün çocuğudur. Ana sütunu köke kardeş koyarsan satıra
|
|
101
|
+
sığmaz ve menünün altına sarar (ölçüldü 2026-09-29).
|
|
102
|
+
- **Tek menü, üç görünüm.** Menü, kırıntı yolu (`layout:'breadcrumb'`) ve arama
|
|
103
|
+
(`layout:'command'`) AYNI `navigations` ağacını taşır; kırıntı aktif sayfanın yolunu, komut
|
|
104
|
+
paleti sonuçları bu ağaçtan çıkarır. Menüyü değiştirirken üçünü birlikte güncelle.
|
|
105
|
+
- **Örnek menü adressizdir.** Öğelere `href` olarak sayfa slug'ı ya da `{ page: '<id>' }` ver;
|
|
106
|
+
başlıkları ve ikonları uygulamanın diline göre değiştir. Menü başlığı (`title`) uygulamanın
|
|
107
|
+
adıdır. Renkler tema token'ıdır (`var(--ng-text-primary)` …) — sabit hex yazma, koyu temada
|
|
108
|
+
okunmaz.
|
|
109
|
+
- **Yerleşim prop'larını açıkça yaz.** `layout_create` katalog varsayılanlarını düğüme
|
|
110
|
+
yazmaz: `layout` prop'u olmayan `container` ızgara çizer. Örnekte her kapta
|
|
111
|
+
`layout:'flex'` + yön/hizalama/gap/wrap yazılıdır; kapatılan bayrak da (`wrap:false`,
|
|
112
|
+
`crumbSiblings:false`) açıkça yazılır.
|
|
113
|
+
- **Yükseklik `fill`'dir**, `size.h` değil: kök ekranı doldurur, menü ve ana sütun kökün
|
|
114
|
+
bıraktığını, içerik alanı üst şeritten artanı, slot da içerik alanını alır. İçerik alanı
|
|
115
|
+
`isScrollable` olduğu için uzun sayfa kabuğu itmez, içeride kaydırır.
|
|
116
|
+
- **Menü satırlarını biçimlendirme:** `navigations`'ın tipli grupları ve renk prop'ları
|
|
117
|
+
(`textColor`, `mutedColor`, `iconColor`, `bgColor` …) — bkz. `component_get('navigations')`.
|
|
118
|
+
- **Mobil:** menü ≤768px'te kendi çekmecesine ve hamburger düğmesine döner (bağımsız
|
|
119
|
+
`navigations`'ta `mobileBehavior:'drawer'` varsayılandır); üst şerit ve içerik tam genişliğe
|
|
120
|
+
yayılır.
|
|
118
121
|
|
|
119
122
|
## Mini tarif — menüde aktif satır
|
|
120
123
|
|
|
@@ -144,8 +147,8 @@ bağlantı nesnesi ya da tam yol).
|
|
|
144
147
|
"direction": { "type": "static", "data": "row" } },
|
|
145
148
|
"blocks": [{ "breakpoint": 1024, "size": { "w": 12, "h": 80 }, "position": { "x": 0, "y": 0 } }] }
|
|
146
149
|
|
|
147
|
-
// KÖTÜ — telefonda 49px'lik yan menü: row flex
|
|
148
|
-
//
|
|
150
|
+
// KÖTÜ — telefonda 49px'lik yan menü: row flex mobilde yığılmaz (Kural 7)
|
|
151
|
+
// Mobilde alt alta düşmesi gerekiyorsa kökü layout:'grid' kur — bedeli, fill'in
|
|
149
152
|
// flex anlamının devreye girmemesi.
|
|
150
153
|
```
|
|
151
154
|
|
|
@@ -183,9 +186,9 @@ bunlardan biri olabilir:
|
|
|
183
186
|
|---|---|
|
|
184
187
|
| ~~`heightType` yalnız `auto` \| `fixed`~~ | **28 Ağustos'ta kapandı:** üçüncü değer `fill` (Kural 5b) |
|
|
185
188
|
| ~~Kök kap viewport'a kilitlenmez~~ | **28 Ağustos'ta kapandı:** `fill` verilmiş kök 100vh (Kural 5b) |
|
|
186
|
-
| Flex
|
|
187
|
-
| Kırılıma duyarlı prop yok | `direction`/`gap` masaüstü ve
|
|
188
|
-
|
|
|
189
|
+
| Flex mobilde yığılmaz | Kural 7 — kabuk bugün bir MASAÜSTÜ kabuğudur |
|
|
190
|
+
| Kırılıma duyarlı prop yok | `direction`/`gap` masaüstü ve mobilde AYNI; yalnız `blocks` ve `appearance.hideOn` kırılım bilir |
|
|
191
|
+
| ~~Mobil çekmece (overlay) yok~~ | **Kapandı:** `navigations` (`layout:'sidebar'`) ≤768px'te kendi çekmecesine ve hamburger düğmesine döner — varsayılan kabuğun sol menüsü bunu kendiliğinden yapar |
|
|
189
192
|
|
|
190
193
|
---
|
|
191
194
|
|
|
@@ -193,7 +196,7 @@ bunlardan biri olabilir:
|
|
|
193
196
|
(`injectPageSchemaIntoSlots`, `getResolvedLayoutViews`), `apps/studio/src/features/page/api/page.mappers.ts`
|
|
194
197
|
(`mapPageLayoutToPreview`), `packages/ng-apps-ui/src/shared/render/render.functions.ts`
|
|
195
198
|
(`resolveNodeBoxStyle` — slot'un `y / auto` satırı, flex çocuk genişliği),
|
|
196
|
-
`packages/ng-apps-ui/src/shared/render/RenderComponent.svelte` (
|
|
199
|
+
`packages/ng-apps-ui/src/shared/render/RenderComponent.svelte` (mobil media kuralı),
|
|
197
200
|
`packages/ng-apps-screen-builder/src/flex-layout.ts` (`getFlexChildStyle` — `widthType`
|
|
198
201
|
fill/fixed/auto dalları, `normalizeCssSize` kabul kuralı; tuval ve runtime aynı fonksiyonu okur),
|
|
199
202
|
`apps/studio/src/features/page/components/appearance/appearance-size.functions.ts` (panelin
|
|
@@ -243,16 +243,9 @@ DTO'dan süzülmez (WF-026 — `platform_guide('workflow')` §Hata yolu). Sözle
|
|
|
243
243
|
- **Operatör sözlüğü kapalıdır:** `eq · neq · lt · lte · gt · gte · contains · icontains ·
|
|
244
244
|
in · notin · startswith · endswith · istartswith · iendswith · isnull · isnotnull`.
|
|
245
245
|
**`like` YOKTUR** — metin
|
|
246
|
-
araması `contains`/`icontains` iledir. Kritik tuzak:
|
|
246
|
+
araması `contains`/`icontains` iledir. Kritik tuzak: platform bilinmeyen operatörü 400 ile
|
|
247
247
|
reddetmez, **sessizce `eq`'e düşürür** (enum çözümlemesi unknown'da default'a düşer) — uç
|
|
248
|
-
testten geçer ama
|
|
249
|
-
uç çağrısının `filters` parametresinde (JSON dizisi) 400 verir; workflow tablo adımının filtresi
|
|
250
|
-
hâlâ sessizce `eq`'e düşer. Ad büyük/küçük harfe duyarlıdır: `NEQ` geçersizdir. Gateway her iki
|
|
251
|
-
sürümde istek gitmeden keser: uç tanımında ve
|
|
252
|
-
workflow tablo adımında MS-012/WF-015 (blok), çalışma anında `row_list` / `row_export` filtresinde ve
|
|
253
|
-
`microservice_execute` / `microservice_debug`'ın `filters` parametresinde hata — sık yanlışlara öneriyle
|
|
254
|
-
(`ne`/`!=` → `neq`, `like` → `contains`, `=` → `eq`). Studio'nun filtre ARAYÜZÜNDEKİ adlar
|
|
255
|
-
(`notContains`, `between`…) ayrı bir sözlüktür; arayüz onları bu işleçlere çevirir.
|
|
248
|
+
testten geçer ama arama hiçbir şey döndürmez. Gateway MS-012/WF-015 bunu istek gitmeden keser.
|
|
256
249
|
- **Write operasyonunda (`create`/`update`) yanıt yalnız primary key'dir** — platform sonucu
|
|
257
250
|
PK'ya indirger ve `selectFields`'ı kaydederken sessizce boşaltır. Yanıtın başka alan da
|
|
258
251
|
dönmesi gerekiyorsa **`returnFields`** kullanılır (öğeler `selectFields` ile aynı şekildedir:
|
|
@@ -344,25 +337,6 @@ kart doğru sütuna geçer, başlığı ve sorumlusu silinir.
|
|
|
344
337
|
> ifadeden gelir ve `undefined` dönen ifade de `null` yazar —
|
|
345
338
|
> `platform_guide('workflow')` §"Table update adımı".
|
|
346
339
|
|
|
347
|
-
### Toplu güncelleme FİLTREYLE kurulmaz
|
|
348
|
-
|
|
349
|
-
"Bekleyen bütün başvuruları onayla" bir table-source `update` ucuyla YAZILAMAZ. `update`
|
|
350
|
-
operasyonu tam olarak **bir tekil alan filtresi** ister: birden çok filtre
|
|
351
|
-
`InvalidFilterCountException`, tekil olmayan alanla filtre `FilterFieldMustUniqueException`
|
|
352
|
-
döndürür (ölçüldü 2026-09-20, S2-22). Yani hedef kümeyi bir KOŞUL belirleyemez, yalnız bir ANAHTAR
|
|
353
|
-
belirler. İki doğru yol var:
|
|
354
|
-
|
|
355
|
-
| Ne istiyorsun | Yol |
|
|
356
|
-
|---|---|
|
|
357
|
-
| Anahtarlar elinde, hepsi ya hep ya hiç yazılsın | **`bulk-update` ucu** — gövde satır dizisi, filtre yok, tek çağrı, tek transaction (yukarıdaki §"Toplu yazma"). En fazla 1000 satır; bir satır düşerse hiçbiri yazılmaz |
|
|
358
|
-
| Satır başına SONUÇ ve satır başına YETKİ kararı gerekiyor | **İş akışı + döngü** (BK-05 deseni): liste ucunu çağır → her satır için `microservice` adımı → sayaçları topla → özet döndür |
|
|
359
|
-
|
|
360
|
-
Kapsam ve politika koşulu her iki yolda da satır satır uygulanır; fark sonucun şeklidir. Toplu
|
|
361
|
-
onay gibi işlerde ikinci yol tercih edilir çünkü yetkisi yetmeyen satır ötekileri geri almaz:
|
|
362
|
-
çağıran "N onaylandı · M reddedildi" özetini alır (ölçülen koşu: iki satır da 403 ile reddedildi,
|
|
363
|
-
akış "0 onaylandı · 2 reddedildi" döndürdü). Döngüdeki uç, çağıranın kimliğiyle denetlenir —
|
|
364
|
-
akış içinden yazmak yetki YÜKSELTMEZ.
|
|
365
|
-
|
|
366
340
|
## İlişki alanı: `row_list` NESNE döner, uç/step JOIN'siz DÜZ FK döner
|
|
367
341
|
|
|
368
342
|
Aynı alan iki yoldan farklı şekilde gelir ve bu fark sessizce yanlış sonuç üretir:
|
|
@@ -704,20 +678,6 @@ Rol listesini **değiştirmek** için yukarıdaki §"Patch belgesi OKUMA şeklid
|
|
|
704
678
|
> rota `/{project}/m/{application}/{microservice SLUG'ı}`'dır ( `url` alanı rotaya GİRMEZ) ve
|
|
705
679
|
> `Host: <org>.<suffix>` + `X-Environment` başlıkları zorunludur.
|
|
706
680
|
|
|
707
|
-
### Kompleks projede
|
|
708
|
-
|
|
709
|
-
- `enforce` ortamda **anonim uç yoktur**: oturumsuz her istek `401 AppSessionRequired` döner; yukarıdaki
|
|
710
|
-
anonim veri toplama deseni kompleks projede kurulamaz. Uç izni erişim politikasıyla gelir
|
|
711
|
-
(`microservice.execute`); platform `roleIds`'i hiçbir modda karar için kullanmaz.
|
|
712
|
-
- `middlewareIds`'e bağlı middleware **her modda koşar** ve reddedebilir; set-user adımı ya da yanıttaki
|
|
713
|
-
`user` platformun doldurduğu `user`'ı ezer. Kimlik middleware'ini uçtan çıkarın (ACC-006).
|
|
714
|
-
- Table kaynaklı uç satırları kapsamla SQL'de süzer (kapsam dışı id 404), gizli alanı çıkarır, korumalı
|
|
715
|
-
alanı `__protected` ile işaretler; yetkisiz alana yazma ya da filtre 403.
|
|
716
|
-
- Query kaynaklı uç kapsamlı ya da korumalı tabloya dokunuyorsa sorgu `isUnrestricted` olmadıkça
|
|
717
|
-
`403 AccessQueryNotScoped` (ACC-005).
|
|
718
|
-
- Sınama: `access_session_create` → `asUser`; ret nedeni `access_preview` ve `microservice_debug`
|
|
719
|
-
yanıtındaki `accessDecision`. Kurallar: `platform_guide('access')`.
|
|
720
|
-
|
|
721
681
|
## Alias nerede geçerli
|
|
722
682
|
|
|
723
683
|
Alias bir **SQL tablo takma adıdır**: yalnız okunan tarafta anlamı vardır. Sözleşme iki ayrı
|
|
@@ -738,29 +698,6 @@ Yazma alanına `alias` koyarsan istek **hata vermez**, alan model bağlamada dü
|
|
|
738
698
|
istek gitmeden gövdeden çıkarır ve `gatewayNormalized` ile bildirir — böylece `silentlyDropped`
|
|
739
699
|
listesi yalnız gerçek kayıpları gösterir.
|
|
740
700
|
|
|
741
|
-
### Kök filtrenin alias'ı entity SLUG'ı olmak zorundadır (MS-023)
|
|
742
|
-
|
|
743
|
-
`filters[].alias` runtime'da iki şeyden birine eşlenir: **ana entity'nin slug'ı** ya da bir **join
|
|
744
|
-
alias'ı** (`PostgreSqlRelationHandler.GetField`). Üçüncü bir seçenek yoktur — `sourceParameters.alias`
|
|
745
|
-
alanına yazdığın kök takma ad da dâhil. Eşleşmeyen alias'lı **zorunlu** filtre isteği 400
|
|
746
|
-
`FilterFieldNotResolvedException` ile düşürür ve parametreyi hangi adla gönderirsen gönder değişmez.
|
|
747
|
-
|
|
748
|
-
Çağrı parametresinin adı aynı kuraldan çıkar:
|
|
749
|
-
|
|
750
|
-
| Filtrenin alias'ı | Çağrı parametresi (`parameterScheme[].name`) | Çalışır mı |
|
|
751
|
-
|---|---|---|
|
|
752
|
-
| entity slug'ı (`kredi_basvurusu`) | `id` — **nitelenmemiş** alan slug'ı | evet |
|
|
753
|
-
| join alias'ı (`musteri`) | `musteri.id` | evet |
|
|
754
|
-
| başka bir şey (`kredi`) | `kredi.id` | **hayır** — 400 `FilterFieldNotResolvedException` |
|
|
755
|
-
|
|
756
|
-
Yani şemadaki ad, uç çalışabildiği sürece runtime'ın beklediği addır; nitelikli bir ad görüyorsan
|
|
757
|
-
alias'ın bir JOIN alias'ı olduğundan emin ol. `microservice_get` join olmayan nitelikli adı
|
|
758
|
-
**MS-023** uyarısıyla işaretler. Düzeltme:
|
|
759
|
-
`microservice_patch { op: 'replace', path: '/sourceParameters/filters/0/alias', value: '<entity slug>' }`.
|
|
760
|
-
|
|
761
|
-
Ölçüldü 2026-09-20 (`rehber-basit/tb119-get`, entity slug `tb119_urun`): alias `u` → parametre
|
|
762
|
-
`u.kod`, çağrı 400; alias `tb119_urun` → parametre `kod`, çağrı 200.
|
|
763
|
-
|
|
764
701
|
## Zamanlanmış iş (`type: 'schedule-job'`) — `typeParameters.schedule`
|
|
765
702
|
|
|
766
703
|
Zamanlama tek bir tanımdır; `cronExpression` tek başına verilirse **UTC cron** sayılır (eski gövde).
|
|
@@ -876,19 +813,3 @@ Dört gerçek daha:
|
|
|
876
813
|
(`{ "op": "add", "path": "/description", "value": "…" }`). Patch yanıtındaki `silentlyDropped`
|
|
877
814
|
alanı, gönderilen ama kaydedilmeyen alanları listeler — boş değilse platform bir alanı yutmuş
|
|
878
815
|
demektir.
|
|
879
|
-
|
|
880
|
-
## Connect Data kaynağı olarak uç
|
|
881
|
-
|
|
882
|
-
Okuyan bir uç prop'a **akışsız** bağlanabilir (`connect_data_bind`, `platform_guide('page')` §Kural 1c-3). Şartlar
|
|
883
|
-
(ölçüldü 2026-09-21, koşu 38):
|
|
884
|
-
|
|
885
|
-
- Uç **okur** (GET tablo `get`, query ya da view kaynağı), **middleware'siz** ve **dönüş şeması** vardır; yazan tablo/sistem
|
|
886
|
-
ucu, middleware'li uç ve şemasız uç `connect_data_describe`'da 422 `ConnectDataSourceUnsupported`.
|
|
887
|
-
- **Tablo ucunda `enableDynamicFilters: true`** alanları `canFilter`/`sortable` yapar (kullanıcı filtresi tanım filtresiyle
|
|
888
|
-
AND'lenir); `sort`/`limit` query-string parametreleri offset sayfalama açar. Dinamik filtresiz ya da query kaynaklı uç
|
|
889
|
-
`pageMode: client` kalır (CD-007) ve süzmez.
|
|
890
|
-
- Uç parametreleri bağlantının `params`'ından gelir (`source.parameters`; CD-013).
|
|
891
|
-
- `connect_data_convert` bir bağlantıyı `source: connectData` bir uca çevirir: `m/{app}/{slug}` `POST { op: 'list' }` aynı
|
|
892
|
-
kabiliyet damgalı `{ data, meta, errors }` zarfını döner. Kompleks projede `microservice_execute { asUserId }` ile
|
|
893
|
-
kullanıcı gözüyle doğrulayın; `microservice_preview` Studio ucudur (ROLLBACK'li, kapıları koşmaz).
|
|
894
|
-
- Örnekler: `ngapps://examples/connect-data-workflow-microservice`, `ngapps://examples/connect-data-convert-verify`.
|
|
@@ -19,16 +19,6 @@ kavramı olmayan bir üründe auth middleware'i, ayar tablosu olmayan bir ürün
|
|
|
19
19
|
kur** — giriş sayfası + korunacak her uç ve her sayfa `middlewareIds`'e bağlı. Kısmi koruma,
|
|
20
20
|
sistemi güvenli gösterip açık bırakır.
|
|
21
21
|
|
|
22
|
-
> **Kompleks projede (`accessModel: 'complex'`) kimlik tarifleri gerekmez — bağlı kalırsa da etkisiz
|
|
23
|
-
> değildir.** Platform uygulama oturumunu kendisi yönetir (`POST /{proje}/runtime/{app}/auth/sign-in`), uç
|
|
24
|
-
> yolunda `user` değişkenini güvenilir özneyle önceden doldurur ve yetkiyi erişim politikasıyla verir. Bağlı
|
|
25
|
-
> middleware'ler ise zorlama modundan bağımsız **her modda koşar** ve reddedebilir; set-user adımı ya da
|
|
26
|
-
> yanıttaki `user` platformun `user`'ını **ezer**. Kimlik middleware'ini uçların ve sayfaların
|
|
27
|
-
> `middlewareIds`'inden çıkarın (ACC-006, warn). Rol listesini (`microservice.roles`, `page.roleIds`)
|
|
28
|
-
> platform hiçbir modda karar için kullanmaz; yalnız `Authorized(user.roles)` çağıran middleware okur.
|
|
29
|
-
> Kompleks projenin yolu `platform_guide('access')` §Runtime; bu rehberin tarifleri basit projede aynen
|
|
30
|
-
> geçerlidir.
|
|
31
|
-
|
|
32
22
|
## Açıklama zorunlu
|
|
33
23
|
|
|
34
24
|
Middleware de bir workflow'dur: her adımı ve middleware'in kendisi `description` taşımak
|
|
@@ -66,15 +56,8 @@ cevabı adımın ifadesinde gizlidir. Ayrıntı ve yazım ölçütü: `platform_
|
|
|
66
56
|
kuracaksan ifadeyi guard'la: `typeof user === 'undefined' ? false : Authorized(user.roles)`.
|
|
67
57
|
Gateway `set-user` adımı olmadan `user` okuyan middleware'i **MW-003** ile uyarır.
|
|
68
58
|
4. **`input` YOKTUR.** Middleware girdisini HTTP bağlamından okur: `cookie`, `header`,
|
|
69
|
-
`queryString`, `body`, `triggerSource` (hangi microservice/sayfa tetikledi: type,
|
|
70
|
-
slug, roles,
|
|
71
|
-
**impersonatedUserId**, language). Kimlik devri **yalnız `context.impersonatedUserId`**'dedir;
|
|
72
|
-
`triggerSource.impersonatedUserId` diye bir alan yoktur, hep `undefined` okunur (MW-006).
|
|
73
|
-
`context.impersonatedUserId` ve start adımının `impersonation` dalı yalnız Studio önizlemesinde
|
|
74
|
-
seçilen uygulama kullanıcısı için dolar; kimlik devrini yalnız super-admin yapabilir, anonim ya da
|
|
75
|
-
yetkisiz istekte başlık platformda silinir. `impersonation` dalı bağlı değilse start
|
|
76
|
-
`success`'e düşer — uygulamanın kendi auth yolu koşar (ZM-22, 2026-09-26). Tarif: 1c. Hazır
|
|
77
|
-
fonksiyonlar: `system.validateToken(...)`,
|
|
59
|
+
`queryString`, `body`, `triggerSource` (hangi microservice/sayfa tetikledi: type, name,
|
|
60
|
+
slug, roles, impersonatedUserId). Hazır fonksiyonlar: `system.validateToken(...)`,
|
|
78
61
|
`system.generateToken(...)`, `crypto.JWT.encode/validate`, `Authorized(user.roles)`,
|
|
79
62
|
`request.url.searchParams`, `GenerateGuid()`, `UtcNow()`, `system.getPageUrl(slug)` —
|
|
80
63
|
**tam sözlük ve gerçek örnekler: `platform_guide('expressions')`**.
|
|
@@ -214,31 +197,6 @@ guard → [condition] triggerSource.type === 'page'
|
|
|
214
197
|
Korumalı her sayfada yukarıdaki `redirect → response` zinciri kurulmalı ve **tokensız bir
|
|
215
198
|
istekle 401 verdiği görülerek** kabul edilmeli. Karşılığı: `platform_guide('page')` Kural 8.
|
|
216
199
|
|
|
217
|
-
## Tarif 1c — Studio önizlemesinde seçilen kullanıcıyla açılış (`impersonation` dalı)
|
|
218
|
-
|
|
219
|
-
Özel auth middleware'li bir uygulamada Studio'nun Preview alt çubuğundaki kullanıcı seçici
|
|
220
|
-
(`impersonated-user-id` başlığı) jeton taşımaz; yalnız jeton yolu olan middleware bu istekte 401
|
|
221
|
-
döner ya da `user` kurmadan biter ve korumalı her uç `user is not defined` ile 500 verir (ZM-22).
|
|
222
|
-
Seçilen kullanıcıyla açılmak için start adımının **`impersonation` dalını** bağlayın:
|
|
223
|
-
|
|
224
|
-
```
|
|
225
|
-
start ─ success → token → token_check → userTable → setUser → response 200 (normal yol)
|
|
226
|
-
─ impersonation → kimlik [table get: users, filtre id eq context.impersonatedUserId]
|
|
227
|
-
→ var_mi [condition] ─ else → response 401
|
|
228
|
-
→ setUser (aynı set-user ifadesi) → response 200
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
```jsonc
|
|
232
|
-
// start adımının dalları — impersonation dalının adı ve tipi 'impersonation'
|
|
233
|
-
{ "id": "<GUID>", "name": "impersonation", "type": "impersonation", "nextStepId": "<kimlik adımının id'si>" }
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
- Dal **yalnız** platform kimlik devrini doğruladığında seçilir (Studio önizlemesi, super-admin);
|
|
237
|
-
başlığı elle ekleyen istek normal `success` yolundan geçer. Bu yüzden değer yalnız bu dalda anlamlıdır:
|
|
238
|
-
**`context.impersonatedUserId`'yi dal dışında yetki kararı için okumayın.**
|
|
239
|
-
- Kullanıcı satırını yine tablodan okuyun; değerin kendisi yalnız bir kimliktir, rol ya da sahiplik
|
|
240
|
-
taşımaz. `set-user` ifadesi normal yolla aynı şekli üretmelidir (kapsam workflow'ları `user.id` okur).
|
|
241
|
-
|
|
242
200
|
## Tarif 3b — Rol kapısı: `microservice.roles` TEK BAŞINA hiçbir şeyi kapatmaz
|
|
243
201
|
|
|
244
202
|
**Ölçüm (2026-08-19):** `roleIds: ['<admin rol id>']` verilmiş ama `middlewareIds` **boş** bir
|