@sprucelabs/spruce-heartwood-utils 15.1.21 → 15.2.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.
@@ -2,6 +2,7 @@ import { ViewController, ViewControllerFactory } from '@sprucelabs/heartwood-vie
2
2
  import { MercuryClient } from '@sprucelabs/mercury-client';
3
3
  import { SkillTheme } from '../theming/ThemeManager';
4
4
  export default class RemoteViewControllerFactory implements Factory {
5
+ static Request: any;
5
6
  private connectToApi;
6
7
  private vcFactory;
7
8
  private themesByNamespace;
@@ -17,6 +18,7 @@ export default class RemoteViewControllerFactory implements Factory {
17
18
  }>;
18
19
  RemoteController(name: string, options: Record<string, any>): Promise<any>;
19
20
  private optionallyLoadController;
21
+ private fetchFromUrl;
20
22
  }
21
23
  declare type ConnectToApi = () => Promise<MercuryClient>;
22
24
  export declare type VcFactoryForRemoteFactory = Pick<ViewControllerFactory, 'setController' | 'hasController' | 'getController' | 'Controller' | 'importControllers'>;
@@ -8,6 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  import { ViewControllerImporter, } from '@sprucelabs/heartwood-view-controllers';
11
+ import SpruceError from '../errors/SpruceError.js';
11
12
  export default class RemoteViewControllerFactory {
12
13
  constructor(options) {
13
14
  this.themesByNamespace = {};
@@ -49,11 +50,14 @@ export default class RemoteViewControllerFactory {
49
50
  const namespace = this.getNamespace(name);
50
51
  if (!this.hasController(name) && namespace) {
51
52
  const client = yield this.connectToApi();
52
- const [{ source, theme }] = yield client.emitAndFlattenResponses('heartwood.get-skill-views::v2021_02_11', {
53
+ let [{ source, theme, sourceUrl }] = yield client.emitAndFlattenResponses('heartwood.get-skill-views::v2021_02_11', {
53
54
  target: {
54
55
  namespace,
55
56
  },
56
57
  });
58
+ if (!source) {
59
+ source = yield this.fetchFromUrl(sourceUrl);
60
+ }
57
61
  const importer = ViewControllerImporter.Importer();
58
62
  const skillViews = importer.import(source);
59
63
  skillViews.forEach((sv) => {
@@ -66,4 +70,28 @@ export default class RemoteViewControllerFactory {
66
70
  }
67
71
  });
68
72
  }
73
+ fetchFromUrl(sourceUrl) {
74
+ return __awaiter(this, void 0, void 0, function* () {
75
+ return (yield new Promise((resolve, reject) => {
76
+ const request = new RemoteViewControllerFactory.Request();
77
+ request.open('GET', sourceUrl, true);
78
+ request.onload = () => {
79
+ if (request.readyState !== 4) {
80
+ return;
81
+ }
82
+ if (request.status !== 200) {
83
+ reject(new SpruceError({
84
+ code: 'VIEW_CONTROLLER_CDN_FAILURE',
85
+ status: request.status,
86
+ responseText: request.responseText,
87
+ }));
88
+ return;
89
+ }
90
+ resolve(request.responseText);
91
+ };
92
+ request.send(null);
93
+ }));
94
+ });
95
+ }
69
96
  }
97
+ RemoteViewControllerFactory.Request = typeof XMLHttpRequest === 'undefined' ? {} : XMLHttpRequest;
@@ -2,6 +2,7 @@ import { ViewController, ViewControllerFactory } from '@sprucelabs/heartwood-vie
2
2
  import { MercuryClient } from '@sprucelabs/mercury-client';
3
3
  import { SkillTheme } from '../theming/ThemeManager';
4
4
  export default class RemoteViewControllerFactory implements Factory {
5
+ static Request: any;
5
6
  private connectToApi;
6
7
  private vcFactory;
7
8
  private themesByNamespace;
@@ -17,6 +18,7 @@ export default class RemoteViewControllerFactory implements Factory {
17
18
  }>;
18
19
  RemoteController(name: string, options: Record<string, any>): Promise<any>;
19
20
  private optionallyLoadController;
21
+ private fetchFromUrl;
20
22
  }
21
23
  declare type ConnectToApi = () => Promise<MercuryClient>;
22
24
  export declare type VcFactoryForRemoteFactory = Pick<ViewControllerFactory, 'setController' | 'hasController' | 'getController' | 'Controller' | 'importControllers'>;
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  const heartwood_view_controllers_1 = require("@sprucelabs/heartwood-view-controllers");
7
+ const SpruceError_1 = __importDefault(require("../errors/SpruceError"));
4
8
  class RemoteViewControllerFactory {
5
9
  constructor(options) {
6
10
  this.themesByNamespace = {};
@@ -37,11 +41,14 @@ class RemoteViewControllerFactory {
37
41
  const namespace = this.getNamespace(name);
38
42
  if (!this.hasController(name) && namespace) {
39
43
  const client = await this.connectToApi();
40
- const [{ source, theme }] = await client.emitAndFlattenResponses('heartwood.get-skill-views::v2021_02_11', {
44
+ let [{ source, theme, sourceUrl }] = await client.emitAndFlattenResponses('heartwood.get-skill-views::v2021_02_11', {
41
45
  target: {
42
46
  namespace,
43
47
  },
44
48
  });
49
+ if (!source) {
50
+ source = await this.fetchFromUrl(sourceUrl);
51
+ }
45
52
  const importer = heartwood_view_controllers_1.ViewControllerImporter.Importer();
46
53
  const skillViews = importer.import(source);
47
54
  skillViews.forEach((sv) => {
@@ -53,6 +60,28 @@ class RemoteViewControllerFactory {
53
60
  }
54
61
  }
55
62
  }
63
+ async fetchFromUrl(sourceUrl) {
64
+ return (await new Promise((resolve, reject) => {
65
+ const request = new RemoteViewControllerFactory.Request();
66
+ request.open('GET', sourceUrl, true);
67
+ request.onload = () => {
68
+ if (request.readyState !== 4) {
69
+ return;
70
+ }
71
+ if (request.status !== 200) {
72
+ reject(new SpruceError_1.default({
73
+ code: 'VIEW_CONTROLLER_CDN_FAILURE',
74
+ status: request.status,
75
+ responseText: request.responseText,
76
+ }));
77
+ return;
78
+ }
79
+ resolve(request.responseText);
80
+ };
81
+ request.send(null);
82
+ }));
83
+ }
56
84
  }
57
85
  exports.default = RemoteViewControllerFactory;
86
+ RemoteViewControllerFactory.Request = typeof XMLHttpRequest === 'undefined' ? {} : XMLHttpRequest;
58
87
  //# sourceMappingURL=RemoteViewControllerFactory.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sprucelabs/spruce-heartwood-utils",
3
3
  "description": "Heartwood Utilities",
4
- "version": "15.1.21",
4
+ "version": "15.2.0",
5
5
  "skill": {
6
6
  "namespace": "heartwood"
7
7
  },