jow- / ucode

JavaScript-like language with optional templating
ISC License
90 stars 30 forks source link

writefile() and readfile() compatibility #111

Closed huafu closed 2 years ago

huafu commented 2 years ago

Since fs.writefile() allows to JSON encode the data parameter if it's not a string, I think it'd be nice to have an optional parameter to fs.readfile so that it can be JSON decoded if that parameter is true:

import * as fs from 'fs';

let data = { key: "hello" };
fs.writefile('/tmp/file.json', data);

data = fs.readfile('/tmp/file.json', /* size */ null, /* as_json */ true);
print(type(data)); // object

data = fs.readfile('/tmp/file.json', /* size */ null, /* as_json */ false);
// or data = fs.readfile('/tmp/file.json');
print(type(data)); // string

PS: thanks for the quick slice() addition @jow- !

jow- commented 2 years ago

The writing of non-string values as JSON is not a specific property of fs.writefile() but due to the default stringification behavior - complex values are automatically converted to JSON strings.

Use json(fs.readfile('/tmp/file.json')) or json(fs.open('/tmp/file.json')) to read an input file as JSON. The latter variant is more efficient as it will do incremental parsing from the opened file handle internally (and auto-close it when done).