Deno File System

24 Oct 2021

Deno adalah secure runtime untuk Javascript dan Typescript menggunakan javascript engine v8 buatan Google dan juga dibangun dengan bahasa pemrograman Rust. Pembuatnya adalah orang yang sama yang membuat Nodejs. Versi stabilnya dirilis pada tanggal 13 Mei 2020.

Pada kesempatan kali sesuai dengan judul artikel yaitu tentang file sistem di Deno, kita akan mengulik sedikit tentang file system di Deno seperti membaca dan menulis file, membuat dan menghapus folder, menyalin file/folder dll.

Sebelum masuk ke bahasan utama alangkah lebih baiknya jika mengenal cara menjalankan deno dulu, jadi untuk menjalankan typescript dengan deno gunakan command deno run <nama-script>. Mungkin agak sedikit asing dan berbeda dengan nodejs yang tidak memerlukan perintah kedua yaitu run.

Namun bagiku hal itu akan mempermudah dan membedakan dengan command lain mengingat deno menyertakan banyak command dalam satu binary. Seperti deno fmt, deno doc, deno lint, deno info dan lain-lain. Berikut daftar lengkapnya

$ deno run nama-script.ts/nama-script.js

Deno juga mengharuskan kita untuk menyebut permisi apa saja pada saat menjalankan script seperti --allow-read jika didalam script terdapat pembacaan file, --allow-write jika terjadi penulisan ke file dll.

OpsiPenjelasan
-A, –allow-allMengizinkan semua permisi. Ini menonaktifkan permisi
–allow-envMengizinkan akses environment
–allow-hrtimeMengizinkan pengukuran waktu resolusi-tinggi
–allow-netMengizinkan akses jaringan
–allow-pluginMengizinkan plugin. Catat bahwa --allow-plugin fitur tidak stabil
–allow-readMengizinkan akses pembacaan ke sistem file
–allow-writeMengizinkan akses ke penulisan sistem file. kamu juga dapat menyebutkan nama file/folder yang diakses
–allow-runMengizinkan menjalankan subprocess

Contoh penggunaan opsi permisi

$ deno run --allow-read read_file.ts
$ deno run --allow-write write_file.ts

Catatan: Deno memerlukan tambahan opsi pada saat menjalankannya sebagai contoh --allow-read untuk mengijinkan deno untuk membaca file/ menyalin file/folder. {:.note-tip}

Baca File

Untuk membaca file Deno menyediakan fungsi readFile pada namespace Deno. Buat file dengan nama read_file.ts kemudian salin kode berikut ini:

const decoder = new TextDecoder('utf-8');
const data = await Deno.readFile('copy_file.ts');
console.log(decoder.decode(data));

Karena fungsi Deno.readFile menghasilkan data array byte maka perlu didecode menggunakan klas TextDecoder.

perlu tambahan opsi --allow-read {:.note-tip}

Untuk menulis file kita dapat menggunakan fungsi Deno.writeFile dimana argumen pertama adalah nama file, kedua data yang bertype Uint8Array sehingga harus diencode menggunakan klas TextEncoder dan argumen terakhir adalah opsi lain seperti mode permisi, append yang berguna untuk menambahkan data jika file sudah ada.

const encoder = new TextEncoder();
const data = encoder.encode('Hello world!');
await Deno.writeFile('/tmp/hello.txt', data);
await Deno.writeFile('/tmp/hello.txt', data, { mode: 0o777 });
await Deno.writeFile('/tmp/hello.txt', data, { append: true });

memerlukan ijin --allow-write, dan --allow-read jika opsi create bernilai false {:.note-tip}

Membuat Folder

Untuk membuat folder kita bisa menggunakan fungsi Deno.mkdir, argumen yang wajib disediakan adalah nama folder sedangkan opsi yang bisa ditambahkan adalah mode permisi dan recursive yang bernilai boolean.

await Deno.mkdir('/tmp/hello');
await Deno.mkdir('/tmp/hello', { recursive: true });
await Deno.mkdir('/tmp/hello', { mode: 0o777 });

memerlukan ijin --allow-write {:.note-tip}

Menghapus File/Folder

Untuk menghapus file/folder kita bisa menggunakan fungsi Deno.remove dimana kita bisa menambahkan opsi recursive atau tidak pada saat menghapus folder.

await Deno.remove('/tmp/hello.txt');
await Deno.remove('/tmp/nama_folder');
await Deno.remove('/tmp/nama_folder', { recursive: true });

memerlukan ijin --allow-write {:.note-tip}

Menyalin File

Untuk menyalin file kita bisa menggunakan fungsi Deno.copyFile dengan argumen pertama berupa sumber file dan argumen kedua berupa tujuan file.

await Deno.copyFile('/tmp/hello.txt', '/tmp/world.txt');

memerlukan ijin --allow-write dan --allow-read {:.note-tip}

Menyalin Folder

Untuk menyalin folder namespace Deno tidak menyediakannya untuk itu kita menggunakan fungsi dari standard library yaitu copy dan menambahkan opsi --unstable pada saat menjalankan karena memang library belum stabil.

import { copy } from "https://deno.land/std@0.54.0/fs/mod.ts";

copy("/home/user/big-project", "/tmp/big-project");

memerlukan ijin --allow-read dan --allow-write dan juga opsi --unstable {:.note-tip}

sekian.