/url-loader

GNU General Public License v3.0GPL-3.0

url-loader

import { argc, argv } from 'http://localhost:0'   // Readable Stream
import { log as stdout_log } from 'http://localhost:1'    // Writable Stream
import { log as stderr_log } from 'http://localhost:2'    // Writable Stream
import { format } from 'http://localhost:4/io'  // stdandard library
import { assert } from 'http://localhost:4/assert'
assert(typeof argc === 'number');
assert(typeof argv === 'object' && Array.isArray(argv) === true);

stdout_log(format('argv[0]: {}', argv[0]));
import('http://localhost:4/process').then(exit => {
  stdout_log('byebye~');
  exit(0);
}).catch(() => {
  stderr_log("some goes wrong!");
  throw new Error("some goes wrong!");
});
$ ./main.js foo
argv[0]: foo
byebye~
# when import module wrong
$ ./main.js goo
argv[0]: goo
some goes wrong!
Error: some goes wrong!                         Core Dump
  at <./main.js> 18:9

We use HTTP protocol on the URL as base of our kernel system, instead of File Descriptor on the Linux or some other great system.

Each program has it own unique URLSession. When your import a System server, URLSession will create URLSessionTask to load the function that you import.

URLSession -> URLSessionTask -> URLRequest / URLResponse -> Stream -> Socket