@palbase/backend 39.1.5 → 39.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/MIGRATION.md +214 -0
  2. package/package.json +1 -1
package/MIGRATION.md CHANGED
@@ -1,3 +1,217 @@
1
+ # 39.0.0 — `raw(name, up, { down })` KALDIRILDI, `DBOps` bir üye kazandı
2
+
3
+ ## 1. `raw()` artık İKİ argüman alıyor
4
+
5
+ `down` seçeneği, hiç koşmayan bir down-migration'a besleniyordu: yazarına
6
+ sahip olmadığı bir teardown'a sahip olduğunu düşündürüyordu.
7
+
8
+ ```ts
9
+ // ÖNCE (39.0.0'da derlenmiyor)
10
+ raw("chk_positive", "ALTER TABLE orders ADD CONSTRAINT chk_positive CHECK (total > 0)", {
11
+ down: "ALTER TABLE orders DROP CONSTRAINT chk_positive",
12
+ });
13
+
14
+ // SONRA — düşürmeyi BİLDİRİN
15
+ dropConstraints: ["chk_positive"],
16
+ ```
17
+
18
+ Çoğu `raw()` bu majorda zaten gereksiz: tablo düzeyi çok sütunlu `foreignKeys`,
19
+ `index(n).unique().where(...)` (partial UNIQUE), tipli `check(name, expr)`,
20
+ koşullu FK (`freeze`), reddedici `guards`, bir kez koşan `backfills` ve
21
+ `dropConstraints` geldi. Önce bunlara bakın; `raw()` artık bir kaçış kapısı.
22
+
23
+ ## 2. `raw()` gövdeleri bir YETKİ kapısından geçiyor
24
+
25
+ Rol yaratan, sahiplik devreden, yetki dağıtan ya da `search_path` kaydıran
26
+ ifadeler **push'u reddediyor**. Açık kalan tek grant biçimi:
27
+
28
+ ```sql
29
+ GRANT EXECUTE ON FUNCTION … TO <platform rolü>
30
+ ```
31
+
32
+ Bu bir ALLOWLIST — kapı sınıflandıramadığını reddeder. Reddedilen bir gövdeyi
33
+ "geçici olarak" başka biçimde yazmaya çalışmayın; bildirimsel yüzeyi kullanın.
34
+
35
+ ## 3. Kendi `DBOps` uygulamanız varsa `lockRowsWhere` ekleyin
36
+
37
+ `DBOps` — ve onun üzerinden `DBClient`, `EnvServiceDatabase`, `EnvTypedDatabase` —
38
+ ZORUNLU bir `lockRowsWhere` üyesi kazandı. Yalnız kendi uygulamasını yazan
39
+ projeleri etkiler; SDK'nın kendi sınıflarını kullanıyorsanız yapacak bir şey yok.
40
+
41
+ `TableJSON.rawConstraints[]` elemanı da `down` alanını kaybetti — şema JSON'unu
42
+ elle okuyan bir aracınız varsa o alanı beklemeyin.
43
+
44
+ # 38.0.0 — `push` artık PLAN istiyor (ve `auth` göçü kendini onarıyor)
45
+
46
+ ## 1. `palbase plan` → `palbase push`, bu sırayla
47
+
48
+ `push` plansız koşmuyor. `palbase plan` yükseltmenin ne yapacağını modül modül
49
+ gösterir ve hedef sürümün her ön kontrolünü yazar; `push` o planı taşır.
50
+
51
+ ```bash
52
+ palbase plan # ne olacağını OKUYUN
53
+ palbase push # planı taşır
54
+ ```
55
+
56
+ Bundle, koşan SDK ya da şema planı siz planladıktan sonra kaydıysa push neyin
57
+ değiştiğini ADLANDIRIR ve yeni bir plan ister. Platform da aynı şeyi kontrol
58
+ eder, yani eski bir plan kaymış bir projeye karşı tekrar oynatılamaz.
59
+
60
+ > Planın nereye yazıldığı 0.62.x'te değişti: artık checkout'unuzda değil,
61
+ > `~/.palbase/checkouts/<hash>/plan.json` altında. Bu bir göç işi değil —
62
+ > eski `.palbase/plan.json` dosyanız varsa silin.
63
+
64
+ ## 2. Yükseltmeler TAKAStan ÖNCE göç ediyor
65
+
66
+ Bir proje daha yeni bir `@palbase/backend`'e geçtiğinde, o sürümün ihtiyaç
67
+ duyduğu göçler önce canlı veritabanına — yeni sürümün kendi migrator'ıyla —
68
+ uygulanır, ve ancak ondan sonra yeni sürüm devralır. Takas saniyeler süren bir
69
+ restart'tır; istekler düşmez, bekler. Göç koşamazsa **hiçbir şey değişmez**:
70
+ proje tam olduğu gibi servis etmeye devam eder.
71
+
72
+ Sizin yapacağınız bir şey yok. Yalnız bilin: `push` sonrası kısa bir restart
73
+ normaldir ve bir göç hatası artık projeyi yarıda bırakmaz.
74
+
75
+ ## 3. BREAKING — `auth` şeması, ve sizden bir şey İSTENMİYOR
76
+
77
+ `000014` sosyal-auth göçü, OAuth yapılandırılmış her projede düpedüz reddediyor
78
+ ve operatörden elle envanter çıkarıp sıfırlamasını istiyordu; red defteri kirli
79
+ bırakıyor ve stack'i açılamaz hâle getiriyordu. Bu davranış kaldırıldı.
80
+
81
+ # 37.0.0 — OAuth istemcileri PLATFORM BAŞINA yapılandırılıyor
82
+
83
+ ## 1. Sağlayıcı-geneli kimlik bilgisi yüzeyi KALDIRILDI
84
+
85
+ Web, iOS, macOS ve Android artık mevcut `oauth` yapılandırması ve `palbase link`
86
+ akışı üzerinden AYRI AYRI yapılandırılıyor. Tarayıcı kimlik bilgileri, native
87
+ client ID'leri, Google server client ID'leri, Apple Services ID'leri ve native
88
+ bundle ID'leri birbirinden ayrı kalır.
89
+
90
+ Eski sağlayıcı-geneli kimlik bilgisi ve token değişim arayüzleri kaldırıldı.
91
+
92
+ ## 2. Göç sırası ÖNEMLİ
93
+
94
+ ```
95
+ 1. backend SDK'yı ve istemci SDK'ları BİRLİKTE yükseltin
96
+ 2. `palbase link` ile bağlı yapılandırmanızı YENİDEN ÜRETİN
97
+ 3. ancak ondan sonra migration 000014
98
+ ```
99
+
100
+ Bu sıra bir öneri değil: SDK'lar 000014'ten önce yükseltilmezse OAuth kaydı
101
+ eski şekilde kalır. OAuth artık seçili-istemci işlemleri kullanıyor — katı
102
+ audience/issuer/nonce/redirect doğrulaması, kalıcı tamamlanma kanıtı, açık
103
+ kimlik bağlama ve MFA-farkında sonuçlar.
104
+
105
+ # 36.0.0 — `defineQuery` ve `defineWorkload` KALDIRILDI, dönüş tipi ÇIKARIMI geldi
106
+
107
+ ## 1. `Query.run(...)` → sıradan CRUD
108
+
109
+ `defineQuery`, sorgu manifestleri, hazırlanmış sorgu sarmalayıcıları,
110
+ `defineWorkload` ve atomic `workload`/`conflictKeys` seçenekleri kaldırıldı.
111
+ **Uyumluluk katmanı YOK.**
112
+
113
+ ```ts
114
+ // ÖNCE
115
+ const Query = defineQuery({ /* projeksiyon */ });
116
+ const rows = await Query.run(Database, input);
117
+
118
+ // SONRA — servis içinde sıradan tipli CRUD
119
+ const rows = await this.todos.findMany({ user_id: userId });
120
+ ```
121
+
122
+ Çakışma için: ilişkili işlemleri AYNI transaction handle'ında tutun ve
123
+ **sıralı** PostgreSQL satır kilitleri kullanın (`$lockRowsWhere`, 39.0.0).
124
+
125
+ ## 2. Controller dönüş anotasyonunu ÇIKARIN
126
+
127
+ JSON şekli çıkarılabiliyorsa controller'ın dönüş tipini yazmayın: build
128
+ doğrulayıcıyı ve istemci sözleşmesini kendisi türetir.
129
+
130
+ ```ts
131
+ // ÖNCE
132
+ async list(): Promise<TodoListSchema> { … }
133
+
134
+ // SONRA — tipli CRUD için anotasyonu OMIT edin
135
+ async list() { return this.todos.list(); }
136
+ ```
137
+
138
+ Açık ya da desteklenmeyen sözleşmeler için adlandırılmış Zod şeması yazmaya
139
+ devam edin (bilinmeyen JSON, özyinelemeli değerler, sınıflar). `any` kullanmayın.
140
+
141
+ > **CLI ve core dev runtime'ı BİRLİKTE yükseltin** — tip çıkarımı ikisinin
142
+ > aynı sürümde olmasını gerektiriyor.
143
+
144
+ ## 3. `workload` bildirimlerini silin
145
+
146
+ Veritabanı admission'ı artık istek CRUD'u, atomic transaction'lar, service-role
147
+ işlemleri ve zamanlanmış iş arasında PAYLAŞILIYOR ve operatör kuyruk ayarları
148
+ uygulama kodundan ayrı. Kuyruk/eşzamanlılık ayarı core'un işi.
149
+
150
+ # 35.0.0 — bildirim istemcisi WhatsApp üyesini ZORUNLU kılıyor
151
+
152
+ Backend bildirim istemcisi, diğer kanallarıyla tutarlı olarak WhatsApp üyesini
153
+ artık zorunlu taşıyor. `PalbaseNotificationsClient`'ın **kendi uygulamasını ya da
154
+ test adaptörünü yazan** projeler o üyeyi eklemeli.
155
+
156
+ Mevcut `send` imzaları DEĞİŞMEDİ. Bildirim mesajları ve tercihleri artık bir
157
+ teslim-kanalı tipi kullanıyor; Meta şablon çevirileri eski gövde-şablonu
158
+ API'sinden ayrı.
159
+
160
+ > Sağlayıcı bağlantı ayarları mesaj dili ya da şablon adı TAŞIMAZ — bunlar
161
+ > şablon kataloğuna ve her mesajın locale'ine aittir.
162
+
163
+ Üyenin zorunlu olması bilinçli: runtime bu istemciyi her zaman yaratır, ve
164
+ opsiyonel işaretlemek çağıranı SDK'nın zaten garanti ettiği bir yeteneği
165
+ test etmeye zorlardı.
166
+
167
+ # 34.0.0 — transaction SAHİPLİĞİ açık, timestamp'ler mikrosaniye
168
+
169
+ ## 1. Savepoint planında sıfırdan farklı retry REDDEDİLİYOR
170
+
171
+ `Database.$atomic(async tx => …)` BEGIN'den kalıcı COMMIT'e kadar sahiplenir:
172
+ karar okumaları, izolasyon ve doğrulanmış serialization/deadlock rollback'lerinin
173
+ sınırlı yeniden denemeleri dahil. Kaybolan bir COMMIT onayı bir kez raporlanır
174
+ ve yazma **asla otomatik tekrarlanmaz**.
175
+
176
+ ```ts
177
+ // ÖNCE — artık reddediliyor
178
+ await Database.$transaction(fn, { retries: 3 });
179
+
180
+ // SONRA
181
+ await Database.$atomic(async (tx) => { … });
182
+ ```
183
+
184
+ İstek yazmaları ve `$transaction` savepoint planları mevcut sınırlarını korur.
185
+ Eski retry sözünü tutmak, bayat bir snapshot'a karşı sessizce yeniden koşardı.
186
+
187
+ ## 2. Timestamp'ler ALTI ondalık basamak, UTC
188
+
189
+ Şema-farkında timestamp'ler PostgreSQL mikrosaniyelerini korur ve altı
190
+ ondalık basamaklı UTC string'leri döndürür.
191
+
192
+ ```
193
+ ÖNCE: 2026-09-11T18:25:27.193Z (üç basamak)
194
+ SONRA: 2026-09-11T18:25:27.193920Z (altı basamak)
195
+ ```
196
+
197
+ Timestamp string'lerini KARŞILAŞTIRAN ya da tam üç basamak BEKLEYEN tüketiciler
198
+ bu daha hassas biçimi kabul etmeli. Ham SQL sürücünün değer sözleşmesini korur.
199
+
200
+ To-one ilişkileri artık LIMIT'i doğru uyguluyor — `0` dahil.
201
+
202
+ ## 3. Kendi DB adaptörünüz varsa yeni üyeleri ekleyin
203
+
204
+ `DBOps`, `DBClient`, `TypedDB`, `TypedTable` ve üretilen ortam arayüzlerinin
205
+ kendi uygulamaları, yeni zorunlu sorgu, sayfalama, tekil arama, komut ve
206
+ tanılama üyelerini uygulamalı. Bunları opsiyonel döndürmek, SDK'yı yetenek
207
+ kontrolü olmadan kullanılamaz kılardı.
208
+
209
+ Pakete gömülü fake, PostgreSQL'e özgü garantileri AÇIKÇA reddeder.
210
+
211
+ ## 4. Sayısal kolonlar callback filtrelerinde METİN operatörlerini reddediyor
212
+
213
+ TypeScript'in excess-property açığı geçersiz SQL üretiyordu; kapandı.
214
+
1
215
  # 33.0.0 — `Flags.$asService()` TİPTE de var (yayınlanmış bir kusurun düzeltmesi)
2
216
 
3
217
  32.0.0'da `Flags.$asService()` YAZILDI ama TÜKETİCİYE ULAŞMIYORDU: ambient
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@palbase/backend",
3
- "version": "39.1.5",
3
+ "version": "39.1.6",
4
4
  "description": "Palbase Backend SDK — class controllers (@Controller/@Get/@Post + @Body/@QueryParams/@Param), error classes, schema DSL",
5
5
  "license": "MIT",
6
6
  "repository": {