@appaflytech/zeyrek-ai-mcp 0.0.6 → 0.0.8
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 +2 -2
- package/.env.production.example +8 -0
- package/README.md +9 -8
- package/dist/config.js +18 -3
- package/dist/knowledge/backendConstraints.js +88 -0
- package/dist/knowledge/componentCatalog.js +415 -68
- package/dist/knowledge/componentEvents.js +120 -25
- package/dist/knowledge/functionGuards.js +134 -0
- package/dist/knowledge/normalize.js +512 -25
- package/dist/knowledge/outlines.js +31 -0
- package/dist/knowledge/policy.js +14 -5
- package/dist/knowledge/propTypes.js +5 -4
- package/dist/knowledge/rules.js +453 -6
- package/dist/knowledge/styleResolve.js +6 -1
- package/dist/platform/csv.js +123 -0
- package/dist/platform/errors.js +62 -3
- package/dist/platform/http.js +11 -2
- package/dist/platform/responses.js +16 -4
- package/dist/platform/screenshot.js +98 -9
- package/dist/platform/strictArguments.js +32 -0
- package/dist/platform/writeDiff.js +6 -3
- package/dist/resources/examples/flow-call-function.json +66 -0
- package/dist/resources/examples/function-total.json +70 -0
- package/dist/resources/examples/microfunction-node-sum.json +56 -0
- package/dist/resources/examples/page-dynamic-form.json +1 -1
- package/dist/resources/examples/page-sign-in.json +2 -2
- package/dist/resources/guides/component.md +14 -2
- package/dist/resources/guides/entity.md +321 -17
- package/dist/resources/guides/expressions.md +9 -0
- package/dist/resources/guides/functions.md +262 -0
- package/dist/resources/guides/getting-started.md +7 -0
- package/dist/resources/guides/layout.md +6 -0
- package/dist/resources/guides/merge.md +231 -0
- package/dist/resources/guides/microfunction.md +166 -0
- package/dist/resources/guides/microservice.md +166 -7
- package/dist/resources/guides/modify-existing.md +23 -0
- package/dist/resources/guides/page.md +101 -22
- package/dist/resources/guides/translation.md +35 -10
- package/dist/resources/guides/workflow.md +51 -2
- package/dist/resources/schema-fingerprint.json +4 -4
- package/dist/resources/schemas/AnalyzeImportQuery.json +51 -0
- package/dist/resources/schemas/ApplyMergePlanCommand.json +19 -0
- package/dist/resources/schemas/CreateBulkRowCommand.json +3 -0
- package/dist/resources/schemas/CreateEnvironmentCommand.json +31 -0
- package/dist/resources/schemas/CreateGlobalFunctionCommand.json +95 -0
- package/dist/resources/schemas/CreateImportPlanCommand.json +278 -0
- package/dist/resources/schemas/CreateMergePlanCommand.json +34 -0
- package/dist/resources/schemas/CreateMicrofunctionCommand.json +117 -0
- package/dist/resources/schemas/CreateMicrofunctionRuntimeCommand.json +51 -0
- package/dist/resources/schemas/CreateMicroserviceCommand.json +123 -2
- package/dist/resources/schemas/CreateWorkflowCommand.json +17 -3
- package/dist/resources/schemas/DataJobDto.json +267 -0
- package/dist/resources/schemas/ExportRowsCommand.json +172 -0
- package/dist/resources/schemas/Filter.json +3 -1
- package/dist/resources/schemas/GetRowsQuery.json +3 -1
- package/dist/resources/schemas/GlobalFunctionDto.json +89 -0
- package/dist/resources/schemas/GlobalFunctionUpdateResultDto.json +249 -0
- package/dist/resources/schemas/ImportAnalysisDto.json +401 -0
- package/dist/resources/schemas/ImportPlanDto.json +260 -0
- package/dist/resources/schemas/ImportSampleDto.json +90 -0
- package/dist/resources/schemas/InvokeMicrofunctionCommand.json +25 -0
- package/dist/resources/schemas/PreviewMicroserviceCommand.json +123 -2
- package/dist/resources/schemas/PreviewWorkflowCommand.json +17 -3
- package/dist/resources/schemas/ResolveMergeConflictsCommand.json +58 -0
- package/dist/resources/schemas/RevertMergePlanCommand.json +19 -0
- package/dist/resources/schemas/RunImportCommand.json +62 -0
- package/dist/resources/schemas/StepDto.json +17 -3
- package/dist/resources/schemas/UpdateBulkRowCommand.json +3 -0
- package/dist/resources/schemas/UpdateEntityCommand.json +3 -1
- package/dist/resources/schemas/UpdateGlobalFunctionCommand.json +66 -0
- package/dist/resources/schemas/UpdateMicrofunctionCommand.json +121 -0
- package/dist/resources/schemas/UpdateMicrofunctionRuntimeCommand.json +54 -0
- package/dist/resources/schemas/UpdateMicroserviceCommand.json +123 -2
- package/dist/resources/schemas/UpdateWorkflowCommand.json +17 -3
- package/dist/server.js +17 -4
- package/dist/tools/activities.js +40 -0
- package/dist/tools/automations.js +14 -5
- package/dist/tools/common.js +16 -0
- package/dist/tools/dependencies.js +1 -1
- package/dist/tools/environments.js +52 -0
- package/dist/tools/files.js +51 -50
- package/dist/tools/flows.js +104 -5
- package/dist/tools/functions.js +331 -0
- package/dist/tools/importSchemas.js +79 -0
- package/dist/tools/imports.js +241 -0
- package/dist/tools/layouts.js +4 -4
- package/dist/tools/merges.js +113 -0
- package/dist/tools/microfunctions.js +155 -0
- package/dist/tools/microservices.js +112 -9
- package/dist/tools/pages.js +188 -66
- package/dist/tools/platformInfo.js +4 -1
- package/dist/tools/queries.js +72 -6
- package/dist/tools/revisions.js +94 -0
- package/dist/tools/rows.js +342 -22
- package/dist/tools/screenWrite.js +11 -2
- package/dist/tools/templates.js +32 -5
- package/dist/tools/workflows.js +28 -6
- package/package.json +3 -1
|
@@ -78,16 +78,18 @@ mümkündür ama doğrulama duvarı ve canlı canvas yalnız `page_schema_patch`
|
|
|
78
78
|
her turda çözümlenmiş metinle EZER — anahtar yalnız `ref`'te yaşar, `data`'ya yazıp
|
|
79
79
|
güvenme (`code` prop'uyla aynı davranış). Tam şekil, fallback zinciri ve `translation_*`
|
|
80
80
|
tool'ları için `platform_guide('translation')`.
|
|
81
|
-
- **Kurulmuş bir düğümün prop TİPİNİ
|
|
81
|
+
- **Kurulmuş bir düğümün prop TİPİNİ yerinde değiştir — düğümü yeniden KURMA.** İki eş yol var:
|
|
82
|
+
`{ op: 'replace_prop', target: '<elementId>', prop: 'content', value: { type: 'translation', ref: 'dashboard.kpi.total' } }`
|
|
83
|
+
(applier `code` ve `translation` sarmalını tipiyle korur; gateway 2026-09-15'e kadar translation
|
|
84
|
+
sarmalını reddediyordu) ya da
|
|
82
85
|
`{ op: 'set_prop_type', target: '<elementId>', prop: 'content', propType: 'translation', ref: 'dashboard.kpi.total' }`
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
gönderilmeden reddedilir ve `page_schema_validate` aynı kararı verir.
|
|
86
|
+
(gateway emülasyonu; mevcut `data`'yı tasarım yedeği olarak taşır). Taşıyıcı alan tipe göre
|
|
87
|
+
değişir — `static` değeri `data`'da, `code` ve `translation` `ref`'te taşır; eksik taşıyıcı istek
|
|
88
|
+
gönderilmeden reddedilir ve `page_schema_validate` aynı kararı verir. Eski yol
|
|
89
|
+
`remove_component` + `add_component` idi: 2026-09-06 koşusunda on bir etiket bu yolla kuruldu ve
|
|
90
|
+
onlara yazan **dokuz setter iteratee'si** sessizce silindi; 2026-09-15'te (G-04) aynı zincir bir
|
|
91
|
+
`daterangepicker` yer tutucusunu çeviriye bağlarken tekrarlandı — setter hedefi elementId değil
|
|
92
|
+
komponentin iç kimliğidir (aşağıda Kural 2, `FLOW-018`).
|
|
91
93
|
|
|
92
94
|
- **`blocks[].size`, komponentin `component_get`'teki `maxSize`'ını aşamaz.** Dikkat: katalog
|
|
93
95
|
varsayılanı aşabiliyor (`page-header` default `h:8`, `maxSize` `h:4`) — varsayılanı körü körüne
|
|
@@ -394,6 +396,14 @@ göstermek error flow'un işidir.
|
|
|
394
396
|
> "branches": [{ "id": "<GUID>", "name": "always", "nextStepId": null }] }
|
|
395
397
|
> ```
|
|
396
398
|
|
|
399
|
+
> **`confirm` adımının diyalog çerçevesi de yazılabilir.** `args` dört düz metin alanı taşır:
|
|
400
|
+
> `message` (gövde), `title` (başlık), `confirmText` (onay düğmesi, `yes` dalı), `cancelText`
|
|
401
|
+
> (vazgeç düğmesi, `no` dalı). Son üçü isteğe bağlıdır; boş bırakılan alan dile göre sabit metne
|
|
402
|
+
> düşer ("Emin misiniz?" / "Evet" / "Hayır" — `dialog.functions.ts` `resolveDialogFrame`).
|
|
403
|
+
> Dördü de `alert`'in `message`'ı gibi DÜZ METİNDİR (FLOW-022 hepsini denetler):
|
|
404
|
+
> `{ "type": "confirm", "args": { "message": "Bu risk ve 4 aksiyonu silinecek.", "title": "Riski sil",
|
|
405
|
+
> "confirmText": "Sil", "cancelText": "Vazgeç" } }`.
|
|
406
|
+
|
|
397
407
|
> **Hangi yolu seçeceksin — `errorSteps` mi, ana akışta `condition` mı?** İkisi birden
|
|
398
408
|
> kurulamaz (yukarıdaki 1. madde), yani bu bir tercih değil bir karar:
|
|
399
409
|
>
|
|
@@ -479,7 +489,7 @@ Tarif: `platform_guide('middleware')`.
|
|
|
479
489
|
|
|
480
490
|
**Sözlükler** (`StepType.cs`, `StepParameterValueType.cs` — hepsi küçük harf):
|
|
481
491
|
`start · microservice · setter · setcookie · validation · condition · redirect · alert ·
|
|
482
|
-
confirm · flow-trigger · storage · navigate · code · download · end`
|
|
492
|
+
confirm · flow-trigger · storage · navigate · code · download · function · end`
|
|
483
493
|
değer tipleri: `static · page · property · storage · variable · code · item · state`
|
|
484
494
|
|
|
485
495
|
> **Sözlükte olmak KOŞACAĞI anlamına gelmez — koşan tipler barındırıcıdan gelir.** Motor yedi
|
|
@@ -490,7 +500,7 @@ değer tipleri: `static · page · property · storage · variable · code · it
|
|
|
490
500
|
>
|
|
491
501
|
> | Adım tipi | Web | Mobil | Nerede register ediliyor |
|
|
492
502
|
> |---|---|---|---|
|
|
493
|
-
> | `start` · `setter` · `code` · `condition` · `microservice` · `validation` · `flow-trigger` | ✅ | ✅ | `flow-engine.ts` — motorun kendisi |
|
|
503
|
+
> | `start` · `setter` · `code` · `condition` · `microservice` · `validation` · `flow-trigger` · `function` | ✅ | ✅ | `flow-engine.ts` — motorun kendisi (`function` mobilde kayıtlıdır ama mobil runtime `Functions`'ı boş kurar — K11, çağrı çalışmaz) |
|
|
494
504
|
> | `alert` · `redirect` · `setcookie` · `storage` | ✅ | ✅ | uygulama; mobilde `redirect` navigate, `setcookie` storage uygulamasına eşlenir |
|
|
495
505
|
> | `confirm` · `download` | ✅ | ❌ | yalnız `Runtime.svelte` |
|
|
496
506
|
> | `navigate` | ❌ | ✅ | yalnız `ScreenRuntime.tsx` — web'deki karşılığı `redirect` |
|
|
@@ -521,6 +531,14 @@ değer tipleri: `static · page · property · storage · variable · code · it
|
|
|
521
531
|
> (`Page.*`, komponentlere adıyla erişim, `state.page/app`, `Steps`, `self`/`item`/`event`,
|
|
522
532
|
> `cookie.get/set`, `await`) ve `value.type` çözümleme tablosu için
|
|
523
533
|
> **`platform_guide('expressions')`** — uydurma erişim adı sessizce `undefined` üretir.
|
|
534
|
+
>
|
|
535
|
+
> **`function` adımı ("Call function")** bir kullanıcı fonksiyonunu çağırır: `args: { functionId, functionName,
|
|
536
|
+
> parameters: [{ name, value }] }` — `functionId` zorunlu ve gerçek (`function_list`; FLOW-024 block),
|
|
537
|
+
> `parameters[].name` fonksiyonun bildirimindeki adla eşleşir, `value` şekli `microservice` adımıyla
|
|
538
|
+
> aynıdır. Çıktı `Steps.<adımAdı>.data` (hata `.error.message`), dal `always`. Aynı fonksiyon `code`
|
|
539
|
+
> adımında ve `{{ }}` bağlamasında `Functions.<ad>(…)` ile de çağrılır; gateway bilinmeyen adı ve
|
|
540
|
+
> fazla argümanı FLOW-025 ile uyarır. Tam gövde `ngapps://examples/flow-call-function`, kurallar
|
|
541
|
+
> **`platform_guide('functions')`**.
|
|
524
542
|
|
|
525
543
|
> Bir microservice adımı kaydedildiğinde platform `args.microserviceSchema`'yı
|
|
526
544
|
> (parameterScheme + returnScheme + `isReturnArray`) kendisi doldurur — `flow_get` ile geri
|
|
@@ -812,8 +830,9 @@ kullanır: `page.mappers.ts` `mapPageLayoutToPreview` — layout varsa çizilen
|
|
|
812
830
|
>
|
|
813
831
|
> Kural: **`isWrapper` yalnız gerçekten sayfa boyu kaplaması gereken kap içindir**
|
|
814
832
|
> (`page_container` böyledir ve öyle kalmalı). Sadece "başlık/çerçeve çizilmesin" diye wrapper
|
|
815
|
-
> yapma — o iş `container` için `style` ile (`background:'transparent'`,
|
|
816
|
-
> `form`
|
|
833
|
+
> yapma — o iş `container` için de `form` için de `style` ile yapılır (`background:'transparent'`,
|
|
834
|
+
> `border:'none'`, `padding:0`). `form`'un eski `hideBorders`/`hidePadding` prop'ları
|
|
835
|
+
> 2026-09-09'da şemadan kaldırıldı — bileşen onları hiçbir zaman okumuyordu, no-op'tu. **`states` için micro-op
|
|
817
836
|
> YOKTUR:** yanlış `isWrapper`'ı düzeltmenin tek yolu düğümü `remove_component` +
|
|
818
837
|
> `add_component` ile yeniden kurmaktır (sonrasında Kural 2'deki flow yeniden kaydetme adımı
|
|
819
838
|
> ZORUNLU olur).
|
|
@@ -884,6 +903,16 @@ Beş şeyi bilmeden flex kurma:
|
|
|
884
903
|
aradaki boşluklar çizilmez. Yine de bitişik ver (0,1,2…): kapsayıcı ileride `grid`'e
|
|
885
904
|
döndürülürse şema geçerli kalsın. Gateway bu yüzden **flex kapsayıcının İÇİNDE PAGE-010
|
|
886
905
|
boşluk uyarısı üretmez** (ızgarada üretmeye devam eder).
|
|
906
|
+
**Dizi sırası çizimi belirlemez** — `children[]` içindeki yer değil `y` kazanır; `y`'si eşit
|
|
907
|
+
iki çocukta dizi sırası kazanır. Bu yüzden flex kapta sıralamanın yolu `index`'tir:
|
|
908
|
+
`add_component`/`move_component`'e verilen `index` **görünen sıradaki yeri** belirler ve gateway
|
|
909
|
+
kardeşlerin konumunu Studio'nun flex tuvali gibi yeniden yazar (x=0, alt alta birikimli y;
|
|
910
|
+
yanıtın `gatewayNormalized` notu hangi `y`'nin değiştiğini söyler). Grafiğin üstüne başlık:
|
|
911
|
+
`{ "op": "add_component", "parent": "<flex kap>", "index": 0, "component": { … } }` — koordinat
|
|
912
|
+
hesaplamak gerekmez, `remove_component` + `add_component` hiç gerekmez. **Izgara kapta `index`
|
|
913
|
+
çizimi değiştirmez** (her çocuk kendi `position`'ında mutlak çizilir): sırayı
|
|
914
|
+
`move_component { target, position: { x, y } }` ile ver; sona eklemeyen `index` orada
|
|
915
|
+
**PAGE-033 (uyarı)** üretir.
|
|
887
916
|
3. **Flex kapsayıcının yüksekliği içeriğine oturur.** `verticalAlign`'ın dağıtacak boşluğu
|
|
888
917
|
olması için `appearance.heightType: 'fixed'` vermelisin — ölçü `heightString`'den
|
|
889
918
|
(serbest CSS uzunluğu, ör. `"30vh"`), o yoksa `size.h × 10px`'ten gelir. `heightString`
|
|
@@ -1001,7 +1030,8 @@ UYGULAMAZ** — koordinatları aynen kaydeder (aşağı itme yalnız `page_creat
|
|
|
1001
1030
|
> sarmalayıcıya bağla (yukarıdaki `box_multi`). Sarmalayıcıyı **`isWrapper:false`** kur
|
|
1002
1031
|
> (Kural 1f: wrapper = `min-height:80vh`) ve çerçevesini `style` ile kapat:
|
|
1003
1032
|
> `{ background:'transparent', border:'none', '&__body': { padding:'0px' } }`.
|
|
1004
|
-
> `appearance.isHidden` diye bir
|
|
1033
|
+
> `appearance.isHidden` diye bir alan YOKTUR (2026-09-15'te platformdan kaldırıldı, S-16) —
|
|
1034
|
+
> görünürlük yalnız `props.isHidden`'dır.
|
|
1005
1035
|
|
|
1006
1036
|
> **Satır BAŞINA doğrulama kurulamaz.** `validations` komponentin kendisindedir, tüm satırlar
|
|
1007
1037
|
> onu paylaşır — "3. soru zorunlu, 4. soru değil" şemayla ifade edilemez. Zorunluluk satır
|
|
@@ -1129,6 +1159,13 @@ yapmazsan ekran "platform mavisi" görünür; marka rengine çevirmek tek satır
|
|
|
1129
1159
|
BÜTÜN girdileri yuvarlar; aynı şeyi komponent komponent `&__input { borderRadius }` yazarak
|
|
1130
1160
|
yapmak hem uzun sürer hem de yeni komponent eklendiğinde tutarsızlık üretir.
|
|
1131
1161
|
|
|
1162
|
+
**Koyu tema karesi için sayfada `theme-toggle` bulunması gerekmez.** Ziyaretçinin tema tercihi
|
|
1163
|
+
çerezde değil `localStorage`'da (`zeyrek-viewer-theme-mode`) yaşar ve tema store'u onu sayfa
|
|
1164
|
+
açılırken bir kez okur; `page_screenshot` `colorScheme: 'dark' | 'light'` parametresi tercihi
|
|
1165
|
+
sayfa script'lerinden ÖNCE eker. İki temayı da doğrulamak, tasarıma düğme eklemeden iki çağrıdır
|
|
1166
|
+
(aynı tool'un `language` parametresi ikinci dil için aynı işi yapar —
|
|
1167
|
+
`platform_guide('translation')`).
|
|
1168
|
+
|
|
1132
1169
|
### 1h-3 — Ölçülmüş hazır bloklar (anket ekranından, olduğu gibi kullanılabilir)
|
|
1133
1170
|
|
|
1134
1171
|
```jsonc
|
|
@@ -1543,6 +1580,19 @@ alanına dokunur. **Komponenti silip yeniden eklemeyin:** `remove_component` + `
|
|
|
1543
1580
|
turu o komponente bağlı setter hedeflerini koparır (Kural 1e sonundaki not) ve komponentin tek
|
|
1544
1581
|
referans verdiği akışları kalıcı olarak sildirir (Kural 2'deki yan etki notu).
|
|
1545
1582
|
|
|
1583
|
+
**Kurulu düğümün appearance'ını değiştirmek: `set_appearance`.** Aynı gerekçeyle appearance için
|
|
1584
|
+
de silip yeniden ekleme gerekmez:
|
|
1585
|
+
|
|
1586
|
+
```jsonc
|
|
1587
|
+
{ "op": "set_appearance", "target": "box_summary", "appearance": { "heightType": "auto", "tooltip": null } }
|
|
1588
|
+
```
|
|
1589
|
+
|
|
1590
|
+
Op **birleştirir**: yalnız verilen alanları yazar, gerisini korur; `null` alanı temizler. Alan
|
|
1591
|
+
adları `page_schema_get`'in döndürdüğü appearance anahtarlarıdır; bilinmeyen alan
|
|
1592
|
+
`unknown-appearance-field`, tanınmayan enum değeri (`heightType: "tall"`) 400 ile reddedilir.
|
|
1593
|
+
**`isHidden` bir appearance alanı DEĞİLDİR** — gizlemek için `replace_prop { prop: 'isHidden' }`
|
|
1594
|
+
ya da `set_binding { prop: 'isHidden' }` (Kural 7a'daki `isHidden` notu).
|
|
1595
|
+
|
|
1546
1596
|
**Kip ayrımı query parametresidir:** aynı sayfa `?id=<kayıt>` ile edit, parametresiz create.
|
|
1547
1597
|
|
|
1548
1598
|
`mount` akışı (`page_container` ya da `form` üzerine bağlanır):
|
|
@@ -1655,10 +1705,12 @@ start → [setter] btn_save.isLoading = true
|
|
|
1655
1705
|
> artık doğrudan `props.isHidden` yazılabilir; sırf gizlemek için `container`'a sarmak
|
|
1656
1706
|
> GEREKMEZ. Tek doğru kaynak `component_get` + `page_schema_validate` kuru koşusudur.
|
|
1657
1707
|
>
|
|
1658
|
-
>
|
|
1659
|
-
>
|
|
1660
|
-
>
|
|
1661
|
-
>
|
|
1708
|
+
> **Appearance'ta `isHidden` alanı YOKTUR** (2026-09-15'te platformdan kaldırıldı, S-16): renderer
|
|
1709
|
+
> yalnız `props.isHidden`'a bakar. Başlangıçta gizli bildirim şemada
|
|
1710
|
+
> `"props": { "isHidden": { "type": "static", "data": true } }` ile kurulur, açılışı akıştaki
|
|
1711
|
+
> setter yapar. `add_component` / `page_update` gövdesine yine de `appearance.isHidden` konursa
|
|
1712
|
+
> gateway değeri `props.isHidden`'a taşır ve `gatewayNormalized`'da bildirir (prop zaten verilmişse
|
|
1713
|
+
> o kazanır); `set_appearance` ile `isHidden` yazmak istek gönderilmeden reddedilir.
|
|
1662
1714
|
|
|
1663
1715
|
### 7b — Liste → form geçişi
|
|
1664
1716
|
|
|
@@ -1848,6 +1900,18 @@ hiçbiri** bağlı değildi; üç portalın da rol menüsü boş çıkıyor, pan
|
|
|
1848
1900
|
> hiç görünmeyen düğüm var; `zeroSized` çizilmemiş komponenti gösterir. Runtime düğümleri
|
|
1849
1901
|
> `data-element-id` basmıyorsa yanıt `layoutReportUnavailable` der — tool tahmin üretmez.
|
|
1850
1902
|
>
|
|
1903
|
+
> **Sürükle-bırakı gerçekten sınamak (G-09).** `kanban` ve `eventcalendar` iç öğelerine
|
|
1904
|
+
> `<elementId>__<rol>` kimliği yazar (tablonun `__row-<n>`'i ile aynı kalıp):
|
|
1905
|
+
> kart `kb_board__card-<id>`, kolon `kb_board__col-<value>`; etkinlik `cal_plan__event-<id>`,
|
|
1906
|
+
> gün `cal_plan__day-<yyyy-MM-dd>`, tüm gün hücresi `cal_plan__allday-<yyyy-MM-dd>`, saat dilimi
|
|
1907
|
+
> `cal_plan__slot-<yyyy-MM-dd>T<HH>`. `id`, `idField`'ın değeridir (yoksa `card-<sıra>` /
|
|
1908
|
+
> `event-<sıra>`); tarih yereldir. Tıklama yolu `click` ile, taşıma `drag` ile sınanır:
|
|
1909
|
+
> `actions: [{ action:'drag', target:'kb_board__card-42', to:'kb_board__col-Assigned' }]`.
|
|
1910
|
+
> `actionsReport[].flowRuns`/`requests` sıfırsa `cardMove`/`eventMove` bağı kurulu görünse de
|
|
1911
|
+
> taşıma kalıcılaşmamıştır. Kaynak `draggable` değilse (`isDraggable`/`isEditable` kapalı)
|
|
1912
|
+
> adım `applied:false` ve notla döner. Çok günlü etkinlik aynı kimliği her gün hücresinde taşır;
|
|
1913
|
+
> hedef ilk eşleşmedir.
|
|
1914
|
+
>
|
|
1851
1915
|
> **Üye kimliğiyle doğrulama (`asUser`).** Kapının kapalı olduğunu görmek yarısıdır; açık
|
|
1852
1916
|
> olduğunu görmek diğer yarısı. `page_runtime_get` ve `page_screenshot` aynı `asUser` alanını
|
|
1853
1917
|
> alır: uygulamanın kendi giriş ucundan (`microservice_execute`) aldığın üye jetonunu verirsin,
|
|
@@ -1935,10 +1999,22 @@ micro-op hattına dönün.
|
|
|
1935
1999
|
>
|
|
1936
2000
|
> **Gateway artık bunu söylüyor (FLOW-018).** `remove_component` içeren bir yamada gateway sayfanın
|
|
1937
2001
|
> akışlarını okur ve silinen düğümü hedefleyen setter adımlarını uyarı olarak listeler: hangi akış,
|
|
1938
|
-
> hangi adım, hangi hedef.
|
|
1939
|
-
> yeniden kaydetmektir. Ters yönü (`silinen düğümün referans verdiği` akışların platformca kalıcı
|
|
2002
|
+
> hangi adım, hangi hedef. Ters yönü (`silinen düğümün referans verdiği` akışların platformca kalıcı
|
|
1940
2003
|
> silinmesi) ayrı bir uyarı kapsar; ikisi birlikte çıkabilir. Ölçüm 2026-09-04 (benchmark 4. koşu):
|
|
1941
2004
|
> uyarı yokken aynı tuzak ~8 dakika teşhis aldı ve yalnız ekran görüntüsüyle görüldü.
|
|
2005
|
+
>
|
|
2006
|
+
> **Mekanizma ve onarım (2026-09-15, G-04).** Setter iteratee'si hedefini elementId olarak DEĞİL,
|
|
2007
|
+
> komponentin iç kimliği olarak saklar (`step_iterates.DesignComponentId`, FK `SetNull`); düğüm
|
|
2008
|
+
> yeni kimlikle yazılınca eski satır silinir ve alan boşalır — `flow_get` iteratee'yi `element`'siz
|
|
2009
|
+
> döndürür. Bu yüzden **`flow_get`'ten okunan gövdeyi aynen yeniden kaydetmek onarmaz** (element
|
|
2010
|
+
> zaten yok; `flow_update` FLOW-017'ye takılır). İki güvence var: (1) backend artık AYNI yamada
|
|
2011
|
+
> silinip aynı `elementId` ile eklenen düğüme (alt ağaç dahil) eski kimliğini geri veriyor, bağ
|
|
2012
|
+
> kopmuyor; (2) gateway yamadan sonra akışları yeniden okur ve kopan her iteratee için yanıtta
|
|
2013
|
+
> `flowTargetsLost` ile hazır onarımı verir:
|
|
2014
|
+
> `flow_patch` `{ op: 'add', path: '/steps[stepId=s4]/args/iteratees/0/element', value: 'f_range' }`.
|
|
2015
|
+
> `flow_get` de hedefsiz setter iteratee'sini `flowWarnings` (`FLOW-017 (okuma)`) ile gösterir.
|
|
2016
|
+
> Ayrı isteklerle (önce sil, sonra ekle) yapılan yeniden kurulum ve komple şema yazan `page_update`
|
|
2017
|
+
> bu korumanın DIŞINDADIR — prop tipini değiştirmek için düğümü hiç yeniden kurmayın.
|
|
1942
2018
|
|
|
1943
2019
|
## Bilinen sınırlar
|
|
1944
2020
|
|
|
@@ -2013,8 +2089,11 @@ micro-op hattına dönün.
|
|
|
2013
2089
|
(süssüz) ekrana ifadenin **kendisini** basar; ifade yalnız `data`'da olursa prop **boş**
|
|
2014
2090
|
render edilir. `set_binding` micro-op'u eski sürümlerde `data`'ya yazıyordu — bu davranış
|
|
2015
2091
|
düzeltildi, ama daha önce kurulmuş sayfalarda kalıntı olabilir. Prop nesnesini birebir
|
|
2016
|
-
kontrol etmen gerekirse `
|
|
2017
|
-
`{"type":"code","ref":"{{ … }}"
|
|
2092
|
+
kontrol etmen gerekirse `replace_prop` ile
|
|
2093
|
+
`value: {"type":"code","ref":"{{ … }}"}` yaz — code tipi ve `ref` olduğu gibi kaydedilir
|
|
2094
|
+
(platform code prop'unda `data`'yı saklamaz).
|
|
2095
|
+
`replace_prop`'a `expression` alanı verme: platform onu yalnız `set_binding`'de okur (gateway
|
|
2096
|
+
code sarmalına çevirir).
|
|
2018
2097
|
|
|
2019
2098
|
- **Ana sayfa sayfadan değil application'dan değişir:** `page_create/update` gövdesindeki
|
|
2020
2099
|
`isHomepage` platformca yok sayılır (tasarım). Doğru yol `application_update` →
|
|
@@ -81,22 +81,23 @@ backend'de zaten tanımlı, Studio'nun "Translate" aksiyonunun ürettiği şekil
|
|
|
81
81
|
"value": { "type": "translation", "ref": "home.welcome", "data": "Hoş geldiniz" } }
|
|
82
82
|
```
|
|
83
83
|
|
|
84
|
-
>
|
|
85
|
-
> `
|
|
86
|
-
>
|
|
87
|
-
>
|
|
88
|
-
>
|
|
84
|
+
> **Yukarıdaki `replace_prop` sarmalı olduğu gibi çalışır (2026-09-15, G-04).** Micro-op applier
|
|
85
|
+
> `{type, ref, data}` sözlüğünün tipini korur ve `Translation` Prop'unu `Ref` + metin `Data` ile
|
|
86
|
+
> kurar (`PageSchemaMicroOpApplier.ApplyOne`). Gateway bu kullanımı eskiden reddedip komponenti
|
|
87
|
+
> yeniden eklemeyi öneriyordu; o öneri uygulanınca düğüme yazan setter iteratee'lerinin `element`'i
|
|
88
|
+
> silindi (bir panoda alt başlık ve tarih aralığı boş kaldı). Ref'siz translation sarmalı istek
|
|
89
|
+
> gönderilmeden reddedilir; nesne `data` silinir. Eş yol `set_prop_type`'tır — mevcut `data`'yı
|
|
90
|
+
> tasarım yedeği olarak taşır ve layout ağacında (micro-op hattı yok) tek yoldur:
|
|
89
91
|
>
|
|
90
92
|
> ```jsonc
|
|
91
93
|
> { "op": "set_prop_type", "target": "welcome_text", "prop": "text",
|
|
92
94
|
> "propType": "translation", "ref": "home.welcome" }
|
|
93
95
|
> ```
|
|
94
96
|
>
|
|
95
|
-
>
|
|
96
|
-
>
|
|
97
|
-
>
|
|
98
|
-
>
|
|
99
|
-
> taşıyıcı istek platforma gitmeden reddedilir ve `page_schema_validate` aynı kararı verir.
|
|
97
|
+
> İkisi de düğümün olay/setter bağlarını korur. **Prop tipini değiştirmek için
|
|
98
|
+
> `remove_component` + `add_component` yapmayın.** Taşıyıcı alan tipe göre değişir: `static` →
|
|
99
|
+
> `data`, `code` ve `translation` → `ref`. Eksik taşıyıcı istek platforma gitmeden reddedilir ve
|
|
100
|
+
> `page_schema_validate` aynı kararı verir.
|
|
100
101
|
>
|
|
101
102
|
> Ölçüldü 2026-09-08 (yerel `dil-dogrulama/dil-app`): kurulu bir `statcard`'ın `title` prop'u tek
|
|
102
103
|
> `set_prop_type` op'uyla `f11.tam` anahtarına bağlandı; gerçek ekranda `tr` → "iki dilde dolu",
|
|
@@ -123,6 +124,30 @@ Son kullanıcı dili `language-selector` komponentiyle değiştirir (`platform_g
|
|
|
123
124
|
prop'lar sayfa yenilenmeden yeniden çözülür — ayrı bir akış kurmana gerek yok, komponenti sayfaya
|
|
124
125
|
eklemen yeterli. Projede dil tanımlı değilse (`languages` boşsa) liste boş çizilir.
|
|
125
126
|
|
|
127
|
+
## Kareyi ikinci dilde almak: `page_screenshot(language:)`
|
|
128
|
+
|
|
129
|
+
Dil değiştirici **kanıt için gerekli değildir.** Runtime boot dilini şu sırayla seçer:
|
|
130
|
+
`?lang=<kod>` → tarayıcıda kayıtlı seçim → tarayıcı dilleri → projenin varsayılanı
|
|
131
|
+
(`resolveRuntimeLanguage`). `page_screenshot` `language` parametresi adrese o sorgu değerini
|
|
132
|
+
ekler; seçim hem çeviriye bağlı prop'ları hem **çok dilli alanların satır değerlerini** kapsar,
|
|
133
|
+
çünkü aynı değer veri diline de geçirilir.
|
|
134
|
+
|
|
135
|
+
```jsonc
|
|
136
|
+
{ "applicationSlug": "app", "pageSlug": "dashboard", "language": "en" }
|
|
137
|
+
{ "applicationSlug": "app", "pageSlug": "dashboard", "language": "tr" } // aynı sayfa, ikinci dil
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Bunun pratik sonucu: **referans tasarımına dil değiştirici eklemek zorunda değilsin.** Görsel
|
|
141
|
+
repro'su olan bir ekranı bozmadan iki dilin karesini alabilirsin; `language-selector` yalnız son
|
|
142
|
+
kullanıcı gerçekten dil değiştirecekse gerekir.
|
|
143
|
+
|
|
144
|
+
- Kod projenin `languages` listesinde değilse çağrı **reddedilir**. Runtime tanımadığı kodu yok
|
|
145
|
+
sayıp kareyi varsayılan dilde çizerdi ve "çevrildi" sanılan yanlış bir kare rapora girerdi.
|
|
146
|
+
- Bölgeli kod (`tr-TR`) indirgenir ve indirgeme yanıtta `languageNote` ile bildirilir.
|
|
147
|
+
- Aynı tool'un `colorScheme` parametresi ziyaretçinin tema tercihini sayfa açılmadan eker
|
|
148
|
+
(`localStorage`'daki `zeyrek-viewer-theme-mode`), yani koyu tema karesi için sayfada
|
|
149
|
+
`theme-toggle` bulunması da gerekmez.
|
|
150
|
+
|
|
126
151
|
## İstek dili: nereden gelir, hangi ifadede ne denir
|
|
127
152
|
|
|
128
153
|
Her istekte dil şu sırayla çözülür: **`X-Data-Language` başlığı → `Accept-Language` → projenin
|
|
@@ -375,6 +375,22 @@ Tek uçta "başlık + N alt kayıt" yazmanın yolu budur (anket + sorular + seç
|
|
|
375
375
|
başka alana ihtiyacı varsa bunları **`returnFields`** ile iste
|
|
376
376
|
(`{ alias, fieldId, fieldSlug }` öğeleriyle) — `selectFields` write operasyonunda sessizce
|
|
377
377
|
yok sayılır.
|
|
378
|
+
- **Bulk yazma (`bulk-create`/`bulk-update`/`bulk-delete`) table step'te de vardır**, ama tek
|
|
379
|
+
satırlık `create`/`update`'in aksine satır dizisi `fields`'tan değil, adımın **`expression`**
|
|
380
|
+
alanının (JS) sonucundan gelir: `rule.expression` bir **dizi** döndürmeli, dizideki her
|
|
381
|
+
nesnenin anahtarı alan **slug**'ıdır (fieldId değil). `bulk-delete`'te dizi ya birincil anahtar
|
|
382
|
+
değerlerinin düz listesi (`{ value: [...] }` şeklinde tek elemanlı sarmalayıcı) ya da her öğesi
|
|
383
|
+
`{ <pk slug>: <değer> }` olan nesne dizisidir. Tek istekte en fazla 1000 satır
|
|
384
|
+
(`EntityConstants.BulkRowLimit`); aşarsa `BulkRowLimitException`. `fields`'ta tanımlı ve
|
|
385
|
+
**değeri dolu** bir sabit varsa her satıra uygulanır; boş bırakılan alanlar `expression`
|
|
386
|
+
sonucundaki satırı ezmez.
|
|
387
|
+
- **Dosya (ve çoka-çok dosya) alanı `bulk-create`/`bulk-update`'te desteklenir** — microservice
|
|
388
|
+
tarafındaki `bulk-create`/`bulk-update` ile **aynı format**
|
|
389
|
+
(`{ type, fileName, value, clone, override, id }`); her satırın dosya değeri ayrı ayrı
|
|
390
|
+
`fileService`'e yüklenir, dosya alanı olan tabloda bulk artık reddedilmez.
|
|
391
|
+
- **Studio'nun workflow table formunda bulk için `expression` editörü henüz yoktur** — akışı
|
|
392
|
+
UI'dan kurarken bulk operasyonu seçilemez; `rule.expression`'ı JSON/`workflow_patch` ile elle
|
|
393
|
+
yazmak gerekir, yoksa adım `MissingParameterException` ile düşer.
|
|
378
394
|
- **Çıktının ŞEKLİ `isSingle`'a bağlıdır** (ölçüm: 09-04 koşusu Y-15). `isSingle: true` ise
|
|
379
395
|
`<step>.data` nesnedir ve `<step>.data.id` çalışır; **`isSingle: false` ise `data` bir
|
|
380
396
|
DİZİDİR** — `<step>.data.id` `undefined` olur, akış `RowValidationFailed` ile düşer ve hata
|
|
@@ -395,6 +411,38 @@ Tek uçta "başlık + N alt kayıt" yazmanın yolu budur (anket + sorular + seç
|
|
|
395
411
|
> **Gateway table step'lerinde `path`/`sort`/`limit` eksiklerini otomatik dolduruyor**
|
|
396
412
|
> (yanıtta `gatewayNormalized`). Dolu değerlere dokunmaz; yanlış path yine WF/MS block'una takılır.
|
|
397
413
|
|
|
414
|
+
## Table update adımı: yazılan alan kümesi ADIMDAN gelir
|
|
415
|
+
|
|
416
|
+
`operation: 'update'` (aynısı `create`/`upsert`) adımında SET listesi `rule.fields[]`'tir.
|
|
417
|
+
`PrepareParameters` listedeki **her** alanın ifadesini değerlendirir (`TableStep.cs:508-530`),
|
|
418
|
+
`undefined` dönen sonucu `Parse` `null`a çevirir (`CommonFieldType.cs:59`) ve satır sözlüğü
|
|
419
|
+
süzgeçsiz kurulur (`TableStep.ByUpdateAsync`, `:254-262`). İki sonucu vardır:
|
|
420
|
+
|
|
421
|
+
- Gövdede o anahtar yoksa `input.x` **`undefined`**'dır ve kolona **NULL yazılır** — eski değer
|
|
422
|
+
silinir, yanıt yine 200'dür.
|
|
423
|
+
- Adımda listelenmeyen alan hiçbir gövdeyle **değiştirilemez**.
|
|
424
|
+
|
|
425
|
+
Ölçüm (2026-09-15): `fields: [title, owner, status]` olan bir update adımına `{ id, status }`
|
|
426
|
+
gövdesi gitti; uç 200 döndü, `status` değişti, `title` ve `owner` **NULL** oldu. Microservice
|
|
427
|
+
`update` ucuyla birebir aynı davranış; tam tablo ve kısmi güncellemenin üç doğru yolu
|
|
428
|
+
`platform_guide('microservice')` §"Güncelleme sözleşmesi"nde.
|
|
429
|
+
|
|
430
|
+
Gateway bunun tanımdan görülebilen hâlini **WF-031 (warn)** ile keser: yazma adımı akışın giriş
|
|
431
|
+
DTO'sunda OLMAYAN bir `input.x` alanını bağlıyorsa o ifade kesinlikle `undefined` döner ve kural
|
|
432
|
+
eksik alanları adıyla sayar. Uyarıyı susturmanın doğru yolu adımı **eylem başına daraltmaktır**
|
|
433
|
+
(`fields[]` yalnız o eylemin yazdığı alanlar); alanı DTO'ya eklemek yalnız izin verir, çağıranın
|
|
434
|
+
her istekte göndereceğini garanti etmez.
|
|
435
|
+
|
|
436
|
+
Akışta kısmi güncelleme gerekiyorsa **oku-birleştir**: önce `table get`, sonra `table update`,
|
|
437
|
+
gelmeyen alan okunan değere düşsün —
|
|
438
|
+
|
|
439
|
+
```js
|
|
440
|
+
typeof input.title !== 'undefined' && input.title !== null ? input.title : read_row.data.title
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
(ölçüldü: `{ id, status }` gövdesiyle `title`/`owner` korundu). Bedeli fazladan bir okuma turu ve
|
|
444
|
+
**son yazan kazanır**; eylem başına ayrı uç kurmak hâlâ daha ucuz ve daha güvenlidir.
|
|
445
|
+
|
|
398
446
|
## Response step'i gövdeyi `bodyExpression`'dan üretir
|
|
399
447
|
|
|
400
448
|
`rule: { dataTransferObjectId }` **hiçbir şey döndürmez** (`result: null`). Çalışan şekil:
|
|
@@ -537,7 +585,7 @@ yolunu değiştirir: kapalı yolu deneyip raporuna "kanıtlayamadım" yazma, kan
|
|
|
537
585
|
- Join'li table step'inde kök `rule.alias` boş (WF-019, block — Postgres 42601'in sebebi)
|
|
538
586
|
- Akışta hiç okunmayan `selectFields` alanı (WF-023, warn — gereksiz taşınan sütun)
|
|
539
587
|
- Adımda ya da akışta `description` yok (WF-024, block — Studio'da adım okunamaz kalır)
|
|
540
|
-
- İlişki alanının içini okuyan ifade (WF-020, warn — join yoksa alan düz FK'dır)
|
|
588
|
+
- İlişki alanının içini okuyan ifade (WF-020, warn — join yoksa alan düz FK'dır); `Functions.<ad>()` çağrısı SUNUCUDA GEÇERSİZDİR (`WF-030` block, 2026-09-10) — `function_create source:'workflow'` ile tanımla, çıplak adla çağır
|
|
541
589
|
- `set-user` adımı olmadan `user` okuyan middleware (MW-003, warn)
|
|
542
590
|
- Backend zorunlulukları (WF-026, block — istek gitmeden): `name`/`slug`; `returnDtoId` varsa
|
|
543
591
|
`returnBehavior`, `parameterDtoId` varsa `parameterBehavior` (`primitive` | `object` | `array`),
|
|
@@ -615,7 +663,8 @@ Kaydedilen sözleşme üç tüketim yolunda da aynı şekilde bağlanır:
|
|
|
615
663
|
|---|---|
|
|
616
664
|
| `queryStepSourceType: 'library'` (workflow query adımı) | Adımın ifadeleri: `rule.expression` (nesne literali) ya da `rule.queryParameters[]` — ikisi de **JavaScript ifadesidir**; istek girdisini (`input.year`), önceki adım çıktısını **ve bağlı middleware'in `user.*` değişkenini** okur |
|
|
617
665
|
| Query kaynaklı microservice (`source: 'query'`) | Yalnız çağrının kendisi: **body → query-string → header** (`MicroserviceExecuteParameter.FindValue`); ifade YOKTUR, `user.*` bu yola girmez |
|
|
618
|
-
| `query_preview` | `parameters`
|
|
666
|
+
| `query_preview` | Komutun `definition.parameters[].value` alanı; tool'un üst düzey `parameters` argümanı (ad → değer) gateway'de oraya bağlanır. Değer almayan parametre yanıtta `unboundParameters` ile listelenir |
|
|
667
|
+
| `microservice_execute` / `microservice_debug` | Üst düzey `parameters` (ad → değer): gateway GET/DELETE'te query-string'e, POST/PUT'ta gövdeye koyar — yukarıdaki query kaynaklı uç satırının okuduğu yer. `microservice_debug` NULL bağlanan parametreyi `unboundParameters` ile adıyla verir |
|
|
619
668
|
|
|
620
669
|
> **Boş string parametre `NULL`'a çevrilir.** `Query.NormalizePreviewParameters` değeri normalize
|
|
621
670
|
> ederken boş ya da yalnız boşluktan oluşan değeri `null` yapar. `WHERE status = {{durum}}` yazıp
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"hash": "
|
|
3
|
-
"generatedAt": "2026-09-
|
|
4
|
-
"types":
|
|
5
|
-
"files":
|
|
2
|
+
"hash": "cafe3a6b082c7828cece4eaa1c0115ba28581f157eac3288abcf068c7f6f8533",
|
|
3
|
+
"generatedAt": "2026-09-15T10:24:42.398Z",
|
|
4
|
+
"types": 185,
|
|
5
|
+
"files": 107,
|
|
6
6
|
"note": "Şemaları üreten backend kaynaklarının parmak izi. Elle düzenlemeyin: 'npm run generate-schemas' yazar, 'npm run schema:check' denetler.",
|
|
7
7
|
"missing": []
|
|
8
8
|
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": {
|
|
3
|
+
"required": [
|
|
4
|
+
"fileId"
|
|
5
|
+
],
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"datasourceId": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"format": "uuid"
|
|
11
|
+
},
|
|
12
|
+
"fileId": {
|
|
13
|
+
"minLength": 1,
|
|
14
|
+
"type": "string",
|
|
15
|
+
"format": "uuid"
|
|
16
|
+
},
|
|
17
|
+
"locale": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"nullable": true
|
|
20
|
+
},
|
|
21
|
+
"headerRow": {
|
|
22
|
+
"minimum": 0,
|
|
23
|
+
"type": "integer",
|
|
24
|
+
"format": "int32",
|
|
25
|
+
"nullable": true
|
|
26
|
+
},
|
|
27
|
+
"csv": {
|
|
28
|
+
"$ref": "#/components/schemas/NgApps.Application.Contexts.Datastore.Imports.ImportCsvOptionsDto"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"additionalProperties": false
|
|
32
|
+
},
|
|
33
|
+
"components": {
|
|
34
|
+
"schemas": {
|
|
35
|
+
"NgApps.Application.Contexts.Datastore.Imports.ImportCsvOptionsDto": {
|
|
36
|
+
"type": "object",
|
|
37
|
+
"properties": {
|
|
38
|
+
"delimiter": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"nullable": true
|
|
41
|
+
},
|
|
42
|
+
"encoding": {
|
|
43
|
+
"type": "string",
|
|
44
|
+
"nullable": true
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"additionalProperties": false
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": {
|
|
3
|
+
"type": "object",
|
|
4
|
+
"properties": {
|
|
5
|
+
"projectId": {
|
|
6
|
+
"type": "string",
|
|
7
|
+
"format": "uuid"
|
|
8
|
+
},
|
|
9
|
+
"planId": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"format": "uuid"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"additionalProperties": false
|
|
15
|
+
},
|
|
16
|
+
"components": {
|
|
17
|
+
"schemas": {}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": {
|
|
3
|
+
"required": [
|
|
4
|
+
"name"
|
|
5
|
+
],
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"projectId": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"format": "uuid"
|
|
11
|
+
},
|
|
12
|
+
"name": {
|
|
13
|
+
"minLength": 1,
|
|
14
|
+
"pattern": "\\A(?=.{3,31}\\z)[a-z][a-z0-9_-]*(/[a-z0-9][a-z0-9_-]*)*\\z",
|
|
15
|
+
"type": "string"
|
|
16
|
+
},
|
|
17
|
+
"parentEnvironmentId": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"format": "uuid",
|
|
20
|
+
"nullable": true
|
|
21
|
+
},
|
|
22
|
+
"includeRecords": {
|
|
23
|
+
"type": "boolean"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"additionalProperties": false
|
|
27
|
+
},
|
|
28
|
+
"components": {
|
|
29
|
+
"schemas": {}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": {
|
|
3
|
+
"required": [
|
|
4
|
+
"body",
|
|
5
|
+
"name",
|
|
6
|
+
"source"
|
|
7
|
+
],
|
|
8
|
+
"type": "object",
|
|
9
|
+
"properties": {
|
|
10
|
+
"source": {
|
|
11
|
+
"$ref": "#/components/schemas/NgApps.Domain.Contexts.Studio.GlobalFunctions.GlobalFunctionSource"
|
|
12
|
+
},
|
|
13
|
+
"applicationId": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"format": "uuid",
|
|
16
|
+
"nullable": true
|
|
17
|
+
},
|
|
18
|
+
"pageId": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"format": "uuid",
|
|
21
|
+
"nullable": true
|
|
22
|
+
},
|
|
23
|
+
"scope": {
|
|
24
|
+
"$ref": "#/components/schemas/NgApps.Domain.Contexts.Studio.GlobalFunctions.GlobalFunctionScope"
|
|
25
|
+
},
|
|
26
|
+
"name": {
|
|
27
|
+
"minLength": 1,
|
|
28
|
+
"type": "string"
|
|
29
|
+
},
|
|
30
|
+
"description": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"nullable": true
|
|
33
|
+
},
|
|
34
|
+
"isAsync": {
|
|
35
|
+
"type": "boolean"
|
|
36
|
+
},
|
|
37
|
+
"parameters": {
|
|
38
|
+
"type": "array",
|
|
39
|
+
"items": {
|
|
40
|
+
"$ref": "#/components/schemas/NgApps.Application.Contexts.Studio.GlobalFunctions.GlobalFunctionParameterDto"
|
|
41
|
+
},
|
|
42
|
+
"nullable": true
|
|
43
|
+
},
|
|
44
|
+
"body": {
|
|
45
|
+
"minLength": 1,
|
|
46
|
+
"type": "string"
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"additionalProperties": false
|
|
50
|
+
},
|
|
51
|
+
"components": {
|
|
52
|
+
"schemas": {
|
|
53
|
+
"NgApps.Domain.Contexts.Studio.GlobalFunctions.GlobalFunctionSource": {
|
|
54
|
+
"enum": [
|
|
55
|
+
"workflow",
|
|
56
|
+
"studio"
|
|
57
|
+
],
|
|
58
|
+
"type": "string",
|
|
59
|
+
"format": ""
|
|
60
|
+
},
|
|
61
|
+
"NgApps.Domain.Contexts.Studio.GlobalFunctions.GlobalFunctionScope": {
|
|
62
|
+
"enum": [
|
|
63
|
+
"application",
|
|
64
|
+
"page"
|
|
65
|
+
],
|
|
66
|
+
"type": "string",
|
|
67
|
+
"format": ""
|
|
68
|
+
},
|
|
69
|
+
"NgApps.Application.Contexts.Studio.GlobalFunctions.GlobalFunctionParameterDto": {
|
|
70
|
+
"type": "object",
|
|
71
|
+
"properties": {
|
|
72
|
+
"name": {
|
|
73
|
+
"type": "string",
|
|
74
|
+
"nullable": true
|
|
75
|
+
},
|
|
76
|
+
"type": {
|
|
77
|
+
"type": "string",
|
|
78
|
+
"nullable": true
|
|
79
|
+
},
|
|
80
|
+
"required": {
|
|
81
|
+
"type": "boolean"
|
|
82
|
+
},
|
|
83
|
+
"defaultValue": {
|
|
84
|
+
"nullable": true
|
|
85
|
+
},
|
|
86
|
+
"description": {
|
|
87
|
+
"type": "string",
|
|
88
|
+
"nullable": true
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
"additionalProperties": false
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|