@sigx/vite 0.1.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.
Files changed (74) hide show
  1. package/README.md +40 -0
  2. package/dist/cli.d.ts +12 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +372 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/core/src/Component.d.ts +131 -0
  7. package/dist/core/src/Component.d.ts.map +1 -0
  8. package/dist/core/src/Component.js +272 -0
  9. package/dist/core/src/Component.js.map +1 -0
  10. package/dist/core/src/Signals.d.ts +34 -0
  11. package/dist/core/src/Signals.d.ts.map +1 -0
  12. package/dist/core/src/Signals.js +222 -0
  13. package/dist/core/src/Signals.js.map +1 -0
  14. package/dist/core/src/Templating.d.ts +11 -0
  15. package/dist/core/src/Templating.d.ts.map +1 -0
  16. package/dist/core/src/Templating.js +81 -0
  17. package/dist/core/src/Templating.js.map +1 -0
  18. package/dist/core/src/factory/index.d.ts +20 -0
  19. package/dist/core/src/factory/index.d.ts.map +1 -0
  20. package/dist/core/src/factory/index.js +50 -0
  21. package/dist/core/src/factory/index.js.map +1 -0
  22. package/dist/core/src/index.d.ts +8 -0
  23. package/dist/core/src/index.d.ts.map +1 -0
  24. package/dist/core/src/index.js +9 -0
  25. package/dist/core/src/index.js.map +1 -0
  26. package/dist/core/src/jsx-runtime.d.ts +43 -0
  27. package/dist/core/src/jsx-runtime.d.ts.map +1 -0
  28. package/dist/core/src/jsx-runtime.js +469 -0
  29. package/dist/core/src/jsx-runtime.js.map +1 -0
  30. package/dist/core/src/messaging/index.d.ts +9 -0
  31. package/dist/core/src/messaging/index.d.ts.map +1 -0
  32. package/dist/core/src/messaging/index.js +37 -0
  33. package/dist/core/src/messaging/index.js.map +1 -0
  34. package/dist/core/src/models/index.d.ts +18 -0
  35. package/dist/core/src/models/index.d.ts.map +1 -0
  36. package/dist/core/src/models/index.js +12 -0
  37. package/dist/core/src/models/index.js.map +1 -0
  38. package/dist/core/src/sheet.d.ts +51 -0
  39. package/dist/core/src/sheet.d.ts.map +1 -0
  40. package/dist/core/src/sheet.js +151 -0
  41. package/dist/core/src/sheet.js.map +1 -0
  42. package/dist/core/src/stores/DefineInjectable.d.ts +5 -0
  43. package/dist/core/src/stores/DefineInjectable.d.ts.map +1 -0
  44. package/dist/core/src/stores/DefineInjectable.js +56 -0
  45. package/dist/core/src/stores/DefineInjectable.js.map +1 -0
  46. package/dist/core/src/stores/Store.d.ts +70 -0
  47. package/dist/core/src/stores/Store.d.ts.map +1 -0
  48. package/dist/core/src/stores/Store.js +180 -0
  49. package/dist/core/src/stores/Store.js.map +1 -0
  50. package/dist/core/src/styled.d.ts +15 -0
  51. package/dist/core/src/styled.d.ts.map +1 -0
  52. package/dist/core/src/styled.js +62 -0
  53. package/dist/core/src/styled.js.map +1 -0
  54. package/dist/core/src/utils/index.d.ts +5 -0
  55. package/dist/core/src/utils/index.d.ts.map +1 -0
  56. package/dist/core/src/utils/index.js +12 -0
  57. package/dist/core/src/utils/index.js.map +1 -0
  58. package/dist/hmr-plugin/src/index.d.ts +2 -0
  59. package/dist/hmr-plugin/src/index.d.ts.map +1 -0
  60. package/dist/hmr-plugin/src/index.js +59 -0
  61. package/dist/hmr-plugin/src/index.js.map +1 -0
  62. package/dist/hmr.d.ts +10 -0
  63. package/dist/hmr.d.ts.map +1 -0
  64. package/dist/hmr.js +99 -0
  65. package/dist/hmr.js.map +1 -0
  66. package/dist/index.d.ts +12 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +52 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/vite/src/index.d.ts +2 -0
  71. package/dist/vite/src/index.d.ts.map +1 -0
  72. package/dist/vite/src/index.js +59 -0
  73. package/dist/vite/src/index.js.map +1 -0
  74. package/package.json +53 -0
@@ -0,0 +1,9 @@
1
+ import { Subscription, Topic } from "../models";
2
+ export declare function createTopic<T>(options?: {
3
+ namespace?: string;
4
+ name?: string;
5
+ }): Topic<T>;
6
+ export declare function toSubscriber<T>(topic: Topic<T>): {
7
+ subscribe: (handler: (data: T) => void) => Subscription;
8
+ };
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../core/src/messaging/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAGhD,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAiCxF;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;yBAElB,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI;EAE7C"}
@@ -0,0 +1,37 @@
1
+ import { onCleanup } from "../Component";
2
+ export function createTopic(options) {
3
+ let subscribers = [];
4
+ const publish = (data) => {
5
+ subscribers.forEach(s => s(data));
6
+ };
7
+ const subscribe = (handler) => {
8
+ subscribers.push(handler);
9
+ const unsubscribe = () => {
10
+ const idx = subscribers.indexOf(handler);
11
+ if (idx > -1)
12
+ subscribers.splice(idx, 1);
13
+ };
14
+ // Auto-unsubscribe if inside a component or effect scope that supports cleanup
15
+ try {
16
+ onCleanup(unsubscribe);
17
+ }
18
+ catch (e) {
19
+ // Not in a context that supports auto-cleanup, ignore
20
+ }
21
+ return { unsubscribe };
22
+ };
23
+ const destroy = () => {
24
+ subscribers = [];
25
+ };
26
+ return {
27
+ publish,
28
+ subscribe,
29
+ destroy
30
+ };
31
+ }
32
+ export function toSubscriber(topic) {
33
+ return {
34
+ subscribe: (handler) => topic.subscribe(handler)
35
+ };
36
+ }
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../core/src/messaging/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,UAAU,WAAW,CAAI,OAA+C;IAC1E,IAAI,WAAW,GAA0B,EAAE,CAAC;IAE5C,MAAM,OAAO,GAAG,CAAC,IAAO,EAAE,EAAE;QACxB,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,OAA0B,EAAgB,EAAE;QAC3D,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,MAAM,WAAW,GAAG,GAAG,EAAE;YACrB,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,GAAG,GAAG,CAAC,CAAC;gBAAE,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC;QAEF,+EAA+E;QAC/E,IAAI,CAAC;YACD,SAAS,CAAC,WAAW,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,sDAAsD;QAC1D,CAAC;QAED,OAAO,EAAE,WAAW,EAAE,CAAC;IAC3B,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAG,EAAE;QACjB,WAAW,GAAG,EAAE,CAAC;IACrB,CAAC,CAAC;IAEF,OAAO;QACH,OAAO;QACP,SAAS;QACT,OAAO;KACV,CAAC;AACN,CAAC;AAED,MAAM,UAAU,YAAY,CAAI,KAAe;IAC3C,OAAO;QACH,SAAS,EAAE,CAAC,OAA0B,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC;KACtE,CAAC;AACN,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { guid as guidFn } from "../utils";
2
+ export type guid = string;
3
+ export declare const guid: typeof guidFn;
4
+ export declare enum InstanceLifetimes {
5
+ Transient = 0,
6
+ Scoped = 1,
7
+ Singleton = 2
8
+ }
9
+ export interface Subscription {
10
+ unsubscribe(): void;
11
+ }
12
+ export interface Topic<T> {
13
+ publish(data: T): void;
14
+ subscribe(handler: (data: T) => void): Subscription;
15
+ destroy(): void;
16
+ }
17
+ export declare function valueOf<T>(obj: any): T;
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../core/src/models/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC;AAC1B,eAAO,MAAM,IAAI,eAAS,CAAC;AAE3B,oBAAY,iBAAiB;IACzB,SAAS,IAAI;IACb,MAAM,IAAI;IACV,SAAS,IAAI;CAChB;AAED,MAAM,WAAW,YAAY;IACzB,WAAW,IAAI,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,KAAK,CAAC,CAAC;IACpB,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACvB,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,GAAG,YAAY,CAAC;IACpD,OAAO,IAAI,IAAI,CAAC;CACnB;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAEtC"}
@@ -0,0 +1,12 @@
1
+ import { guid as guidFn } from "../utils";
2
+ export const guid = guidFn;
3
+ export var InstanceLifetimes;
4
+ (function (InstanceLifetimes) {
5
+ InstanceLifetimes[InstanceLifetimes["Transient"] = 0] = "Transient";
6
+ InstanceLifetimes[InstanceLifetimes["Scoped"] = 1] = "Scoped";
7
+ InstanceLifetimes[InstanceLifetimes["Singleton"] = 2] = "Singleton";
8
+ })(InstanceLifetimes || (InstanceLifetimes = {}));
9
+ export function valueOf(obj) {
10
+ return obj;
11
+ }
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../core/src/models/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAG1C,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC;AAE3B,MAAM,CAAN,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IACzB,mEAAa,CAAA;IACb,6DAAU,CAAA;IACV,mEAAa,CAAA;AACjB,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,QAI5B;AAYD,MAAM,UAAU,OAAO,CAAI,GAAQ;IAC/B,OAAO,GAAQ,CAAC;AACpB,CAAC"}
@@ -0,0 +1,51 @@
1
+ export type CSSObject = Partial<CSSStyleDeclaration> & {
2
+ [key: string]: string | number | CSSObject | undefined | any;
3
+ };
4
+ export type StylesMap<T> = {
5
+ [K in keyof T]: string;
6
+ };
7
+ export type DeepPartial<T> = {
8
+ [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
9
+ };
10
+ export type VarsHelper<T> = T & {
11
+ (overrides?: DeepPartial<T>): Record<string, string>;
12
+ };
13
+ /**
14
+ * Define a set of styles using a typed object.
15
+ * Returns a map of class names that automatically adopts the stylesheet when used.
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const styles = defineStyles({
20
+ * container: {
21
+ * display: "flex",
22
+ * backgroundColor: "var(--bg)",
23
+ * "&:hover": { opacity: 0.8 }
24
+ * }
25
+ * });
26
+ *
27
+ * // In component:
28
+ * <div class={styles.container} />
29
+ * ```
30
+ */
31
+ export declare function defineStyles<T extends Record<string, CSSObject>>(styles: T): StylesMap<T>;
32
+ /**
33
+ * Define a set of CSS variables with defaults.
34
+ * Returns a helper that provides both the var() strings and a function to generate style objects.
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * const vars = defineVars('card', {
39
+ * bg: 'white',
40
+ * padding: '1rem'
41
+ * });
42
+ *
43
+ * // Use in styles:
44
+ * // background: vars.bg -> var(--card-bg, white)
45
+ *
46
+ * // Use in component:
47
+ * // style={vars({ bg: 'red' })} -> { '--card-bg': 'red' }
48
+ * ```
49
+ */
50
+ export declare function defineVars<T extends Record<string, any>>(namespace: string, defaults: T): VarsHelper<T>;
51
+ //# sourceMappingURL=sheet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sheet.d.ts","sourceRoot":"","sources":["../../../../core/src/sheet.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,mBAAmB,CAAC,GAAG;IACnD,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,GAAG,CAAC;CAChE,CAAC;AAEF,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;KACtB,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM;CACzB,CAAC;AAEF,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;KACxB,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAClE,CAAC;AAEF,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG;IAC5B,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxD,CAAC;AAkCF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CA+BzF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CA4CvG"}
@@ -0,0 +1,151 @@
1
+ import { adoptStyles, getCurrentInstance } from "./Component.js";
2
+ // Simple hash function
3
+ function hash(str) {
4
+ let hash = 5381;
5
+ let i = str.length;
6
+ while (i) {
7
+ hash = (hash * 33) ^ str.charCodeAt(--i);
8
+ }
9
+ return (hash >>> 0).toString(36);
10
+ }
11
+ // CamelCase to kebab-case
12
+ function toKebabCase(str) {
13
+ return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
14
+ }
15
+ function compileRule(selector, style, buffer) {
16
+ let block = `${selector} {`;
17
+ const nested = [];
18
+ for (const key in style) {
19
+ const value = style[key];
20
+ if (value === undefined || value === null)
21
+ continue;
22
+ if (typeof value === 'object') {
23
+ // Nested selector
24
+ // Handle & replacement
25
+ const subSelector = key.includes('&')
26
+ ? key.replace(/&/g, selector)
27
+ : `${selector} ${key}`;
28
+ nested.push([subSelector, value]);
29
+ }
30
+ else {
31
+ // CSS Property
32
+ // Check if it's a number that needs px (optional, but good for DX)
33
+ // For now, let's stick to raw values to be zero-magic, except camelCase conversion
34
+ const prop = key.startsWith('--') ? key : toKebabCase(key);
35
+ block += `\n ${prop}: ${value};`;
36
+ }
37
+ }
38
+ block += `\n}`;
39
+ buffer.push(block);
40
+ // Process nested rules
41
+ for (const [sel, obj] of nested) {
42
+ compileRule(sel, obj, buffer);
43
+ }
44
+ }
45
+ /**
46
+ * Define a set of styles using a typed object.
47
+ * Returns a map of class names that automatically adopts the stylesheet when used.
48
+ *
49
+ * @example
50
+ * ```typescript
51
+ * const styles = defineStyles({
52
+ * container: {
53
+ * display: "flex",
54
+ * backgroundColor: "var(--bg)",
55
+ * "&:hover": { opacity: 0.8 }
56
+ * }
57
+ * });
58
+ *
59
+ * // In component:
60
+ * <div class={styles.container} />
61
+ * ```
62
+ */
63
+ export function defineStyles(styles) {
64
+ const buffer = [];
65
+ const classMap = {};
66
+ // Generate unique hash for this style definition
67
+ // We use a random component to ensure uniqueness across HMR/reloads if content is same but logic differs
68
+ // But for stability, content hashing is better.
69
+ // Let's use content hash of keys + values for stability.
70
+ const prefix = "v-" + hash(JSON.stringify(styles));
71
+ for (const key in styles) {
72
+ const className = `${prefix}-${key}`;
73
+ classMap[key] = className;
74
+ compileRule(`.${className}`, styles[key], buffer);
75
+ }
76
+ const cssText = buffer.join('\n');
77
+ const sheet = new CSSStyleSheet();
78
+ sheet.replaceSync(cssText);
79
+ // Return a proxy to auto-adopt styles when classes are accessed
80
+ return new Proxy(classMap, {
81
+ get(target, prop) {
82
+ // If we are in a component context, adopt the styles
83
+ // This works because render() runs synchronously in the component context
84
+ if (getCurrentInstance()) {
85
+ adoptStyles(sheet);
86
+ }
87
+ return target[prop];
88
+ }
89
+ });
90
+ }
91
+ /**
92
+ * Define a set of CSS variables with defaults.
93
+ * Returns a helper that provides both the var() strings and a function to generate style objects.
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * const vars = defineVars('card', {
98
+ * bg: 'white',
99
+ * padding: '1rem'
100
+ * });
101
+ *
102
+ * // Use in styles:
103
+ * // background: vars.bg -> var(--card-bg, white)
104
+ *
105
+ * // Use in component:
106
+ * // style={vars({ bg: 'red' })} -> { '--card-bg': 'red' }
107
+ * ```
108
+ */
109
+ export function defineVars(namespace, defaults) {
110
+ const varsObj = {};
111
+ function buildVars(current, path, target) {
112
+ for (const key in current) {
113
+ const value = current[key];
114
+ const newPath = [...path, key];
115
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
116
+ target[key] = {};
117
+ buildVars(value, newPath, target[key]);
118
+ }
119
+ else {
120
+ const varName = `--${namespace}-${newPath.map(toKebabCase).join('-')}`;
121
+ target[key] = `var(${varName}, ${value})`;
122
+ }
123
+ }
124
+ }
125
+ buildVars(defaults, [], varsObj);
126
+ const func = (overrides) => {
127
+ const style = {};
128
+ if (!overrides)
129
+ return style;
130
+ function flatten(current, path) {
131
+ for (const key in current) {
132
+ const value = current[key];
133
+ const newPath = [...path, key];
134
+ if (value !== undefined) {
135
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
136
+ flatten(value, newPath);
137
+ }
138
+ else {
139
+ const varName = `--${namespace}-${newPath.map(toKebabCase).join('-')}`;
140
+ style[varName] = String(value);
141
+ }
142
+ }
143
+ }
144
+ }
145
+ flatten(overrides, []);
146
+ return style;
147
+ };
148
+ Object.assign(func, varsObj);
149
+ return func;
150
+ }
151
+ //# sourceMappingURL=sheet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sheet.js","sourceRoot":"","sources":["../../../../core/src/sheet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function inject<T>(token: any): T | undefined;
2
+ export declare function provide<T>(token: any, value: T): void;
3
+ export declare function defineInjectable<T>(factory: () => T): () => any;
4
+ export declare function defineProvide<T>(useFn: () => T): T;
5
+ //# sourceMappingURL=DefineInjectable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefineInjectable.d.ts","sourceRoot":"","sources":["../../../../../core/src/stores/DefineInjectable.ts"],"names":[],"mappings":"AAEA,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,GAAG,SAAS,CAanD;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,QAW9C;AAID,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,aAmBnD;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAWlD"}
@@ -0,0 +1,56 @@
1
+ import { getCurrentInstance } from "../Component.js";
2
+ export function inject(token) {
3
+ const ctx = getCurrentInstance();
4
+ // If called outside component, return undefined (or handle as needed)
5
+ if (!ctx)
6
+ return undefined;
7
+ let parent = ctx.parent;
8
+ while (parent) {
9
+ if (parent.__provides && parent.__provides.has(token)) {
10
+ return parent.__provides.get(token);
11
+ }
12
+ parent = parent.__parentComponent;
13
+ }
14
+ return undefined;
15
+ }
16
+ export function provide(token, value) {
17
+ const ctx = getCurrentInstance();
18
+ if (!ctx) {
19
+ console.warn("provide called outside of component setup");
20
+ return;
21
+ }
22
+ const component = ctx.el;
23
+ if (!component.__provides) {
24
+ component.__provides = new Map();
25
+ }
26
+ component.__provides.set(token, value);
27
+ }
28
+ const globalInstances = new Map();
29
+ export function defineInjectable(factory) {
30
+ const token = factory;
31
+ const useFn = () => {
32
+ const injected = inject(token);
33
+ if (injected)
34
+ return injected;
35
+ // Fallback to global singleton
36
+ if (!globalInstances.has(token)) {
37
+ globalInstances.set(token, factory());
38
+ }
39
+ return globalInstances.get(token);
40
+ };
41
+ // Attach metadata for defineProvide
42
+ useFn._factory = factory;
43
+ useFn._token = token;
44
+ return useFn;
45
+ }
46
+ export function defineProvide(useFn) {
47
+ const factory = useFn._factory;
48
+ const token = useFn._token;
49
+ if (!factory || !token) {
50
+ throw new Error("defineProvide must be called with a function created by defineInjectable");
51
+ }
52
+ const instance = factory();
53
+ provide(token, instance);
54
+ return instance;
55
+ }
56
+ //# sourceMappingURL=DefineInjectable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefineInjectable.js","sourceRoot":"","sources":["../../../../../core/src/stores/DefineInjectable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAiB,MAAM,iBAAiB,CAAC;AAEpE,MAAM,UAAU,MAAM,CAAI,KAAU;IAChC,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAC;IACjC,sEAAsE;IACtE,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAE3B,IAAI,MAAM,GAAqC,GAAG,CAAC,MAAM,CAAC;IAC1D,OAAO,MAAM,EAAE,CAAC;QACZ,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACpD,OAAO,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;IACtC,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,OAAO,CAAI,KAAU,EAAE,KAAQ;IAC3C,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAC;IACjC,IAAI,CAAC,GAAG,EAAE,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAC1D,OAAO;IACX,CAAC;IACD,MAAM,SAAS,GAAG,GAAG,CAAC,EAA8B,CAAC;IACrD,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;QACxB,SAAS,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;IACrC,CAAC;IACD,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,eAAe,GAAG,IAAI,GAAG,EAAY,CAAC;AAE5C,MAAM,UAAU,gBAAgB,CAAI,OAAgB;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC;IAEtB,MAAM,KAAK,GAAG,GAAG,EAAE;QACf,MAAM,QAAQ,GAAG,MAAM,CAAI,KAAK,CAAC,CAAC;QAClC,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE9B,+BAA+B;QAC/B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC;IAEF,oCAAoC;IACnC,KAAa,CAAC,QAAQ,GAAG,OAAO,CAAC;IACjC,KAAa,CAAC,MAAM,GAAG,KAAK,CAAC;IAE9B,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,aAAa,CAAI,KAAc;IAC3C,MAAM,OAAO,GAAI,KAAa,CAAC,QAAQ,CAAC;IACxC,MAAM,KAAK,GAAI,KAAa,CAAC,MAAM,CAAC;IAEpC,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAChG,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAC;IAC3B,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACzB,OAAO,QAAQ,CAAC;AACpB,CAAC"}
@@ -0,0 +1,70 @@
1
+ import { Subscription, Topic, InstanceLifetimes } from "../models";
2
+ import { toSubscriber } from "../messaging";
3
+ import { defineFactory, SetupFactoryContext } from "../factory";
4
+ type MutateFn<T> = (value: T | ((prev: T) => T)) => void;
5
+ export type StoreEvents<TState extends object, TEvents extends Record<string, Topic<any>> = {}> = {
6
+ [K in keyof TState as `onMutated${Capitalize<string & K>}`]: ReturnType<typeof toSubscriber<TState[K]>>;
7
+ } & TEvents;
8
+ type MapActionOnDispatching<T extends Function> = T extends (...args: infer U) => any ? (...args: U) => void : never;
9
+ type MapActionOnDispatched<T extends Function> = T extends (...args: infer U) => Promise<infer Y> | infer Y ? (result: Y, ...args: U) => void : never;
10
+ type MapActionOnFailure<T extends Function> = T extends (...args: infer U) => any ? (failureReason: any, ...args: U) => void : never;
11
+ export type StoreReturnDefineAction<TAction extends {
12
+ [key: string]: any;
13
+ }> = {
14
+ onDispatching: {
15
+ [k in keyof TAction]: {
16
+ subscribe(fn: MapActionOnDispatching<TAction[k]>): Subscription;
17
+ };
18
+ };
19
+ onDispatched: {
20
+ [k in keyof TAction]: {
21
+ subscribe(fn: MapActionOnDispatched<TAction[k]>): Subscription;
22
+ };
23
+ };
24
+ onFailure: {
25
+ [k in keyof TAction]: {
26
+ subscribe(fn: MapActionOnFailure<TAction[k]>): Subscription;
27
+ };
28
+ };
29
+ } & TAction;
30
+ export interface SetupStoreContext extends SetupFactoryContext {
31
+ defineState<TState extends object, TEvents extends Record<string, Topic<any>> = Record<string, Topic<any>>>(state: TState): {
32
+ state: TState;
33
+ events: StoreEvents<TState, TEvents>;
34
+ mutate: {
35
+ [K in keyof TState]: MutateFn<TState[K]>;
36
+ };
37
+ };
38
+ defineActions<TActions extends {
39
+ [key: string]: any;
40
+ }>(actions: TActions): StoreReturnDefineAction<TActions>;
41
+ }
42
+ export interface IReturnSetupStore<TState, TGetters, TActions extends {
43
+ [key: string]: Function;
44
+ }, TEvents> {
45
+ state?: TState;
46
+ get?: TGetters;
47
+ actions?: StoreReturnDefineAction<TActions>;
48
+ events?: TEvents;
49
+ name?: string;
50
+ }
51
+ export declare function defineStore<TState extends object, TGetters extends object, TActions extends {
52
+ [key: string]: any;
53
+ }, TEvents extends Record<string, ReturnType<typeof toSubscriber<any>>>, InferReturnSetup extends IReturnSetupStore<TState, TGetters, TActions, TEvents>>(name: string, setup: (ctx: SetupStoreContext) => InferReturnSetup, lifetime?: InstanceLifetimes): ReturnType<typeof defineFactory<InferReturnSetup>>;
54
+ export declare function defineStore<TState extends object, TGetters extends object, TActions extends {
55
+ [key: string]: any;
56
+ }, TEvents extends Record<string, ReturnType<typeof toSubscriber<any>>>, InferReturnSetup extends IReturnSetupStore<TState, TGetters, TActions, TEvents>, T1>(name: string, setup: (ctx: SetupStoreContext, param1: T1) => InferReturnSetup, lifetime?: InstanceLifetimes): ReturnType<typeof defineFactory<InferReturnSetup, T1>>;
57
+ export declare function defineStore<TState extends object, TGetters extends object, TActions extends {
58
+ [key: string]: any;
59
+ }, TEvents extends Record<string, ReturnType<typeof toSubscriber<any>>>, InferReturnSetup extends IReturnSetupStore<TState, TGetters, TActions, TEvents>, T1, T2>(name: string, setup: (ctx: SetupStoreContext, param1: T1, param2: T2) => InferReturnSetup, lifetime?: InstanceLifetimes): ReturnType<typeof defineFactory<InferReturnSetup, T1, T2>>;
60
+ export declare function defineStore<TState extends object, TGetters extends object, TActions extends {
61
+ [key: string]: any;
62
+ }, TEvents extends Record<string, ReturnType<typeof toSubscriber<any>>>, InferReturnSetup extends IReturnSetupStore<TState, TGetters, TActions, TEvents>, T1, T2, T3>(name: string, setup: (ctx: SetupStoreContext, param1: T1, param2: T2, param3: T3, lifetime?: InstanceLifetimes) => InferReturnSetup): ReturnType<typeof defineFactory<InferReturnSetup, T1, T2, T3>>;
63
+ export declare function defineStore<TState extends object, TGetters extends object, TActions extends {
64
+ [key: string]: any;
65
+ }, TEvents extends Record<string, ReturnType<typeof toSubscriber<any>>>, InferReturnSetup extends IReturnSetupStore<TState, TGetters, TActions, TEvents>, T1, T2, T3, T4>(name: string, setup: (ctx: SetupStoreContext, param1: T1, param2: T2, param3: T3, param4: T4, lifetime?: InstanceLifetimes) => InferReturnSetup): ReturnType<typeof defineFactory<InferReturnSetup, T1, T2, T3, T4>>;
66
+ export declare function defineStore<TState extends object, TGetters extends object, TActions extends {
67
+ [key: string]: any;
68
+ }, TEvents extends Record<string, ReturnType<typeof toSubscriber<any>>>, InferReturnSetup extends IReturnSetupStore<TState, TGetters, TActions, TEvents>, T1, T2, T3, T4, T5>(name: string, setup: (ctx: SetupStoreContext, param1: T1, param2: T2, param3: T3, param4: T4, param5: T5) => InferReturnSetup, lifetime?: InstanceLifetimes): ReturnType<typeof defineFactory<InferReturnSetup, T1, T2, T3, T4, T5>>;
69
+ export {};
70
+ //# sourceMappingURL=Store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Store.d.ts","sourceRoot":"","sources":["../../../../../core/src/stores/Store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,180 @@
1
+ import { guid, InstanceLifetimes } from "../models";
2
+ import { createTopic } from "../messaging";
3
+ import { defineFactory } from "../factory";
4
+ import { Utils } from "../utils";
5
+ import { signal, reactive, watch, effectScope } from "../Signals";
6
+ export function defineStore(name, setup, lifetime = InstanceLifetimes.Scoped) {
7
+ return defineFactory((ctxFactory, ...args) => {
8
+ const scope = effectScope(true);
9
+ let messages = [];
10
+ const instanceId = guid();
11
+ const id = `${name}_${instanceId}`;
12
+ const result = setup({
13
+ ...ctxFactory,
14
+ defineState: (state) => {
15
+ return defineState(state, id, scope, messages);
16
+ },
17
+ defineActions: (actions) => {
18
+ return defineActions(actions, id, messages);
19
+ }
20
+ }, ...args);
21
+ ctxFactory.onDeactivated(() => {
22
+ scope.stop();
23
+ messages?.forEach(m => m.destroy());
24
+ messages = null;
25
+ });
26
+ // add store name for easy debugging
27
+ if (!result.name) {
28
+ result.name = id;
29
+ }
30
+ return result;
31
+ }, lifetime);
32
+ }
33
+ function defineActions(actions, storeInstanceName, messages) {
34
+ const events = {};
35
+ const namespace = `${storeInstanceName}.actions.${guid()}`;
36
+ const onDispatching = {};
37
+ const onDispatched = {};
38
+ const onFailure = {};
39
+ const result = {
40
+ onDispatching,
41
+ onDispatched,
42
+ onFailure
43
+ };
44
+ function getEvent(actionName, type) {
45
+ const name = `${actionName}.${type}`;
46
+ if (!events[name]) {
47
+ events[name] = createTopic({
48
+ namespace: namespace,
49
+ name: name
50
+ });
51
+ messages.push(events[name]);
52
+ }
53
+ return events[name];
54
+ }
55
+ Object.keys(actions).forEach(actionName => {
56
+ // Setup event subscribers
57
+ onDispatching[actionName] = {
58
+ subscribe: (fn) => {
59
+ return getEvent(actionName, "onDispatching").subscribe(function () {
60
+ fn.apply(this, arguments[0]);
61
+ });
62
+ }
63
+ };
64
+ onDispatched[actionName] = {
65
+ subscribe: (fn) => {
66
+ return getEvent(actionName, "onDispatched").subscribe(function () {
67
+ const msg = arguments[0];
68
+ const allArguments = [msg.result].concat(Array.from(msg.args));
69
+ fn.apply(this, allArguments);
70
+ });
71
+ }
72
+ };
73
+ onFailure[actionName] = {
74
+ subscribe: (fn) => {
75
+ return getEvent(actionName, "onFailure").subscribe(function () {
76
+ const msg = arguments[0];
77
+ const allArguments = [msg.reason].concat(Array.from(msg.args));
78
+ fn.apply(this, allArguments);
79
+ });
80
+ }
81
+ };
82
+ // Wrap action
83
+ result[actionName] = function () {
84
+ try {
85
+ const currentArguments = arguments;
86
+ getEvent(actionName, "onDispatching").publish(currentArguments);
87
+ const returnedResult = actions[actionName].apply(this, currentArguments);
88
+ if (Utils.isPromise(returnedResult)) {
89
+ returnedResult.then(result => {
90
+ getEvent(actionName, "onDispatched").publish({ result: returnedResult, args: currentArguments });
91
+ });
92
+ }
93
+ else {
94
+ getEvent(actionName, "onDispatched").publish({ result: returnedResult, args: currentArguments });
95
+ }
96
+ return returnedResult;
97
+ }
98
+ catch (err) {
99
+ console.error(err);
100
+ getEvent(actionName, "onFailure").publish({ reason: err, args: arguments });
101
+ }
102
+ };
103
+ });
104
+ return result;
105
+ }
106
+ function defineState(value, storeInstanceName, scope, messages) {
107
+ const stateRefs = {};
108
+ const events = {};
109
+ const mutate = {};
110
+ // We still use a proxy for state to handle the unwrapping transparently
111
+ // and to support adding new properties if necessary (though less common)
112
+ const stateProxy = new Proxy(stateRefs, {
113
+ get(target, key) {
114
+ if (key === "isProxy")
115
+ return true;
116
+ return target[key]?.value;
117
+ },
118
+ set(target, key, value) {
119
+ if (!target[key]) {
120
+ // New property
121
+ initProperty(key, value);
122
+ }
123
+ else {
124
+ target[key].value = value;
125
+ }
126
+ return true;
127
+ }
128
+ });
129
+ function initProperty(key, initialValue) {
130
+ stateRefs[key] = signal(initialValue);
131
+ // Setup watcher
132
+ scope.run(() => {
133
+ watch(() => stateRefs[key].value, (newValue) => {
134
+ triggerEvent(key, newValue);
135
+ }, { deep: true, immediate: true });
136
+ });
137
+ // Setup mutate
138
+ mutate[key] = (val) => {
139
+ try {
140
+ let newValue;
141
+ if (typeof val === "function") {
142
+ newValue = val(stateRefs[key].value);
143
+ }
144
+ else {
145
+ newValue = val;
146
+ }
147
+ stateRefs[key].value = newValue;
148
+ }
149
+ catch (err) {
150
+ console.error(err);
151
+ }
152
+ };
153
+ // Setup event
154
+ const eventKey = `onMutated${key.charAt(0).toUpperCase()}${key.slice(1)}`;
155
+ if (!events[eventKey]) {
156
+ const topic = createTopic({
157
+ namespace: `${storeInstanceName}.events`,
158
+ name: eventKey
159
+ });
160
+ events[eventKey] = topic;
161
+ messages.push(topic);
162
+ }
163
+ }
164
+ function triggerEvent(name, value) {
165
+ const keyString = name;
166
+ const afterEventKey = `onMutated${keyString.charAt(0).toUpperCase()}${keyString.slice(1)}`;
167
+ events[afterEventKey]?.publish(value);
168
+ }
169
+ if (value) {
170
+ Object.keys(value).forEach(key => {
171
+ initProperty(key, value[key]);
172
+ });
173
+ }
174
+ return {
175
+ state: reactive(stateProxy),
176
+ events: events,
177
+ mutate: mutate
178
+ };
179
+ }
180
+ //# sourceMappingURL=Store.js.map