@geexcode/geex-angular 0.0.27 → 0.0.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { WritableSignal, Signal, Injector, InjectionToken, Provider } from '@angular/core';
1
+ import { WritableSignal, Signal, Injector, Provider, InjectionToken } from '@angular/core';
2
2
 
3
3
  interface Tenant {
4
4
  /** Unique identifier */
@@ -89,7 +89,7 @@ interface MessagingModule extends GeexModule {
89
89
  /**
90
90
  * Subscribe to server broadcast events.
91
91
  */
92
- onPublicNotify(): void;
92
+ onPublicNotify(notify: any): void;
93
93
  }
94
94
  interface SettingsModule extends GeexModule {
95
95
  settings: WritableSignal<SettingItem[]>;
@@ -102,8 +102,12 @@ interface UiModule extends GeexModule {
102
102
  /** Currently active routed component (framework dependent) */
103
103
  activeRoutedComponent?: any;
104
104
  }
105
- type GeexModules<TExtensionModules extends Record<string, GeexModule> = {}> = {
106
- init: () => Promise<any>;
105
+ declare const ExtensionModule: Record<string, any> & {};
106
+ type ExtensionModule = typeof ExtensionModule;
107
+ type GeexModules<TExtensionModules extends ExtensionModule = ExtensionModule> = {
108
+ init(): Promise<{
109
+ [K in keyof GeexModules<TExtensionModules>]: any;
110
+ }>;
107
111
  tenant: TenantModule;
108
112
  auth: AuthModule;
109
113
  identity: IdentityModule;
@@ -111,13 +115,13 @@ type GeexModules<TExtensionModules extends Record<string, GeexModule> = {}> = {
111
115
  settings: SettingsModule;
112
116
  ui: UiModule;
113
117
  } & TExtensionModules;
114
- type GeexModule<TExtension = any> = {
118
+ type GeexModule<TExtension = ExtensionModule> = {
115
119
  /**
116
120
  * A module combines both reactive state (signals) and business logic methods.
117
121
  * Concrete modules can extend this interface to expose their own signals & methods.
118
122
  * This empty base exists mainly for typing convenience and future extension.
119
123
  */
120
- init?: () => Promise<any>;
124
+ init: () => Promise<any>;
121
125
  } & TExtension;
122
126
  declare function createTenantModule(injector: Injector): TenantModule;
123
127
  declare function createAuthModule(injector: Injector): AuthModule;
@@ -126,24 +130,17 @@ declare function createMessagingModule(injector: Injector): MessagingModule;
126
130
  declare function createSettingsModule(injector: Injector): SettingsModule;
127
131
  declare function createUiModule(injector: Injector): UiModule;
128
132
 
129
- type GeexOverrides<TExtensionModules extends Record<string, GeexModule> = {}> = Partial<GeexModules<TExtensionModules>>;
133
+ declare function provideGeex<TExtensionModules extends Record<string, GeexModule> = {}>(overrides: GeexModules, extensions?: TExtensionModules): Provider[];
134
+
135
+ type GeexOverrides<TExtensionModules extends Record<string, GeexModule> = {}> = Partial<Omit<GeexModules<TExtensionModules>, "init">>;
136
+ type GeexExtensions<TExtensionModules extends Record<string, GeexModule> = {}> = Partial<TExtensionModules>;
130
137
  declare let geex: GeexModules;
131
- declare let Geex: InjectionToken<{
132
- init: () => Promise<any>;
133
- tenant: TenantModule;
134
- auth: AuthModule;
135
- identity: IdentityModule;
136
- messaging: MessagingModule;
137
- settings: SettingsModule;
138
- ui: UiModule;
139
- }>;
138
+ declare let Geex: InjectionToken<GeexModules>;
140
139
  /**
141
140
  * Initialize geex singleton with concrete dependencies
142
141
  * @param deps Required runtime services
143
142
  * @param overrides Custom module overrides – properties will be merged into generated modules
144
143
  */
145
- declare function configGeex<TExtensionModules extends Record<string, GeexModule> = {}>(injector: Injector, overrides?: GeexOverrides<TExtensionModules>): void;
146
-
147
- declare function provideGeex(overrides?: GeexOverrides): Provider[];
144
+ declare function configGeex<TExtensionModules extends Record<string, GeexModule> = ExtensionModule>(injector: Injector, overrides?: GeexOverrides<TExtensionModules>): void;
148
145
 
149
- export { type AuthModule, Geex, type GeexModule, type GeexModules, type GeexOverrides, type IdentityModule, LoginProviderEnum, type MessagingModule, type Org, OrgTypeEnum, type SettingItem, type SettingsModule, type Tenant, type TenantModule, type UiModule, type User, type UserOrgMembership, configGeex, createAuthModule, createIdentityModule, createMessagingModule, createSettingsModule, createTenantModule, createUiModule, geex, provideGeex };
146
+ export { type AuthModule, ExtensionModule, Geex, type GeexExtensions, type GeexModule, type GeexModules, type GeexOverrides, type IdentityModule, LoginProviderEnum, type MessagingModule, type Org, OrgTypeEnum, type SettingItem, type SettingsModule, type Tenant, type TenantModule, type UiModule, type User, type UserOrgMembership, configGeex, createAuthModule, createIdentityModule, createMessagingModule, createSettingsModule, createTenantModule, createUiModule, geex, provideGeex };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { WritableSignal, Signal, Injector, InjectionToken, Provider } from '@angular/core';
1
+ import { WritableSignal, Signal, Injector, Provider, InjectionToken } from '@angular/core';
2
2
 
3
3
  interface Tenant {
4
4
  /** Unique identifier */
@@ -89,7 +89,7 @@ interface MessagingModule extends GeexModule {
89
89
  /**
90
90
  * Subscribe to server broadcast events.
91
91
  */
92
- onPublicNotify(): void;
92
+ onPublicNotify(notify: any): void;
93
93
  }
94
94
  interface SettingsModule extends GeexModule {
95
95
  settings: WritableSignal<SettingItem[]>;
@@ -102,8 +102,12 @@ interface UiModule extends GeexModule {
102
102
  /** Currently active routed component (framework dependent) */
103
103
  activeRoutedComponent?: any;
104
104
  }
105
- type GeexModules<TExtensionModules extends Record<string, GeexModule> = {}> = {
106
- init: () => Promise<any>;
105
+ declare const ExtensionModule: Record<string, any> & {};
106
+ type ExtensionModule = typeof ExtensionModule;
107
+ type GeexModules<TExtensionModules extends ExtensionModule = ExtensionModule> = {
108
+ init(): Promise<{
109
+ [K in keyof GeexModules<TExtensionModules>]: any;
110
+ }>;
107
111
  tenant: TenantModule;
108
112
  auth: AuthModule;
109
113
  identity: IdentityModule;
@@ -111,13 +115,13 @@ type GeexModules<TExtensionModules extends Record<string, GeexModule> = {}> = {
111
115
  settings: SettingsModule;
112
116
  ui: UiModule;
113
117
  } & TExtensionModules;
114
- type GeexModule<TExtension = any> = {
118
+ type GeexModule<TExtension = ExtensionModule> = {
115
119
  /**
116
120
  * A module combines both reactive state (signals) and business logic methods.
117
121
  * Concrete modules can extend this interface to expose their own signals & methods.
118
122
  * This empty base exists mainly for typing convenience and future extension.
119
123
  */
120
- init?: () => Promise<any>;
124
+ init: () => Promise<any>;
121
125
  } & TExtension;
122
126
  declare function createTenantModule(injector: Injector): TenantModule;
123
127
  declare function createAuthModule(injector: Injector): AuthModule;
@@ -126,24 +130,17 @@ declare function createMessagingModule(injector: Injector): MessagingModule;
126
130
  declare function createSettingsModule(injector: Injector): SettingsModule;
127
131
  declare function createUiModule(injector: Injector): UiModule;
128
132
 
129
- type GeexOverrides<TExtensionModules extends Record<string, GeexModule> = {}> = Partial<GeexModules<TExtensionModules>>;
133
+ declare function provideGeex<TExtensionModules extends Record<string, GeexModule> = {}>(overrides: GeexModules, extensions?: TExtensionModules): Provider[];
134
+
135
+ type GeexOverrides<TExtensionModules extends Record<string, GeexModule> = {}> = Partial<Omit<GeexModules<TExtensionModules>, "init">>;
136
+ type GeexExtensions<TExtensionModules extends Record<string, GeexModule> = {}> = Partial<TExtensionModules>;
130
137
  declare let geex: GeexModules;
131
- declare let Geex: InjectionToken<{
132
- init: () => Promise<any>;
133
- tenant: TenantModule;
134
- auth: AuthModule;
135
- identity: IdentityModule;
136
- messaging: MessagingModule;
137
- settings: SettingsModule;
138
- ui: UiModule;
139
- }>;
138
+ declare let Geex: InjectionToken<GeexModules>;
140
139
  /**
141
140
  * Initialize geex singleton with concrete dependencies
142
141
  * @param deps Required runtime services
143
142
  * @param overrides Custom module overrides – properties will be merged into generated modules
144
143
  */
145
- declare function configGeex<TExtensionModules extends Record<string, GeexModule> = {}>(injector: Injector, overrides?: GeexOverrides<TExtensionModules>): void;
146
-
147
- declare function provideGeex(overrides?: GeexOverrides): Provider[];
144
+ declare function configGeex<TExtensionModules extends Record<string, GeexModule> = ExtensionModule>(injector: Injector, overrides?: GeexOverrides<TExtensionModules>): void;
148
145
 
149
- export { type AuthModule, Geex, type GeexModule, type GeexModules, type GeexOverrides, type IdentityModule, LoginProviderEnum, type MessagingModule, type Org, OrgTypeEnum, type SettingItem, type SettingsModule, type Tenant, type TenantModule, type UiModule, type User, type UserOrgMembership, configGeex, createAuthModule, createIdentityModule, createMessagingModule, createSettingsModule, createTenantModule, createUiModule, geex, provideGeex };
146
+ export { type AuthModule, ExtensionModule, Geex, type GeexExtensions, type GeexModule, type GeexModules, type GeexOverrides, type IdentityModule, LoginProviderEnum, type MessagingModule, type Org, OrgTypeEnum, type SettingItem, type SettingsModule, type Tenant, type TenantModule, type UiModule, type User, type UserOrgMembership, configGeex, createAuthModule, createIdentityModule, createMessagingModule, createSettingsModule, createTenantModule, createUiModule, geex, provideGeex };
package/dist/index.js CHANGED
@@ -30,6 +30,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  // src/index.ts
31
31
  var index_exports = {};
32
32
  __export(index_exports, {
33
+ ExtensionModule: () => ExtensionModule,
33
34
  Geex: () => Geex,
34
35
  LoginProviderEnum: () => LoginProviderEnum,
35
36
  OrgTypeEnum: () => OrgTypeEnum,
@@ -66,6 +67,7 @@ var LoginProviderEnum = {
66
67
  var OrgTypeEnum = {
67
68
  Default: "Default"
68
69
  };
70
+ var ExtensionModule = {};
69
71
  var GQL_CHECK_TENANT = import_graphql_tag.default`mutation checkTenant($code: String!) { checkTenant(code: $code) { id code name isEnabled createdOn } }`;
70
72
  var GQL_FEDERATE_AUTH = import_graphql_tag.default`mutation federateAuthenticate(
71
73
  $code: String!
@@ -176,7 +178,7 @@ function createAuthModule(injector) {
176
178
  async loadUserData() {
177
179
  const oAuthService = injector.get(import_angular_oauth2_oidc.OAuthService);
178
180
  try {
179
- await oAuthService.loadDiscoveryDocumentAndTryLogin();
181
+ await oAuthService.loadDiscoveryDocument();
180
182
  if (!oAuthService.hasValidAccessToken()) {
181
183
  return void 0;
182
184
  }
@@ -203,46 +205,56 @@ function createAuthModule(injector) {
203
205
  function createIdentityModule(injector) {
204
206
  const orgsSignal = (0, import_core.signal)([]);
205
207
  const userOwnedOrgsSignal = (0, import_core.signal)([]);
206
- return {
208
+ const module2 = {
207
209
  orgs: orgsSignal,
208
210
  userOwnedOrgs: userOwnedOrgsSignal,
209
- init() {
210
- const orgs$ = injector.get(import_apollo_angular.Apollo).watchQuery({ query: GQL_ORGS_CACHE }).valueChanges.pipe((0, import_rxjs.map)((res) => (0, import_util.deepCopy)(res.data.orgs.items)));
211
- orgs$.subscribe((orgs) => {
212
- (0, import_core.runInInjectionContext)(injector, () => {
213
- orgsSignal.set(orgs);
214
- const userData = geex.auth.user();
215
- let allOwned = [];
216
- if (orgs?.length && userData) {
217
- if (userData.id === "000000000000000000000001") {
218
- allOwned = (0, import_util.deepCopy)(orgs);
219
- } else {
220
- const ownedCodes = userData.orgs.map((x) => x.code);
221
- allOwned = orgs.filter((o) => ownedCodes.some((code) => o.code.startsWith(code)));
211
+ async init() {
212
+ try {
213
+ const orgs$ = injector.get(import_apollo_angular.Apollo).watchQuery({ query: GQL_ORGS_CACHE }).valueChanges.pipe((0, import_rxjs.map)((res) => (0, import_util.deepCopy)(res.data.orgs.items)));
214
+ orgs$.subscribe((orgs) => {
215
+ (0, import_core.runInInjectionContext)(injector, () => {
216
+ orgsSignal.set(orgs);
217
+ const userData = geex.auth.user();
218
+ let allOwned = [];
219
+ if (orgs?.length && userData) {
220
+ if (userData.id === "000000000000000000000001") {
221
+ allOwned = (0, import_util.deepCopy)(orgs);
222
+ } else {
223
+ const ownedCodes = userData.orgs.map((x) => x.code);
224
+ allOwned = orgs.filter((o) => ownedCodes.some((code) => o.code.startsWith(code)));
225
+ }
222
226
  }
223
- }
224
- userOwnedOrgsSignal.set(allOwned);
227
+ userOwnedOrgsSignal.set(allOwned);
228
+ });
225
229
  });
226
- });
230
+ } catch (error) {
231
+ console.error(error);
232
+ }
227
233
  }
228
234
  };
235
+ return module2;
229
236
  }
230
237
  function createMessagingModule(injector) {
231
- return {
232
- init: async () => {
233
- return;
238
+ const module2 = {
239
+ async init() {
240
+ try {
241
+ const subClient = injector.get(import_apollo_angular.Apollo).use("subscription");
242
+ subClient.subscribe({ query: GQL_ON_PUBLIC_NOTIFY }).pipe((0, import_rxjs.map)((res) => res?.data?.onPublicNotify)).subscribe((notify) => {
243
+ module2.onPublicNotify(notify);
244
+ });
245
+ } catch (err) {
246
+ console.error(err);
247
+ }
234
248
  },
235
- onPublicNotify() {
236
- const subClient = injector.get(import_apollo_angular.Apollo).use("subscription");
237
- subClient.subscribe({ query: GQL_ON_PUBLIC_NOTIFY }).pipe((0, import_rxjs.map)((res) => res?.data?.onPublicNotify)).subscribe((notify) => {
238
- console.log("Public notify", notify);
239
- });
249
+ onPublicNotify(notify) {
250
+ console.log("Public notify", notify);
240
251
  }
241
252
  };
253
+ return module2;
242
254
  }
243
255
  function createSettingsModule(injector) {
244
256
  const settingsSignal = (0, import_core.signal)([]);
245
- return {
257
+ const module2 = {
246
258
  settings: settingsSignal,
247
259
  async init() {
248
260
  const res = await (0, import_rxjs.firstValueFrom)(
@@ -252,6 +264,7 @@ function createSettingsModule(injector) {
252
264
  settingsSignal.set(settings);
253
265
  }
254
266
  };
267
+ return module2;
255
268
  }
256
269
  function createUiModule(injector) {
257
270
  const fullScreenSignal = (0, import_core.signal)(false);
@@ -259,55 +272,60 @@ function createUiModule(injector) {
259
272
  (0, import_operators.debounceTime)(200),
260
273
  (0, import_operators.switchMap)(async () => window.innerHeight / window.innerWidth >= 1.5)
261
274
  ));
262
- return {
275
+ const module2 = {
263
276
  fullScreen: fullScreenSignal,
264
277
  isMobile,
265
- activeRoutedComponent: void 0
278
+ activeRoutedComponent: void 0,
279
+ async init() {
280
+ return;
281
+ }
266
282
  };
283
+ return module2;
267
284
  }
268
285
 
269
286
  // src/geex.ts
270
287
  var geex;
271
288
  var Geex = new import_core2.InjectionToken("Geex");
272
- function configGeex(injector, overrides) {
289
+ function configGeex(injector, overrides = {}) {
290
+ const modules = {
291
+ ...overrides
292
+ };
273
293
  (0, import_core2.runInInjectionContext)(injector, () => {
274
- const modules = {
275
- init: async () => {
276
- const entries = Object.entries(modules).filter(([key]) => key !== "init");
277
- await Promise.all(
278
- entries.map(async ([, mod]) => {
279
- const maybeInit = mod.init;
280
- if (typeof maybeInit === "function") {
281
- try {
282
- await maybeInit();
283
- } catch (err) {
284
- console.error(err);
285
- }
286
- }
287
- })
288
- );
289
- },
290
- tenant: createTenantModule(injector),
291
- auth: createAuthModule(injector),
292
- identity: createIdentityModule(injector),
293
- messaging: createMessagingModule(injector),
294
- settings: createSettingsModule(injector),
295
- ui: createUiModule(injector)
296
- };
297
- if (overrides) {
298
- Object.assign(modules, overrides);
299
- }
294
+ modules.init ?? (modules.init = async () => {
295
+ const entries = Object.entries(modules).filter(([key]) => key !== "init");
296
+ return Object.fromEntries(await Promise.all(
297
+ entries.map(async ([key, mod]) => {
298
+ const maybeInit = mod.init;
299
+ try {
300
+ return [key, await maybeInit()];
301
+ } catch (err) {
302
+ console.error(err);
303
+ return [key, null];
304
+ }
305
+ })
306
+ ));
307
+ });
308
+ modules.tenant ?? (modules.tenant = createTenantModule(injector));
309
+ modules.auth ?? (modules.auth = createAuthModule(injector));
310
+ modules.identity ?? (modules.identity = createIdentityModule(injector));
311
+ modules.messaging ?? (modules.messaging = createMessagingModule(injector));
312
+ modules.settings ?? (modules.settings = createSettingsModule(injector));
313
+ modules.ui ?? (modules.ui = createUiModule(injector));
300
314
  geex = modules;
301
315
  });
302
316
  }
303
317
 
304
318
  // src/provide-geex.ts
305
- function provideGeex(overrides) {
319
+ function provideGeex(overrides, extensions = {}) {
306
320
  return [
307
321
  {
308
322
  provide: Geex,
309
323
  useFactory: (injector) => {
310
- configGeex(injector, overrides);
324
+ const mergedModules = {
325
+ ...extensions,
326
+ ...overrides
327
+ };
328
+ configGeex(injector, mergedModules);
311
329
  return geex;
312
330
  },
313
331
  deps: [import_core3.Injector]
@@ -316,6 +334,7 @@ function provideGeex(overrides) {
316
334
  }
317
335
  // Annotate the CommonJS export names for ESM import in node:
318
336
  0 && (module.exports = {
337
+ ExtensionModule,
319
338
  Geex,
320
339
  LoginProviderEnum,
321
340
  OrgTypeEnum,
package/dist/index.mjs CHANGED
@@ -21,6 +21,7 @@ var LoginProviderEnum = {
21
21
  var OrgTypeEnum = {
22
22
  Default: "Default"
23
23
  };
24
+ var ExtensionModule = {};
24
25
  var GQL_CHECK_TENANT = gql`mutation checkTenant($code: String!) { checkTenant(code: $code) { id code name isEnabled createdOn } }`;
25
26
  var GQL_FEDERATE_AUTH = gql`mutation federateAuthenticate(
26
27
  $code: String!
@@ -131,7 +132,7 @@ function createAuthModule(injector) {
131
132
  async loadUserData() {
132
133
  const oAuthService = injector.get(OAuthService);
133
134
  try {
134
- await oAuthService.loadDiscoveryDocumentAndTryLogin();
135
+ await oAuthService.loadDiscoveryDocument();
135
136
  if (!oAuthService.hasValidAccessToken()) {
136
137
  return void 0;
137
138
  }
@@ -158,46 +159,56 @@ function createAuthModule(injector) {
158
159
  function createIdentityModule(injector) {
159
160
  const orgsSignal = signal([]);
160
161
  const userOwnedOrgsSignal = signal([]);
161
- return {
162
+ const module = {
162
163
  orgs: orgsSignal,
163
164
  userOwnedOrgs: userOwnedOrgsSignal,
164
- init() {
165
- const orgs$ = injector.get(Apollo).watchQuery({ query: GQL_ORGS_CACHE }).valueChanges.pipe(map((res) => deepCopy(res.data.orgs.items)));
166
- orgs$.subscribe((orgs) => {
167
- runInInjectionContext(injector, () => {
168
- orgsSignal.set(orgs);
169
- const userData = geex.auth.user();
170
- let allOwned = [];
171
- if (orgs?.length && userData) {
172
- if (userData.id === "000000000000000000000001") {
173
- allOwned = deepCopy(orgs);
174
- } else {
175
- const ownedCodes = userData.orgs.map((x) => x.code);
176
- allOwned = orgs.filter((o) => ownedCodes.some((code) => o.code.startsWith(code)));
165
+ async init() {
166
+ try {
167
+ const orgs$ = injector.get(Apollo).watchQuery({ query: GQL_ORGS_CACHE }).valueChanges.pipe(map((res) => deepCopy(res.data.orgs.items)));
168
+ orgs$.subscribe((orgs) => {
169
+ runInInjectionContext(injector, () => {
170
+ orgsSignal.set(orgs);
171
+ const userData = geex.auth.user();
172
+ let allOwned = [];
173
+ if (orgs?.length && userData) {
174
+ if (userData.id === "000000000000000000000001") {
175
+ allOwned = deepCopy(orgs);
176
+ } else {
177
+ const ownedCodes = userData.orgs.map((x) => x.code);
178
+ allOwned = orgs.filter((o) => ownedCodes.some((code) => o.code.startsWith(code)));
179
+ }
177
180
  }
178
- }
179
- userOwnedOrgsSignal.set(allOwned);
181
+ userOwnedOrgsSignal.set(allOwned);
182
+ });
180
183
  });
181
- });
184
+ } catch (error) {
185
+ console.error(error);
186
+ }
182
187
  }
183
188
  };
189
+ return module;
184
190
  }
185
191
  function createMessagingModule(injector) {
186
- return {
187
- init: async () => {
188
- return;
192
+ const module = {
193
+ async init() {
194
+ try {
195
+ const subClient = injector.get(Apollo).use("subscription");
196
+ subClient.subscribe({ query: GQL_ON_PUBLIC_NOTIFY }).pipe(map((res) => res?.data?.onPublicNotify)).subscribe((notify) => {
197
+ module.onPublicNotify(notify);
198
+ });
199
+ } catch (err) {
200
+ console.error(err);
201
+ }
189
202
  },
190
- onPublicNotify() {
191
- const subClient = injector.get(Apollo).use("subscription");
192
- subClient.subscribe({ query: GQL_ON_PUBLIC_NOTIFY }).pipe(map((res) => res?.data?.onPublicNotify)).subscribe((notify) => {
193
- console.log("Public notify", notify);
194
- });
203
+ onPublicNotify(notify) {
204
+ console.log("Public notify", notify);
195
205
  }
196
206
  };
207
+ return module;
197
208
  }
198
209
  function createSettingsModule(injector) {
199
210
  const settingsSignal = signal([]);
200
- return {
211
+ const module = {
201
212
  settings: settingsSignal,
202
213
  async init() {
203
214
  const res = await firstValueFrom(
@@ -207,6 +218,7 @@ function createSettingsModule(injector) {
207
218
  settingsSignal.set(settings);
208
219
  }
209
220
  };
221
+ return module;
210
222
  }
211
223
  function createUiModule(injector) {
212
224
  const fullScreenSignal = signal(false);
@@ -214,55 +226,60 @@ function createUiModule(injector) {
214
226
  debounceTime(200),
215
227
  switchMap(async () => window.innerHeight / window.innerWidth >= 1.5)
216
228
  ));
217
- return {
229
+ const module = {
218
230
  fullScreen: fullScreenSignal,
219
231
  isMobile,
220
- activeRoutedComponent: void 0
232
+ activeRoutedComponent: void 0,
233
+ async init() {
234
+ return;
235
+ }
221
236
  };
237
+ return module;
222
238
  }
223
239
 
224
240
  // src/geex.ts
225
241
  var geex;
226
242
  var Geex = new InjectionToken("Geex");
227
- function configGeex(injector, overrides) {
243
+ function configGeex(injector, overrides = {}) {
244
+ const modules = {
245
+ ...overrides
246
+ };
228
247
  runInInjectionContext2(injector, () => {
229
- const modules = {
230
- init: async () => {
231
- const entries = Object.entries(modules).filter(([key]) => key !== "init");
232
- await Promise.all(
233
- entries.map(async ([, mod]) => {
234
- const maybeInit = mod.init;
235
- if (typeof maybeInit === "function") {
236
- try {
237
- await maybeInit();
238
- } catch (err) {
239
- console.error(err);
240
- }
241
- }
242
- })
243
- );
244
- },
245
- tenant: createTenantModule(injector),
246
- auth: createAuthModule(injector),
247
- identity: createIdentityModule(injector),
248
- messaging: createMessagingModule(injector),
249
- settings: createSettingsModule(injector),
250
- ui: createUiModule(injector)
251
- };
252
- if (overrides) {
253
- Object.assign(modules, overrides);
254
- }
248
+ modules.init ?? (modules.init = async () => {
249
+ const entries = Object.entries(modules).filter(([key]) => key !== "init");
250
+ return Object.fromEntries(await Promise.all(
251
+ entries.map(async ([key, mod]) => {
252
+ const maybeInit = mod.init;
253
+ try {
254
+ return [key, await maybeInit()];
255
+ } catch (err) {
256
+ console.error(err);
257
+ return [key, null];
258
+ }
259
+ })
260
+ ));
261
+ });
262
+ modules.tenant ?? (modules.tenant = createTenantModule(injector));
263
+ modules.auth ?? (modules.auth = createAuthModule(injector));
264
+ modules.identity ?? (modules.identity = createIdentityModule(injector));
265
+ modules.messaging ?? (modules.messaging = createMessagingModule(injector));
266
+ modules.settings ?? (modules.settings = createSettingsModule(injector));
267
+ modules.ui ?? (modules.ui = createUiModule(injector));
255
268
  geex = modules;
256
269
  });
257
270
  }
258
271
 
259
272
  // src/provide-geex.ts
260
- function provideGeex(overrides) {
273
+ function provideGeex(overrides, extensions = {}) {
261
274
  return [
262
275
  {
263
276
  provide: Geex,
264
277
  useFactory: (injector) => {
265
- configGeex(injector, overrides);
278
+ const mergedModules = {
279
+ ...extensions,
280
+ ...overrides
281
+ };
282
+ configGeex(injector, mergedModules);
266
283
  return geex;
267
284
  },
268
285
  deps: [Injector3]
@@ -270,6 +287,7 @@ function provideGeex(overrides) {
270
287
  ];
271
288
  }
272
289
  export {
290
+ ExtensionModule,
273
291
  Geex,
274
292
  LoginProviderEnum,
275
293
  OrgTypeEnum,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geexcode/geex-angular",
3
- "version": "0.0.27",
3
+ "version": "0.0.29",
4
4
  "description": "Angular adapter for Geex core.",
5
5
  "module": "dist/index.js",
6
6
  "main": "dist/index.cjs",