@sprucelabs/spruce-heartwood-utils 15.1.22 → 15.2.1

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.
@@ -0,0 +1,5 @@
1
+ import AbstractSpruceError from '@sprucelabs/error';
2
+ import ErrorOptions from "./../.spruce/errors/options.types";
3
+ export default class SpruceError extends AbstractSpruceError<ErrorOptions> {
4
+ friendlyMessage(): string;
5
+ }
@@ -0,0 +1,44 @@
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 error_1 = __importDefault(require("@sprucelabs/error"));
7
+ class SpruceError extends error_1.default {
8
+ friendlyMessage() {
9
+ const { options } = this;
10
+ let message;
11
+ switch (options === null || options === void 0 ? void 0 : options.code) {
12
+ case 'CONTROLLER_NOT_SET_ON_VIEW':
13
+ message =
14
+ 'A view controller has not been set as the `controller` of the view returned from render().';
15
+ break;
16
+ case 'SKILL_VIEWS_NOT_FOUND':
17
+ message = `I could not find any skill views under the namespace ${options.namespace}`;
18
+ break;
19
+ case 'INVALID_VIEW_CONTROLLER_SOURCE':
20
+ message = 'A Invalid view controller source just happened!';
21
+ break;
22
+ case 'INVALID_VIEW_CONTROLLER_NAME':
23
+ message = 'A Invalid view controller name just happened!';
24
+ break;
25
+ case 'PERMISSION_NOT_FOUND':
26
+ message = 'A Permission not found just happened!';
27
+ break;
28
+ case 'INVALID_TIMEZONE_NAME':
29
+ message = `Invalid timezone: ${options.name}!`;
30
+ break;
31
+ case 'VIEW_CONTROLLER_CDN_FAILURE':
32
+ message = `Failed to load view controller from CDN.\nResponse: ${options.responseText}\nStatus: ${options.status}`;
33
+ break;
34
+ default:
35
+ message = super.friendlyMessage();
36
+ }
37
+ const fullMessage = options.friendlyMessage
38
+ ? options.friendlyMessage
39
+ : message;
40
+ return fullMessage;
41
+ }
42
+ }
43
+ exports.default = SpruceError;
44
+ //# sourceMappingURL=SpruceError.js.map
@@ -0,0 +1,5 @@
1
+ import AbstractSpruceError from '@sprucelabs/error';
2
+ import ErrorOptions from "./../.spruce/errors/options.types";
3
+ export default class SpruceError extends AbstractSpruceError<ErrorOptions> {
4
+ friendlyMessage(): string;
5
+ }
@@ -0,0 +1,37 @@
1
+ import AbstractSpruceError from '@sprucelabs/error';
2
+ export default class SpruceError extends AbstractSpruceError {
3
+ friendlyMessage() {
4
+ const { options } = this;
5
+ let message;
6
+ switch (options === null || options === void 0 ? void 0 : options.code) {
7
+ case 'CONTROLLER_NOT_SET_ON_VIEW':
8
+ message =
9
+ 'A view controller has not been set as the `controller` of the view returned from render().';
10
+ break;
11
+ case 'SKILL_VIEWS_NOT_FOUND':
12
+ message = `I could not find any skill views under the namespace ${options.namespace}`;
13
+ break;
14
+ case 'INVALID_VIEW_CONTROLLER_SOURCE':
15
+ message = 'A Invalid view controller source just happened!';
16
+ break;
17
+ case 'INVALID_VIEW_CONTROLLER_NAME':
18
+ message = 'A Invalid view controller name just happened!';
19
+ break;
20
+ case 'PERMISSION_NOT_FOUND':
21
+ message = 'A Permission not found just happened!';
22
+ break;
23
+ case 'INVALID_TIMEZONE_NAME':
24
+ message = `Invalid timezone: ${options.name}!`;
25
+ break;
26
+ case 'VIEW_CONTROLLER_CDN_FAILURE':
27
+ message = `Failed to load view controller from CDN.\nResponse: ${options.responseText}\nStatus: ${options.status}`;
28
+ break;
29
+ default:
30
+ message = super.friendlyMessage();
31
+ }
32
+ const fullMessage = options.friendlyMessage
33
+ ? options.friendlyMessage
34
+ : message;
35
+ return fullMessage;
36
+ }
37
+ }
@@ -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,66 +1,70 @@
1
1
  {
2
- "name": "@sprucelabs/spruce-heartwood-utils",
3
- "description": "Heartwood Utilities",
4
- "version": "15.1.22",
5
- "skill": {
6
- "namespace": "heartwood"
7
- },
8
- "homepage": "https://github.com/sprucelabsai/spruce-heartwood-skill",
9
- "bugs": {
10
- "url": "https://github.com/sprucelabsai/spruce-heartwood-skill/issues"
11
- },
12
- "main": "./build/index-module.js",
13
- "types": "./build/index-module.d.ts",
14
- "module": "./build/esm/index-module.js",
15
- "sideEffects": false,
16
- "files": [
17
- "build/index-module.js",
18
- "build/index-module.d.ts",
19
- "build/esm/index-module.js",
20
- "build/esm/index-module.d.ts",
21
- "build/skillViews/RemoteViewControllerFactory.js",
22
- "build/skillViews/RemoteViewControllerFactory.d.ts",
23
- "build/esm/skillViews/RemoteViewControllerFactory.js",
24
- "build/esm/skillViews/RemoteViewControllerFactory.d.ts",
25
- "build/skillViews/CardRegistrar.js",
26
- "build/skillViews/CardRegistrar.d.ts",
27
- "build/esm/skillViews/CardRegistrar.js",
28
- "build/esm/skillViews/CardRegistrar.d.ts",
29
- "build/theming/ThemeManager.js",
30
- "build/theming/ThemeManager.d.ts",
31
- "build/esm/theming/ThemeManager.js",
32
- "build/esm/theming/ThemeManager.d.ts",
33
- "build/__tests__/support/remoteVcAssert.js",
34
- "build/__tests__/support/remoteVcAssert.d.ts",
35
- "build/esm/__tests__/support/remoteVcAssert.js",
36
- "build/esm/__tests__/support/remoteVcAssert.d.ts",
37
- "build/utilities/slug.js",
38
- "build/utilities/slug.d.ts",
39
- "build/esm/utilities/slug.js",
40
- "build/esm/utilities/slug.d.ts",
41
- "build/types/heartwood-module.types.js",
42
- "build/types/heartwood-module.types.d.ts",
43
- "build/esm/types/heartwood-module.types.js",
44
- "build/esm/types/heartwood-module.types.d.ts",
45
- "build/theming/loadActiveThemeForOrg.js",
46
- "build/theming/loadActiveThemeForOrg.d.ts",
47
- "build/esm/theming/loadActiveThemeForOrg.js",
48
- "build/esm/theming/loadActiveThemeForOrg.d.ts"
49
- ],
50
- "keywords": [],
51
- "scripts": {
52
- "release": "npm publish"
53
- },
54
- "dependencies": {
55
- "@sprucelabs/heartwood-view-controllers": "latest",
56
- "@sprucelabs/mercury-client": "latest",
57
- "@sprucelabs/mercury-types": "latest",
58
- "@sprucelabs/schema": "latest",
59
- "@sprucelabs/spruce-event-utils": "latest",
60
- "@sprucelabs/spruce-test-fixtures": "latest",
61
- "@sprucelabs/test": "latest"
62
- },
63
- "engines": {
64
- "yarn": "1.x"
65
- }
2
+ "name": "@sprucelabs/spruce-heartwood-utils",
3
+ "description": "Heartwood Utilities",
4
+ "version": "15.2.1",
5
+ "skill": {
6
+ "namespace": "heartwood"
7
+ },
8
+ "homepage": "https://github.com/sprucelabsai/spruce-heartwood-skill",
9
+ "bugs": {
10
+ "url": "https://github.com/sprucelabsai/spruce-heartwood-skill/issues"
11
+ },
12
+ "main": "./build/index-module.js",
13
+ "types": "./build/index-module.d.ts",
14
+ "module": "./build/esm/index-module.js",
15
+ "sideEffects": false,
16
+ "files": [
17
+ "build/index-module.js",
18
+ "build/index-module.d.ts",
19
+ "build/esm/index-module.js",
20
+ "build/esm/index-module.d.ts",
21
+ "build/skillViews/RemoteViewControllerFactory.js",
22
+ "build/skillViews/RemoteViewControllerFactory.d.ts",
23
+ "build/esm/skillViews/RemoteViewControllerFactory.js",
24
+ "build/esm/skillViews/RemoteViewControllerFactory.d.ts",
25
+ "build/skillViews/CardRegistrar.js",
26
+ "build/skillViews/CardRegistrar.d.ts",
27
+ "build/esm/skillViews/CardRegistrar.js",
28
+ "build/esm/skillViews/CardRegistrar.d.ts",
29
+ "build/theming/ThemeManager.js",
30
+ "build/theming/ThemeManager.d.ts",
31
+ "build/esm/theming/ThemeManager.js",
32
+ "build/esm/theming/ThemeManager.d.ts",
33
+ "build/__tests__/support/remoteVcAssert.js",
34
+ "build/__tests__/support/remoteVcAssert.d.ts",
35
+ "build/esm/__tests__/support/remoteVcAssert.js",
36
+ "build/esm/__tests__/support/remoteVcAssert.d.ts",
37
+ "build/utilities/slug.js",
38
+ "build/utilities/slug.d.ts",
39
+ "build/esm/utilities/slug.js",
40
+ "build/esm/utilities/slug.d.ts",
41
+ "build/errors/SpruceError.js",
42
+ "build/errors/SpruceError.d.ts",
43
+ "build/esm/errors/SpruceError.js",
44
+ "build/esm/errors/SpruceError.d.ts",
45
+ "build/types/heartwood-module.types.js",
46
+ "build/types/heartwood-module.types.d.ts",
47
+ "build/esm/types/heartwood-module.types.js",
48
+ "build/esm/types/heartwood-module.types.d.ts",
49
+ "build/theming/loadActiveThemeForOrg.js",
50
+ "build/theming/loadActiveThemeForOrg.d.ts",
51
+ "build/esm/theming/loadActiveThemeForOrg.js",
52
+ "build/esm/theming/loadActiveThemeForOrg.d.ts"
53
+ ],
54
+ "keywords": [],
55
+ "scripts": {
56
+ "release": "npm publish"
57
+ },
58
+ "dependencies": {
59
+ "@sprucelabs/heartwood-view-controllers": "latest",
60
+ "@sprucelabs/mercury-client": "latest",
61
+ "@sprucelabs/mercury-types": "latest",
62
+ "@sprucelabs/schema": "latest",
63
+ "@sprucelabs/spruce-event-utils": "latest",
64
+ "@sprucelabs/spruce-test-fixtures": "latest",
65
+ "@sprucelabs/test": "latest"
66
+ },
67
+ "engines": {
68
+ "yarn": "1.x"
69
+ }
66
70
  }