@manyducks.co/dolla 0.69.5 → 0.71.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.
package/lib/app.d.ts CHANGED
@@ -49,6 +49,14 @@ export interface StoreRegistration<O = any> {
49
49
  instance?: ReturnType<typeof initStore>;
50
50
  }
51
51
  interface ConfigureContext {
52
+ /**
53
+ * Returns the shared instance of `store`.
54
+ */
55
+ getStore<T extends Store<any, any>>(store: T): ReturnType<T>;
56
+ /**
57
+ * Returns the shared instance of a built-in store.
58
+ */
59
+ getStore<N extends keyof BuiltInStores>(name: N): BuiltInStores[N];
52
60
  }
53
61
  type ConfigureCallback = (ctx: ConfigureContext) => void | Promise<void>;
54
62
  export interface IApp {
package/lib/index.js CHANGED
@@ -2345,6 +2345,37 @@ function App(options) {
2345
2345
  if (configureCallback) {
2346
2346
  await configureCallback({
2347
2347
  // TODO: Add context methods
2348
+ getStore(store) {
2349
+ let name;
2350
+ if (typeof store === "string") {
2351
+ name = store;
2352
+ } else {
2353
+ name = store.name;
2354
+ }
2355
+ if (typeof store !== "string") {
2356
+ let ec = elementContext;
2357
+ while (ec) {
2358
+ if (ec.stores.has(store)) {
2359
+ return ec.stores.get(store)?.instance.exports;
2360
+ }
2361
+ ec = ec.parent;
2362
+ }
2363
+ }
2364
+ if (appContext.stores.has(store)) {
2365
+ const _store = appContext.stores.get(store);
2366
+ if (!_store.instance) {
2367
+ appContext.crashCollector.crash({
2368
+ componentName: "@manyducks.co/dolla/App",
2369
+ error: new Error(`Store '${name}' is not registered on this app.`)
2370
+ });
2371
+ }
2372
+ return _store.instance.exports;
2373
+ }
2374
+ appContext.crashCollector.crash({
2375
+ componentName: "@manyducks.co/dolla/App",
2376
+ error: new Error(`Store '${name}' is not registered on this app.`)
2377
+ });
2378
+ }
2348
2379
  });
2349
2380
  }
2350
2381
  appContext.rootView.connect(appContext.rootElement);
@@ -3470,15 +3501,15 @@ function LanguageStore(ctx) {
3470
3501
  realTag = firstLanguage.name;
3471
3502
  }
3472
3503
  }
3473
- if (!realTag || !languages.has(tag)) {
3504
+ if (!realTag || !languages.has(realTag)) {
3474
3505
  throw new Error(`Language '${tag}' is not configured for this app.`);
3475
3506
  }
3476
- const lang = languages.get(tag);
3507
+ const lang = languages.get(realTag);
3477
3508
  try {
3478
3509
  const translation = await getTranslation(lang);
3479
3510
  $$translation.set(translation);
3480
- $$language.set(tag);
3481
- ctx.info("set language to " + tag);
3511
+ $$language.set(realTag);
3512
+ ctx.info("set language to " + realTag);
3482
3513
  } catch (error) {
3483
3514
  if (error instanceof Error) {
3484
3515
  ctx.crash(error);
@@ -3489,6 +3520,16 @@ function LanguageStore(ctx) {
3489
3520
  $$isLoaded.set(true);
3490
3521
  });
3491
3522
  return {
3523
+ loaded: new Promise((resolve2, reject) => {
3524
+ const stop = observe($$isLoaded, (isLoaded) => {
3525
+ if (isLoaded) {
3526
+ setTimeout(() => {
3527
+ stop();
3528
+ resolve2();
3529
+ }, 0);
3530
+ }
3531
+ });
3532
+ }),
3492
3533
  $isLoaded: $($$isLoaded),
3493
3534
  $currentLanguage: $($$language),
3494
3535
  supportedLanguages: [...languages.keys()],
@@ -3643,7 +3684,12 @@ async function makeRequest(config) {
3643
3684
  });
3644
3685
  } else if (headers != null && typeof headers === "object" && !Array.isArray(headers)) {
3645
3686
  for (const name in headers) {
3646
- request.headers.set(name, String(headers[name]));
3687
+ const value = headers[name];
3688
+ if (value instanceof Date) {
3689
+ request.headers.set(name, value.toISOString());
3690
+ } else if (value != null) {
3691
+ request.headers.set(name, String(value));
3692
+ }
3647
3693
  }
3648
3694
  } else {
3649
3695
  throw new TypeError(`Unknown headers type. Got: ${headers}`);
@@ -3656,7 +3702,12 @@ async function makeRequest(config) {
3656
3702
  });
3657
3703
  } else if (query != null && typeof query === "object" && !Array.isArray(query)) {
3658
3704
  for (const name in query) {
3659
- request.query.set(name, String(query[name]));
3705
+ const value = query[name];
3706
+ if (value instanceof Date) {
3707
+ request.query.set(name, value.toISOString());
3708
+ } else if (value != null) {
3709
+ request.query.set(name, String(value));
3710
+ }
3660
3711
  }
3661
3712
  } else {
3662
3713
  throw new TypeError(`Unknown query params type. Got: ${query}`);