@web-atoms/core 2.6.21 → 2.6.25

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 (137) hide show
  1. package/dist/App.d.ts +1 -1
  2. package/dist/App.d.ts.map +1 -1
  3. package/dist/App.js.map +1 -1
  4. package/dist/core/SingleInvoker.d.ts.map +1 -1
  5. package/dist/core/SingleInvoker.js.map +1 -1
  6. package/dist/core/sleep.js.map +1 -1
  7. package/dist/tsconfig.tsbuildinfo +1 -1
  8. package/dist-esm/App.d.ts +1 -1
  9. package/dist-esm/App.d.ts.map +1 -1
  10. package/dist-esm/App.js +231 -235
  11. package/dist-esm/App.js.map +1 -1
  12. package/dist-esm/Atom.js +93 -96
  13. package/dist-esm/MockApp.js +17 -18
  14. package/dist-esm/Pack.js +1 -3
  15. package/dist-esm/core/AtomBinder.js +189 -187
  16. package/dist-esm/core/AtomComponent.js +479 -502
  17. package/dist-esm/core/AtomDispatcher.js +46 -48
  18. package/dist-esm/core/AtomDisposableList.js +24 -25
  19. package/dist-esm/core/AtomEnumerator.js +15 -16
  20. package/dist-esm/core/AtomList.js +193 -192
  21. package/dist-esm/core/AtomLoader.js +229 -215
  22. package/dist-esm/core/AtomMap.js +7 -8
  23. package/dist-esm/core/AtomOnce.js +22 -24
  24. package/dist-esm/core/AtomSelectableList.js +240 -243
  25. package/dist-esm/core/AtomUri.js +70 -72
  26. package/dist-esm/core/AtomWatcher.js +105 -111
  27. package/dist-esm/core/Bind.js +271 -269
  28. package/dist-esm/core/BindableProperty.js +26 -27
  29. package/dist-esm/core/CancelTokenFactory.js +21 -24
  30. package/dist-esm/core/Color.js +1 -2
  31. package/dist-esm/core/Colors.js +545 -231
  32. package/dist-esm/core/Command.js +236 -223
  33. package/dist-esm/core/Defer.js +21 -22
  34. package/dist-esm/core/EventScope.js +96 -88
  35. package/dist-esm/core/ExpressionParser.js +132 -144
  36. package/dist-esm/core/ExtendControl.js +7 -8
  37. package/dist-esm/core/FormattedError.js +7 -8
  38. package/dist-esm/core/FormattedString.js +4 -5
  39. package/dist-esm/core/Hacks.js +41 -42
  40. package/dist-esm/core/IFetchEvent.js +1 -2
  41. package/dist-esm/core/IScreen.js +1 -2
  42. package/dist-esm/core/IValueConverter.js +1 -2
  43. package/dist-esm/core/InheritedProperty.js +61 -63
  44. package/dist-esm/core/InjectProperty.js +12 -13
  45. package/dist-esm/core/KeyValuePairs.js +1 -2
  46. package/dist-esm/core/Markdown.js +14 -17
  47. package/dist-esm/core/MarkdownError.js +6 -7
  48. package/dist-esm/core/PropertyBinding.js +1 -2
  49. package/dist-esm/core/PropertyMap.js +28 -27
  50. package/dist-esm/core/Route.js +149 -148
  51. package/dist-esm/core/SingleInvoker.d.ts.map +1 -1
  52. package/dist-esm/core/SingleInvoker.js +32 -35
  53. package/dist-esm/core/SingleInvoker.js.map +1 -1
  54. package/dist-esm/core/StringHelper.js +49 -51
  55. package/dist-esm/core/TransientDisposable.js +14 -16
  56. package/dist-esm/core/WatchProperty.js +18 -17
  57. package/dist-esm/core/WebImage.js +7 -8
  58. package/dist-esm/core/XNode.js +134 -117
  59. package/dist-esm/core/sleep.js +21 -24
  60. package/dist-esm/core/sleep.js.map +1 -1
  61. package/dist-esm/core/types.js +102 -103
  62. package/dist-esm/di/DISingleton.js +7 -5
  63. package/dist-esm/di/DITransient.js +7 -5
  64. package/dist-esm/di/IMockOrInject.js +1 -2
  65. package/dist-esm/di/IServiceProvider.js +1 -2
  66. package/dist-esm/di/Inject.js +67 -67
  67. package/dist-esm/di/Register.js +25 -26
  68. package/dist-esm/di/RegisterScoped.js +4 -3
  69. package/dist-esm/di/RegisterSingleton.js +4 -3
  70. package/dist-esm/di/ServiceCollection.js +38 -37
  71. package/dist-esm/di/ServiceProvider.js +94 -94
  72. package/dist-esm/di/TypeKey.js +13 -12
  73. package/dist-esm/services/BusyIndicatorService.js +7 -11
  74. package/dist-esm/services/CacheService.js +54 -62
  75. package/dist-esm/services/FetchBuilder.js +327 -278
  76. package/dist-esm/services/JsonService.js +118 -116
  77. package/dist-esm/services/MockNavigationService.js +127 -126
  78. package/dist-esm/services/NavigationService.js +95 -102
  79. package/dist-esm/services/ReferenceService.js +30 -33
  80. package/dist-esm/services/http/AjaxOptions.js +1 -3
  81. package/dist-esm/services/http/JsonError.js +16 -15
  82. package/dist-esm/services/http/RestService.js +314 -323
  83. package/dist-esm/style/StyleRule.js +1 -2
  84. package/dist-esm/test.js +0 -1
  85. package/dist-esm/tsconfig.esm.tsbuildinfo +1 -1
  86. package/dist-esm/unit/AtomTest.js +10 -11
  87. package/dist-esm/view-model/Action.js +258 -223
  88. package/dist-esm/view-model/AtomViewModel.js +234 -232
  89. package/dist-esm/view-model/AtomWindowViewModel.js +13 -14
  90. package/dist-esm/view-model/BindableUrlParameter.js +7 -8
  91. package/dist-esm/view-model/Delay.js +21 -25
  92. package/dist-esm/view-model/Disposable.js +28 -29
  93. package/dist-esm/view-model/Load.js +72 -73
  94. package/dist-esm/view-model/Once.js +33 -35
  95. package/dist-esm/view-model/baseTypes.js +4 -5
  96. package/dist-esm/view-model/bindPromise.js +24 -27
  97. package/dist-esm/view-model/bindProperty.js +3 -4
  98. package/dist-esm/view-model/bindUrlParameter.js +39 -43
  99. package/dist-esm/web/controls/AtomComboBox.js +56 -63
  100. package/dist-esm/web/controls/AtomControl.js +485 -490
  101. package/dist-esm/web/controls/AtomGridSplitter.js +57 -50
  102. package/dist-esm/web/controls/AtomGridView.js +230 -222
  103. package/dist-esm/web/controls/AtomItemsControl.js +677 -688
  104. package/dist-esm/web/controls/AtomPage.js +6 -7
  105. package/dist-esm/web/controls/AtomTemplate.js +1 -3
  106. package/dist-esm/web/controls/AtomTemplateControl.js +28 -29
  107. package/dist-esm/web/controls/AtomViewStack.js +19 -20
  108. package/dist-esm/web/core/AtomUI.js +200 -200
  109. package/dist-esm/web/core/Encoder.js +142 -152
  110. package/dist-esm/web/core/HtmlNode.js +141 -139
  111. package/dist-esm/web/images/Busy.js +1 -2
  112. package/dist-esm/web/images/BusyDataUrl.js +2 -869
  113. package/dist-esm/web/images/Button.js +1 -2
  114. package/dist-esm/web/images/ButtonDataUrl.js +2 -30
  115. package/dist-esm/web/images/CloseButton.js +1 -2
  116. package/dist-esm/web/images/CloseButtonDataUrl.js +2 -30
  117. package/dist-esm/web/images/CloseButtonHover.js +1 -2
  118. package/dist-esm/web/images/CloseButtonHoverDataUrl.js +2 -24
  119. package/dist-esm/web/services/LastTarget.js +31 -29
  120. package/dist-esm/web/services/MarkdownService.js +19 -31
  121. package/dist-esm/web/services/NotificationPopup.js +28 -21
  122. package/dist-esm/web/services/PopupService.js +512 -478
  123. package/dist-esm/web/services/PopupWindow.js +266 -247
  124. package/dist-esm/web/styles/AtomAlertWindowStyle.js +39 -40
  125. package/dist-esm/web/styles/AtomFrameStyle.js +15 -16
  126. package/dist-esm/web/styles/AtomNotificationStyle.js +19 -20
  127. package/dist-esm/web/styles/AtomPageLinkStyle.js +11 -12
  128. package/dist-esm/web/styles/AtomPopupStyle.js +9 -10
  129. package/dist-esm/web/styles/AtomStyle.js +61 -64
  130. package/dist-esm/web/styles/AtomStyleSheet.js +50 -51
  131. package/dist-esm/web/styles/AtomWindowStyle.js +116 -117
  132. package/dist-esm/web/styles/IStyleDeclaration.js +1 -2
  133. package/dist-esm/web/styles/StyleBuilder.js +79 -80
  134. package/package.json +3 -1
  135. package/src/App.ts +1 -1
  136. package/src/core/SingleInvoker.ts +1 -1
  137. package/src/core/sleep.ts +1 -1
@@ -6,236 +6,250 @@ import { displayRouteSymbol } from "./Command.js";
6
6
  import { getOwnInheritedProperty } from "./InheritedProperty.js";
7
7
  import { CancelToken } from "./types.js";
8
8
  export class AtomLoader {
9
- static { this.id = 1; }
10
- static async load(url, app) {
11
- if (url instanceof AtomUri) {
12
- if (url.host === "reference") {
13
- const r = app.get(ReferenceService).get(url.path);
14
- if (!r) {
15
- throw new Error("reference not found");
16
- }
17
- return r.consume();
18
- }
19
- if (url.host === "class") {
20
- const r = app.get(ReferenceService).get(url.path);
21
- if (!r) {
22
- throw new Error("reference not found");
23
- }
24
- return app.resolve(r.consume(), true);
25
- }
26
- url = url.path;
9
+ static {
10
+ this.id = 1;
11
+ }
12
+ static async load(url, app) {
13
+ if (url instanceof AtomUri) {
14
+ if (url.host === "reference") {
15
+ const r = app.get(ReferenceService).get(url.path);
16
+ if (!r) {
17
+ throw new Error("reference not found");
27
18
  }
28
- const obj = app.resolve(url, true);
29
- return obj;
19
+ return r.consume();
20
+ }
21
+ if (url.host === "class") {
22
+ const r = app.get(ReferenceService).get(url.path);
23
+ if (!r) {
24
+ throw new Error("reference not found");
25
+ }
26
+ return app.resolve(r.consume(), true);
27
+ }
28
+ url = url.path;
30
29
  }
31
- static async loadView(url, app, hookCloseEvents, vmFactory) {
32
- const env_1 = { stack: [], error: void 0, hasError: false };
33
- try {
34
- const _busy = __addDisposableResource(env_1, app.createBusyIndicator({
35
- title: url.toString(),
36
- description: `Loading View ${url}`
37
- }), false);
38
- const view = await AtomLoader.load(url, app);
39
- let vm = view.viewModel;
40
- if (!vm) {
41
- if (!vmFactory) {
42
- return { view };
43
- }
44
- vm = vmFactory();
45
- view.viewModel = vm;
30
+ const obj = app.resolve(url, true);
31
+ return obj;
32
+ }
33
+ static async loadView(url, app, hookCloseEvents, vmFactory) {
34
+ const env_1 = {
35
+ stack: [],
36
+ error: void 0,
37
+ hasError: false
38
+ };
39
+ try {
40
+ const _busy = __addDisposableResource(env_1, app.createBusyIndicator({
41
+ title: url.toString(),
42
+ description: `Loading View ${url}`
43
+ }), false);
44
+ const view = await AtomLoader.load(url, app);
45
+ let vm = view.viewModel;
46
+ if (!vm) {
47
+ if (!vmFactory) {
48
+ return {
49
+ view
50
+ };
51
+ }
52
+ vm = vmFactory();
53
+ view.viewModel = vm;
54
+ }
55
+ if ("parameters" in view) {
56
+ vm = view.parameters;
57
+ }
58
+ if (vm) {
59
+ const jsonService = app.get(JsonService);
60
+ for (const key in url.query) {
61
+ if (url.query.hasOwnProperty(key)) {
62
+ const element = url.query[key];
63
+ if (typeof element === "object") {
64
+ vm[key] = jsonService.parse(jsonService.stringify(element));
65
+ continue;
46
66
  }
47
- if ("parameters" in view) {
48
- vm = view.parameters;
67
+ if (/^json\:/.test(key)) {
68
+ const k = key.split(":")[1];
69
+ vm[k] = jsonService.parse(element.toString());
70
+ continue;
49
71
  }
50
- if (vm) {
51
- const jsonService = app.get(JsonService);
52
- for (const key in url.query) {
53
- if (url.query.hasOwnProperty(key)) {
54
- const element = url.query[key];
55
- if (typeof element === "object") {
56
- vm[key] = jsonService.parse(jsonService.stringify(element));
57
- continue;
58
- }
59
- if (/^json\:/.test(key)) {
60
- const k = key.split(":")[1];
61
- vm[k] = jsonService.parse(element.toString());
62
- continue;
63
- }
64
- if (/^ref\:/.test(key)) {
65
- const rs = app.get(ReferenceService);
66
- const v = rs.get(element);
67
- vm[key.split(":", 2)[1]] = v.consume();
68
- continue;
69
- }
70
- try {
71
- vm[key] = element;
72
- }
73
- catch (e) {
74
- console.error(e);
75
- }
76
- }
77
- }
72
+ if (/^ref\:/.test(key)) {
73
+ const rs = app.get(ReferenceService);
74
+ const v = rs.get(element);
75
+ vm[key.split(":", 2)[1]] = v.consume();
76
+ continue;
78
77
  }
79
- if (hookCloseEvents && vm) {
80
- const disposables = view.disposables;
81
- const id = (AtomLoader.id++).toString();
82
- view.id = id;
83
- const returnPromise = new Promise((resolve, reject) => {
84
- disposables.add(app.subscribe(`atom-window-close:${id}`, (m, r) => {
85
- resolve(r);
86
- view.dispose();
87
- }));
88
- disposables.add(app.subscribe(`atom-window-cancel:${id}`, () => {
89
- reject("cancelled");
90
- view.dispose();
91
- }));
92
- });
93
- vm.windowName = id;
94
- view.returnPromise = returnPromise;
95
- return { view, disposables, returnPromise, id };
78
+ try {
79
+ vm[key] = element;
80
+ } catch (e) {
81
+ console.error(e);
96
82
  }
97
- return { view };
98
- }
99
- catch (e_1) {
100
- env_1.error = e_1;
101
- env_1.hasError = true;
102
- }
103
- finally {
104
- __disposeResources(env_1);
83
+ }
105
84
  }
85
+ }
86
+ if (hookCloseEvents && vm) {
87
+ const disposables = view.disposables;
88
+ const id = (AtomLoader.id++).toString();
89
+ view.id = id;
90
+ const returnPromise = new Promise((resolve, reject) => {
91
+ disposables.add(app.subscribe(`atom-window-close:${id}`, (m, r) => {
92
+ resolve(r);
93
+ view.dispose();
94
+ }));
95
+ disposables.add(app.subscribe(`atom-window-cancel:${id}`, () => {
96
+ reject("cancelled");
97
+ view.dispose();
98
+ }));
99
+ });
100
+ vm.windowName = id;
101
+ view.returnPromise = returnPromise;
102
+ return {
103
+ view,
104
+ disposables,
105
+ returnPromise,
106
+ id
107
+ };
108
+ }
109
+ return {
110
+ view
111
+ };
112
+ } catch (e_1) {
113
+ env_1.error = e_1;
114
+ env_1.hasError = true;
115
+ } finally {
116
+ __disposeResources(env_1);
106
117
  }
107
- static async loadClass(url, { title, [displayRouteSymbol]: route, ...parameters } = {}, app) {
108
- const env_2 = { stack: [], error: void 0, hasError: false };
109
- try {
110
- const _busyIndicator = __addDisposableResource(env_2, app.createBusyIndicator({
111
- title: url?.toString(),
112
- description: `Loading View ${url}`
113
- }), false);
114
- const view = await AtomLoader.load(url, app);
115
- const vm = getOwnInheritedProperty(view, "viewModel");
116
- let params;
117
- if ("parameters" in view) {
118
- params = view.parameters;
119
- }
120
- if (!vm) {
121
- params = view.parameters ??= {};
118
+ }
119
+ static async loadClass(url, {
120
+ title,
121
+ [displayRouteSymbol]: route,
122
+ ...parameters
123
+ } = {}, app) {
124
+ const env_2 = {
125
+ stack: [],
126
+ error: void 0,
127
+ hasError: false
128
+ };
129
+ try {
130
+ const _busyIndicator = __addDisposableResource(env_2, app.createBusyIndicator({
131
+ title: url?.toString(),
132
+ description: `Loading View ${url}`
133
+ }), false);
134
+ const view = await AtomLoader.load(url, app);
135
+ const vm = getOwnInheritedProperty(view, "viewModel");
136
+ let params;
137
+ if ("parameters" in view) {
138
+ params = view.parameters;
139
+ }
140
+ if (!vm) {
141
+ params = view.parameters ??= {};
142
+ } else {
143
+ console.warn("ViewModel is deprecated");
144
+ }
145
+ if (title) {
146
+ view.title = title;
147
+ }
148
+ if (params) {
149
+ params[displayRouteSymbol] = route;
150
+ }
151
+ if ((vm || params) && parameters) {
152
+ for (const key in parameters) {
153
+ if (parameters.hasOwnProperty(key)) {
154
+ const element = parameters[key];
155
+ try {
156
+ if (vm) {
157
+ vm[key] = element;
158
+ }
159
+ if (params) {
160
+ params[key] = element;
161
+ }
162
+ } catch (e) {
163
+ console.error(e);
122
164
  }
123
- else {
124
- console.warn("ViewModel is deprecated");
125
- }
126
- if (title) {
127
- view.title = title;
128
- }
129
- if (params) {
130
- params[displayRouteSymbol] = route;
131
- }
132
- if ((vm || params) && parameters) {
133
- for (const key in parameters) {
134
- if (parameters.hasOwnProperty(key)) {
135
- const element = parameters[key];
136
- try {
137
- if (vm) {
138
- vm[key] = element;
139
- }
140
- if (params) {
141
- params[key] = element;
142
- }
143
- }
144
- catch (e) {
145
- console.error(e);
146
- }
147
- }
148
- }
149
- }
150
- view.init?.()
151
- ?.catch((error) => {
152
- if (!CancelToken.isCancelled(error)) {
153
- console.error(error);
154
- }
155
- });
156
- return view;
157
- }
158
- catch (e_2) {
159
- env_2.error = e_2;
160
- env_2.hasError = true;
165
+ }
161
166
  }
162
- finally {
163
- __disposeResources(env_2);
167
+ }
168
+ view.init?.()?.catch(error => {
169
+ if (!CancelToken.isCancelled(error)) {
170
+ console.error(error);
164
171
  }
172
+ });
173
+ return view;
174
+ } catch (e_2) {
175
+ env_2.error = e_2;
176
+ env_2.hasError = true;
177
+ } finally {
178
+ __disposeResources(env_2);
165
179
  }
166
- static async loadControl(url, app) {
167
- const env_3 = { stack: [], error: void 0, hasError: false };
168
- try {
169
- const _busyIndicator = __addDisposableResource(env_3, app.createBusyIndicator({
170
- title: url?.toString(),
171
- description: `Loading View ${url}`
172
- }), false);
173
- const view = await AtomLoader.load(url, app);
174
- const vm = getOwnInheritedProperty(view, "viewModel");
175
- let params;
176
- if ("parameters" in view) {
177
- params = view.parameters;
180
+ }
181
+ static async loadControl(url, app) {
182
+ const env_3 = {
183
+ stack: [],
184
+ error: void 0,
185
+ hasError: false
186
+ };
187
+ try {
188
+ const _busyIndicator = __addDisposableResource(env_3, app.createBusyIndicator({
189
+ title: url?.toString(),
190
+ description: `Loading View ${url}`
191
+ }), false);
192
+ const view = await AtomLoader.load(url, app);
193
+ const vm = getOwnInheritedProperty(view, "viewModel");
194
+ let params;
195
+ if ("parameters" in view) {
196
+ params = view.parameters;
197
+ }
198
+ if (!vm) {
199
+ params = view.parameters ??= {};
200
+ }
201
+ if (vm || params) {
202
+ const jsonService = app.get(JsonService);
203
+ for (const key in url.query) {
204
+ if (url.query.hasOwnProperty(key)) {
205
+ const element = url.query[key];
206
+ if (/^json\:/.test(key)) {
207
+ const k = key.split(":")[1];
208
+ const v = jsonService.parse(element.toString());
209
+ if (vm) {
210
+ vm[k] = v;
211
+ }
212
+ if (params) {
213
+ params[k] = v;
214
+ }
215
+ continue;
178
216
  }
179
- if (!vm) {
180
- params = view.parameters ??= {};
217
+ if (/^ref\:/.test(key)) {
218
+ const rs = app.get(ReferenceService);
219
+ const v = rs.get(element).consume();
220
+ const keyName = key.split(":", 2)[1];
221
+ if (vm) {
222
+ vm[keyName] = v;
223
+ }
224
+ if (params) {
225
+ params[keyName] = v;
226
+ }
227
+ continue;
181
228
  }
182
- if (vm || params) {
183
- const jsonService = app.get(JsonService);
184
- for (const key in url.query) {
185
- if (url.query.hasOwnProperty(key)) {
186
- const element = url.query[key];
187
- if (/^json\:/.test(key)) {
188
- const k = key.split(":")[1];
189
- const v = jsonService.parse(element.toString());
190
- if (vm) {
191
- vm[k] = v;
192
- }
193
- if (params) {
194
- params[k] = v;
195
- }
196
- continue;
197
- }
198
- if (/^ref\:/.test(key)) {
199
- const rs = app.get(ReferenceService);
200
- const v = rs.get(element).consume();
201
- const keyName = key.split(":", 2)[1];
202
- if (vm) {
203
- vm[keyName] = v;
204
- }
205
- if (params) {
206
- params[keyName] = v;
207
- }
208
- continue;
209
- }
210
- try {
211
- if (vm) {
212
- vm[key] = element;
213
- }
214
- if (params) {
215
- params[key] = element;
216
- }
217
- }
218
- catch (e) {
219
- console.error(e);
220
- }
221
- }
222
- }
229
+ try {
230
+ if (vm) {
231
+ vm[key] = element;
232
+ }
233
+ if (params) {
234
+ params[key] = element;
235
+ }
236
+ } catch (e) {
237
+ console.error(e);
223
238
  }
224
- view.init?.()
225
- ?.catch((error) => {
226
- if (!CancelToken.isCancelled(error)) {
227
- console.error(error);
228
- }
229
- });
230
- return view;
231
- }
232
- catch (e_3) {
233
- env_3.error = e_3;
234
- env_3.hasError = true;
239
+ }
235
240
  }
236
- finally {
237
- __disposeResources(env_3);
241
+ }
242
+ view.init?.()?.catch(error => {
243
+ if (!CancelToken.isCancelled(error)) {
244
+ console.error(error);
238
245
  }
246
+ });
247
+ return view;
248
+ } catch (e_3) {
249
+ env_3.error = e_3;
250
+ env_3.hasError = true;
251
+ } finally {
252
+ __disposeResources(env_3);
239
253
  }
240
- }
241
- //# sourceMappingURL=AtomLoader.js.map
254
+ }
255
+ }
@@ -1,10 +1,9 @@
1
1
  Map.prototype.getOrCreate = function (key, factory) {
2
- let item = this.get(key);
3
- if (item === undefined) {
4
- item = factory(key);
5
- this.set(key, item);
6
- }
7
- return item;
2
+ let item = this.get(key);
3
+ if (item === undefined) {
4
+ item = factory(key);
5
+ this.set(key, item);
6
+ }
7
+ return item;
8
8
  };
9
- export default Map;
10
- //# sourceMappingURL=AtomMap.js.map
9
+ export default Map;
@@ -1,26 +1,24 @@
1
1
  export class AtomOnce {
2
- run(f) {
3
- if (this.isRunning) {
4
- return;
5
- }
6
- let isAsync = false;
7
- try {
8
- this.isRunning = true;
9
- const p = f();
10
- if (p && p.then && p.catch) {
11
- isAsync = true;
12
- p.then(() => {
13
- this.isRunning = false;
14
- }).catch(() => {
15
- this.isRunning = false;
16
- });
17
- }
18
- }
19
- finally {
20
- if (!isAsync) {
21
- this.isRunning = false;
22
- }
23
- }
2
+ run(f) {
3
+ if (this.isRunning) {
4
+ return;
24
5
  }
25
- }
26
- //# sourceMappingURL=AtomOnce.js.map
6
+ let isAsync = false;
7
+ try {
8
+ this.isRunning = true;
9
+ const p = f();
10
+ if (p && p.then && p.catch) {
11
+ isAsync = true;
12
+ p.then(() => {
13
+ this.isRunning = false;
14
+ }).catch(() => {
15
+ this.isRunning = false;
16
+ });
17
+ }
18
+ } finally {
19
+ if (!isAsync) {
20
+ this.isRunning = false;
21
+ }
22
+ }
23
+ }
24
+ }