Skip to content

Latest commit

 

History

History
40 lines (34 loc) · 1.25 KB

README.md

File metadata and controls

40 lines (34 loc) · 1.25 KB

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