MIRROR: javascript for ๐Ÿœ's, a tiny runtime with big ambitions
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

process.env, process.exit

+123 -1
+6
include/modules/process.h
··· 1 + #ifndef PROCESS_H 2 + #define PROCESS_H 3 + 4 + void init_process_module(void); 5 + 6 + #endif
+1 -1
meson.build
··· 44 44 build_date = run_command('date', '+%Y-%m-%d', check: true).stdout().strip() 45 45 46 46 version_conf = configuration_data() 47 - version_conf.set('ANT_VERSION', '0.0.6.17') 47 + version_conf.set('ANT_VERSION', '0.0.6.18') 48 48 version_conf.set('ANT_GIT_HASH', git_hash) 49 49 version_conf.set('ANT_BUILD_DATE', build_date) 50 50
+2
src/main.c
··· 19 19 #include "modules/json.h" 20 20 #include "modules/fetch.h" 21 21 #include "modules/shell.h" 22 + #include "modules/process.h" 22 23 23 24 int js_result = EXIT_SUCCESS; 24 25 ··· 131 132 init_json_module(); 132 133 init_server_module(); 133 134 init_timer_module(); 135 + init_process_module(); 134 136 135 137 ant_register_library("ant/shell", shell_library); 136 138
+100
src/modules/process.c
··· 1 + #include <stdlib.h> 2 + #include <stdio.h> 3 + #include <string.h> 4 + 5 + #include "ant.h" 6 + #include "runtime.h" 7 + #include "modules/process.h" 8 + 9 + extern char **environ; 10 + 11 + static void load_dotenv_file(struct js *js, jsval_t env_obj) { 12 + FILE *fp = fopen(".env", "r"); 13 + if (fp == NULL) return; 14 + 15 + char line[1024]; 16 + while (fgets(line, sizeof(line), fp) != NULL) { 17 + size_t len = strlen(line); 18 + if (len > 0 && line[len - 1] == '\n') { 19 + line[len - 1] = '\0'; 20 + len--; 21 + } 22 + if (len > 0 && line[len - 1] == '\r') { 23 + line[len - 1] = '\0'; 24 + len--; 25 + } 26 + 27 + if (len == 0 || line[0] == '#') continue; 28 + char *equals = strchr(line, '='); 29 + if (equals == NULL) continue; 30 + 31 + *equals = '\0'; 32 + char *key = line; 33 + char *value = equals + 1; 34 + 35 + while (*key == ' ' || *key == '\t') key++; 36 + char *key_end = key + strlen(key) - 1; 37 + while (key_end > key && (*key_end == ' ' || *key_end == '\t')) { 38 + *key_end = '\0'; 39 + key_end--; 40 + } 41 + 42 + while (*value == ' ' || *value == '\t') value++; 43 + char *value_end = value + strlen(value) - 1; 44 + while (value_end > value && (*value_end == ' ' || *value_end == '\t')) { 45 + *value_end = '\0'; 46 + value_end--; 47 + } 48 + 49 + if (strlen(value) >= 2 && 50 + ((value[0] == '"' && value[strlen(value) - 1] == '"') 51 + || (value[0] == '\'' && value[strlen(value) - 1] == '\''))) { 52 + value[strlen(value) - 1] = '\0'; 53 + value++; 54 + } 55 + 56 + js_set(js, env_obj, key, js_mkstr(js, value, strlen(value))); 57 + } 58 + 59 + fclose(fp); 60 + } 61 + 62 + static jsval_t process_exit(struct js *js, jsval_t *args, int nargs) { 63 + int code = 0; 64 + 65 + if (nargs > 0 && js_type(args[0]) == JS_NUM) { 66 + code = (int)js_getnum(args[0]); 67 + } 68 + 69 + exit(code); 70 + return js_mkundef(); 71 + } 72 + 73 + void init_process_module(void) { 74 + struct js *js = rt->js; 75 + 76 + jsval_t process_obj = js_mkobj(js); 77 + jsval_t env_obj = js_mkobj(js); 78 + 79 + js_set(js, js_glob(js), "process", process_obj); 80 + js_set(js, process_obj, "env", env_obj); 81 + js_set(js, process_obj, "exit", js_mkfun(process_exit)); 82 + 83 + for (char **env = environ; *env != NULL; env++) { 84 + char *env_copy = strdup(*env); 85 + if (env_copy == NULL) continue; 86 + 87 + char *equals = strchr(env_copy, '='); 88 + if (equals != NULL) { 89 + *equals = '\0'; 90 + char *key = env_copy; 91 + char *value = equals + 1; 92 + 93 + js_set(js, env_obj, key, js_mkstr(js, value, strlen(value))); 94 + } 95 + 96 + free(env_copy); 97 + } 98 + 99 + load_dotenv_file(js, env_obj); 100 + }
+14
tests/test_process_env.cjs
··· 1 + console.log('PATH:', process.env.PATH); 2 + console.log('HOME:', process.env.HOME); 3 + console.log('USER:', process.env.USER); 4 + 5 + console.log('CAT:', process.env.CAT); 6 + 7 + if (process.env.CAT === 'meow') { 8 + console.log("โœ“ process.env.CAT is correctly set to 'meow'"); 9 + } else { 10 + console.log('โœ— process.env.CAT is not set correctly. Got:', process.env.CAT); 11 + } 12 + 13 + console.log('ANT_ENV', process.env.ANT_ENV); 14 + process.exit(256);