eclipsa 0.1.0 → 0.1.2

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.
Files changed (68) hide show
  1. package/action-DstcBFEm.mjs +6188 -0
  2. package/action-DstcBFEm.mjs.map +1 -0
  3. package/client-D1zMr8hs.mjs +307 -0
  4. package/client-D1zMr8hs.mjs.map +1 -0
  5. package/component-DjUmyVqL.d.mts +8 -0
  6. package/core/client/mod.d.mts +3 -0
  7. package/core/client/mod.mjs +5 -0
  8. package/core/dev-client/mod.d.mts +33 -0
  9. package/core/dev-client/mod.mjs +82 -0
  10. package/core/dev-client/mod.mjs.map +1 -0
  11. package/core/internal.d.mts +2 -0
  12. package/core/internal.mjs +2 -0
  13. package/core/prod-client/mod.d.mts +19 -0
  14. package/core/prod-client/mod.mjs +44 -0
  15. package/core/prod-client/mod.mjs.map +1 -0
  16. package/internal-Dmvt_AGE.d.mts +674 -0
  17. package/jsx/jsx-dev-runtime.d.mts +17 -0
  18. package/jsx/jsx-dev-runtime.mjs +2 -0
  19. package/jsx/jsx-runtime.d.mts +2 -0
  20. package/jsx/jsx-runtime.mjs +1 -0
  21. package/jsx/mod.d.mts +7 -0
  22. package/jsx/mod.mjs +7 -0
  23. package/jsx/mod.mjs.map +1 -0
  24. package/jsx-dev-runtime-CY60yQJY.mjs +28 -0
  25. package/jsx-dev-runtime-CY60yQJY.mjs.map +1 -0
  26. package/jsx-runtime-QIK6ADiK.d.mts +1 -0
  27. package/loader-DDVVUXBr.mjs +2 -0
  28. package/mod-CaLAdQcH.d.mts +18 -0
  29. package/mod.d.mts +164 -0
  30. package/mod.mjs +289 -0
  31. package/mod.mjs.map +1 -0
  32. package/package.json +69 -3
  33. package/resume-hmr-BRDojQNp.mjs +6 -0
  34. package/resume-hmr-BRDojQNp.mjs.map +1 -0
  35. package/signal-CosyYdtA.d.mts +22 -0
  36. package/signal-D1WmFjmJ.mjs +108 -0
  37. package/signal-D1WmFjmJ.mjs.map +1 -0
  38. package/snapshot-BG0kq9wt.mjs +39 -0
  39. package/snapshot-BG0kq9wt.mjs.map +1 -0
  40. package/types-DDeNM8UH.d.mts +11 -0
  41. package/types-WOJV0N2h.d.mts +282 -0
  42. package/vite/mod.d.mts +13 -0
  43. package/vite/mod.mjs +150297 -0
  44. package/vite/mod.mjs.map +1 -0
  45. package/web-utils/mod.d.mts +34 -0
  46. package/web-utils/mod.mjs +132 -0
  47. package/web-utils/mod.mjs.map +1 -0
  48. package/core/component.ts +0 -7
  49. package/core/dev-client/mod.ts +0 -17
  50. package/core/dev-client/renderer.ts +0 -5
  51. package/core/dev-client/types.ts +0 -3
  52. package/core/mod.ts +0 -4
  53. package/core/signal.ts +0 -20
  54. package/core/types.ts +0 -6
  55. package/deno.json +0 -23
  56. package/jsx/jsx-dev-runtime.ts +0 -19
  57. package/jsx/jsx-runtime.ts +0 -1
  58. package/jsx/mod.ts +0 -34
  59. package/jsx/shared.ts +0 -1
  60. package/jsx/types.ts +0 -23
  61. package/mod.ts +0 -2
  62. package/transformers/dev-client/mod.ts +0 -39
  63. package/transformers/dev-ssr/mod.ts +0 -52
  64. package/transformers/utils/jsx.ts +0 -77
  65. package/utils/node-connect.ts +0 -55
  66. package/vite/dev-app/mod.ts +0 -88
  67. package/vite/mod.ts +0 -76
  68. package/vite/utils/routing.ts +0 -26
package/package.json CHANGED
@@ -1,4 +1,70 @@
1
1
  {
2
- "name": "eclipsa",
3
- "version": "0.1.0"
4
- }
2
+ "name": "eclipsa",
3
+ "version": "0.1.2",
4
+ "homepage": "https://github.com/pnsk-lab/eclipsa",
5
+ "bugs": {
6
+ "url": "https://github.com/pnsk-lab/eclipsa/issues"
7
+ },
8
+ "license": "MIT",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/pnsk-lab/eclipsa.git",
12
+ "directory": "packages/eclipsa"
13
+ },
14
+ "type": "module",
15
+ "exports": {
16
+ ".": {
17
+ "types": "./mod.d.mts",
18
+ "import": "./mod.mjs"
19
+ },
20
+ "./atom": {
21
+ "types": "./atom/mod.d.mts",
22
+ "import": "./atom/mod.mjs"
23
+ },
24
+ "./web-utils": {
25
+ "types": "./web-utils/mod.d.mts",
26
+ "import": "./web-utils/mod.mjs"
27
+ },
28
+ "./vite": {
29
+ "types": "./vite/mod.d.mts",
30
+ "import": "./vite/mod.mjs"
31
+ },
32
+ "./jsx-runtime": {
33
+ "types": "./jsx/jsx-runtime.d.mts",
34
+ "import": "./jsx/jsx-runtime.mjs"
35
+ },
36
+ "./jsx-dev-runtime": {
37
+ "types": "./jsx/jsx-dev-runtime.d.mts",
38
+ "import": "./jsx/jsx-dev-runtime.mjs"
39
+ },
40
+ "./jsx": {
41
+ "types": "./jsx/mod.d.mts",
42
+ "import": "./jsx/mod.mjs"
43
+ },
44
+ "./internal": {
45
+ "types": "./core/internal.d.mts",
46
+ "import": "./core/internal.mjs"
47
+ },
48
+ "./client": {
49
+ "types": "./core/client/mod.d.mts",
50
+ "import": "./core/client/mod.mjs"
51
+ },
52
+ "./dev-client": {
53
+ "types": "./core/dev-client/mod.d.mts",
54
+ "import": "./core/dev-client/mod.mjs"
55
+ },
56
+ "./prod-client": {
57
+ "types": "./core/prod-client/mod.d.mts",
58
+ "import": "./core/prod-client/mod.mjs"
59
+ }
60
+ },
61
+ "dependencies": {
62
+ "@eclipsa/optimizer": "^0.1.2",
63
+ "fast-glob": "^3.3.2",
64
+ "hono": "^4.6.4"
65
+ },
66
+ "peerDependencies": {
67
+ "vite": "*"
68
+ },
69
+ "private": false
70
+ }
@@ -0,0 +1,6 @@
1
+ //#region core/resume-hmr.ts
2
+ const RESUME_HMR_EVENT = "eclipsa:resume-update";
3
+ //#endregion
4
+ export { RESUME_HMR_EVENT as t };
5
+
6
+ //# sourceMappingURL=resume-hmr-BRDojQNp.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume-hmr-BRDojQNp.mjs","names":[],"sources":["../core/resume-hmr.ts"],"sourcesContent":["export const RESUME_HMR_EVENT = 'eclipsa:resume-update'\n\nexport interface ResumeHmrUpdatePayload {\n fileUrl: string\n fullReload: boolean\n rerenderComponentSymbols: string[]\n rerenderOwnerSymbols: string[]\n symbolUrlReplacements: Record<string, string>\n}\n"],"mappings":";AAAA,MAAa,mBAAmB"}
@@ -0,0 +1,22 @@
1
+ //#region core/signal.d.ts
2
+ interface Signal<T> {
3
+ value: T;
4
+ }
5
+ interface SignalFactory {
6
+ <T>(value: T): Signal<T>;
7
+ <T>(value?: T | undefined): Signal<T | undefined>;
8
+ computed<T>(value: () => T | Promise<T>, dependencies?: WatchDependency[]): Signal<T>;
9
+ }
10
+ type WatchDependency<T = unknown> = Signal<T> | (() => T);
11
+ declare const signal: SignalFactory;
12
+ declare const useSignal: SignalFactory;
13
+ declare const effect: (fn: () => void) => void;
14
+ declare const onCleanup: (fn: () => void) => void;
15
+ declare const onMount: (fn: () => void) => void;
16
+ declare const onVisible: (fn: () => void) => void;
17
+ declare const useWatch: (fn: () => void, dependencies?: WatchDependency[]) => void;
18
+ declare const useComputed: <T>(fn: () => T | Promise<T>, dependencies?: WatchDependency[]) => Signal<T>;
19
+ declare const useComputed$: <T>(fn: () => T | Promise<T>, dependencies?: WatchDependency[]) => Signal<T>;
20
+ //#endregion
21
+ export { onMount as a, useComputed as c, useWatch as d, onCleanup as i, useComputed$ as l, WatchDependency as n, onVisible as o, effect as r, signal as s, Signal as t, useSignal as u };
22
+ //# sourceMappingURL=signal-CosyYdtA.d.mts.map
@@ -0,0 +1,108 @@
1
+ import { A as createWatch, D as createOnVisible, E as createOnMount, N as getRuntimeContainer, P as getRuntimeSignalId, T as createOnCleanup, V as readAsyncSignalSnapshot, dt as useRuntimeSignal, gn as isPendingSignalError, hn as createPendingSignalError, k as createStandaloneRuntimeSignal, pt as writeAsyncSignalSnapshot, w as createEffect } from "./action-DstcBFEm.mjs";
2
+ //#region core/signal.ts
3
+ const isPromiseLike = (value) => !!value && typeof value === "object" && "then" in value && typeof value.then === "function";
4
+ const isComputedSnapshot = (value) => !!value && typeof value === "object" && value.__e_async_computed === true;
5
+ const createComputedSnapshot = (snapshot) => ({
6
+ __e_async_computed: true,
7
+ ...snapshot
8
+ });
9
+ const createComputedSignalFactory = (createBaseSignal) => (fn, dependencies) => {
10
+ const state = createBaseSignal(createComputedSnapshot({ status: "pending" }));
11
+ const runtimeContainer = getRuntimeContainer();
12
+ const signalId = getRuntimeSignalId(state);
13
+ const seededSnapshot = signalId !== null ? readAsyncSignalSnapshot(signalId, runtimeContainer) : void 0;
14
+ let useSeededSnapshot = !!seededSnapshot && seededSnapshot.status !== "pending";
15
+ let version = 0;
16
+ createEffect(() => {
17
+ if (useSeededSnapshot && seededSnapshot) {
18
+ useSeededSnapshot = false;
19
+ state.value = seededSnapshot;
20
+ if (signalId !== null) writeAsyncSignalSnapshot(signalId, seededSnapshot, runtimeContainer);
21
+ return;
22
+ }
23
+ const currentVersion = ++version;
24
+ try {
25
+ const nextValue = fn();
26
+ if (isPromiseLike(nextValue)) {
27
+ const pending = createComputedSnapshot({
28
+ promise: nextValue,
29
+ status: "pending"
30
+ });
31
+ state.value = pending;
32
+ if (signalId !== null) writeAsyncSignalSnapshot(signalId, pending, runtimeContainer);
33
+ nextValue.then((resolved) => {
34
+ if (currentVersion !== version) return;
35
+ const completed = createComputedSnapshot({
36
+ status: "resolved",
37
+ value: resolved
38
+ });
39
+ state.value = completed;
40
+ if (signalId !== null) writeAsyncSignalSnapshot(signalId, completed, runtimeContainer);
41
+ }, (error) => {
42
+ if (currentVersion !== version) return;
43
+ const failed = createComputedSnapshot({
44
+ error,
45
+ status: "rejected"
46
+ });
47
+ state.value = failed;
48
+ if (signalId !== null) writeAsyncSignalSnapshot(signalId, failed, runtimeContainer);
49
+ });
50
+ return;
51
+ }
52
+ const resolved = createComputedSnapshot({
53
+ status: "resolved",
54
+ value: nextValue
55
+ });
56
+ state.value = resolved;
57
+ if (signalId !== null) writeAsyncSignalSnapshot(signalId, resolved, runtimeContainer);
58
+ } catch (error) {
59
+ if (isPendingSignalError(error)) {
60
+ const pending = createComputedSnapshot({
61
+ promise: error.promise,
62
+ status: "pending"
63
+ });
64
+ state.value = pending;
65
+ if (signalId !== null) writeAsyncSignalSnapshot(signalId, pending, runtimeContainer);
66
+ return;
67
+ }
68
+ const failed = createComputedSnapshot({
69
+ error,
70
+ status: "rejected"
71
+ });
72
+ state.value = failed;
73
+ if (signalId !== null) writeAsyncSignalSnapshot(signalId, failed, runtimeContainer);
74
+ }
75
+ }, dependencies ? {
76
+ dependencies,
77
+ errorLabel: "useComputed",
78
+ untracked: true
79
+ } : void 0);
80
+ const handle = {};
81
+ Object.defineProperty(handle, "value", {
82
+ configurable: true,
83
+ enumerable: true,
84
+ get() {
85
+ const snapshot = state.value;
86
+ if (!isComputedSnapshot(snapshot)) return snapshot;
87
+ if (snapshot.status === "pending") throw createPendingSignalError(snapshot.promise ?? Promise.resolve(void 0));
88
+ if (snapshot.status === "rejected") throw snapshot.error;
89
+ return snapshot.value;
90
+ }
91
+ });
92
+ return handle;
93
+ };
94
+ const signal = ((value) => createStandaloneRuntimeSignal(value));
95
+ const useSignal = ((value) => useRuntimeSignal(value));
96
+ signal.computed = createComputedSignalFactory((value) => createStandaloneRuntimeSignal(value));
97
+ useSignal.computed = createComputedSignalFactory((value) => useRuntimeSignal(value));
98
+ const effect = (fn) => createEffect(fn);
99
+ const onCleanup = (fn) => createOnCleanup(fn);
100
+ const onMount = (fn) => createOnMount(fn);
101
+ const onVisible = (fn) => createOnVisible(fn);
102
+ const useWatch = (fn, dependencies) => createWatch(fn, dependencies);
103
+ const useComputed = (fn, dependencies) => useSignal.computed(fn, dependencies);
104
+ const useComputed$ = useComputed;
105
+ //#endregion
106
+ export { signal as a, useSignal as c, onVisible as i, useWatch as l, onCleanup as n, useComputed as o, onMount as r, useComputed$ as s, effect as t };
107
+
108
+ //# sourceMappingURL=signal-D1WmFjmJ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-D1WmFjmJ.mjs","names":[],"sources":["../core/signal.ts"],"sourcesContent":["import {\n createStandaloneRuntimeSignal,\n createEffect,\n createOnCleanup,\n createOnMount,\n createOnVisible,\n createWatch,\n getRuntimeContainer,\n getRuntimeSignalId,\n readAsyncSignalSnapshot,\n useRuntimeSignal,\n writeAsyncSignalSnapshot,\n} from './runtime.ts'\nimport { createPendingSignalError, isPendingSignalError } from './suspense.ts'\n\nexport interface Signal<T> {\n value: T\n}\n\ninterface SignalFactory {\n <T>(value: T): Signal<T>\n <T>(value?: T | undefined): Signal<T | undefined>\n computed<T>(value: () => T | Promise<T>, dependencies?: WatchDependency[]): Signal<T>\n}\n\ninterface ComputedSnapshot<T> {\n __e_async_computed: true\n error?: unknown\n promise?: Promise<T>\n status: 'pending' | 'rejected' | 'resolved'\n value?: T\n}\n\nexport type WatchDependency<T = unknown> = Signal<T> | (() => T)\n\nconst isPromiseLike = <T>(value: unknown): value is Promise<T> =>\n !!value && typeof value === 'object' && 'then' in value && typeof value.then === 'function'\n\nconst isComputedSnapshot = <T>(value: unknown): value is ComputedSnapshot<T> =>\n !!value && typeof value === 'object' && (value as ComputedSnapshot<T>).__e_async_computed === true\n\nconst createComputedSnapshot = <T>(\n snapshot: Omit<ComputedSnapshot<T>, '__e_async_computed'>,\n): ComputedSnapshot<T> => ({\n __e_async_computed: true,\n ...snapshot,\n})\n\nconst createComputedSignalFactory =\n (createBaseSignal: <T>(value: T) => Signal<T>): SignalFactory['computed'] =>\n <T>(fn: () => T | Promise<T>, dependencies?: WatchDependency[]) => {\n const state = createBaseSignal<ComputedSnapshot<T>>(\n createComputedSnapshot({\n status: 'pending',\n }),\n )\n const runtimeContainer = getRuntimeContainer()\n const signalId = getRuntimeSignalId(state)\n const seededSnapshot =\n signalId !== null\n ? (readAsyncSignalSnapshot(signalId, runtimeContainer) as ComputedSnapshot<T> | undefined)\n : undefined\n let useSeededSnapshot = !!seededSnapshot && seededSnapshot.status !== 'pending'\n let version = 0\n\n createEffect(\n () => {\n if (useSeededSnapshot && seededSnapshot) {\n useSeededSnapshot = false\n state.value = seededSnapshot\n if (signalId !== null) {\n writeAsyncSignalSnapshot(signalId, seededSnapshot, runtimeContainer)\n }\n return\n }\n\n const currentVersion = ++version\n try {\n const nextValue = fn()\n if (isPromiseLike<T>(nextValue)) {\n const pending = createComputedSnapshot<T>({\n promise: nextValue,\n status: 'pending',\n })\n state.value = pending\n if (signalId !== null) {\n writeAsyncSignalSnapshot(signalId, pending, runtimeContainer)\n }\n nextValue.then(\n (resolved) => {\n if (currentVersion !== version) {\n return\n }\n const completed = createComputedSnapshot<T>({\n status: 'resolved',\n value: resolved,\n })\n state.value = completed\n if (signalId !== null) {\n writeAsyncSignalSnapshot(signalId, completed, runtimeContainer)\n }\n },\n (error) => {\n if (currentVersion !== version) {\n return\n }\n const failed = createComputedSnapshot<T>({\n error,\n status: 'rejected',\n })\n state.value = failed\n if (signalId !== null) {\n writeAsyncSignalSnapshot(signalId, failed, runtimeContainer)\n }\n },\n )\n return\n }\n\n const resolved = createComputedSnapshot<T>({\n status: 'resolved',\n value: nextValue,\n })\n state.value = resolved\n if (signalId !== null) {\n writeAsyncSignalSnapshot(signalId, resolved, runtimeContainer)\n }\n } catch (error) {\n if (isPendingSignalError(error)) {\n const pending = createComputedSnapshot<T>({\n promise: error.promise as Promise<T>,\n status: 'pending',\n })\n state.value = pending\n if (signalId !== null) {\n writeAsyncSignalSnapshot(signalId, pending, runtimeContainer)\n }\n return\n }\n const failed = createComputedSnapshot<T>({\n error,\n status: 'rejected',\n })\n state.value = failed\n if (signalId !== null) {\n writeAsyncSignalSnapshot(signalId, failed, runtimeContainer)\n }\n }\n },\n dependencies\n ? {\n dependencies,\n errorLabel: 'useComputed',\n untracked: true,\n }\n : undefined,\n )\n\n const handle = {} as Signal<T>\n Object.defineProperty(handle, 'value', {\n configurable: true,\n enumerable: true,\n get() {\n const snapshot = state.value\n if (!isComputedSnapshot<T>(snapshot)) {\n return snapshot as T\n }\n if (snapshot.status === 'pending') {\n throw createPendingSignalError(snapshot.promise ?? Promise.resolve(undefined))\n }\n if (snapshot.status === 'rejected') {\n throw snapshot.error\n }\n return snapshot.value as T\n },\n })\n return handle\n }\n\nexport const signal = ((value) => createStandaloneRuntimeSignal(value)) as SignalFactory\n\nexport const useSignal = ((value) => useRuntimeSignal(value)) as SignalFactory\n\nsignal.computed = createComputedSignalFactory((value) => createStandaloneRuntimeSignal(value))\nuseSignal.computed = createComputedSignalFactory((value) => useRuntimeSignal(value))\n\nexport const effect = (fn: () => void) => createEffect(fn)\nexport const onCleanup = (fn: () => void) => createOnCleanup(fn)\nexport const onMount = (fn: () => void) => createOnMount(fn)\nexport const onVisible = (fn: () => void) => createOnVisible(fn)\nexport const useWatch = (fn: () => void, dependencies?: WatchDependency[]) =>\n createWatch(fn, dependencies)\n\nexport const useComputed = <T>(fn: () => T | Promise<T>, dependencies?: WatchDependency[]) =>\n useSignal.computed(fn, dependencies)\nexport const useComputed$ = useComputed\n"],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ //#region core/snapshot.ts
2
+ const SNAPSHOT_STATE_KEY = Symbol.for("eclipsa.snapshot-state");
3
+ const getCurrentSnapshotState = () => {
4
+ return globalThis[SNAPSHOT_STATE_KEY] ?? null;
5
+ };
6
+ const setCurrentSnapshotState = (state) => {
7
+ globalThis[SNAPSHOT_STATE_KEY] = state;
8
+ };
9
+ const withSignalSnapshot = (values, fn) => {
10
+ const previous = getCurrentSnapshotState();
11
+ const state = {
12
+ readers: [],
13
+ cursor: 0,
14
+ values
15
+ };
16
+ setCurrentSnapshotState(state);
17
+ try {
18
+ return {
19
+ result: fn(),
20
+ values: values ?? state.readers.map((reader) => reader.read())
21
+ };
22
+ } finally {
23
+ setCurrentSnapshotState(previous);
24
+ }
25
+ };
26
+ const consumeSnapshotValue = (fallback) => {
27
+ const state = getCurrentSnapshotState();
28
+ if (!state) return fallback;
29
+ const index = state.cursor++;
30
+ if (state.values && index < state.values.length) return state.values[index];
31
+ return fallback;
32
+ };
33
+ const registerSnapshotSignal = (reader) => {
34
+ getCurrentSnapshotState()?.readers.push(reader);
35
+ };
36
+ //#endregion
37
+ export { registerSnapshotSignal as n, withSignalSnapshot as r, consumeSnapshotValue as t };
38
+
39
+ //# sourceMappingURL=snapshot-BG0kq9wt.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot-BG0kq9wt.mjs","names":[],"sources":["../core/snapshot.ts"],"sourcesContent":["interface SignalReader {\n read(): unknown\n}\n\ninterface SnapshotState {\n readers: SignalReader[]\n cursor: number\n values: unknown[] | null\n}\n\nconst SNAPSHOT_STATE_KEY = Symbol.for('eclipsa.snapshot-state')\n\nconst getCurrentSnapshotState = (): SnapshotState | null => {\n return (\n (globalThis as unknown as Record<PropertyKey, SnapshotState | null>)[SNAPSHOT_STATE_KEY] ?? null\n )\n}\n\nconst setCurrentSnapshotState = (state: SnapshotState | null) => {\n ;(globalThis as unknown as Record<PropertyKey, SnapshotState | null>)[SNAPSHOT_STATE_KEY] = state\n}\n\nexport const withSignalSnapshot = <T>(\n values: unknown[] | null,\n fn: () => T,\n): {\n result: T\n values: unknown[]\n} => {\n const previous = getCurrentSnapshotState()\n const state: SnapshotState = {\n readers: [],\n cursor: 0,\n values,\n }\n setCurrentSnapshotState(state)\n\n try {\n const result = fn()\n return {\n result,\n values: values ?? state.readers.map((reader) => reader.read()),\n }\n } finally {\n setCurrentSnapshotState(previous)\n }\n}\n\nexport const consumeSnapshotValue = <T>(fallback: T): T => {\n const state = getCurrentSnapshotState()\n if (!state) {\n return fallback\n }\n\n const index = state.cursor++\n if (state.values && index < state.values.length) {\n return state.values[index] as T\n }\n\n return fallback\n}\n\nexport const registerSnapshotSignal = (reader: SignalReader) => {\n getCurrentSnapshotState()?.readers.push(reader)\n}\n"],"mappings":";AAUA,MAAM,qBAAqB,OAAO,IAAI,yBAAyB;AAE/D,MAAM,gCAAsD;AAC1D,QACG,WAAoE,uBAAuB;;AAIhG,MAAM,2BAA2B,UAAgC;AAC7D,YAAoE,sBAAsB;;AAG9F,MAAa,sBACX,QACA,OAIG;CACH,MAAM,WAAW,yBAAyB;CAC1C,MAAM,QAAuB;EAC3B,SAAS,EAAE;EACX,QAAQ;EACR;EACD;AACD,yBAAwB,MAAM;AAE9B,KAAI;AAEF,SAAO;GACL,QAFa,IAAI;GAGjB,QAAQ,UAAU,MAAM,QAAQ,KAAK,WAAW,OAAO,MAAM,CAAC;GAC/D;WACO;AACR,0BAAwB,SAAS;;;AAIrC,MAAa,wBAA2B,aAAmB;CACzD,MAAM,QAAQ,yBAAyB;AACvC,KAAI,CAAC,MACH,QAAO;CAGT,MAAM,QAAQ,MAAM;AACpB,KAAI,MAAM,UAAU,QAAQ,MAAM,OAAO,OACvC,QAAO,MAAM,OAAO;AAGtB,QAAO;;AAGT,MAAa,0BAA0B,WAAyB;AAC9D,0BAAyB,EAAE,QAAQ,KAAK,OAAO"}
@@ -0,0 +1,11 @@
1
+ //#region core/client/types.d.ts
2
+ interface ElemWithKey {
3
+ (): Insertable;
4
+ key?: string | symbol | number;
5
+ returnFn?: boolean;
6
+ }
7
+ type Insertable = string | number | boolean | undefined | null | Node | Insertable[] | ElemWithKey;
8
+ type ClientElementLike = Insertable | Insertable[];
9
+ //#endregion
10
+ export { Insertable as n, ClientElementLike as t };
11
+ //# sourceMappingURL=types-DDeNM8UH.d.mts.map
@@ -0,0 +1,282 @@
1
+ //#region jsx/types.d.ts
2
+ type SupportedDelegatedEventName = 'cancel' | 'change' | 'click' | 'compositionend' | 'compositionstart' | 'input' | 'keydown' | 'submit';
3
+ type DelegatedEventMap = {
4
+ cancel: Event;
5
+ change: Event;
6
+ click: MouseEvent;
7
+ compositionend: CompositionEvent;
8
+ compositionstart: CompositionEvent;
9
+ input: InputEvent;
10
+ keydown: KeyboardEvent;
11
+ submit: SubmitEvent;
12
+ };
13
+ type AttributeValue = string | number | boolean | null | undefined;
14
+ type StyleValue = string | number | null | undefined;
15
+ type BindTarget<T> = {
16
+ value: T;
17
+ };
18
+ type RefProp<TElement extends globalThis.Element> = {
19
+ value: TElement | undefined;
20
+ };
21
+ type DataAttributeProps = { [TName in `data-${string}`]?: AttributeValue };
22
+ type AriaAttributeProps = { [TName in `aria-${string}`]?: AttributeValue };
23
+ type NamespacedAttributeProps = { [TName in `${string}:${string}`]?: AttributeValue };
24
+ type HyphenatedAttributeProps = { [TName in `${string}-${string}`]?: AttributeValue };
25
+ type DelegatedEvent<TCurrentTarget extends globalThis.Element = globalThis.Element, TEvent extends Event = Event> = Omit<TEvent, 'currentTarget'> & {
26
+ readonly currentTarget: TCurrentTarget;
27
+ };
28
+ type EventHandler<TCurrentTarget extends globalThis.Element = globalThis.Element, TEvent extends Event = Event> = (event: DelegatedEvent<TCurrentTarget, TEvent>) => unknown;
29
+ type DelegatedEventPropName<TName extends SupportedDelegatedEventName> = TName extends 'cancel' ? 'onCancel' : TName extends 'compositionend' ? 'onCompositionEnd' : TName extends 'compositionstart' ? 'onCompositionStart' : TName extends 'keydown' ? 'onKeyDown' : `on${Capitalize<TName>}`;
30
+ type DelegatedEventProps<TElement extends globalThis.Element> = { [TName in SupportedDelegatedEventName as DelegatedEventPropName<TName>]?: EventHandler<TElement, DelegatedEventMap[TName]> };
31
+ interface BaseIntrinsicElementProps<TElement extends globalThis.Element> extends AriaAttributeProps, DataAttributeProps, DelegatedEventProps<TElement> {
32
+ children?: unknown;
33
+ class?: string | undefined;
34
+ dangerouslySetInnerHTML?: string | null | undefined;
35
+ id?: string | undefined;
36
+ key?: string | number | symbol | null | undefined;
37
+ ref?: RefProp<TElement> | RefProp<globalThis.Element> | undefined;
38
+ role?: string | undefined;
39
+ slot?: string | undefined;
40
+ style?: string | Record<string, StyleValue> | undefined;
41
+ tabIndex?: number | undefined;
42
+ title?: string | undefined;
43
+ }
44
+ interface HTMLIntrinsicElementProps<TElement extends HTMLElement> extends BaseIntrinsicElementProps<TElement> {
45
+ accessKey?: string | undefined;
46
+ autoCapitalize?: string | undefined;
47
+ autoFocus?: boolean | undefined;
48
+ contentEditable?: boolean | 'inherit' | 'plaintext-only' | undefined;
49
+ dir?: 'auto' | 'ltr' | 'rtl' | undefined;
50
+ draggable?: boolean | undefined;
51
+ enterKeyHint?: 'done' | 'enter' | 'go' | 'next' | 'previous' | 'search' | 'send' | undefined;
52
+ hidden?: boolean | undefined;
53
+ inert?: boolean | undefined;
54
+ inputMode?: 'decimal' | 'email' | 'none' | 'numeric' | 'search' | 'tel' | 'text' | 'url' | undefined;
55
+ lang?: string | undefined;
56
+ spellCheck?: boolean | undefined;
57
+ translate?: 'no' | 'yes' | undefined;
58
+ }
59
+ interface SVGIntrinsicElementProps<TElement extends SVGElement> extends BaseIntrinsicElementProps<TElement>, HyphenatedAttributeProps, NamespacedAttributeProps {
60
+ color?: string | undefined;
61
+ cx?: number | string | undefined;
62
+ cy?: number | string | undefined;
63
+ d?: string | undefined;
64
+ fill?: string | undefined;
65
+ gradientTransform?: string | undefined;
66
+ gradientUnits?: string | undefined;
67
+ height?: number | string | undefined;
68
+ offset?: number | string | undefined;
69
+ opacity?: number | string | undefined;
70
+ points?: string | undefined;
71
+ preserveAspectRatio?: string | undefined;
72
+ r?: number | string | undefined;
73
+ rx?: number | string | undefined;
74
+ ry?: number | string | undefined;
75
+ stroke?: string | undefined;
76
+ transform?: string | undefined;
77
+ version?: number | string | undefined;
78
+ viewBox?: string | undefined;
79
+ width?: number | string | undefined;
80
+ x?: number | string | undefined;
81
+ x1?: number | string | undefined;
82
+ x2?: number | string | undefined;
83
+ y?: number | string | undefined;
84
+ y1?: number | string | undefined;
85
+ y2?: number | string | undefined;
86
+ xmlns?: string | undefined;
87
+ }
88
+ type ButtonType = 'button' | 'reset' | 'submit';
89
+ type CrossOrigin = 'anonymous' | 'use-credentials';
90
+ type FormEncType = 'application/x-www-form-urlencoded' | 'multipart/form-data' | 'text/plain';
91
+ type FormMethod = 'dialog' | 'get' | 'post';
92
+ type HTMLInputType = 'button' | 'checkbox' | 'color' | 'date' | 'datetime-local' | 'email' | 'file' | 'hidden' | 'image' | 'month' | 'number' | 'password' | 'radio' | 'range' | 'reset' | 'search' | 'submit' | 'tel' | 'text' | 'time' | 'url' | 'week';
93
+ type Loading = 'eager' | 'lazy';
94
+ type ReferrerPolicy = '' | 'no-referrer' | 'no-referrer-when-downgrade' | 'origin' | 'origin-when-cross-origin' | 'same-origin' | 'strict-origin' | 'strict-origin-when-cross-origin' | 'unsafe-url';
95
+ interface AnchorHTMLAttributes<TElement extends HTMLAnchorElement> extends HTMLIntrinsicElementProps<TElement> {
96
+ download?: boolean | string | undefined;
97
+ href?: string | undefined;
98
+ hreflang?: string | undefined;
99
+ ping?: string | undefined;
100
+ referrerPolicy?: ReferrerPolicy | undefined;
101
+ rel?: string | undefined;
102
+ target?: string | undefined;
103
+ type?: string | undefined;
104
+ }
105
+ interface ButtonHTMLAttributes<TElement extends HTMLButtonElement> extends HTMLIntrinsicElementProps<TElement> {
106
+ disabled?: boolean | undefined;
107
+ form?: string | undefined;
108
+ name?: string | undefined;
109
+ type?: ButtonType | undefined;
110
+ value?: number | string | undefined;
111
+ }
112
+ interface FormHTMLAttributes<TElement extends HTMLFormElement> extends HTMLIntrinsicElementProps<TElement> {
113
+ action?: string | undefined;
114
+ autoComplete?: string | undefined;
115
+ encType?: FormEncType | undefined;
116
+ method?: FormMethod | undefined;
117
+ name?: string | undefined;
118
+ noValidate?: boolean | undefined;
119
+ target?: string | undefined;
120
+ }
121
+ interface ImgHTMLAttributes<TElement extends HTMLImageElement> extends HTMLIntrinsicElementProps<TElement> {
122
+ alt?: string | undefined;
123
+ crossOrigin?: CrossOrigin | undefined;
124
+ decoding?: 'async' | 'auto' | 'sync' | undefined;
125
+ height?: number | string | undefined;
126
+ loading?: Loading | undefined;
127
+ referrerPolicy?: ReferrerPolicy | undefined;
128
+ sizes?: string | undefined;
129
+ src?: string | undefined;
130
+ srcSet?: string | undefined;
131
+ width?: number | string | undefined;
132
+ }
133
+ interface InputHTMLAttributes<TElement extends HTMLInputElement> extends HTMLIntrinsicElementProps<TElement> {
134
+ 'bind:checked'?: BindTarget<boolean | undefined> | undefined;
135
+ 'bind:value'?: BindTarget<number | readonly string[] | string | undefined> | undefined;
136
+ accept?: string | undefined;
137
+ alt?: string | undefined;
138
+ autoComplete?: string | undefined;
139
+ capture?: boolean | 'environment' | 'user' | undefined;
140
+ checked?: boolean | undefined;
141
+ disabled?: boolean | undefined;
142
+ form?: string | undefined;
143
+ list?: string | undefined;
144
+ max?: number | string | undefined;
145
+ maxLength?: number | undefined;
146
+ min?: number | string | undefined;
147
+ minLength?: number | undefined;
148
+ multiple?: boolean | undefined;
149
+ name?: string | undefined;
150
+ pattern?: string | undefined;
151
+ placeholder?: string | undefined;
152
+ readOnly?: boolean | undefined;
153
+ required?: boolean | undefined;
154
+ size?: number | undefined;
155
+ src?: string | undefined;
156
+ step?: number | string | undefined;
157
+ type?: HTMLInputType | undefined;
158
+ value?: number | readonly string[] | string | undefined;
159
+ }
160
+ interface LabelHTMLAttributes<TElement extends HTMLLabelElement> extends HTMLIntrinsicElementProps<TElement> {
161
+ for?: string | undefined;
162
+ }
163
+ interface LinkHTMLAttributes<TElement extends HTMLLinkElement> extends HTMLIntrinsicElementProps<TElement> {
164
+ as?: string | undefined;
165
+ crossOrigin?: CrossOrigin | undefined;
166
+ fetchPriority?: 'auto' | 'high' | 'low' | undefined;
167
+ href?: string | undefined;
168
+ hrefLang?: string | undefined;
169
+ integrity?: string | undefined;
170
+ media?: string | undefined;
171
+ referrerPolicy?: ReferrerPolicy | undefined;
172
+ rel?: string | undefined;
173
+ sizes?: string | undefined;
174
+ type?: string | undefined;
175
+ }
176
+ interface MetaHTMLAttributes<TElement extends HTMLMetaElement> extends HTMLIntrinsicElementProps<TElement> {
177
+ charset?: string | undefined;
178
+ content?: string | undefined;
179
+ httpEquiv?: string | undefined;
180
+ name?: string | undefined;
181
+ }
182
+ interface OptionHTMLAttributes<TElement extends HTMLOptionElement> extends HTMLIntrinsicElementProps<TElement> {
183
+ disabled?: boolean | undefined;
184
+ label?: string | undefined;
185
+ selected?: boolean | undefined;
186
+ value?: number | string | undefined;
187
+ }
188
+ interface ScriptHTMLAttributes<TElement extends HTMLScriptElement> extends HTMLIntrinsicElementProps<TElement> {
189
+ async?: boolean | undefined;
190
+ crossOrigin?: CrossOrigin | undefined;
191
+ defer?: boolean | undefined;
192
+ integrity?: string | undefined;
193
+ nonce?: string | undefined;
194
+ referrerPolicy?: ReferrerPolicy | undefined;
195
+ src?: string | undefined;
196
+ type?: string | undefined;
197
+ }
198
+ interface SelectHTMLAttributes<TElement extends HTMLSelectElement> extends HTMLIntrinsicElementProps<TElement> {
199
+ 'bind:value'?: BindTarget<number | readonly string[] | string | undefined> | undefined;
200
+ autoComplete?: string | undefined;
201
+ disabled?: boolean | undefined;
202
+ form?: string | undefined;
203
+ multiple?: boolean | undefined;
204
+ name?: string | undefined;
205
+ required?: boolean | undefined;
206
+ size?: number | undefined;
207
+ value?: number | readonly string[] | string | undefined;
208
+ }
209
+ interface StyleHTMLAttributes<TElement extends HTMLStyleElement> extends HTMLIntrinsicElementProps<TElement> {
210
+ media?: string | undefined;
211
+ nonce?: string | undefined;
212
+ }
213
+ interface TextareaHTMLAttributes<TElement extends HTMLTextAreaElement> extends HTMLIntrinsicElementProps<TElement> {
214
+ 'bind:value'?: BindTarget<number | readonly string[] | string | undefined> | undefined;
215
+ autoComplete?: string | undefined;
216
+ cols?: number | undefined;
217
+ disabled?: boolean | undefined;
218
+ form?: string | undefined;
219
+ maxLength?: number | undefined;
220
+ minLength?: number | undefined;
221
+ name?: string | undefined;
222
+ placeholder?: string | undefined;
223
+ readOnly?: boolean | undefined;
224
+ required?: boolean | undefined;
225
+ rows?: number | undefined;
226
+ value?: number | readonly string[] | string | undefined;
227
+ wrap?: 'hard' | 'off' | 'soft' | undefined;
228
+ }
229
+ type HTMLElementIntrinsicElements = Omit<{ [TTag in keyof HTMLElementTagNameMap]: HTMLIntrinsicElementProps<HTMLElementTagNameMap[TTag]> }, 'a' | 'button' | 'form' | 'img' | 'input' | 'label' | 'link' | 'meta' | 'option' | 'script' | 'select' | 'style' | 'textarea'> & {
230
+ a: AnchorHTMLAttributes<HTMLAnchorElement>;
231
+ button: ButtonHTMLAttributes<HTMLButtonElement>;
232
+ form: FormHTMLAttributes<HTMLFormElement>;
233
+ img: ImgHTMLAttributes<HTMLImageElement>;
234
+ input: InputHTMLAttributes<HTMLInputElement>;
235
+ label: LabelHTMLAttributes<HTMLLabelElement>;
236
+ link: LinkHTMLAttributes<HTMLLinkElement>;
237
+ meta: MetaHTMLAttributes<HTMLMetaElement>;
238
+ option: OptionHTMLAttributes<HTMLOptionElement>;
239
+ script: ScriptHTMLAttributes<HTMLScriptElement>;
240
+ select: SelectHTMLAttributes<HTMLSelectElement>;
241
+ style: StyleHTMLAttributes<HTMLStyleElement>;
242
+ textarea: TextareaHTMLAttributes<HTMLTextAreaElement>;
243
+ };
244
+ type SVGElementIntrinsicElements = { [TTag in keyof SVGElementTagNameMap]: SVGIntrinsicElementProps<SVGElementTagNameMap[TTag]> };
245
+ type NamespacedIntrinsicElementProps = {
246
+ [name: string]: AttributeValue | undefined;
247
+ };
248
+ declare namespace JSX {
249
+ interface SSRTemplate {
250
+ __e_ssr_template: true;
251
+ strings: readonly string[];
252
+ values: readonly unknown[];
253
+ }
254
+ type Type = string | ((props: unknown) => Element);
255
+ type Childable = Element | Element[];
256
+ type Element = {
257
+ type: Type;
258
+ props: Record<string, unknown>;
259
+ key?: string | number | symbol | null;
260
+ isStatic: boolean;
261
+ metadata?: Metadata;
262
+ } | SSRTemplate | string | number | undefined | null | boolean | ((() => Element) & {
263
+ key?: string | number | symbol;
264
+ });
265
+ interface Metadata {
266
+ componentID?: number;
267
+ fileid?: string;
268
+ }
269
+ interface IntrinsicAttributes {
270
+ key?: string | number | symbol | null | undefined;
271
+ }
272
+ type IntrinsicElements = HTMLElementIntrinsicElements & SVGElementIntrinsicElements & {
273
+ [name: `${string}-${string}`]: HTMLIntrinsicElementProps<HTMLElement>;
274
+ [name: `${string}:${string}`]: NamespacedIntrinsicElementProps;
275
+ };
276
+ interface ElementChildrenAttribute {
277
+ children?: unknown;
278
+ }
279
+ }
280
+ //#endregion
281
+ export { JSX as i, DelegatedEvent as n, EventHandler as r, BindTarget as t };
282
+ //# sourceMappingURL=types-WOJV0N2h.d.mts.map
package/vite/mod.d.mts ADDED
@@ -0,0 +1,13 @@
1
+ import { PluginOption } from "vite";
2
+
3
+ //#region vite/options.d.ts
4
+ type EclipsaOutputTarget = 'node' | 'ssg';
5
+ interface EclipsaPluginOptions {
6
+ output?: EclipsaOutputTarget;
7
+ }
8
+ //#endregion
9
+ //#region vite/mod.d.ts
10
+ declare const eclipsa: (options?: EclipsaPluginOptions) => PluginOption;
11
+ //#endregion
12
+ export { type EclipsaPluginOptions, eclipsa };
13
+ //# sourceMappingURL=mod.d.mts.map