@absolutejs/absolute 0.15.26 → 0.16.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/dist/index.js +402 -423
- package/dist/index.js.map +13 -12
- package/dist/react/hooks/index.js +98 -0
- package/dist/react/hooks/index.js.map +10 -0
- package/dist/react/index.js +97 -0
- package/dist/react/index.js.map +11 -0
- package/dist/src/core/pageHandlers.d.ts +0 -13
- package/dist/src/react/hooks/index.d.ts +2 -0
- package/dist/src/react/hooks/useMediaQuery.d.ts +7 -0
- package/dist/src/react/index.d.ts +1 -0
- package/dist/src/react/pageHandler.d.ts +2 -0
- package/dist/src/svelte/index.d.ts +2 -0
- package/dist/src/svelte/pageHandler.d.ts +6 -0
- package/dist/src/utils/userAgentFunctions.d.ts +1 -0
- package/dist/src/vue/index.d.ts +1 -0
- package/dist/src/vue/pageHandler.d.ts +2 -0
- package/dist/svelte/index.js +176 -0
- package/dist/svelte/index.js.map +15 -0
- package/dist/types/build.d.ts +0 -5
- package/dist/types/mediaQuery.d.ts +9 -0
- package/dist/types/react.d.ts +2 -0
- package/dist/types/svelte.d.ts +2 -0
- package/dist/types/userAgentTypes.d.ts +2 -0
- package/dist/types/vue.d.ts +2 -0
- package/dist/types/window-globals.d.ts +26 -0
- package/dist/vue/index.js +114 -0
- package/dist/vue/index.js.map +12 -0
- package/package.json +24 -2
- package/tsconfig.build.json +1 -1
- package/types/build.ts +0 -14
- package/types/mediaQuery.ts +10 -0
- package/types/react.ts +4 -0
- package/types/svelte.ts +4 -0
- package/types/userAgentTypes.ts +3 -0
- package/types/vue.ts +4 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __export = (target, all) => {
|
|
4
|
+
for (var name in all)
|
|
5
|
+
__defProp(target, name, {
|
|
6
|
+
get: all[name],
|
|
7
|
+
enumerable: true,
|
|
8
|
+
configurable: true,
|
|
9
|
+
set: (newValue) => all[name] = () => newValue
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
13
|
+
var __require = import.meta.require;
|
|
14
|
+
|
|
15
|
+
// src/utils/ssrErrorPage.ts
|
|
16
|
+
var ssrErrorPage = (framework, error) => {
|
|
17
|
+
const frameworkColors = {
|
|
18
|
+
angular: "#dd0031",
|
|
19
|
+
html: "#e34c26",
|
|
20
|
+
htmx: "#1a365d",
|
|
21
|
+
react: "#61dafb",
|
|
22
|
+
svelte: "#ff3e00",
|
|
23
|
+
vue: "#42b883"
|
|
24
|
+
};
|
|
25
|
+
const accent = frameworkColors[framework] ?? "#94a3b8";
|
|
26
|
+
const label = framework.charAt(0).toUpperCase() + framework.slice(1);
|
|
27
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
28
|
+
return `<!DOCTYPE html>
|
|
29
|
+
<html>
|
|
30
|
+
<head>
|
|
31
|
+
<meta charset="utf-8">
|
|
32
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
33
|
+
<title>SSR Error - AbsoluteJS</title>
|
|
34
|
+
<style>
|
|
35
|
+
*{margin:0;padding:0;box-sizing:border-box}
|
|
36
|
+
body{min-height:100vh;background:linear-gradient(135deg,rgba(15,23,42,0.98) 0%,rgba(30,41,59,0.98) 100%);color:#e2e8f0;font-family:"JetBrains Mono","Fira Code",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:14px;line-height:1.6;display:flex;align-items:flex-start;justify-content:center;padding:32px}
|
|
37
|
+
.card{max-width:720px;width:100%;background:rgba(30,41,59,0.6);border:1px solid rgba(71,85,105,0.5);border-radius:16px;box-shadow:0 25px 50px -12px rgba(0,0,0,0.5),0 0 0 1px rgba(255,255,255,0.05);overflow:hidden}
|
|
38
|
+
.header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 24px;background:rgba(15,23,42,0.5);border-bottom:1px solid rgba(71,85,105,0.4)}
|
|
39
|
+
.brand{font-weight:700;font-size:20px;color:#fff;letter-spacing:-0.02em}
|
|
40
|
+
.badge{padding:5px 10px;border-radius:8px;font-size:12px;font-weight:600;background:${accent};color:#fff;opacity:0.95;box-shadow:0 2px 4px rgba(0,0,0,0.2)}
|
|
41
|
+
.kind{color:#94a3b8;font-size:13px;font-weight:500}
|
|
42
|
+
.content{padding:24px}
|
|
43
|
+
.label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:#94a3b8;margin-bottom:8px}
|
|
44
|
+
.message{margin:0;padding:16px 20px;background:rgba(239,68,68,0.12);border:1px solid rgba(239,68,68,0.25);border-radius:10px;overflow-x:auto;white-space:pre-wrap;word-break:break-word;color:#fca5a5;font-size:13px;line-height:1.5}
|
|
45
|
+
.hint{margin-top:20px;padding:12px 20px;background:rgba(71,85,105,0.3);border-radius:10px;border:1px solid rgba(71,85,105,0.4);color:#cbd5e1;font-size:13px}
|
|
46
|
+
</style>
|
|
47
|
+
</head>
|
|
48
|
+
<body>
|
|
49
|
+
<div class="card">
|
|
50
|
+
<div class="header">
|
|
51
|
+
<div style="display:flex;align-items:center;gap:12px">
|
|
52
|
+
<span class="brand">AbsoluteJS</span>
|
|
53
|
+
<span class="badge">${label}</span>
|
|
54
|
+
</div>
|
|
55
|
+
<span class="kind">Server Render Error</span>
|
|
56
|
+
</div>
|
|
57
|
+
<div class="content">
|
|
58
|
+
<div class="label">What went wrong</div>
|
|
59
|
+
<pre class="message">${message.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">")}</pre>
|
|
60
|
+
<div class="hint">A component threw during server-side rendering. Check the terminal for the full stack trace.</div>
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
63
|
+
</body>
|
|
64
|
+
</html>`;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
// src/vue/pageHandler.ts
|
|
68
|
+
var exports_pageHandler = {};
|
|
69
|
+
__export(exports_pageHandler, {
|
|
70
|
+
handleVuePageRequest: () => handleVuePageRequest
|
|
71
|
+
});
|
|
72
|
+
import { createSSRApp, h } from "vue";
|
|
73
|
+
import { renderToWebStream as renderVueToWebStream } from "vue/server-renderer";
|
|
74
|
+
var handleVuePageRequest = async (_PageComponent, pagePath, indexPath, headTag = "<head></head>", ...props) => {
|
|
75
|
+
try {
|
|
76
|
+
const [maybeProps] = props;
|
|
77
|
+
const { default: ImportedPageComponent } = await import(pagePath);
|
|
78
|
+
const app = createSSRApp({
|
|
79
|
+
render: () => h(ImportedPageComponent, maybeProps ?? null)
|
|
80
|
+
});
|
|
81
|
+
const bodyStream = renderVueToWebStream(app);
|
|
82
|
+
const head = `<!DOCTYPE html><html>${headTag}<body><div id="root">`;
|
|
83
|
+
const tail = `</div><script>window.__INITIAL_PROPS__=${JSON.stringify(maybeProps ?? {})}</script><script type="module" src="${indexPath}"></script></body></html>`;
|
|
84
|
+
const stream = new ReadableStream({
|
|
85
|
+
start(controller) {
|
|
86
|
+
controller.enqueue(head);
|
|
87
|
+
const reader = bodyStream.getReader();
|
|
88
|
+
const pumpLoop = () => {
|
|
89
|
+
reader.read().then(({ done, value }) => done ? (controller.enqueue(tail), controller.close()) : (controller.enqueue(value), pumpLoop())).catch((err) => controller.error(err));
|
|
90
|
+
};
|
|
91
|
+
pumpLoop();
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
return new Response(stream, {
|
|
95
|
+
headers: { "Content-Type": "text/html" }
|
|
96
|
+
});
|
|
97
|
+
} catch (error) {
|
|
98
|
+
console.error("[SSR] Vue render error:", error);
|
|
99
|
+
return new Response(ssrErrorPage("vue", error), {
|
|
100
|
+
status: 500,
|
|
101
|
+
headers: { "Content-Type": "text/html" }
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
var init_pageHandler = () => {};
|
|
106
|
+
|
|
107
|
+
// src/vue/index.ts
|
|
108
|
+
init_pageHandler();
|
|
109
|
+
export {
|
|
110
|
+
handleVuePageRequest
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
//# debugId=C073BD88B16F872064756E2164756E21
|
|
114
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/utils/ssrErrorPage.ts", "../src/vue/pageHandler.ts", "../src/vue/index.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"export const ssrErrorPage = (framework: string, error: unknown): string => {\n\tconst frameworkColors: Record<string, string> = {\n\t\tangular: '#dd0031',\n\t\thtml: '#e34c26',\n\t\thtmx: '#1a365d',\n\t\treact: '#61dafb',\n\t\tsvelte: '#ff3e00',\n\t\tvue: '#42b883'\n\t};\n\n\tconst accent = frameworkColors[framework] ?? '#94a3b8';\n\tconst label = framework.charAt(0).toUpperCase() + framework.slice(1);\n\tconst message = error instanceof Error ? error.message : String(error);\n\n\treturn `<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>SSR Error - AbsoluteJS</title>\n<style>\n*{margin:0;padding:0;box-sizing:border-box}\nbody{min-height:100vh;background:linear-gradient(135deg,rgba(15,23,42,0.98) 0%,rgba(30,41,59,0.98) 100%);color:#e2e8f0;font-family:\"JetBrains Mono\",\"Fira Code\",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:14px;line-height:1.6;display:flex;align-items:flex-start;justify-content:center;padding:32px}\n.card{max-width:720px;width:100%;background:rgba(30,41,59,0.6);border:1px solid rgba(71,85,105,0.5);border-radius:16px;box-shadow:0 25px 50px -12px rgba(0,0,0,0.5),0 0 0 1px rgba(255,255,255,0.05);overflow:hidden}\n.header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 24px;background:rgba(15,23,42,0.5);border-bottom:1px solid rgba(71,85,105,0.4)}\n.brand{font-weight:700;font-size:20px;color:#fff;letter-spacing:-0.02em}\n.badge{padding:5px 10px;border-radius:8px;font-size:12px;font-weight:600;background:${accent};color:#fff;opacity:0.95;box-shadow:0 2px 4px rgba(0,0,0,0.2)}\n.kind{color:#94a3b8;font-size:13px;font-weight:500}\n.content{padding:24px}\n.label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:#94a3b8;margin-bottom:8px}\n.message{margin:0;padding:16px 20px;background:rgba(239,68,68,0.12);border:1px solid rgba(239,68,68,0.25);border-radius:10px;overflow-x:auto;white-space:pre-wrap;word-break:break-word;color:#fca5a5;font-size:13px;line-height:1.5}\n.hint{margin-top:20px;padding:12px 20px;background:rgba(71,85,105,0.3);border-radius:10px;border:1px solid rgba(71,85,105,0.4);color:#cbd5e1;font-size:13px}\n</style>\n</head>\n<body>\n<div class=\"card\">\n<div class=\"header\">\n<div style=\"display:flex;align-items:center;gap:12px\">\n<span class=\"brand\">AbsoluteJS</span>\n<span class=\"badge\">${label}</span>\n</div>\n<span class=\"kind\">Server Render Error</span>\n</div>\n<div class=\"content\">\n<div class=\"label\">What went wrong</div>\n<pre class=\"message\">${message.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')}</pre>\n<div class=\"hint\">A component threw during server-side rendering. Check the terminal for the full stack trace.</div>\n</div>\n</div>\n</body>\n</html>`;\n};\n",
|
|
6
|
+
"import { Component as VueComponent, createSSRApp, h } from 'vue';\nimport { renderToWebStream as renderVueToWebStream } from 'vue/server-renderer';\nimport { ssrErrorPage } from '../utils/ssrErrorPage';\n\nexport const handleVuePageRequest = async <\n\tProps extends Record<string, unknown> = Record<never, never>\n>(\n\t_PageComponent: VueComponent<Props>,\n\tpagePath: string,\n\tindexPath: string,\n\theadTag: `<head>${string}</head>` = '<head></head>',\n\t...props: keyof Props extends never ? [] : [props: Props]\n) => {\n\ttry {\n\t\tconst [maybeProps] = props;\n\n\t\tconst { default: ImportedPageComponent } = await import(pagePath);\n\n\t\tconst app = createSSRApp({\n\t\t\trender: () => h(ImportedPageComponent, maybeProps ?? null)\n\t\t});\n\n\t\tconst bodyStream = renderVueToWebStream(app);\n\n\t\tconst head = `<!DOCTYPE html><html>${headTag}<body><div id=\"root\">`;\n\t\tconst tail = `</div><script>window.__INITIAL_PROPS__=${JSON.stringify(\n\t\t\tmaybeProps ?? {}\n\t\t)}</script><script type=\"module\" src=\"${indexPath}\"></script></body></html>`;\n\n\t\tconst stream = new ReadableStream({\n\t\t\tstart(controller) {\n\t\t\t\tcontroller.enqueue(head);\n\t\t\t\tconst reader = bodyStream.getReader();\n\t\t\t\tconst pumpLoop = () => {\n\t\t\t\t\treader\n\t\t\t\t\t\t.read()\n\t\t\t\t\t\t.then(({ done, value }) =>\n\t\t\t\t\t\t\tdone\n\t\t\t\t\t\t\t\t? (controller.enqueue(tail), controller.close())\n\t\t\t\t\t\t\t\t: (controller.enqueue(value), pumpLoop())\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.catch((err) => controller.error(err));\n\t\t\t\t};\n\t\t\t\tpumpLoop();\n\t\t\t}\n\t\t});\n\n\t\treturn new Response(stream, {\n\t\t\theaders: { 'Content-Type': 'text/html' }\n\t\t});\n\t} catch (error) {\n\t\tconsole.error('[SSR] Vue render error:', error);\n\n\t\treturn new Response(ssrErrorPage('vue', error), {\n\t\t\tstatus: 500,\n\t\t\theaders: { 'Content-Type': 'text/html' }\n\t\t});\n\t}\n};\n",
|
|
7
|
+
"export { handleVuePageRequest } from './pageHandler';\n"
|
|
8
|
+
],
|
|
9
|
+
"mappings": ";;;;;;;;;;;;;;;IAAa,eAAe,CAAC,WAAmB,UAA2B;AAAA,EAC1E,MAAM,kBAA0C;AAAA,IAC/C,SAAS;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK;AAAA,EACN;AAAA,EAEA,MAAM,SAAS,gBAAgB,cAAc;AAAA,EAC7C,MAAM,QAAQ,UAAU,OAAO,CAAC,EAAE,YAAY,IAAI,UAAU,MAAM,CAAC;AAAA,EACnE,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,EAErE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sFAY8E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAahE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAMC,QAAQ,QAAQ,MAAM,OAAO,EAAE,QAAQ,MAAM,MAAM,EAAE,QAAQ,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;AC7ChG;AACA,8BAAS;AAAA,IAGI,uBAAuB,OAGnC,gBACA,UACA,WACA,UAAoC,oBACjC,UACC;AAAA,EACJ,IAAI;AAAA,IACH,OAAO,cAAc;AAAA,IAErB,QAAQ,SAAS,0BAA0B,MAAa;AAAA,IAExD,MAAM,MAAM,aAAa;AAAA,MACxB,QAAQ,MAAM,EAAE,uBAAuB,cAAc,IAAI;AAAA,IAC1D,CAAC;AAAA,IAED,MAAM,aAAa,qBAAqB,GAAG;AAAA,IAE3C,MAAM,OAAO,wBAAwB;AAAA,IACrC,MAAM,OAAO,0CAA0C,KAAK,UAC3D,cAAc,CAAC,CAChB,wCAAwC;AAAA,IAExC,MAAM,SAAS,IAAI,eAAe;AAAA,MACjC,KAAK,CAAC,YAAY;AAAA,QACjB,WAAW,QAAQ,IAAI;AAAA,QACvB,MAAM,SAAS,WAAW,UAAU;AAAA,QACpC,MAAM,WAAW,MAAM;AAAA,UACtB,OACE,KAAK,EACL,KAAK,GAAG,MAAM,YACd,QACI,WAAW,QAAQ,IAAI,GAAG,WAAW,MAAM,MAC3C,WAAW,QAAQ,KAAK,GAAG,SAAS,EACzC,EACC,MAAM,CAAC,QAAQ,WAAW,MAAM,GAAG,CAAC;AAAA;AAAA,QAEvC,SAAS;AAAA;AAAA,IAEX,CAAC;AAAA,IAED,OAAO,IAAI,SAAS,QAAQ;AAAA,MAC3B,SAAS,EAAE,gBAAgB,YAAY;AAAA,IACxC,CAAC;AAAA,IACA,OAAO,OAAO;AAAA,IACf,QAAQ,MAAM,2BAA2B,KAAK;AAAA,IAE9C,OAAO,IAAI,SAAS,aAAa,OAAO,KAAK,GAAG;AAAA,MAC/C,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,YAAY;AAAA,IACxC,CAAC;AAAA;AAAA;AAAA;;;ACxDH;",
|
|
10
|
+
"debugId": "C073BD88B16F872064756E2164756E21",
|
|
11
|
+
"names": []
|
|
12
|
+
}
|
package/package.json
CHANGED
|
@@ -37,6 +37,28 @@
|
|
|
37
37
|
"react-refresh": "^0.18.0"
|
|
38
38
|
},
|
|
39
39
|
"license": "BSL-1.1",
|
|
40
|
+
"exports": {
|
|
41
|
+
".": {
|
|
42
|
+
"import": "./dist/index.js",
|
|
43
|
+
"types": "./dist/src/index.d.ts"
|
|
44
|
+
},
|
|
45
|
+
"./react": {
|
|
46
|
+
"import": "./dist/react/index.js",
|
|
47
|
+
"types": "./dist/src/react/index.d.ts"
|
|
48
|
+
},
|
|
49
|
+
"./react/hooks": {
|
|
50
|
+
"import": "./dist/react/hooks/index.js",
|
|
51
|
+
"types": "./dist/src/react/hooks/index.d.ts"
|
|
52
|
+
},
|
|
53
|
+
"./svelte": {
|
|
54
|
+
"import": "./dist/svelte/index.js",
|
|
55
|
+
"types": "./dist/src/svelte/index.d.ts"
|
|
56
|
+
},
|
|
57
|
+
"./vue": {
|
|
58
|
+
"import": "./dist/vue/index.js",
|
|
59
|
+
"types": "./dist/src/vue/index.d.ts"
|
|
60
|
+
}
|
|
61
|
+
},
|
|
40
62
|
"main": "./dist/index.js",
|
|
41
63
|
"name": "@absolutejs/absolute",
|
|
42
64
|
"peerDependencies": {
|
|
@@ -65,7 +87,7 @@
|
|
|
65
87
|
"url": "https://github.com/absolutejs/absolutejs.git"
|
|
66
88
|
},
|
|
67
89
|
"scripts": {
|
|
68
|
-
"build": "rm -rf dist && bun build src/index.ts --outdir dist --sourcemap --target=bun --external react --external react-dom --external vue --external @vue/compiler-sfc --external svelte --external elysia && bun build src/cli/index.ts --outfile dist/cli/index.js --target=bun && tsc --emitDeclarationOnly --project tsconfig.build.json && mkdir -p dist/dev && cp -r src/dev/client dist/dev/client",
|
|
90
|
+
"build": "rm -rf dist && bun build src/index.ts src/react/index.ts src/react/hooks/index.ts src/svelte/index.ts src/vue/index.ts --outdir dist --sourcemap --target=bun --external react --external react-dom --external vue --external @vue/compiler-sfc --external vue/server-renderer --external svelte --external svelte/server --external elysia && bun build src/cli/index.ts --outfile dist/cli/index.js --target=bun && tsc --emitDeclarationOnly --project tsconfig.build.json && mkdir -p dist/dev && cp -r src/dev/client dist/dev/client",
|
|
69
91
|
"db:push": "drizzle-kit push",
|
|
70
92
|
"db:studio": "drizzle-kit studio",
|
|
71
93
|
"dev": "bun run src/cli/index.ts dev example/server.ts",
|
|
@@ -77,5 +99,5 @@
|
|
|
77
99
|
"typecheck": "bun run tsc --noEmit"
|
|
78
100
|
},
|
|
79
101
|
"types": "./dist/src/index.d.ts",
|
|
80
|
-
"version": "0.
|
|
102
|
+
"version": "0.16.0"
|
|
81
103
|
}
|
package/tsconfig.build.json
CHANGED
package/types/build.ts
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import { ComponentType as ReactComponent } from 'react';
|
|
2
|
-
import { Component as SvelteComponent } from 'svelte';
|
|
3
|
-
import { Component as VueComponent } from 'vue';
|
|
4
1
|
import { build } from '../src/core/build';
|
|
5
2
|
import { devBuild } from '../src/core/devBuild';
|
|
6
3
|
|
|
@@ -40,15 +37,4 @@ export type BuildResult = ReturnType<typeof build>;
|
|
|
40
37
|
export type DevBuildResult = ReturnType<typeof devBuild>;
|
|
41
38
|
export type Result = BuildResult | DevBuildResult;
|
|
42
39
|
|
|
43
|
-
export type PropsOf<Component> =
|
|
44
|
-
Component extends ReactComponent<infer Props>
|
|
45
|
-
? Props
|
|
46
|
-
: Component extends SvelteComponent<infer Props>
|
|
47
|
-
? Props
|
|
48
|
-
: Component extends VueComponent<infer Props>
|
|
49
|
-
? Props
|
|
50
|
-
: Record<string, never>;
|
|
51
|
-
|
|
52
|
-
export type PropsArgs<C> = keyof PropsOf<C> extends never ? [] : [PropsOf<C>];
|
|
53
|
-
|
|
54
40
|
export type Prettify<T> = { [K in keyof T]: T[K] } & {};
|
package/types/react.ts
ADDED
package/types/svelte.ts
ADDED
package/types/vue.ts
ADDED