@kulupu-linku/sona 0.1.10 → 0.2.0
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/README.md +18 -3
- package/dist/client.d.ts +1 -802
- package/dist/client.js +98 -4
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +1 -1159
- package/dist/index.js +148 -168
- package/dist/index.js.map +1 -0
- package/dist/lib/client.d.ts +201 -0
- package/dist/lib/index.d.ts +959 -0
- package/dist/lib/types.d.ts +17 -0
- package/dist/lib/utils.d.ts +13 -0
- package/dist/utils-CnA4OULt.js +2777 -0
- package/dist/utils-CnA4OULt.js.map +1 -0
- package/dist/utils.d.ts +1 -16
- package/dist/utils.js +7 -12
- package/dist/utils.js.map +1 -0
- package/generated/languages.json +15 -0
- package/generated/sandbox.json +16 -3
- package/generated/word.json +16 -3
- package/generated/words.json +16 -3
- package/package.json +19 -15
- package/LICENSE +0 -674
- package/dist/chunk-QCIUEY5V.js +0 -38
- package/dist/types.d.ts +0 -2
- package/dist/types.js +0 -0
- package/generated/etymology.json +0 -20
- package/generated/representations.json +0 -43
- package/generated/resources.json +0 -30
package/dist/client.js
CHANGED
|
@@ -1,6 +1,100 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
var p = (t, i, e = {}) => {
|
|
2
|
+
let r = `${t}=${i}`;
|
|
3
|
+
return e && typeof e.maxAge == "number" && e.maxAge >= 0 && (r += `; Max-Age=${Math.floor(e.maxAge)}`), e.domain && (r += `; Domain=${e.domain}`), e.path && (r += `; Path=${e.path}`), e.expires && (r += `; Expires=${e.expires.toUTCString()}`), e.httpOnly && (r += "; HttpOnly"), e.secure && (r += "; Secure"), e.sameSite && (r += `; SameSite=${e.sameSite}`), e.partitioned && (r += "; Partitioned"), r;
|
|
4
|
+
}, v = (t, i, e = {}) => (i = encodeURIComponent(i), p(t, i, e)), P = (t, i) => (t = t.replace(/\/+$/, ""), t = t + "/", i = i.replace(/^\/+/, ""), t + i), d = (t, i) => {
|
|
5
|
+
for (const [e, r] of Object.entries(i)) {
|
|
6
|
+
const n = new RegExp("/:" + e + "(?:{[^/]+})?");
|
|
7
|
+
t = t.replace(n, `/${r}`);
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
}, x = (t) => t.replace(/\/index$/, "/");
|
|
11
|
+
function u(t) {
|
|
12
|
+
return typeof t == "object" && t !== null && !Array.isArray(t);
|
|
13
|
+
}
|
|
14
|
+
function y(t, i) {
|
|
15
|
+
if (!u(t) && !u(i))
|
|
16
|
+
return i;
|
|
17
|
+
const e = { ...t };
|
|
18
|
+
for (const r in i) {
|
|
19
|
+
const n = i[r];
|
|
20
|
+
u(e[r]) && u(n) ? e[r] = y(e[r], n) : e[r] = n;
|
|
21
|
+
}
|
|
22
|
+
return e;
|
|
23
|
+
}
|
|
24
|
+
var l = (t, i) => new Proxy(() => {
|
|
25
|
+
}, {
|
|
26
|
+
get(r, n) {
|
|
27
|
+
if (!(typeof n != "string" || n === "then"))
|
|
28
|
+
return l(t, [...i, n]);
|
|
29
|
+
},
|
|
30
|
+
apply(r, n, h) {
|
|
31
|
+
return t({
|
|
32
|
+
path: i,
|
|
33
|
+
args: h
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}), j = class {
|
|
37
|
+
constructor(t, i) {
|
|
38
|
+
this.queryParams = void 0, this.pathParams = {}, this.cType = void 0, this.fetch = (e, r) => {
|
|
39
|
+
if (e) {
|
|
40
|
+
if (e.query) {
|
|
41
|
+
for (const [s, o] of Object.entries(e.query))
|
|
42
|
+
if (o !== void 0)
|
|
43
|
+
if (this.queryParams || (this.queryParams = new URLSearchParams()), Array.isArray(o))
|
|
44
|
+
for (const f of o)
|
|
45
|
+
this.queryParams.append(s, f);
|
|
46
|
+
else
|
|
47
|
+
this.queryParams.set(s, o);
|
|
48
|
+
}
|
|
49
|
+
if (e.form) {
|
|
50
|
+
const s = new FormData();
|
|
51
|
+
for (const [o, f] of Object.entries(e.form))
|
|
52
|
+
s.append(o, f);
|
|
53
|
+
this.rBody = s;
|
|
54
|
+
}
|
|
55
|
+
e.json && (this.rBody = JSON.stringify(e.json), this.cType = "application/json"), e.param && (this.pathParams = e.param);
|
|
56
|
+
}
|
|
57
|
+
let n = this.method.toUpperCase(), h = !(n === "GET" || n === "HEAD");
|
|
58
|
+
const c = {
|
|
59
|
+
...(e == null ? void 0 : e.header) ?? {},
|
|
60
|
+
...r != null && r.headers ? r.headers : {}
|
|
61
|
+
};
|
|
62
|
+
if (e != null && e.cookie) {
|
|
63
|
+
const s = [];
|
|
64
|
+
for (const [o, f] of Object.entries(e.cookie))
|
|
65
|
+
s.push(v(o, f, { path: "/" }));
|
|
66
|
+
c.Cookie = s.join(",");
|
|
67
|
+
}
|
|
68
|
+
this.cType && (c["Content-Type"] = this.cType);
|
|
69
|
+
const m = new Headers(c ?? void 0);
|
|
70
|
+
let a = this.url;
|
|
71
|
+
return a = x(a), a = d(a, this.pathParams), this.queryParams && (a = a + "?" + this.queryParams.toString()), n = this.method.toUpperCase(), h = !(n === "GET" || n === "HEAD"), ((r == null ? void 0 : r.fetch) || fetch)(a, {
|
|
72
|
+
body: h ? this.rBody : void 0,
|
|
73
|
+
method: n,
|
|
74
|
+
headers: m
|
|
75
|
+
});
|
|
76
|
+
}, this.url = t, this.method = i;
|
|
77
|
+
}
|
|
78
|
+
}, $ = (t, i) => l((e) => {
|
|
79
|
+
const r = [...e.path];
|
|
80
|
+
let n = "";
|
|
81
|
+
if (/^\$/.test(r[r.length - 1])) {
|
|
82
|
+
const a = r.pop();
|
|
83
|
+
a && (n = a.replace(/^\$/, ""));
|
|
84
|
+
}
|
|
85
|
+
const h = r.join("/"), c = P(t, h);
|
|
86
|
+
if (n === "url")
|
|
87
|
+
return e.args[0] && e.args[0].param ? new URL(d(c, e.args[0].param)) : new URL(c);
|
|
88
|
+
const m = new j(c, n);
|
|
89
|
+
if (n) {
|
|
90
|
+
i ?? (i = {});
|
|
91
|
+
const a = y(i, { ...e.args[1] ?? {} });
|
|
92
|
+
return m.fetch(e.args[0], a);
|
|
93
|
+
}
|
|
94
|
+
return m;
|
|
95
|
+
}, []);
|
|
96
|
+
const q = $("https://api.linku.la/");
|
|
4
97
|
export {
|
|
5
|
-
client
|
|
98
|
+
q as client
|
|
6
99
|
};
|
|
100
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sources":["../node_modules/.pnpm/hono@4.0.5/node_modules/hono/dist/utils/cookie.js","../node_modules/.pnpm/hono@4.0.5/node_modules/hono/dist/client/utils.js","../node_modules/.pnpm/hono@4.0.5/node_modules/hono/dist/client/client.js","../src/lib/client.ts"],"sourcesContent":["// src/utils/cookie.ts\nimport { decodeURIComponent_ } from \"./url.js\";\nvar algorithm = { name: \"HMAC\", hash: \"SHA-256\" };\nvar getCryptoKey = async (secret) => {\n const secretBuf = typeof secret === \"string\" ? new TextEncoder().encode(secret) : secret;\n return await crypto.subtle.importKey(\"raw\", secretBuf, algorithm, false, [\"sign\", \"verify\"]);\n};\nvar makeSignature = async (value, secret) => {\n const key = await getCryptoKey(secret);\n const signature = await crypto.subtle.sign(algorithm.name, key, new TextEncoder().encode(value));\n return btoa(String.fromCharCode(...new Uint8Array(signature)));\n};\nvar verifySignature = async (base64Signature, value, secret) => {\n try {\n const signatureBinStr = atob(base64Signature);\n const signature = new Uint8Array(signatureBinStr.length);\n for (let i = 0, len = signatureBinStr.length; i < len; i++) {\n signature[i] = signatureBinStr.charCodeAt(i);\n }\n return await crypto.subtle.verify(algorithm, secret, signature, new TextEncoder().encode(value));\n } catch (e) {\n return false;\n }\n};\nvar validCookieNameRegEx = /^[\\w!#$%&'*.^`|~+-]+$/;\nvar validCookieValueRegEx = /^[ !#-:<-[\\]-~]*$/;\nvar parse = (cookie, name) => {\n const pairs = cookie.trim().split(\";\");\n return pairs.reduce((parsedCookie, pairStr) => {\n pairStr = pairStr.trim();\n const valueStartPos = pairStr.indexOf(\"=\");\n if (valueStartPos === -1) {\n return parsedCookie;\n }\n const cookieName = pairStr.substring(0, valueStartPos).trim();\n if (name && name !== cookieName || !validCookieNameRegEx.test(cookieName)) {\n return parsedCookie;\n }\n let cookieValue = pairStr.substring(valueStartPos + 1).trim();\n if (cookieValue.startsWith('\"') && cookieValue.endsWith('\"')) {\n cookieValue = cookieValue.slice(1, -1);\n }\n if (validCookieValueRegEx.test(cookieValue)) {\n parsedCookie[cookieName] = decodeURIComponent_(cookieValue);\n }\n return parsedCookie;\n }, {});\n};\nvar parseSigned = async (cookie, secret, name) => {\n const parsedCookie = {};\n const secretKey = await getCryptoKey(secret);\n for (const [key, value] of Object.entries(parse(cookie, name))) {\n const signatureStartPos = value.lastIndexOf(\".\");\n if (signatureStartPos < 1) {\n continue;\n }\n const signedValue = value.substring(0, signatureStartPos);\n const signature = value.substring(signatureStartPos + 1);\n if (signature.length !== 44 || !signature.endsWith(\"=\")) {\n continue;\n }\n const isVerified = await verifySignature(signature, signedValue, secretKey);\n parsedCookie[key] = isVerified ? signedValue : false;\n }\n return parsedCookie;\n};\nvar _serialize = (name, value, opt = {}) => {\n let cookie = `${name}=${value}`;\n if (opt && typeof opt.maxAge === \"number\" && opt.maxAge >= 0) {\n cookie += `; Max-Age=${Math.floor(opt.maxAge)}`;\n }\n if (opt.domain) {\n cookie += `; Domain=${opt.domain}`;\n }\n if (opt.path) {\n cookie += `; Path=${opt.path}`;\n }\n if (opt.expires) {\n cookie += `; Expires=${opt.expires.toUTCString()}`;\n }\n if (opt.httpOnly) {\n cookie += \"; HttpOnly\";\n }\n if (opt.secure) {\n cookie += \"; Secure\";\n }\n if (opt.sameSite) {\n cookie += `; SameSite=${opt.sameSite}`;\n }\n if (opt.partitioned) {\n cookie += \"; Partitioned\";\n }\n return cookie;\n};\nvar serialize = (name, value, opt = {}) => {\n value = encodeURIComponent(value);\n return _serialize(name, value, opt);\n};\nvar serializeSigned = async (name, value, secret, opt = {}) => {\n const signature = await makeSignature(value, secret);\n value = `${value}.${signature}`;\n value = encodeURIComponent(value);\n return _serialize(name, value, opt);\n};\nexport {\n parse,\n parseSigned,\n serialize,\n serializeSigned\n};\n","// src/client/utils.ts\nvar mergePath = (base, path) => {\n base = base.replace(/\\/+$/, \"\");\n base = base + \"/\";\n path = path.replace(/^\\/+/, \"\");\n return base + path;\n};\nvar replaceUrlParam = (urlString, params) => {\n for (const [k, v] of Object.entries(params)) {\n const reg = new RegExp(\"/:\" + k + \"(?:{[^/]+})?\");\n urlString = urlString.replace(reg, `/${v}`);\n }\n return urlString;\n};\nvar removeIndexString = (urlSting) => {\n return urlSting.replace(/\\/index$/, \"/\");\n};\nfunction isObject(item) {\n return typeof item === \"object\" && item !== null && !Array.isArray(item);\n}\nfunction deepMerge(target, source) {\n if (!isObject(target) && !isObject(source)) {\n return source;\n }\n const merged = { ...target };\n for (const key in source) {\n const value = source[key];\n if (isObject(merged[key]) && isObject(value)) {\n merged[key] = deepMerge(merged[key], value);\n } else {\n merged[key] = value;\n }\n }\n return merged;\n}\nexport {\n deepMerge,\n mergePath,\n removeIndexString,\n replaceUrlParam\n};\n","// src/client/client.ts\nimport { serialize } from \"../utils/cookie.js\";\nimport { deepMerge, mergePath, removeIndexString, replaceUrlParam } from \"./utils.js\";\nvar createProxy = (callback, path) => {\n const proxy = new Proxy(() => {\n }, {\n get(_obj, key) {\n if (typeof key !== \"string\" || key === \"then\") {\n return void 0;\n }\n return createProxy(callback, [...path, key]);\n },\n apply(_1, _2, args) {\n return callback({\n path,\n args\n });\n }\n });\n return proxy;\n};\nvar ClientRequestImpl = class {\n constructor(url, method) {\n this.queryParams = void 0;\n this.pathParams = {};\n this.cType = void 0;\n this.fetch = (args, opt) => {\n if (args) {\n if (args.query) {\n for (const [k, v] of Object.entries(args.query)) {\n if (v === void 0) {\n continue;\n }\n this.queryParams || (this.queryParams = new URLSearchParams());\n if (Array.isArray(v)) {\n for (const v2 of v) {\n this.queryParams.append(k, v2);\n }\n } else {\n this.queryParams.set(k, v);\n }\n }\n }\n if (args.form) {\n const form = new FormData();\n for (const [k, v] of Object.entries(args.form)) {\n form.append(k, v);\n }\n this.rBody = form;\n }\n if (args.json) {\n this.rBody = JSON.stringify(args.json);\n this.cType = \"application/json\";\n }\n if (args.param) {\n this.pathParams = args.param;\n }\n }\n let methodUpperCase = this.method.toUpperCase();\n let setBody = !(methodUpperCase === \"GET\" || methodUpperCase === \"HEAD\");\n const headerValues = {\n ...args?.header ?? {},\n ...opt?.headers ? opt.headers : {}\n };\n if (args?.cookie) {\n const cookies = [];\n for (const [key, value] of Object.entries(args.cookie)) {\n cookies.push(serialize(key, value, { path: \"/\" }));\n }\n headerValues[\"Cookie\"] = cookies.join(\",\");\n }\n if (this.cType) {\n headerValues[\"Content-Type\"] = this.cType;\n }\n const headers = new Headers(headerValues ?? void 0);\n let url = this.url;\n url = removeIndexString(url);\n url = replaceUrlParam(url, this.pathParams);\n if (this.queryParams) {\n url = url + \"?\" + this.queryParams.toString();\n }\n methodUpperCase = this.method.toUpperCase();\n setBody = !(methodUpperCase === \"GET\" || methodUpperCase === \"HEAD\");\n return (opt?.fetch || fetch)(url, {\n body: setBody ? this.rBody : void 0,\n method: methodUpperCase,\n headers\n });\n };\n this.url = url;\n this.method = method;\n }\n};\nvar hc = (baseUrl, options) => createProxy((opts) => {\n const parts = [...opts.path];\n let method = \"\";\n if (/^\\$/.test(parts[parts.length - 1])) {\n const last = parts.pop();\n if (last) {\n method = last.replace(/^\\$/, \"\");\n }\n }\n const path = parts.join(\"/\");\n const url = mergePath(baseUrl, path);\n if (method === \"url\") {\n if (opts.args[0] && opts.args[0].param) {\n return new URL(replaceUrlParam(url, opts.args[0].param));\n }\n return new URL(url);\n }\n const req = new ClientRequestImpl(url, method);\n if (method) {\n options ?? (options = {});\n const args = deepMerge(options, { ...opts.args[1] ?? {} });\n return req.fetch(opts.args[0], args);\n }\n return req;\n}, []);\nexport {\n hc\n};\n","import { hc } from \"hono/client\";\nimport type { AppType } from \"$server\";\n\nexport const client = hc<AppType>(\"https://api.linku.la/\");\n\nexport type ApiType = AppType;\n"],"names":["_serialize","name","value","opt","cookie","serialize","mergePath","base","path","replaceUrlParam","urlString","params","k","v","reg","removeIndexString","urlSting","isObject","item","deepMerge","target","source","merged","key","createProxy","callback","_obj","_1","_2","args","ClientRequestImpl","url","method","v2","form","methodUpperCase","setBody","headerValues","cookies","headers","hc","baseUrl","options","opts","parts","last","req","client"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|