char/avril

(wip) why'd you have to go and make things so complicaaaaated?

git clone https://git.t4t.associates/char/avril

Charlotte Somport base extension to typescript9cca521

main
1.0 KiB36 linesraw
1import { ObjectCreate, ObjectFreeze } from "ext:core/primordials";
2import {
3  op_env_delete,
4  op_env_get,
5  op_env_set,
6  op_env_to_object,
7} from "ext:core/ops";
8import { required, usv } from "ext:web/idl.js";
9import { result } from "ext:file/errors.js";
10
11export const env = ObjectFreeze({
12  get(name: unknown) {
13    required(arguments.length, 1);
14    return result(op_env_get(usv(name))) ?? undefined;
15  },
16  has(name: unknown) {
17    required(arguments.length, 1);
18    return result(op_env_get(usv(name))) !== null;
19  },
20  set(name: unknown, value: unknown) {
21    required(arguments.length, 2);
22    result(op_env_set([usv(name), usv(value)]));
23  },
24  delete(name: unknown) {
25    required(arguments.length, 1);
26    result(op_env_delete(usv(name)));
27  },
28  toObject() {
29    const entries = op_env_to_object();
30    const snapshot: Record<string, string> = ObjectCreate(null);
31    for (let index = 0; index < entries.length; index++) {
32      snapshot[entries[index][0]] = entries[index][1];
33    }
34    return snapshot;
35  },
36});