@sprucelabs/spruce-heartwood-utils 6.2.0 → 6.3.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.
@@ -1 +1,2 @@
1
- export { default as RemoteViewControllerFactory } from './RemoteViewControllerFactory';
1
+ export { default as RemoteViewControllerFactory } from './viewControllers/RemoteViewControllerFactory';
2
+ export { default as CardRegistrar } from './viewControllers/CardRegistrar';
@@ -1 +1,2 @@
1
- export { default as RemoteViewControllerFactory } from './RemoteViewControllerFactory.js';
1
+ export { default as RemoteViewControllerFactory } from './viewControllers/RemoteViewControllerFactory.js';
2
+ export { default as CardRegistrar } from './viewControllers/CardRegistrar.js';
@@ -0,0 +1,28 @@
1
+ import { AbstractViewController, ViewControllerFactory } from '@sprucelabs/heartwood-view-controllers';
2
+ import { MercuryClient } from '@sprucelabs/mercury-client';
3
+ import { EventContract, EventNames, SkillEventContract, SpruceSchemas } from '@sprucelabs/mercury-types';
4
+ import { Schema, SchemaValues } from '@sprucelabs/schema';
5
+ declare type Card = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Card;
6
+ declare type ResponsePayload<Contract extends EventContract, Name extends EventNames<Contract>> = Contract['eventSignatures'][Name]['responsePayloadSchema'] extends Schema ? SchemaValues<Contract['eventSignatures'][Name]['responsePayloadSchema']> : never;
7
+ declare type EmitPayload<Contract extends EventContract, Name extends EventNames<Contract>> = Contract['eventSignatures'][Name]['emitPayloadSchema'] extends Schema ? SchemaValues<Contract['eventSignatures'][Name]['emitPayloadSchema']> : never;
8
+ export interface CardRegistrarOptions<Contract extends EventContract, Name extends EventNames<Contract>> {
9
+ client: MercuryClient;
10
+ eventName: Name;
11
+ vcFactory: ViewControllerFactory;
12
+ vcIdsTransformer: (payload: ResponsePayload<Contract, Name>) => string[];
13
+ }
14
+ export declare type EachCardHandler = (vcs: AbstractViewController<any>[]) => Promise<void> | void;
15
+ export declare type CardFetchOptions<Contract extends EventContract, Name extends EventNames<Contract>> = {
16
+ each: EachCardHandler;
17
+ } & EmitPayload<Contract, Name>;
18
+ export default class CardRegistrar<
19
+ /** @ts-ignore */
20
+ Contract extends EventContract = SkillEventContract, Name extends EventNames<Contract> = EventNames<Contract>> {
21
+ private client;
22
+ private eventName;
23
+ private vcIdsTransformer;
24
+ private remoteVcFactory;
25
+ constructor(options: CardRegistrarOptions<Contract, Name>);
26
+ fetch(options?: CardFetchOptions<Contract, Name>): Promise<AbstractViewController<Card>[]>;
27
+ }
28
+ export {};
@@ -0,0 +1,61 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { assertOptions } from '@sprucelabs/schema';
11
+ import RemoteViewControllerFactory from './RemoteViewControllerFactory.js';
12
+ export default class CardRegistrar {
13
+ constructor(options) {
14
+ assertOptions(options, [
15
+ 'client',
16
+ 'eventName',
17
+ 'vcFactory',
18
+ 'vcIdsTransformer',
19
+ ]);
20
+ this.client = options.client;
21
+ this.eventName = options.eventName;
22
+ this.vcIdsTransformer = options.vcIdsTransformer;
23
+ this.remoteVcFactory = RemoteViewControllerFactory.Factory({
24
+ //@ts-ignore
25
+ connectToApi: () => options.client,
26
+ vcFactory: options.vcFactory,
27
+ });
28
+ }
29
+ fetch(options) {
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ try {
32
+ //@ts-ignore
33
+ const { each, target, payload } = options !== null && options !== void 0 ? options : {};
34
+ const targetAndPayload = target || payload ? { target, payload } : undefined;
35
+ const cards = [];
36
+ yield this.client.emitAndFlattenResponses(this.eventName, targetAndPayload, ({ payload }) => __awaiter(this, void 0, void 0, function* () {
37
+ const vcIds = this.vcIdsTransformer(payload);
38
+ const responseCards = [];
39
+ for (const id of vcIds) {
40
+ try {
41
+ const vc = yield this.remoteVcFactory.RemoteController(id, {});
42
+ responseCards.push(vc);
43
+ }
44
+ catch (err) {
45
+ console.error(err);
46
+ }
47
+ }
48
+ if (responseCards.length > 0) {
49
+ each === null || each === void 0 ? void 0 : each(responseCards);
50
+ }
51
+ cards.push(...responseCards);
52
+ }));
53
+ return cards;
54
+ }
55
+ catch (err) {
56
+ console.error(err);
57
+ return [this.remoteVcFactory.Controller('heartwood.error-card', {})];
58
+ }
59
+ });
60
+ }
61
+ }
@@ -1,6 +1,6 @@
1
1
  import { ViewControllerFactory } from '@sprucelabs/heartwood-view-controllers';
2
2
  import { MercuryClient } from '@sprucelabs/mercury-client';
3
- import { SkillTheme } from './ThemeManager';
3
+ import { SkillTheme } from '../ThemeManager';
4
4
  declare type ConnectToApi = () => Promise<MercuryClient>;
5
5
  interface FactoryOptions {
6
6
  connectToApi: ConnectToApi;
@@ -1 +1,2 @@
1
- export { default as RemoteViewControllerFactory } from './RemoteViewControllerFactory';
1
+ export { default as RemoteViewControllerFactory } from './viewControllers/RemoteViewControllerFactory';
2
+ export { default as CardRegistrar } from './viewControllers/CardRegistrar';
@@ -3,7 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.RemoteViewControllerFactory = void 0;
7
- var RemoteViewControllerFactory_1 = require("./RemoteViewControllerFactory");
6
+ exports.CardRegistrar = exports.RemoteViewControllerFactory = void 0;
7
+ var RemoteViewControllerFactory_1 = require("./viewControllers/RemoteViewControllerFactory");
8
8
  Object.defineProperty(exports, "RemoteViewControllerFactory", { enumerable: true, get: function () { return __importDefault(RemoteViewControllerFactory_1).default; } });
9
+ var CardRegistrar_1 = require("./viewControllers/CardRegistrar");
10
+ Object.defineProperty(exports, "CardRegistrar", { enumerable: true, get: function () { return __importDefault(CardRegistrar_1).default; } });
9
11
  //# sourceMappingURL=index-module.js.map
@@ -0,0 +1,28 @@
1
+ import { AbstractViewController, ViewControllerFactory } from '@sprucelabs/heartwood-view-controllers';
2
+ import { MercuryClient } from '@sprucelabs/mercury-client';
3
+ import { EventContract, EventNames, SkillEventContract, SpruceSchemas } from '@sprucelabs/mercury-types';
4
+ import { Schema, SchemaValues } from '@sprucelabs/schema';
5
+ declare type Card = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Card;
6
+ declare type ResponsePayload<Contract extends EventContract, Name extends EventNames<Contract>> = Contract['eventSignatures'][Name]['responsePayloadSchema'] extends Schema ? SchemaValues<Contract['eventSignatures'][Name]['responsePayloadSchema']> : never;
7
+ declare type EmitPayload<Contract extends EventContract, Name extends EventNames<Contract>> = Contract['eventSignatures'][Name]['emitPayloadSchema'] extends Schema ? SchemaValues<Contract['eventSignatures'][Name]['emitPayloadSchema']> : never;
8
+ export interface CardRegistrarOptions<Contract extends EventContract, Name extends EventNames<Contract>> {
9
+ client: MercuryClient;
10
+ eventName: Name;
11
+ vcFactory: ViewControllerFactory;
12
+ vcIdsTransformer: (payload: ResponsePayload<Contract, Name>) => string[];
13
+ }
14
+ export declare type EachCardHandler = (vcs: AbstractViewController<any>[]) => Promise<void> | void;
15
+ export declare type CardFetchOptions<Contract extends EventContract, Name extends EventNames<Contract>> = {
16
+ each: EachCardHandler;
17
+ } & EmitPayload<Contract, Name>;
18
+ export default class CardRegistrar<
19
+ /** @ts-ignore */
20
+ Contract extends EventContract = SkillEventContract, Name extends EventNames<Contract> = EventNames<Contract>> {
21
+ private client;
22
+ private eventName;
23
+ private vcIdsTransformer;
24
+ private remoteVcFactory;
25
+ constructor(options: CardRegistrarOptions<Contract, Name>);
26
+ fetch(options?: CardFetchOptions<Contract, Name>): Promise<AbstractViewController<Card>[]>;
27
+ }
28
+ export {};
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const schema_1 = require("@sprucelabs/schema");
7
+ const RemoteViewControllerFactory_1 = __importDefault(require("./RemoteViewControllerFactory"));
8
+ class CardRegistrar {
9
+ constructor(options) {
10
+ (0, schema_1.assertOptions)(options, [
11
+ 'client',
12
+ 'eventName',
13
+ 'vcFactory',
14
+ 'vcIdsTransformer',
15
+ ]);
16
+ this.client = options.client;
17
+ this.eventName = options.eventName;
18
+ this.vcIdsTransformer = options.vcIdsTransformer;
19
+ this.remoteVcFactory = RemoteViewControllerFactory_1.default.Factory({
20
+ //@ts-ignore
21
+ connectToApi: () => options.client,
22
+ vcFactory: options.vcFactory,
23
+ });
24
+ }
25
+ async fetch(options) {
26
+ try {
27
+ //@ts-ignore
28
+ const { each, target, payload } = options !== null && options !== void 0 ? options : {};
29
+ const targetAndPayload = target || payload ? { target, payload } : undefined;
30
+ const cards = [];
31
+ await this.client.emitAndFlattenResponses(this.eventName, targetAndPayload, async ({ payload }) => {
32
+ const vcIds = this.vcIdsTransformer(payload);
33
+ const responseCards = [];
34
+ for (const id of vcIds) {
35
+ try {
36
+ const vc = await this.remoteVcFactory.RemoteController(id, {});
37
+ responseCards.push(vc);
38
+ }
39
+ catch (err) {
40
+ console.error(err);
41
+ }
42
+ }
43
+ if (responseCards.length > 0) {
44
+ each === null || each === void 0 ? void 0 : each(responseCards);
45
+ }
46
+ cards.push(...responseCards);
47
+ });
48
+ return cards;
49
+ }
50
+ catch (err) {
51
+ console.error(err);
52
+ return [this.remoteVcFactory.Controller('heartwood.error-card', {})];
53
+ }
54
+ }
55
+ }
56
+ exports.default = CardRegistrar;
57
+ //# sourceMappingURL=CardRegistrar.js.map
@@ -0,0 +1,25 @@
1
+ import { ViewControllerFactory } from '@sprucelabs/heartwood-view-controllers';
2
+ import { MercuryClient } from '@sprucelabs/mercury-client';
3
+ import { SkillTheme } from '../ThemeManager';
4
+ declare type ConnectToApi = () => Promise<MercuryClient>;
5
+ interface FactoryOptions {
6
+ connectToApi: ConnectToApi;
7
+ vcFactory: ViewControllerFactory;
8
+ }
9
+ declare type Factory = Pick<ViewControllerFactory, 'hasController'>;
10
+ export default class RemoteViewControllerFactory implements Factory {
11
+ private connectToApi;
12
+ private vcFactory;
13
+ private themesByNamespace;
14
+ static Factory(options: FactoryOptions): RemoteViewControllerFactory;
15
+ private constructor();
16
+ hasController(name: string): boolean;
17
+ getTheme(namespace?: string): SkillTheme;
18
+ Controller(name: string, options: Record<string, any>): any;
19
+ private getNamespace;
20
+ getController(name: string): any;
21
+ fetchRemoteController(name: string): Promise<any>;
22
+ RemoteController(name: string, options: Record<string, any>): Promise<any>;
23
+ private optionallLoadController;
24
+ }
25
+ export {};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sprucelabs/spruce-heartwood-utils",
3
3
  "description": "Heartwood Utilities",
4
- "version": "6.2.0",
4
+ "version": "6.3.0",
5
5
  "skill": {
6
6
  "namespace": "heartwood"
7
7
  },
@@ -18,10 +18,14 @@
18
18
  "build/index-module.d.ts",
19
19
  "build/esm/index-module.js",
20
20
  "build/esm/index-module.d.ts",
21
- "build/RemoteViewControllerFactory.js",
22
- "build/RemoteViewControllerFactory.d.ts",
23
- "build/esm/RemoteViewControllerFactory.js",
24
- "build/esm/romoteViewContorllerFactory.d.ts",
21
+ "build/viewControllers/RemoteViewControllerFactory.js",
22
+ "build/viewControllers/RemoteViewControllerFactory.d.ts",
23
+ "build/esm/viewControllers/RemoteViewControllerFactory.js",
24
+ "build/esm/viewControllers/RemoteViewControllerFactory.d.ts",
25
+ "build/viewControllers/CardRegistrar.js",
26
+ "build/viewControllers/CardRegistrar.d.ts",
27
+ "build/esm/viewControllers/CardRegistrar.js",
28
+ "build/esm/viewControllers/CardRegistrar.d.ts",
25
29
  "build/ThemeManager.js",
26
30
  "build/ThemeManager.d.ts",
27
31
  "build/esm/ThemeManager.js",