Spesifikasi Bahasa
Syntax
Import
import digunakan untuk meng-import desain adf dari file lain. Import dapat dilakukan dengan file path atau tautan url ke file desain adf. Ketika melakukan import, seluruh modul pada file yang di-import akan dapat diakses pada file yang meng-import.
Enum
enum menggunakan syntax cukup sederhana dengan keyword enum lalu diikuti nama enum. Nama enum yang valid menggunakan regex berikut: [A-Za-z\_][\w]* seluruh karakter a-z huruf kapital/kecil, angka, underscore, dan tidak diawali angka.
Di dalam blok enum diikuti dengan item enum pada setiap barisnya. Item enum valid menggunakan regex berikut: [A-Za-z\_][\w\-]*
Table
Nama table menggunakan regex yang sama seperti nama enum. Daftar kolom/item/field pada blok tabel ditulis baris per baris. Kolom pada tabel ditulis dengan grammar berikut:
Nama Kolom
Nama kolom yang valid menggunakan regex berikut: [A-Za-z\_][\w]*
Jenis Kolom
Jenis kolom dibagi menjadi tiga variasi yaitu native, enum, dan relasi. Jenis kolom native yang didukung saat ini: bigint int tinyint smallint float real boolean timestamp varchar decimal. Khusus untuk varchar dan decimal dapat menggunakan parameter varchar(size) decimal(scale, precision)
Jenis kolom enumerasi ditulis dengan menuliskan nama enum langsung seperti contoh di atas UserType. Jenis kolom relasi ditulis dengan format nama table diikuti foreign key dipisah dengan titik, contoh Role.id.
Atribut
Atribut yang didukung saat ini: notnull null untuk flag nullable, autoincrement increment inc untuk autoincrement column, unique uniq untuk unique value, primary-key pk untuk flag primary key.
Atribut default value ditulis dengan format default=<nilai-default>. Nilai default dapat berupa tiga jenis: angka, quoted string, atau item enum. Default value angka ditulis default=-111, quoted string default='contoh' atau default="contoh", dan item enum default=UserType.VIP
Schema
Nama schema menggunakan regex yang sama seperti nama enum. Daftar keys pada blok schema ditulis baris per baris. Kolom pada tabel ditulis dengan grammar berikut:
Nama Key
Nama key yang valid menggunakan regex berikut: [A-Za-z\_][\w\-]*
Jenis Key
Jenis key dibagi menjadi lima variasi yaitu native, enum, table, schema, dan inline schema. Jenis key native yang didukung saat ini: boolean number string. Jenis key enum ditulis dengan keyword enum diikuti nama enum dipisah dengan titik enum.UserType. Jenis key table dan schema sama seperti enum, contoh table table.User, contoh schema schema.LoginPayload.
Inline schema merupakan jenis data berupa schema dengan melakukan deklarasi schema langsung pada schema key, seperti contoh berikut.
Keyword array?, required?
array dan required merupakan keyword opsional, namun posisi penulisannya harus tetap sesuai grammar di atas. Keyword array mengindikasikan bahwa schema key tersebut berbentuk array. Keyword required mengindikasikan bahwa schema key tersebut tidak opsional akan selalu memiliki nilai pada schema tersebut.
API
api merupakan modul spesifikasi HTTP API. Penulisan modul api diikuti method dan path api, lalu blok parameter dan return value. Perhatikan contoh di bawah:
Terdapat enam jenis item di dalam blok api yaitu description headers path query body return.
Description
description diikuti teks hingga sebelum baris baru akan dianggap sebagai teks deskripsi.
Headers, Path, Query, Body
Blok headers path query body berisi item baris per baris. Item pada blok-blok ini memiliki grammar yang sama persis seperti shema key namun terdapat perbedaan jenis key pada headers, path, dan query.
Item pada headers, path, dan query hanya mendukung jenis native boolean number string.
Return
Return value merupakan indikator response type pada HTTP API. Pada contoh api GET /users di atas, jenis response HTTP API tersebut akan memiliki struktur schema schema.UserResponse. Grammar pada return value sbb:
Jenis key pada grammar di atas sama seperti jenis key pada schema.
Extends
Fitur extends memungkinkan ekstensi modul table, enum, schema, dan api. Ekstensi akan mengakibatkan modifikasi atau penambahan item pada blok masing-masing modul. Perhatikan contoh ekstensi table User di bawah:
dengan mengambil tabel User di atas sebelumnya, hasil tabel User baru akan menjadi seperti di bawah:
Analisis Semantik
Table
Jenis data enum dan relasi akan dicek ketersediaannya, jika enum atau relasi baik tabel ataupun kolomnya tidak ditemukan akan mengakibatkan error parsing. Nama kolom yang sama juga tidak diperkenankan pada modul table. Default value harus sama sesuai dengan jenis data yang digunakan, pengguna default value yang tidak sama dengan jenis data akan mengakibatkan error parsing.
Schema
Pada jenis key inline schema, schema yang dideklarasikan langsung akan dipisah ke dalam daftar skema dan referensi nama skema tersebut menjadi jenis key-nya. Ketidaktersediaan data table, enum, dan schema sebagai jenis key akan mengakibatkan error parsing.
API
Pada blok headers dan paths, keyword array akan mengakibatkan error parsing karena item header dan path tidak boleh memiliki jenis data array. Selain itu pada blok paths, keyword required wajib ada karena data pada path parameters selalu ada.
Method HTTP API yang didukung saat ini: GET, POST, PATCH, PUT, DELETE. Pada method GET dan DELETE blok body tidak boleh muncul sesuai spesifikasi HTTP.
Extends
Ekstensi dapat dilakukan pada file adf yang sama maupun pada modul lain yang berasal dari import file atau url. Ekstensi terhadap modul yang belum di deklarasikan sebelumnya (tanpa extends) akan mengakibatkan parsing error.