titanpl 7.0.0 → 7.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/packages/cli/package.json +4 -4
- package/packages/cli/src/commands/build-ext.js +17 -4
- package/packages/engine-darwin-arm64/package.json +1 -1
- package/packages/engine-linux-x64/package.json +1 -1
- package/packages/engine-win32-x64/bin/titan-server.exe +0 -0
- package/packages/engine-win32-x64/package.json +1 -1
- package/packages/native/index.d.ts +27 -0
- package/packages/native/index.js +1 -0
- package/packages/native/package.json +1 -1
- package/packages/native/t.native.d.ts +99 -3
- package/packages/packet/package.json +1 -1
- package/packages/route/package.json +1 -1
- package/packages/sdk/package.json +1 -1
- package/templates/extension/README_WASM.md +38 -0
- package/templates/extension/package.json +2 -2
- package/templates/js/package.json +7 -7
- package/templates/rust-js/package.json +4 -4
- package/templates/rust-ts/package.json +4 -4
- package/templates/ts/package.json +7 -7
- package/packages/core-source/LICENSE +0 -15
- package/packages/core-source/README.md +0 -128
- package/packages/core-source/V8_SERIALIZATION.md +0 -125
- package/packages/core-source/configure.js +0 -50
- package/packages/core-source/globals.d.ts +0 -2238
- package/packages/core-source/index.d.ts +0 -515
- package/packages/core-source/index.js +0 -639
- package/packages/core-source/jsconfig.json +0 -12
- package/packages/core-source/mkctx.config.json +0 -7
- package/packages/core-source/native/Cargo.lock +0 -1559
- package/packages/core-source/native/Cargo.toml +0 -30
- package/packages/core-source/native/src/crypto_impl.rs +0 -139
- package/packages/core-source/native/src/lib.rs +0 -702
- package/packages/core-source/native/src/storage_impl.rs +0 -73
- package/packages/core-source/native/src/v8_impl.rs +0 -93
- package/packages/core-source/package-lock.json +0 -1464
- package/packages/core-source/package.json +0 -53
- package/packages/core-source/tests/buffer.test.js +0 -78
- package/packages/core-source/tests/cookies.test.js +0 -117
- package/packages/core-source/tests/crypto.test.js +0 -142
- package/packages/core-source/tests/fs.test.js +0 -176
- package/packages/core-source/tests/ls.test.js +0 -149
- package/packages/core-source/tests/net.test.js +0 -84
- package/packages/core-source/tests/os.test.js +0 -81
- package/packages/core-source/tests/path.test.js +0 -102
- package/packages/core-source/tests/response.test.js +0 -146
- package/packages/core-source/tests/session.test.js +0 -110
- package/packages/core-source/tests/setup.js +0 -325
- package/packages/core-source/tests/time.test.js +0 -57
- package/packages/core-source/tests/url.test.js +0 -82
- package/packages/core-source/titan-ext.d.ts +0 -2
- package/packages/core-source/titan.json +0 -9
- package/packages/core-source/vitest.config.js +0 -8
- package/templates/extension/README.md +0 -69
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
use std::collections::HashMap;
|
|
2
|
-
use std::sync::{OnceLock, RwLock};
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
static STORAGE: OnceLock<RwLock<HashMap<String, String>>> = OnceLock::new();
|
|
6
|
-
static SESSIONS: OnceLock<RwLock<HashMap<String, String>>> = OnceLock::new();
|
|
7
|
-
|
|
8
|
-
fn get_storage() -> &'static RwLock<HashMap<String, String>> {
|
|
9
|
-
STORAGE.get_or_init(|| RwLock::new(HashMap::new()))
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
fn get_sessions() -> &'static RwLock<HashMap<String, String>> {
|
|
13
|
-
SESSIONS.get_or_init(|| RwLock::new(HashMap::new()))
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
// --- Local Storage ---
|
|
17
|
-
|
|
18
|
-
pub fn ls_get(key: &str) -> Option<String> {
|
|
19
|
-
let map = get_storage().read().ok()?;
|
|
20
|
-
map.get(key).cloned()
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
pub fn ls_set(key: &str, value: &str) -> Result<(), String> {
|
|
24
|
-
let mut map = get_storage().write().map_err(|_| "Storage write lock poisoned".to_string())?;
|
|
25
|
-
map.insert(key.to_string(), value.to_string());
|
|
26
|
-
Ok(())
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
pub fn ls_remove(key: &str) -> Result<(), String> {
|
|
30
|
-
let mut map = get_storage().write().map_err(|_| "Storage write lock poisoned".to_string())?;
|
|
31
|
-
map.remove(key);
|
|
32
|
-
Ok(())
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
pub fn ls_clear() -> Result<(), String> {
|
|
36
|
-
let mut map = get_storage().write().map_err(|_| "Storage write lock poisoned".to_string())?;
|
|
37
|
-
map.clear();
|
|
38
|
-
Ok(())
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
pub fn ls_keys() -> Result<Vec<String>, String> {
|
|
42
|
-
let map = get_storage().read().map_err(|_| "Storage read lock poisoned".to_string())?;
|
|
43
|
-
Ok(map.keys().cloned().collect())
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// --- Sessions ---
|
|
47
|
-
|
|
48
|
-
pub fn session_set(session_id: &str, key: &str, value: &str) -> Result<(), String> {
|
|
49
|
-
let mut map = get_sessions().write().map_err(|_| "Session write lock poisoned".to_string())?;
|
|
50
|
-
let comp_key = format!("{}:{}", session_id, key);
|
|
51
|
-
map.insert(comp_key, value.to_string());
|
|
52
|
-
Ok(())
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
pub fn session_get(session_id: &str, key: &str) -> Option<String> {
|
|
56
|
-
let map = get_sessions().read().ok()?;
|
|
57
|
-
let comp_key = format!("{}:{}", session_id, key);
|
|
58
|
-
map.get(&comp_key).cloned()
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
pub fn session_delete(session_id: &str, key: &str) -> Result<(), String> {
|
|
62
|
-
let mut map = get_sessions().write().map_err(|_| "Session write lock poisoned".to_string())?;
|
|
63
|
-
let comp_key = format!("{}:{}", session_id, key);
|
|
64
|
-
map.remove(&comp_key);
|
|
65
|
-
Ok(())
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
pub fn session_clear(session_id: &str) -> Result<(), String> {
|
|
69
|
-
let mut map = get_sessions().write().map_err(|_| "Session write lock poisoned".to_string())?;
|
|
70
|
-
let prefix = format!("{}:", session_id);
|
|
71
|
-
map.retain(|k, _| !k.starts_with(&prefix));
|
|
72
|
-
Ok(())
|
|
73
|
-
}
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
use v8;
|
|
2
|
-
use v8::ValueSerializerHelper;
|
|
3
|
-
use v8::ValueDeserializerHelper;
|
|
4
|
-
|
|
5
|
-
struct TitanValueSerializerDelegate;
|
|
6
|
-
impl v8::ValueSerializerImpl for TitanValueSerializerDelegate {
|
|
7
|
-
fn throw_data_clone_error<'s>(
|
|
8
|
-
&self,
|
|
9
|
-
scope: &mut v8::HandleScope<'s>,
|
|
10
|
-
message: v8::Local<'s, v8::String>,
|
|
11
|
-
) {
|
|
12
|
-
let error = v8::Exception::error(scope, message);
|
|
13
|
-
scope.throw_exception(error);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
struct TitanValueDeserializerDelegate;
|
|
18
|
-
impl v8::ValueDeserializerImpl for TitanValueDeserializerDelegate {}
|
|
19
|
-
|
|
20
|
-
pub fn native_serialize(
|
|
21
|
-
scope: &mut v8::HandleScope,
|
|
22
|
-
args: v8::FunctionCallbackArguments,
|
|
23
|
-
mut retval: v8::ReturnValue,
|
|
24
|
-
) {
|
|
25
|
-
let value = args.get(0);
|
|
26
|
-
let context = scope.get_current_context();
|
|
27
|
-
|
|
28
|
-
// Create serializer with delegate
|
|
29
|
-
let mut serializer = v8::ValueSerializer::new(scope, Box::new(TitanValueSerializerDelegate));
|
|
30
|
-
serializer.write_header();
|
|
31
|
-
|
|
32
|
-
// Serialize
|
|
33
|
-
match serializer.write_value(context, value) {
|
|
34
|
-
Some(true) => {
|
|
35
|
-
let raw_bytes = serializer.release();
|
|
36
|
-
|
|
37
|
-
// Generate Uint8Array
|
|
38
|
-
let len = raw_bytes.len();
|
|
39
|
-
let unique_bs = v8::ArrayBuffer::new_backing_store_from_boxed_slice(raw_bytes.into_boxed_slice());
|
|
40
|
-
let shared_bs = unique_bs.make_shared();
|
|
41
|
-
let array_buffer = v8::ArrayBuffer::with_backing_store(scope, &shared_bs);
|
|
42
|
-
|
|
43
|
-
if let Some(uint8) = v8::Uint8Array::new(scope, array_buffer, 0, len) {
|
|
44
|
-
retval.set(uint8.into());
|
|
45
|
-
}
|
|
46
|
-
},
|
|
47
|
-
_ => {}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
pub fn native_deserialize(
|
|
52
|
-
scope: &mut v8::HandleScope,
|
|
53
|
-
args: v8::FunctionCallbackArguments,
|
|
54
|
-
mut retval: v8::ReturnValue,
|
|
55
|
-
) {
|
|
56
|
-
// Input: Uint8Array
|
|
57
|
-
let arg0 = args.get(0);
|
|
58
|
-
if !arg0.is_uint8_array() {
|
|
59
|
-
let msg = v8::String::new(scope, "Expected Uint8Array").unwrap();
|
|
60
|
-
let error = v8::Exception::type_error(scope, msg);
|
|
61
|
-
scope.throw_exception(error);
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
let uint8 = v8::Local::<v8::Uint8Array>::try_from(arg0).unwrap();
|
|
66
|
-
let len = uint8.byte_length();
|
|
67
|
-
|
|
68
|
-
// Copy bytes to vector for deserializer
|
|
69
|
-
let mut data = vec![0u8; len];
|
|
70
|
-
uint8.copy_contents(&mut data);
|
|
71
|
-
|
|
72
|
-
let context = scope.get_current_context();
|
|
73
|
-
let deserializer = v8::ValueDeserializer::new(scope, Box::new(TitanValueDeserializerDelegate), &data);
|
|
74
|
-
|
|
75
|
-
// Read header
|
|
76
|
-
if let Some(true) = deserializer.read_header(context) {
|
|
77
|
-
// Read value
|
|
78
|
-
if let Some(value) = deserializer.read_value(context) {
|
|
79
|
-
retval.set(value);
|
|
80
|
-
} else {
|
|
81
|
-
// Invalid value format
|
|
82
|
-
let msg = v8::String::new(scope, "Failed to deserialize value").unwrap();
|
|
83
|
-
let error = v8::Exception::error(scope, msg);
|
|
84
|
-
scope.throw_exception(error);
|
|
85
|
-
}
|
|
86
|
-
} else {
|
|
87
|
-
// Invalid header
|
|
88
|
-
let msg = v8::String::new(scope, "Invalid serialization header").unwrap();
|
|
89
|
-
let error = v8::Exception::error(scope, msg);
|
|
90
|
-
scope.throw_exception(error);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|