initial
This commit is contained in:
commit
0434d78130
2115
package-lock.json
generated
Normal file
2115
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
32
package.json
Normal file
32
package.json
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"name": "server",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"ts": "NODE_OPTIONS='--loader ts-node/esm --no-warnings --enable-source-maps'",
|
||||||
|
"watch:dev": "nodemon --exec npm run start",
|
||||||
|
"start:dev": "npm run ts node src/main.ts",
|
||||||
|
"start:prod": "node dst/main.js",
|
||||||
|
"build:dev": "NODE_ENV=dev npm run ts npx rollup -- -c",
|
||||||
|
"build:prod": "NODE_ENV=prod npm run ts npx rollup -- -c"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@babel/plugin-proposal-decorators": "^7.25.9",
|
||||||
|
"@babel/plugin-transform-class-properties": "^7.25.9",
|
||||||
|
"@babel/plugin-transform-typescript": "^7.25.9",
|
||||||
|
"@rollup/plugin-babel": "^6.0.4",
|
||||||
|
"@rollup/plugin-commonjs": "^28.0.1",
|
||||||
|
"@rollup/plugin-json": "^6.1.0",
|
||||||
|
"@rollup/plugin-node-resolve": "^15.3.0",
|
||||||
|
"@rollup/plugin-terser": "^0.4.4",
|
||||||
|
"@rollup/plugin-typescript": "^12.1.1",
|
||||||
|
"@types/node": "^22.7.9",
|
||||||
|
"nodemon": "^3.1.7",
|
||||||
|
"rollup": "^4.24.0",
|
||||||
|
"rollup-plugin-node-externals": "^7.1.3",
|
||||||
|
"ts-node": "^10.9.2",
|
||||||
|
"tslib": "^2.8.0"
|
||||||
|
}
|
||||||
|
}
|
57
rollup.config.js
Normal file
57
rollup.config.js
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
import { resolve } from "path";
|
||||||
|
import { defineConfig } from "rollup";
|
||||||
|
import terser from "@rollup/plugin-terser";
|
||||||
|
import typescript from "@rollup/plugin-typescript";
|
||||||
|
import babel from "@rollup/plugin-babel";
|
||||||
|
import commonjs from "@rollup/plugin-commonjs";
|
||||||
|
import json from "@rollup/plugin-json";
|
||||||
|
import nodeResolve from "@rollup/plugin-node-resolve";
|
||||||
|
import nodeExternals from "rollup-plugin-node-externals";
|
||||||
|
|
||||||
|
const mode = process.env.NODE_ENV ?? "dev";
|
||||||
|
|
||||||
|
const shouldMinify = () => mode === "prod";
|
||||||
|
|
||||||
|
function overlay(path, src) {
|
||||||
|
path = resolve(path);
|
||||||
|
|
||||||
|
return { load: id => path === id ? src : null };
|
||||||
|
}
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
input: "./src/main.ts",
|
||||||
|
plugins: [
|
||||||
|
typescript({
|
||||||
|
compilerOptions: {
|
||||||
|
allowImportingTsExtensions: true,
|
||||||
|
noEmit: true,
|
||||||
|
},
|
||||||
|
noForceEmit: true,
|
||||||
|
noEmitOnError: true,
|
||||||
|
}),
|
||||||
|
babel({
|
||||||
|
extensions: [".js", ".ts"],
|
||||||
|
exclude: "node_modules/**",
|
||||||
|
babelHelpers: "bundled",
|
||||||
|
plugins: [
|
||||||
|
["@babel/plugin-transform-typescript", {
|
||||||
|
onlyRemoveTypeImports: true,
|
||||||
|
optimizeConstEnums: true,
|
||||||
|
}],
|
||||||
|
["@babel/plugin-proposal-decorators", { legacy: true }],
|
||||||
|
["@babel/plugin-transform-class-properties"],
|
||||||
|
]
|
||||||
|
}),
|
||||||
|
nodeResolve(),
|
||||||
|
commonjs(),
|
||||||
|
json(),
|
||||||
|
nodeExternals(),
|
||||||
|
shouldMinify() && terser({ sourceMap: true })
|
||||||
|
],
|
||||||
|
output: {
|
||||||
|
dir: "dst",
|
||||||
|
format: "esm",
|
||||||
|
sourcemap: true,
|
||||||
|
inlineDynamicImports: true,
|
||||||
|
},
|
||||||
|
});
|
71
runtime/runtime-old.h
Normal file
71
runtime/runtime-old.h
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
#include <stdint.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
const int8_t JS_UNDEFINED = 0x00;
|
||||||
|
const int8_t JS_NULL = 0x01;
|
||||||
|
const int8_t JS_TRUE = 0x02;
|
||||||
|
const int8_t JS_FALSE = 0x03;
|
||||||
|
const int8_t JS_STRING = 0x05;
|
||||||
|
// const int8_t JS_INT = 0x06;
|
||||||
|
const int8_t JS_FLOAT = 0x07;
|
||||||
|
const int8_t JS_SYMBOL = 0x09;
|
||||||
|
const int8_t JS_OBJECT = 0x0A;
|
||||||
|
const int8_t JS_ARRAY = 0x0B;
|
||||||
|
const int8_t JS_FUNCTION = 0x0C;
|
||||||
|
|
||||||
|
typedef struct js_string {
|
||||||
|
int8_t mark;
|
||||||
|
size_t n;
|
||||||
|
const uint16_t *val;
|
||||||
|
} js_string_t;
|
||||||
|
typedef struct js_symbol {
|
||||||
|
int8_t mark;
|
||||||
|
js_string_t *description;
|
||||||
|
} js_symbol_t;
|
||||||
|
typedef struct js_object {
|
||||||
|
int8_t mark;
|
||||||
|
} js_object_t;
|
||||||
|
typedef struct js_function {
|
||||||
|
js_object_t object;
|
||||||
|
js_function_body_t body;
|
||||||
|
} js_function_t;
|
||||||
|
|
||||||
|
typedef struct js_val {
|
||||||
|
int8_t type;
|
||||||
|
|
||||||
|
union {
|
||||||
|
double number;
|
||||||
|
js_string_t *string;
|
||||||
|
js_symbol_t *symbol;
|
||||||
|
js_object_t *object;
|
||||||
|
js_function_t *function;
|
||||||
|
} value;
|
||||||
|
} js_val_t;
|
||||||
|
|
||||||
|
typedef struct js_weak_ref {
|
||||||
|
int8_t type;
|
||||||
|
|
||||||
|
union {
|
||||||
|
js_string_t *string;
|
||||||
|
js_symbol_t *symbol;
|
||||||
|
js_object_t *object;
|
||||||
|
js_function_t *function;
|
||||||
|
} value;
|
||||||
|
} js_weak_ref_t;
|
||||||
|
|
||||||
|
typedef js_val (*js_function_body_t)();
|
||||||
|
|
||||||
|
bool js_is_undefined(js_val_t);
|
||||||
|
|
||||||
|
js_val_t js_undefined();
|
||||||
|
js_val_t js_null();
|
||||||
|
|
||||||
|
js_val_t js_number_new(double val);
|
||||||
|
js_val_t js_string_new_c(const char *val);
|
||||||
|
js_val_t js_string_new_cn(size_t n, const char *val);
|
||||||
|
js_val_t js_string_new_cp(size_t n, const uint16_t *val);
|
||||||
|
js_val_t js_string_new_br(size_t n, const uint16_t *val);
|
||||||
|
js_val_t js_boolean_new(bool val);
|
||||||
|
js_val_t js_object_new(size_t alloc);
|
||||||
|
js_val_t js_array_new(size_t alloc);
|
||||||
|
js_val_t js_function_new(js_function_body_t val);
|
6
runtime/runtime.c
Normal file
6
runtime/runtime.c
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#include "runtime.h"
|
||||||
|
|
||||||
|
struct js_val {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
117
runtime/runtime.h
Normal file
117
runtime/runtime.h
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
typedef struct js_context *js_context_t;
|
||||||
|
typedef struct js_value *js_value_t;
|
||||||
|
|
||||||
|
extern js_value_t JS_UNDEFINED, JS_NULL, JS_TRUE, JS_FALSE;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
js_value_t *value;
|
||||||
|
int ref_count;
|
||||||
|
} js_capture_t;
|
||||||
|
|
||||||
|
// typedef struct {
|
||||||
|
// js_value_t
|
||||||
|
// } js_member_t;
|
||||||
|
|
||||||
|
js_value_t js_op_add(js_context_t ctx, js_value_t a, js_value_t b);
|
||||||
|
js_value_t js_op_sub(js_context_t ctx, js_value_t a, js_value_t b);
|
||||||
|
js_value_t js_op_mod(js_context_t ctx, js_value_t a, js_value_t b);
|
||||||
|
js_value_t js_op_div(js_context_t ctx, js_value_t a, js_value_t b);
|
||||||
|
js_value_t js_op_neg(js_context_t ctx, js_value_t val);
|
||||||
|
|
||||||
|
js_value_t js_op_b_and(js_context_t ctx, js_value_t a, js_value_t b);
|
||||||
|
js_value_t js_op_b_or(js_context_t ctx, js_value_t a, js_value_t b);
|
||||||
|
js_value_t js_op_b_xor(js_context_t ctx, js_value_t a, js_value_t b);
|
||||||
|
js_value_t js_op_b_rsh(js_context_t ctx, js_value_t a, js_value_t b);
|
||||||
|
js_value_t js_op_b_lsh(js_context_t ctx, js_value_t a, js_value_t b);
|
||||||
|
js_value_t js_op_b_ursh(js_context_t ctx, js_value_t a, js_value_t b);
|
||||||
|
js_value_t js_op_b_not(js_context_t ctx, js_value_t val);
|
||||||
|
|
||||||
|
js_value_t js_op_less(js_context_t ctx, js_value_t a, js_value_t b);
|
||||||
|
js_value_t js_op_gr(js_context_t ctx, js_value_t a, js_value_t b);
|
||||||
|
js_value_t js_op_leq(js_context_t ctx, js_value_t a, js_value_t b);
|
||||||
|
js_value_t js_op_geq(js_context_t ctx, js_value_t a, js_value_t b);
|
||||||
|
|
||||||
|
js_value_t js_op_eq_loose(js_context_t ctx, js_value_t a, js_value_t b);
|
||||||
|
js_value_t js_op_neq_loose(js_context_t ctx, js_value_t a, js_value_t b);
|
||||||
|
js_value_t js_op_eq(js_context_t ctx, js_value_t a, js_value_t b);
|
||||||
|
js_value_t js_op_neq(js_context_t ctx, js_value_t a, js_value_t b);
|
||||||
|
|
||||||
|
js_value_t js_obj_set_proto(js_context_t ctx, js_value_t obj, js_value_t key);
|
||||||
|
js_value_t js_obj_get_proto(js_context_t ctx, js_value_t obj, js_value_t key);
|
||||||
|
|
||||||
|
js_value_t js_obj_get_own(js_context_t ctx, js_value_t obj, js_value_t key);
|
||||||
|
js_value_t js_obj_set_own(js_context_t ctx, js_value_t obj, js_value_t key, js_value_t value);
|
||||||
|
js_value_t js_obj_has_own(js_context_t ctx, js_value_t obj, js_value_t key);
|
||||||
|
js_value_t js_obj_del_own(js_context_t ctx, js_value_t obj, js_value_t key);
|
||||||
|
|
||||||
|
js_value_t js_obj_get(js_context_t ctx, js_value_t obj, js_value_t key);
|
||||||
|
js_value_t js_obj_set(js_context_t ctx, js_value_t obj, js_value_t key, js_value_t value);
|
||||||
|
js_value_t js_obj_has(js_context_t ctx, js_value_t obj, js_value_t key);
|
||||||
|
|
||||||
|
js_value_t js_obj_def_field(js_context_t ctx, js_value_t obj, js_value_t key, bool writable, bool configurable, bool enumerable);
|
||||||
|
js_value_t js_obj_def_prop(js_context_t ctx, js_value_t obj, js_value_t key, js_value_t get, js_value_t set, bool configurable, bool enumerable);
|
||||||
|
|
||||||
|
js_value_t js_func_create(js_context_t ctx, bool apply, bool construct, js_string_t name, js_func_body_t body, size_t capture_n, js_capture_t *captures);
|
||||||
|
|
||||||
|
// void *ref = malloc(1);
|
||||||
|
|
||||||
|
typedef struct js_string {
|
||||||
|
int8_t mark;
|
||||||
|
size_t n;
|
||||||
|
const uint16_t *val;
|
||||||
|
} js_string_t;
|
||||||
|
typedef struct js_symbol {
|
||||||
|
int8_t mark;
|
||||||
|
js_string_t *description;
|
||||||
|
} js_symbol_t;
|
||||||
|
typedef struct js_object {
|
||||||
|
int8_t mark;
|
||||||
|
} js_object_t;
|
||||||
|
typedef struct js_function {
|
||||||
|
js_object_t object;
|
||||||
|
js_function_body_t body;
|
||||||
|
} js_function_t;
|
||||||
|
|
||||||
|
typedef struct js_val {
|
||||||
|
int8_t type;
|
||||||
|
|
||||||
|
union {
|
||||||
|
double number;
|
||||||
|
js_string_t *string;
|
||||||
|
js_symbol_t *symbol;
|
||||||
|
js_object_t *object;
|
||||||
|
js_function_t *function;
|
||||||
|
} value;
|
||||||
|
} js_val_t;
|
||||||
|
|
||||||
|
typedef struct js_weak_ref {
|
||||||
|
int8_t type;
|
||||||
|
|
||||||
|
union {
|
||||||
|
js_string_t *string;
|
||||||
|
js_symbol_t *symbol;
|
||||||
|
js_object_t *object;
|
||||||
|
js_function_t *function;
|
||||||
|
} value;
|
||||||
|
} js_weak_ref_t;
|
||||||
|
|
||||||
|
typedef js_val (*js_function_body_t)();
|
||||||
|
|
||||||
|
bool js_is_undefined(js_val_t);
|
||||||
|
|
||||||
|
js_val_t js_undefined();
|
||||||
|
js_val_t js_null();
|
||||||
|
|
||||||
|
js_val_t js_number_new(double val);
|
||||||
|
js_val_t js_string_new_c(const char *val);
|
||||||
|
js_val_t js_string_new_cn(size_t n, const char *val);
|
||||||
|
js_val_t js_string_new_cp(size_t n, const uint16_t *val);
|
||||||
|
js_val_t js_string_new_br(size_t n, const uint16_t *val);
|
||||||
|
js_val_t js_boolean_new(bool val);
|
||||||
|
js_val_t js_object_new(size_t alloc);
|
||||||
|
js_val_t js_array_new(size_t alloc);
|
||||||
|
js_val_t js_function_new(js_function_body_t val);
|
1
src/main.ts
Normal file
1
src/main.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
console.log("tset");
|
17
tsconfig.json
Normal file
17
tsconfig.json
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"include": ["**/*.ts"],
|
||||||
|
"compilerOptions": {
|
||||||
|
"strict": true,
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"module": "ESNext",
|
||||||
|
"target": "ESNext",
|
||||||
|
"lib": ["ESNext"],
|
||||||
|
"forceConsistentCasingInFileNames": true,
|
||||||
|
"emitDecoratorMetadata": true,
|
||||||
|
"experimentalDecorators": true,
|
||||||
|
"outDir": "dst",
|
||||||
|
"allowImportingTsExtensions": true,
|
||||||
|
"noEmit": true
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user