tungsten 0.2.7 → 0.2.9

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 (61) hide show
  1. package/dist/Components.d.ts +3 -1
  2. package/dist/Components.d.ts.map +1 -1
  3. package/dist/Components.js +100 -51
  4. package/dist/DomNodes.js +2 -2
  5. package/dist/FrameworkConfig.d.ts +2 -0
  6. package/dist/FrameworkConfig.d.ts.map +1 -1
  7. package/dist/FunctionComponentStandIn.d.ts +2 -0
  8. package/dist/FunctionComponentStandIn.d.ts.map +1 -1
  9. package/dist/FunctionComponentStandIn.js +16 -3
  10. package/dist/Instance/ClientRuntimeContext.d.ts +8 -0
  11. package/dist/Instance/ClientRuntimeContext.d.ts.map +1 -0
  12. package/dist/Instance/ClientRuntimeContext.js +1 -0
  13. package/dist/Instance/Instance.d.ts +20 -1
  14. package/dist/Instance/Instance.d.ts.map +1 -1
  15. package/dist/Instance/Instance.js +59 -11
  16. package/dist/Servers/loadEnvsDev.d.ts +1 -1
  17. package/dist/Servers/loadEnvsDev.d.ts.map +1 -1
  18. package/dist/Servers/loadEnvsDev.js +18 -3
  19. package/dist/Store/makeStore.d.ts.map +1 -1
  20. package/dist/Store/makeStore.js +7 -14
  21. package/dist/auth/passwordHashing.sxyt.js +2 -2
  22. package/dist/babelPlugins/BabelTransformPackageImports.d.ts +1 -0
  23. package/dist/babelPlugins/BabelTransformPackageImports.d.ts.map +1 -1
  24. package/dist/babelPlugins/BabelTransformPackageImports.js +109 -70
  25. package/dist/bin/commands/compile.sxyt.js +76 -1
  26. package/dist/build/compileJavascript.d.ts.map +1 -1
  27. package/dist/build/compileJavascript.js +13 -1
  28. package/dist/build/makeBabelUserDevConfig.d.ts +1 -1
  29. package/dist/build/makeBabelUserDevConfig.d.ts.map +1 -1
  30. package/dist/build/makeBabelUserDevConfig.js +2 -1
  31. package/dist/componentProxyHandlers.d.ts +2 -2
  32. package/dist/componentProxyHandlers.d.ts.map +1 -1
  33. package/dist/componentProxyHandlers.js +70 -44
  34. package/dist/componentProxyHandlers.sxyt.d.ts +2 -0
  35. package/dist/componentProxyHandlers.sxyt.d.ts.map +1 -0
  36. package/dist/componentProxyHandlers.sxyt.js +130 -0
  37. package/dist/findUserConfig.d.ts +1 -1
  38. package/dist/findUserConfig.d.ts.map +1 -1
  39. package/dist/findUserConfig.js +2 -2
  40. package/dist/frameworkConfigSchema.d.ts +4 -0
  41. package/dist/frameworkConfigSchema.d.ts.map +1 -1
  42. package/dist/frameworkConfigSchema.js +1 -0
  43. package/dist/getUserConfig.d.ts +1 -1
  44. package/dist/getUserConfig.d.ts.map +1 -1
  45. package/dist/getUserConfig.js +2 -2
  46. package/dist/hooks/useState.js +1 -1
  47. package/dist/indexInner.d.ts +0 -1
  48. package/dist/indexInner.d.ts.map +1 -1
  49. package/dist/indexInner.js +1 -1
  50. package/dist/update/UpdateScheduler.d.ts +17 -0
  51. package/dist/update/UpdateScheduler.d.ts.map +1 -0
  52. package/dist/update/UpdateScheduler.js +113 -0
  53. package/dist/update/integrateUpdateVdom.d.ts +11 -1
  54. package/dist/update/integrateUpdateVdom.d.ts.map +1 -1
  55. package/dist/update/integrateUpdateVdom.js +117 -59
  56. package/dist/{react-zone.d.ts → zones/react.d.ts} +5 -5
  57. package/dist/zones/react.d.ts.map +1 -0
  58. package/dist/{react-zone.js → zones/react.js} +3 -3
  59. package/package.json +7 -4
  60. package/readme.md +80 -0
  61. package/dist/react-zone.d.ts.map +0 -1
@@ -36,7 +36,6 @@ export { isDev } from './isDev.js';
36
36
  export { isProd } from './isProd.js';
37
37
  export { logAndReturn } from './logAndReturn.js';
38
38
  export * from './requests/index.js';
39
- export * from './react-zone.jsx';
40
39
  export { registerGlobalData, type GlobalData, type GlobalDataFunction } from './routing/registerGlobalData.js';
41
40
  export * from './routing/MatchedRoute.jsx';
42
41
  export * from './routing/RedirectCode.js';
@@ -1 +1 @@
1
- {"version":3,"file":"indexInner.d.ts","sourceRoot":"","sources":["../src/indexInner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"indexInner.d.ts","sourceRoot":"","sources":["../src/indexInner.ts"],"names":[],"mappings":"AAEA,cAAc,qBAAqB,CAAA;AACnC,OAAO,EACH,uBAAuB,EAAE,uBAAuB,IAAI,eAAe,EAAE,mBAAmB;AACxF,yBAAyB,EAAE,yBAAyB,IAAI,iBAAiB,EAAE,qBAAqB;AAEhG,gCAAgC,EAAE,gCAAgC,IAAI,wBAAwB,EAC9F,kCAAkC,EAAE,kCAAkC,IAAI,0BAA0B,GACvG,MAAM,kBAAkB,CAAA;AAEzB,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,uBAAuB,CAAA;AACrC,cAAc,4CAA4C,CAAA;AAC1D,cAAc,yCAAyC,CAAA;AACvD,cAAc,8CAA8C,CAAA;AAC5D,cAAc,yCAAyC,CAAA;AACvD,cAAc,0CAA0C,CAAA;AACxD,cAAc,4CAA4C,CAAA;AAC1D,cAAc,gCAAgC,CAAA;AAC9C,cAAc,sBAAsB,CAAA;AACpC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yCAAyC,CAAA;AACvD,cAAc,uCAAuC,CAAA;AACrD,cAAc,WAAW,CAAA;AACzB,cAAc,qBAAqB,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,cAAc,gBAAgB,CAAA;AAG9B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,iBAAiB,CAAA;AAE/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,cAAc,qBAAqB,CAAA;AAEnC,OAAO,EAAE,kBAAkB,EAAE,KAAK,UAAU,EAAE,KAAK,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AAC9G,cAAc,4BAA4B,CAAA;AAC1C,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mCAAmC,CAAA;AACjD,cAAc,8BAA8B,CAAA;AAC5C,cAAc,0BAA0B,CAAA;AACxC,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,6BAA6B,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,cAAc,gBAAgB,CAAA;AAI9B,YAAY,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,YAAY,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACjD,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AAC5F,YAAY,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAA;AACnF,cAAc,kBAAkB,CAAA;AAEhC,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC5D,YAAY,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACtD,YAAY,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AACnC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACvD,YAAY,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACjD,YAAY,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AACjE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,IAAI,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxH,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAC/D,YAAY,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAChE,YAAY,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACvD,YAAY,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAC5E,YAAY,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAC3E,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,YAAY,EACR,0BAA0B,EAAE,0BAA0B,IAAI,SAAS,EACnE,gCAAgC,EAAE,gCAAgC,IAAI,eAAe,EACrF,cAAc,EACjB,MAAM,kBAAkB,CAAA;AACzB,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAG7C,mBAAmB,mBAAmB,CAAA"}
@@ -45,7 +45,7 @@ export { isProd } from "./isProd.js";
45
45
  export { logAndReturn } from "./logAndReturn.js";
46
46
  //export * from './RenderRoutes.js' // maybe we won't use render routes, instead Router and Route
47
47
  export * from "./requests/index.js";
48
- export * from "./react-zone.js";
48
+ //export * from './zones/react.jsx'
49
49
  export { registerGlobalData } from "./routing/registerGlobalData.js";
50
50
  export * from "./routing/MatchedRoute.js";
51
51
  export * from "./routing/RedirectCode.js";
@@ -0,0 +1,17 @@
1
+ export type ScheduledWork = () => void | Promise<void>;
2
+ export declare class UpdateScheduler {
3
+ #private;
4
+ readonly maxPasses: number;
5
+ constructor(maxPasses?: number);
6
+ enqueueUpdate(key: object, run: ScheduledWork, description: string): void;
7
+ enqueueTask(run: ScheduledWork, description: string): void;
8
+ trackWork(run: () => unknown, description: string): void;
9
+ resolved(): Promise<void>;
10
+ private resolvePending;
11
+ private run;
12
+ private recordError;
13
+ private throwRecordedError;
14
+ cancelPending(): void;
15
+ dispose(): void;
16
+ }
17
+ //# sourceMappingURL=UpdateScheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpdateScheduler.d.ts","sourceRoot":"","sources":["../../src/update/UpdateScheduler.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAOtD,qBAAa,eAAe;;IAOxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;gBAEd,SAAS,SAAM;IAI3B,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAKzE,WAAW,CAAC,GAAG,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAK1D,SAAS,CAAC,GAAG,EAAE,MAAM,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAsBxD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;YAQX,cAAc;YA6Bd,GAAG;IAQjB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,kBAAkB;IAQ1B,aAAa,IAAI,IAAI;IAKrB,OAAO,IAAI,IAAI;CAMlB"}
@@ -0,0 +1,113 @@
1
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
2
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
3
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
4
+ function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
5
+ function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
6
+ function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
7
+ function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
8
+ function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
9
+ var _updates = /*#__PURE__*/new WeakMap();
10
+ var _tasks = /*#__PURE__*/new WeakMap();
11
+ var _promises = /*#__PURE__*/new WeakMap();
12
+ var _error = /*#__PURE__*/new WeakMap();
13
+ var _disposed = /*#__PURE__*/new WeakMap();
14
+ var _resolving = /*#__PURE__*/new WeakMap();
15
+ export class UpdateScheduler {
16
+ constructor(maxPasses = 100) {
17
+ _classPrivateFieldInitSpec(this, _updates, new Map());
18
+ _classPrivateFieldInitSpec(this, _tasks, []);
19
+ _classPrivateFieldInitSpec(this, _promises, new Set());
20
+ _classPrivateFieldInitSpec(this, _error, void 0);
21
+ _classPrivateFieldInitSpec(this, _disposed, false);
22
+ _classPrivateFieldInitSpec(this, _resolving, void 0);
23
+ _defineProperty(this, "maxPasses", void 0);
24
+ this.maxPasses = maxPasses;
25
+ }
26
+ enqueueUpdate(key, run, description) {
27
+ if (_classPrivateFieldGet(_disposed, this)) return;
28
+ if (!_classPrivateFieldGet(_updates, this).has(key)) _classPrivateFieldGet(_updates, this).set(key, {
29
+ run,
30
+ description
31
+ });
32
+ }
33
+ enqueueTask(run, description) {
34
+ if (_classPrivateFieldGet(_disposed, this)) return;
35
+ _classPrivateFieldGet(_tasks, this).push({
36
+ run,
37
+ description
38
+ });
39
+ }
40
+ trackWork(run, description) {
41
+ if (_classPrivateFieldGet(_disposed, this)) return;
42
+ let result;
43
+ try {
44
+ result = run();
45
+ } catch (error) {
46
+ this.recordError(error, description);
47
+ return;
48
+ }
49
+ if (result instanceof Promise || typeof result === 'object' && result !== null && 'then' in result) {
50
+ const promise = Promise.resolve(result).then(() => undefined, error => this.recordError(error, description)).finally(() => {
51
+ _classPrivateFieldGet(_promises, this).delete(promise);
52
+ });
53
+ _classPrivateFieldGet(_promises, this).add(promise);
54
+ }
55
+ }
56
+ resolved() {
57
+ if (_classPrivateFieldGet(_resolving, this) !== undefined) return _classPrivateFieldGet(_resolving, this);
58
+ _classPrivateFieldSet(_resolving, this, this.resolvePending().finally(() => {
59
+ _classPrivateFieldSet(_resolving, this, undefined);
60
+ }));
61
+ return _classPrivateFieldGet(_resolving, this);
62
+ }
63
+ async resolvePending() {
64
+ let passes = 0;
65
+ while (!_classPrivateFieldGet(_disposed, this) && (_classPrivateFieldGet(_tasks, this).length > 0 || _classPrivateFieldGet(_updates, this).size > 0 || _classPrivateFieldGet(_promises, this).size > 0)) {
66
+ passes++;
67
+ if (passes > this.maxPasses) {
68
+ throw new Error(`Tungsten testing scheduler exceeded ${this.maxPasses} passes. ` + 'A component lifecycle may be continuously queueing updates.');
69
+ }
70
+ const tasks = _classPrivateFieldGet(_tasks, this).splice(0);
71
+ for (const task of tasks) await this.run(task);
72
+ const updates = [..._classPrivateFieldGet(_updates, this).values()];
73
+ _classPrivateFieldGet(_updates, this).clear();
74
+ for (const update of updates) await this.run(update);
75
+ if (_classPrivateFieldGet(_promises, this).size > 0) {
76
+ await Promise.all([..._classPrivateFieldGet(_promises, this)]);
77
+ }
78
+ this.throwRecordedError();
79
+ }
80
+ this.throwRecordedError();
81
+ }
82
+ async run(work) {
83
+ try {
84
+ await work.run();
85
+ } catch (error) {
86
+ this.recordError(error, work.description);
87
+ }
88
+ }
89
+ recordError(error, description) {
90
+ if (_classPrivateFieldGet(_error, this) !== undefined) return;
91
+ const message = error instanceof Error ? error.message : String(error);
92
+ _classPrivateFieldSet(_error, this, new Error(`Tungsten ${description} failed: ${message}`, {
93
+ cause: error
94
+ }));
95
+ }
96
+ throwRecordedError() {
97
+ if (_classPrivateFieldGet(_error, this) !== undefined) {
98
+ const error = _classPrivateFieldGet(_error, this);
99
+ _classPrivateFieldSet(_error, this, undefined);
100
+ throw error;
101
+ }
102
+ }
103
+ cancelPending() {
104
+ _classPrivateFieldGet(_updates, this).clear();
105
+ _classPrivateFieldGet(_tasks, this).length = 0;
106
+ }
107
+ dispose() {
108
+ _classPrivateFieldSet(_disposed, this, true);
109
+ _classPrivateFieldGet(_updates, this).clear();
110
+ _classPrivateFieldGet(_tasks, this).length = 0;
111
+ _classPrivateFieldGet(_promises, this).clear();
112
+ }
113
+ }
@@ -3,13 +3,16 @@ import { ContentNode, ContentNodeHtml, ContentNodeComponentAny } from '../Conten
3
3
  import { Instance } from '../Instance/Instance.js';
4
4
  import { TungstenElement } from '../TungstenElement.js';
5
5
  import { AnyComponent } from '../AnyComponent.js';
6
- import { RenderedContentNodeComponent } from '../RenderedContentNode.js';
6
+ import { $ContentNull } from '../symbols.js';
7
+ import { RenderedContentNode, RenderedContentNodeComponent } from '../RenderedContentNode.js';
7
8
  import { UpdateResult } from './UpdateResult.js';
9
+ import type { TungstenBaseComponentType } from '../Components.jsx';
8
10
  export type TungstenHTMLElement = HTMLElement & {
9
11
  __tungsten_click_handler: (this: HTMLElement, ev: MouseEvent) => any;
10
12
  [key: string]: unknown;
11
13
  };
12
14
  export declare function integrateElementUpdateVdom(element: AnyComponent, newContent: ContentNode): Promise<UpdateResult>;
15
+ export declare function deleteNodeIfRendered(node: $ContentNull | RenderedContentNode): void;
13
16
  export declare function processHtmlNode(node: ContentNodeHtml, parentNode: ContentNode): void;
14
17
  type CreateTungstenComponentArgs = {
15
18
  parent: TungstenElement;
@@ -18,5 +21,12 @@ type CreateTungstenComponentArgs = {
18
21
  domPointer: DomPointer;
19
22
  };
20
23
  export declare function createTungstenComponent({ parent, instance, node, domPointer }: CreateTungstenComponentArgs): Promise<RenderedContentNodeComponent>;
24
+ export type MountedTungstenRoot<ComponentType extends TungstenBaseComponentType<any, any>> = {
25
+ component: InstanceType<ComponentType>;
26
+ openingComment: Comment;
27
+ closingComment: Comment;
28
+ };
29
+ export declare function createTungstenRootComponent<ComponentType extends TungstenBaseComponentType<any, any>>(RootComponent: ComponentType, props: InstanceType<ComponentType>['props'], routeParams: Record<string, string> | undefined, routeData: unknown, instance: Instance, container: HTMLElement): Promise<MountedTungstenRoot<ComponentType>>;
30
+ export declare function deleteTungstenRoot(root: MountedTungstenRoot<TungstenBaseComponentType<any, any>>): void;
21
31
  export {};
22
32
  //# sourceMappingURL=integrateUpdateVdom.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"integrateUpdateVdom.d.ts","sourceRoot":"","sources":["../../src/update/integrateUpdateVdom.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EACH,WAAW,EAAwC,eAAe,EAElE,uBAAuB,EAG1B,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAKlD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAKjD,OAAO,EAKyB,4BAA4B,EAI3D,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAYhD,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG;IAC5C,wBAAwB,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,KAAK,GAAG,CAAA;IACpE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACzB,CAAA;AAYD,wBAAsB,0BAA0B,CAC5C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,GAC/C,OAAO,CAAC,YAAY,CAAC,CA0GvB;AAkmBD,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,QAkK7E;AAwUD,KAAK,2BAA2B,GAAG;IAC/B,MAAM,EAAE,eAAe,CAAA;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,uBAAuB,CAAC;IAE9B,UAAU,EAAE,UAAU,CAAA;CACzB,CAAA;AACD,wBAAsB,uBAAuB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,2BAA2B,GAC3G,OAAO,CAAC,4BAA4B,CAAC,CAU1C"}
1
+ {"version":3,"file":"integrateUpdateVdom.d.ts","sourceRoot":"","sources":["../../src/update/integrateUpdateVdom.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EACH,WAAW,EAAwC,eAAe,EAElE,uBAAuB,EAG1B,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAKlD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAGjD,OAAO,EAAE,YAAY,EAAgB,MAAM,eAAe,CAAA;AAE1D,OAAO,EACe,mBAAmB,EAIT,4BAA4B,EAI3D,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAUhD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAGlE,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG;IAC5C,wBAAwB,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,KAAK,GAAG,CAAA;IACpE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACzB,CAAA;AAYD,wBAAsB,0BAA0B,CAC5C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,GAC/C,OAAO,CAAC,YAAY,CAAC,CA0GvB;AA+fD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,mBAAmB,QAuC5E;AAgED,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,QAkK7E;AA6VD,KAAK,2BAA2B,GAAG;IAC/B,MAAM,EAAE,eAAe,CAAA;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,uBAAuB,CAAC;IAE9B,UAAU,EAAE,UAAU,CAAA;CACzB,CAAA;AACD,wBAAsB,uBAAuB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,2BAA2B,GAC3G,OAAO,CAAC,4BAA4B,CAAC,CAU1C;AAED,MAAM,MAAM,mBAAmB,CAC3B,aAAa,SAAS,yBAAyB,CAAC,GAAG,EAAE,GAAG,CAAC,IACzD;IACA,SAAS,EAAE,YAAY,CAAC,aAAa,CAAC,CAAA;IACtC,cAAc,EAAE,OAAO,CAAA;IACvB,cAAc,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED,wBAAsB,2BAA2B,CAC7C,aAAa,SAAS,yBAAyB,CAAC,GAAG,EAAE,GAAG,CAAC,EAEzD,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAC3C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAC/C,SAAS,EAAE,OAAO,EAClB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,WAAW,GACvB,OAAO,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAgD7C;AAED,wBAAgB,kBAAkB,CAC9B,IAAI,EAAE,mBAAmB,CAAC,yBAAyB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAC/D,IAAI,CAON"}
@@ -393,7 +393,7 @@ async function updateHtmlElement(tungstenElement, instance, newNode, oldNode, do
393
393
  debug('updating html node', newNode[$type]);
394
394
  // !!!! update
395
395
  const domNode = oldNode.domNode;
396
- updateAttributes(newNode, oldNode, domNode);
396
+ updateAttributes(tungstenElement, instance, newNode, oldNode, domNode);
397
397
  domPointer.increment();
398
398
  debug(`!!!!dom pointer index is`, domPointer.index, 'after updating html node');
399
399
  // !!! handle children
@@ -477,8 +477,9 @@ function moveDomNode(domNode, domPointer) {
477
477
  //console.log('moving domNode', domNode)
478
478
  if (domPointer.positionOf(domNode) !== domPointer.index) {
479
479
  //console.log('document.activeElement', document.activeElement, domNode == document.activeElement, domNode === document.activeElement)
480
- const hasFocus = domNode === document.activeElement;
481
- const activeElement = document.activeElement;
480
+ const ownerDocument = domNode.ownerDocument;
481
+ const hasFocus = domNode === ownerDocument.activeElement;
482
+ const activeElement = ownerDocument.activeElement;
482
483
  if (domPointer.index >= domPointer.parent.childNodes.length) {
483
484
  //console.log('appending', domNode)
484
485
  domPointer.parent.appendChild(domNode);
@@ -493,7 +494,7 @@ function moveDomNode(domNode, domPointer) {
493
494
  }
494
495
  domPointer.increment();
495
496
  }
496
- function deleteNodeIfRendered(node) {
497
+ export function deleteNodeIfRendered(node) {
497
498
  //console.log('-deleteNodeIfRendered', node)
498
499
  debug('-deleteNodeIfRendered', node);
499
500
  if (node !== $contentNull && !RenderedContentNodeIsNonRendered(node)) {
@@ -511,7 +512,10 @@ function deleteNodeIfRendered(node) {
511
512
  throwError('deleteNodeIfRendered', 'has been asked to remove the head node, this should not occur');
512
513
  } else if (RenderedContentNodeSingleIsHtml(node)) {
513
514
  debug('delete node html', node);
514
- //node
515
+ deleteNodeIfRendered(node.renderedChildren);
516
+ if ('ref' in node[$props] && node[$props].ref?.current === node.domNode) {
517
+ node[$props].ref.current = null;
518
+ }
515
519
  node.domNode.remove();
516
520
  } else if (RenderedContentNodeSingleIsComponent(node)) {
517
521
  //console.log('***delete component', node.element.__currentContent)
@@ -578,7 +582,7 @@ function createComment({
578
582
  }) {
579
583
  debug('-createComment');
580
584
  //console.log('createComment', text)
581
- const comment = document.createComment(text);
585
+ const comment = documentFromParent(domPointer.parent).createComment(text);
582
586
  if (domPointer.index >= domPointer.parent.childNodes.length) {
583
587
  domPointer.parent.appendChild(comment);
584
588
  } else {
@@ -727,7 +731,7 @@ function createLiteral(value, domPointer) {
727
731
  const text = String(value);
728
732
  debug('dom parent', domPointer.parent);
729
733
  debug('dom index', domPointer.index);
730
- const textNode = document.createTextNode(text);
734
+ const textNode = documentFromParent(domPointer.parent).createTextNode(text);
731
735
  if (domPointer.parent.childNodes.length === domPointer.index) {
732
736
  domPointer.parent.appendChild(textNode);
733
737
  } else {
@@ -752,8 +756,8 @@ async function createHtmlElement(tungstenElement, instance, node, domPointer, pa
752
756
  //console.log('Process HTML El')
753
757
  processHtmlNode(node, parentNode);
754
758
  debug('-createHtmlElement', node);
755
- const htmlEl = document.createElement(node[$type]);
756
- addAttributes(node, htmlEl);
759
+ const htmlEl = documentFromParent(domPointer.parent).createElement(node[$type]);
760
+ addAttributes(tungstenElement, instance, node, htmlEl);
757
761
  if (node[$type] === 'head') {
758
762
  for (const el of instance.persistentHeadChildren) {
759
763
  htmlEl.appendChild(el.cloneNode(true));
@@ -801,7 +805,7 @@ async function createHtmlElement(tungstenElement, instance, node, domPointer, pa
801
805
  function removeAttribute(htmlElement, attr) {
802
806
  if (attr === 'checked') htmlElement.checked = false;else htmlElement.removeAttribute(attr);
803
807
  }
804
- function addAttributes(node, domNode) {
808
+ function addAttributes(tungstenElement, instance, node, domNode) {
805
809
  //console.log('-addAttributes', node)
806
810
  const attributes = processAttributes(node);
807
811
  debug('attributes', attributes);
@@ -812,7 +816,7 @@ function addAttributes(node, domNode) {
812
816
  const eventName = htmlEvents[key];
813
817
  todo('addAttributes() warning - ensure type safety of event names');
814
818
  todo('addAttributes() warning - ensure type safety of event listener'); // we need to set all possible event listeners to take only EventListener funcs
815
- const handler = attributes[key];
819
+ const handler = makeEventListener(tungstenElement, instance, eventName, attributes[key]);
816
820
  // // if its a button without type="submit", prevent default to stop it from submitting forms
817
821
  // const handler = (key === 'onClick' && node[$type] === 'button' && node[$props].type !== 'submit')
818
822
  // ? (event: Event) => { event.preventDefault(); return (attributes[key] as EventListener)(event) }
@@ -835,8 +839,7 @@ function addAttributes(node, domNode) {
835
839
  domNode.__tungsten_oldAttributes = attributes;
836
840
  return attributes;
837
841
  }
838
- const clickEvents = [['onClick', 'click']];
839
- function updateAttributes(node, oldNode, domNodeHTMLElement) {
842
+ function updateAttributes(tungstenElement, instance, node, oldNode, domNodeHTMLElement) {
840
843
  //console.log('-updateAttributes node', node)
841
844
  //console.log('domNodeHTMLElement', domNodeHTMLElement)
842
845
  const domNode = domNodeHTMLElement;
@@ -853,8 +856,14 @@ function updateAttributes(node, oldNode, domNodeHTMLElement) {
853
856
  debug('oldAttributes', oldAttributes);
854
857
  for (const attr in oldAttributes) {
855
858
  if (!(attr in newAttributes)) {
856
- debug('remove attr', attr);
857
- removeAttribute(domNode, attr);
859
+ if (StringIsHtmlEvent(attr)) {
860
+ const eventName = htmlEvents[attr];
861
+ const listener = domNode[htmlEventHandlerKey(eventName)];
862
+ if (listener !== undefined) domNode.removeEventListener(eventName, listener);
863
+ } else {
864
+ debug('remove attr', attr);
865
+ removeAttribute(domNode, attr);
866
+ }
858
867
  }
859
868
  }
860
869
  // for (const attr of domNode.attributes) {
@@ -863,57 +872,48 @@ function updateAttributes(node, oldNode, domNodeHTMLElement) {
863
872
  // removeAttribute(domNode, attr.name)
864
873
  // }
865
874
  // }
866
- //if (attributes.onClick !== undefined)
867
- for (const [event, eventName] of clickEvents) {
868
- if (newAttributes[event] === undefined) {
869
- debug('remove event', eventName);
870
- //!!
871
- domNode.removeEventListener(eventName, domNode[htmlEventHandlerKey(eventName)]);
872
- }
873
- }
874
875
  for (const key in newAttributes) {
875
- switch (key) {
876
- case 'onClick':
877
- {
878
- debug('add onclick');
879
- const clickHandlerKey = htmlEventHandlerKey('click');
880
- debug('domNode.' + clickHandlerKey, domNode[clickHandlerKey]);
881
- if ('clickHandlerKey' in domNode) {
882
- domNode.removeEventListener('click', domNode[clickHandlerKey]);
883
- }
884
- // if its a button without type="submit", prevent default to stop it from submitting forms
885
- const handler = newAttributes[key];
886
- // const handler = (key === 'onClick' && node[$type] === 'button' && node[$props].type !== 'submit')
887
- // ? (event: Event) => { event.preventDefault(); return (attributes[key] as EventListener)(event) }
888
- // : attributes[key] as EventListener
889
- todo(`Ensure type safety on event listener`);
890
- domNode.addEventListener('click', handler);
891
- domNode[clickHandlerKey] = handler;
892
- debug('added event handler', domNode[clickHandlerKey]);
893
- break;
894
- }
895
- default:
896
- {
897
- //console.log('add/set attr', domNode, key, attributes[key], String(attributes[key]))
898
- //if (domNode.tagName === 'input' || domNode.tagName === 'INPUT') continue
899
- // try to set value directly for inputs that aren't updating with the below code
900
- if (key === 'value') {
901
- domNode.value = String(newAttributes[key]);
902
- } else {
903
- if (typeof newAttributes[key] === 'boolean') {
904
- if (newAttributes[key]) domNode.setAttribute(key, '');else removeAttribute(domNode, key);
905
- } else if (newAttributes[key] === undefined || newAttributes[key] === null) {
906
- removeAttribute(domNode, key);
907
- } else {
908
- domNode.setAttribute(key, String(newAttributes[key]));
909
- }
910
- }
876
+ if (StringIsHtmlEvent(key)) {
877
+ const eventName = htmlEvents[key];
878
+ const listenerKey = htmlEventHandlerKey(eventName);
879
+ const oldHandler = oldAttributes?.[key];
880
+ if (oldHandler !== newAttributes[key]) {
881
+ const oldListener = domNode[listenerKey];
882
+ if (oldListener !== undefined) domNode.removeEventListener(eventName, oldListener);
883
+ const listener = makeEventListener(tungstenElement, instance, eventName, newAttributes[key]);
884
+ domNode.addEventListener(eventName, listener);
885
+ domNode[listenerKey] = listener;
886
+ }
887
+ } else {
888
+ //console.log('add/set attr', domNode, key, attributes[key], String(attributes[key]))
889
+ //if (domNode.tagName === 'input' || domNode.tagName === 'INPUT') continue
890
+ // try to set value directly for inputs that aren't updating with the below code
891
+ if (key === 'value') {
892
+ domNode.value = String(newAttributes[key]);
893
+ } else {
894
+ if (typeof newAttributes[key] === 'boolean') {
895
+ if (newAttributes[key]) domNode.setAttribute(key, '');else removeAttribute(domNode, key);
896
+ } else if (newAttributes[key] === undefined || newAttributes[key] === null) {
897
+ removeAttribute(domNode, key);
898
+ } else {
899
+ domNode.setAttribute(key, String(newAttributes[key]));
911
900
  }
901
+ }
912
902
  }
913
903
  }
914
904
  domNode.__tungsten_oldAttributes = newAttributes;
915
905
  return newAttributes;
916
906
  }
907
+ function documentFromParent(parent) {
908
+ if (parent.nodeType === 9) return parent;
909
+ if (parent.ownerDocument === null) throw new Error('Tungsten DOM parent has no owner document.');
910
+ return parent.ownerDocument;
911
+ }
912
+ function makeEventListener(tungstenElement, instance, eventName, handler) {
913
+ return event => {
914
+ instance.trackWork(() => handler(event), `${tungstenElement.constructor.name} ${eventName} event handler`);
915
+ };
916
+ }
917
917
  // const ignoreAttributes = {
918
918
  // 'ref': true,
919
919
  // //'key': true
@@ -1001,6 +1001,64 @@ export async function createTungstenComponent({
1001
1001
  // need to set a domRegion
1002
1002
  // element.__domRegion = domRegion
1003
1003
  }
1004
+ export async function createTungstenRootComponent(RootComponent, props, routeParams, routeData, instance, container) {
1005
+ const domPointer = new DomPointer(container, container.childNodes.length);
1006
+ const domStartIndex = domPointer.index;
1007
+ const component = new RootComponent({
1008
+ props,
1009
+ routeParams,
1010
+ routeData,
1011
+ instance,
1012
+ parentElement: null
1013
+ });
1014
+ try {
1015
+ await component.__init();
1016
+ const content = await component.__initialContent();
1017
+ const componentName = RootComponent.displayName ?? RootComponent.name;
1018
+ const openingComment = createComment({
1019
+ text: printComponentNamesInSource ? componentName : '',
1020
+ domPointer
1021
+ });
1022
+ const renderedContent = await createNode({
1023
+ tungstenElement: component,
1024
+ instance,
1025
+ newNode: content,
1026
+ domPointer,
1027
+ parentNode: null
1028
+ });
1029
+ const closingComment = createComment({
1030
+ text: printComponentNamesInSource ? `/${componentName}` : '',
1031
+ domPointer
1032
+ });
1033
+ component.__domRegion = new DomRegion(container, domStartIndex, domPointer.index - domStartIndex);
1034
+ component.__currentContent = renderedContent;
1035
+ component.__didMount();
1036
+ return {
1037
+ component,
1038
+ openingComment,
1039
+ closingComment
1040
+ };
1041
+ } catch (error) {
1042
+ component.__delete();
1043
+ while (container.childNodes.length > domStartIndex) {
1044
+ container.removeChild(container.childNodes[domStartIndex]);
1045
+ }
1046
+ component.__deleted();
1047
+ throw error;
1048
+ }
1049
+ }
1050
+ export function deleteTungstenRoot(root) {
1051
+ const {
1052
+ component,
1053
+ openingComment,
1054
+ closingComment
1055
+ } = root;
1056
+ component.__delete();
1057
+ deleteNodeIfRendered(component.__currentContent);
1058
+ openingComment.remove();
1059
+ closingComment.remove();
1060
+ component.__deleted();
1061
+ }
1004
1062
  let cc = 0; // debugging aid
1005
1063
  async function createTungstenClassComponent(parent, instance, node, domPointer) {
1006
1064
  //console.log('creating tung class comp', node[$type].name)
@@ -1,7 +1,7 @@
1
- import { TungstenSimpleComponent } from './Components.jsx';
2
- import { type TungstenElementRef } from './createRef.js';
3
- import type { CssNames } from './CssNames.js';
4
- import type { ContentNode } from './ContentNode.js';
1
+ import { TungstenSimpleComponent } from '../Components.jsx';
2
+ import { type TungstenElementRef } from '../createRef.js';
3
+ import type { CssNames } from '../CssNames.js';
4
+ import type { ContentNode } from '../ContentNode.js';
5
5
  export type ReactZoneComponent<Props extends object> = ((props: Props) => unknown) | (new (...args: any[]) => unknown);
6
6
  type ReactZoneRoot = {
7
7
  render(children: unknown): void;
@@ -50,4 +50,4 @@ export declare class ReactZone<Props extends object> extends TungstenSimpleCompo
50
50
  private reportError;
51
51
  }
52
52
  export {};
53
- //# sourceMappingURL=react-zone.d.ts.map
53
+ //# sourceMappingURL=react.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/zones/react.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAoB,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAC3E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAGpD,MAAM,MAAM,kBAAkB,CAAC,KAAK,SAAS,MAAM,IAC7C,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,GAC3B,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,CAAA;AAEvC,KAAK,aAAa,GAAG;IACjB,MAAM,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAA;IAC/B,OAAO,IAAI,IAAI,CAAA;CAClB,CAAA;AAED,KAAK,kBAAkB,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,KAAK,OAAO,CAAA;AAE7F,MAAM,MAAM,gBAAgB,GAAG;IAC3B,KAAK,EAAE;QACH,SAAS,EAAE,GAAG,CAAA;QACd,aAAa,EAAE,kBAAkB,CAAA;KACpC,CAAA;IACD,MAAM,EAAE;QACJ,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,CAAA;QACxC,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,aAAa,CAAA;KAC/D,CAAA;IACD,MAAM,EAAE;QACJ,cAAc,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAA;KAC5C,CAAA;CACJ,CAAA;AAED,MAAM,MAAM,cAAc,CAAC,KAAK,SAAS,MAAM,IAAI;IAC/C,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAA;IACpC,KAAK,EAAE,KAAK,CAAA;IACZ,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,QAAQ,CAAA;IACjB,OAAO,EAAE,gBAAgB,CAAA;CAC5B,CAAA;AAED,qBAAa,SAAS,CAAC,KAAK,SAAS,MAAM,CAAE,SAAQ,uBAAuB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC/F,OAAO,EAAE,kBAAkB,CAAC,cAAc,CAAC,CAAqC;IAChF,SAAS,EAAE,aAAa,GAAG,SAAS,CAAA;IACpC,kBAAkB,EAAE,kBAAkB,GAAG,SAAS,CAAA;IAClD,aAAa,EAAE,OAAO,GAAG,SAAS,CAAA;IAClC,SAAS,UAAQ;IAEjB,OAAO,QAAa,OAAO,CAAC,WAAW,CAAC,CAsBvC;IAED,iBAAiB,QAAO,IAAI,CAG3B;IAED,kBAAkB,QAAO,IAAI,CAE5B;IAED,oBAAoB,QAAO,IAAI,CAM9B;IAED,OAAO,CAAC,UAAU;IAyBlB,OAAO,CAAC,mBAAmB;IA2B3B,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,WAAW;CAOtB"}
@@ -1,9 +1,9 @@
1
1
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
2
2
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
3
3
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
4
- import { TungstenSimpleComponent } from "./Components.js";
5
- import { createElementRef } from "./createRef.js";
6
- import { isServer } from "./isServer.js";
4
+ import { TungstenSimpleComponent } from "../Components.js";
5
+ import { createElementRef } from "../createRef.js";
6
+ import { isServer } from "../isServer.js";
7
7
  import { jsx as _jsx } from "tungsten/jsxRuntime.js";
8
8
  export class ReactZone extends TungstenSimpleComponent {
9
9
  constructor(...args) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tungsten",
3
- "version": "0.2.7",
3
+ "version": "0.2.9",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "bin": {
@@ -9,7 +9,8 @@
9
9
  "main": "dist/index.js",
10
10
  "exports": {
11
11
  ".": "./dist/index.js",
12
- "./react-zone": "./dist/react-zone.js",
12
+ "./react-zone": "./dist/zones/react.js",
13
+ "./testing": "./dist/testing/index.js",
13
14
  "./*": "./dist/*",
14
15
  "./types/*": "./types/*"
15
16
  },
@@ -123,13 +124,14 @@
123
124
  "eslint-import-resolver-typescript": "^2.7.1",
124
125
  "eslint-plugin-import": "^2.32.0",
125
126
  "eslint-plugin-no-type-assertion": "^1.3.0",
127
+ "happy-dom": "^20.10.6",
126
128
  "progress-webpack-plugin": "^1.0.16",
127
129
  "prop-types": "^15.8.1",
128
130
  "rimraf": "^5.0.10",
129
131
  "rmrf": "^2.0.4",
130
132
  "rollup-plugin-visualizer": "^5.14.0",
131
133
  "supertest": "^6.3.4",
132
- "sxy-test-runner": "^1.4.3",
134
+ "sxy-test-runner": "^2.2.2",
133
135
  "sxy-types": "^1.0.23",
134
136
  "typescript": "^6.0.3",
135
137
  "webpack-bundle-analyzer": "^4.10.2",
@@ -161,6 +163,7 @@
161
163
  "build-ts-once": "tsc",
162
164
  "build-babel": "babel intermed --out-dir dist --ignore \"**/*.cjs\" --copy-files --config-file ./babel.framework.config.js --watch",
163
165
  "build-babel-once": "babel intermed --out-dir dist --ignore \"**/*.cjs\" --copy-files --config-file ./babel.framework.config.js",
164
- "test": "sxy-test-runner"
166
+ "test": "sxy-test-runner",
167
+ "test-once": "sxy-test-runner once"
165
168
  }
166
169
  }