{"id":26276712,"url":"https://github.com/graf-research/adf-core","last_synced_at":"2025-05-06T20:22:47.627Z","repository":{"id":261085993,"uuid":"883164019","full_name":"Graf-Research/adf-core","owner":"Graf-Research","description":"Bahasa DSL untuk spesifikasi, dokumentasi, dan generator kode program","archived":false,"fork":false,"pushed_at":"2025-03-10T06:47:30.000Z","size":82,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-31T02:34:48.092Z","etag":null,"topics":["backend","code","documentation","dsl","generator","language","nodejs","specification"],"latest_commit_sha":null,"homepage":"https://adf-lang.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Graf-Research.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-04T13:42:11.000Z","updated_at":"2025-03-13T06:22:22.000Z","dependencies_parsed_at":"2024-11-04T16:38:09.351Z","dependency_job_id":"4e448b29-5d6c-42ca-bcb1-43310f207f50","html_url":"https://github.com/Graf-Research/adf-core","commit_stats":null,"previous_names":["graf-research/adf-core"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Graf-Research%2Fadf-core","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Graf-Research%2Fadf-core/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Graf-Research%2Fadf-core/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Graf-Research%2Fadf-core/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Graf-Research","download_url":"https://codeload.github.com/Graf-Research/adf-core/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252762014,"owners_count":21800237,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backend","code","documentation","dsl","generator","language","nodejs","specification"],"created_at":"2025-03-14T11:19:08.150Z","updated_at":"2025-05-06T20:22:47.601Z","avatar_url":"https://github.com/Graf-Research.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"http://typeorm.io/\"\u003e\n    \u003cimg src=\"https://adf-lang.com/logo.png\" height=\"120\"\u003e\n  \u003c/a\u003e\n  \u003cbr\u003e\n  \u003cbr\u003e\n\t\u003ca href=\"https://badge.fury.io/js/@graf-research%2Fadf-core\"\u003e\n\t    \u003cimg src=\"https://badge.fury.io/js/@graf-research%2Fadf-core.svg\" alt=\"npm version\" height=\"18\" /\u003e\n    \u003c/a\u003e\n  \u003cbr\u003e\n  \u003cbr\u003e\n\u003c/div\u003e\n\nDSL (Domain Specific Language) ADF didesain untuk mendokumentasikan sistem/program dan men-generate kode sesuai spesifikasi ADF. Kode ADF mendokumentasikan desain model data dan mekanisme komunikasi antar program dalam sebuah sistem. Lihat [Spesifikasi Bahasa ADF](https://adf-lang.com/docs/syntax) untuk panduan menulis desain ADF.\n\n**Generator Kode**\n\nSpesifikasi ADF memiliki informasi minimal untuk desain sebuah sistem berbasis data. Informasi pada ADF dapat digunakan untuk men-generate kode program langsung/template kode program. Generator kode yang ada saat ini:\n\n- [adf-codegen-api-nodejs](https://github.com/Graf-Research/adf-codegen-api-nodejs) Template Backend REST API dengan ExpressJS+TypeORM\n- [adf-codegen-schema-typescript](https://github.com/Graf-Research/adf-codegen-schema-typescript) Schema data dalam bentuk interface Typescript\n- [adf-codegen-model-typescript](https://github.com/Graf-Research/adf-codegen-model-typescript) Model data dalam bentuk interface Typescript\n- [adf-codegen-model-typeorm](https://github.com/Graf-Research/adf-codegen-model-typeorm) Model data dalam bentuk kelas [TypeORM](https://github.com/typeorm/typeorm)\n\n**Todo List Generator Kode**:\n1. Generator API Tester (seperti Swagger, Postman, Apiary, dll).\n2. HTTP Client secara umum untuk segala jenis framework frontend web.\n3. React `useAPI` HTTP Client, mirip poin nomor 2, namun untuk framework react dengan fitur hook.\n4. HTTP Client untuk bahasa pemrograman lain, kasus pemakaiannya untuk koneksi host-to-host.\n5. dll\n\n## Library\n\n```bash\nnpm install --save @graf-research/adf-core\n```\n\n### Fungsi\n\n#### parse(uri: string)\n\nMenerima masukan berupa path (absolute/relative) ke file `*.adf` atau url file ADF.\n\n```typescript\nasync function parse(uri: string): Promise\u003cSAResult\u003e\n```\n\n#### parseString(code: string)\n\nMenerima masukan berupa kode ADF dengan format string.\n\n```typescript\nasync function parseString(code: string): Promise\u003cSAResult\u003e\n```\n\n### Contoh Penggunaan\n\n```typescript\nimport { parse, SAResult } from '@graf-research/adf-core';\n\nasync function main() {\n  const adf_url = 'https://gitlab.graf.run/api/v4/projects/rio%2Fblueprint-collection/repository/files/contoh-marketplace.adf/raw';\n  const result: SAResult = await parse(adf_url);\n  console.log(result)\n}\n\nmain();\n```\n\n## ADF Core\n\nADF Core berisi program parser file desain ADF yang berisi format [Spesifikasi Bahasa ADF](https://adf-lang.com/docs/syntax) menjadi spesifikasi JSON. Proses parsing ADF terdiri dari tiga tahap:\n\n- Lexer\n- Parser\n- Analisis Semantik\n\n### Lexer\n\nADF menggunakan [no-context/moo](https://github.com/no-context/moo) sebagai lexer. Daftar token lexer dapat dilihat di file [ast/grammar/lexer.js](ast/grammar/lexer.js).\n\n### Parser\n\nADF menggunakan grammar dan parser [nearley.js](https://nearley.js.org/). Grammar ADF dapat dilihat di file [ast/grammar/adf-lang.ne](ast/grammar/adf-lang.ne). Parser ADF menghasilkan bentuk JSON sementara representasi AST (abstract syntax tree) dengan skema/jenis data berikut:\n\n- `AST_Import`\n- `AST_Model`\n- `AST_Flow`\n- `AST_Schema`\n- `AST_API`\n\n### Analisis Semantik\n\nData JSON hasil parser dianalisis memastikan seluruh sintaks sesuai aturan ADF. Proses analisis semantik dilakukan pada:\n\n- **API** memastikan method, path, paths param, query, headers, body, dan return value pada AST valid dan jenis data yang digunakan ada pada skema, tabel, atau enum.\n- **Schema** memastikan jenis data skema valid, referensi ke table, enum, atau skema lain valid.\n- **Model** memastikan item enum valid, kolom tabel sesuai semantik yang seharusnya.\n- **Import** mengimpor data dari file atau url lain.\n- **Flow** *\u0026lt;pending\u0026gt;*\n\nAnalisis semantik menghasilkan spesifikasi JSON dengan format berikut:\n\n```typescript\nexport interface SAResult {\n  list_enum: Model.Enum[]\n  list_table: Model.Table[]\n  list_flow: Flow.Flow[]\n  list_schema: Schema.Schema[]\n  list_api: API.API[]\n}\n```\n\n`SAResult` merupakan keluaran akhir dari parser (lexer, parser, semantic analysis).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgraf-research%2Fadf-core","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgraf-research%2Fadf-core","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgraf-research%2Fadf-core/lists"}