@sprucelabs/test-utils 3.0.368 → 3.0.369
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/package.json +6 -5
- package/build/__tests__/behavioral/AssertsSpruceError.test.d.ts +0 -11
- package/build/__tests__/behavioral/AssertsSpruceError.test.js +0 -138
- package/build/esm/__tests__/behavioral/AssertsSpruceError.test.d.ts +0 -11
- package/build/esm/__tests__/behavioral/AssertsSpruceError.test.js +0 -134
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "3.0.
|
|
6
|
+
"version": "3.0.369",
|
|
7
7
|
"files": [
|
|
8
8
|
"build"
|
|
9
9
|
],
|
|
@@ -35,14 +35,15 @@
|
|
|
35
35
|
"build.ci": "yarn build.tsc && yarn lint",
|
|
36
36
|
"build.copy-files": "true",
|
|
37
37
|
"build.dev": "yarn build.tsc --sourceMap",
|
|
38
|
-
"build.dist": "
|
|
39
|
-
"build.esm-postbuild": "esm-postbuild --target
|
|
38
|
+
"build.dist": "tsc --project tsconfig.dist.json && yarn build.resolve-paths && mv build esm && yarn build.esm-postbuild && yarn build.tsc && yarn build.resolve-paths && mv esm build/ && yarn clean.dist",
|
|
39
|
+
"build.esm-postbuild": "esm-postbuild --target esm --patterns '**/*.js'",
|
|
40
40
|
"build.resolve-paths": "true",
|
|
41
41
|
"build.tsc": "tsc",
|
|
42
42
|
"clean": "yarn clean.build",
|
|
43
43
|
"clean.all": "yarn clean.dependencies && yarn clean.build",
|
|
44
44
|
"clean.build": "rm -rf build/",
|
|
45
45
|
"clean.dependencies": "rm -rf node_modules/ package-lock.json yarn.lock",
|
|
46
|
+
"clean.dist": "rm -rf build/__tests__ build/esm/__tests__",
|
|
46
47
|
"fix.lint": "eslint --fix --cache '**/*.ts'",
|
|
47
48
|
"lint": "eslint --cache '**/*.ts'",
|
|
48
49
|
"lint.tsc": "tsc -p . --noEmit",
|
|
@@ -62,12 +63,12 @@
|
|
|
62
63
|
"watch.tsc": "tsc -w"
|
|
63
64
|
},
|
|
64
65
|
"dependencies": {
|
|
65
|
-
"@sprucelabs/error": "^5.0.
|
|
66
|
+
"@sprucelabs/error": "^5.0.366",
|
|
66
67
|
"@sprucelabs/test": "^7.7.269",
|
|
67
68
|
"lodash": "^4.17.21"
|
|
68
69
|
},
|
|
69
70
|
"devDependencies": {
|
|
70
|
-
"@sprucelabs/esm-postbuild": "^1.0.
|
|
71
|
+
"@sprucelabs/esm-postbuild": "^1.0.321",
|
|
71
72
|
"@sprucelabs/semantic-release": "^4.0.8",
|
|
72
73
|
"@types/lodash": "^4.14.178",
|
|
73
74
|
"@types/node": "^17.0.8",
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import AbstractSpruceTest from '@sprucelabs/test';
|
|
2
|
-
export default class AssertsSpruceErrorTest extends AbstractSpruceTest {
|
|
3
|
-
protected static failsWhenErrorCodeDoesNotMatch(): Promise<void>;
|
|
4
|
-
protected static failsWhenErrorIsNotSpruceError(): Promise<void>;
|
|
5
|
-
protected static failsWhenCodeMatchesButOptionsDoNotMatch(): Promise<void>;
|
|
6
|
-
protected static passesWhenCodeMatches(): Promise<void>;
|
|
7
|
-
protected static passesWhenCodeAndPayloadMatches(): Promise<void>;
|
|
8
|
-
protected static testPrettyPrinting(): Promise<void>;
|
|
9
|
-
protected static strippingFriendlyMessage(options: any, expected: any): void;
|
|
10
|
-
protected static strippingFriendlyMessageConvertsSpruceErrorToOptions(): void;
|
|
11
|
-
}
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
15
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
16
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
17
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
18
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
19
|
-
};
|
|
20
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
21
|
-
if (mod && mod.__esModule) return mod;
|
|
22
|
-
var result = {};
|
|
23
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
24
|
-
__setModuleDefault(result, mod);
|
|
25
|
-
return result;
|
|
26
|
-
};
|
|
27
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
28
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
29
|
-
};
|
|
30
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
-
const error_1 = __importDefault(require("@sprucelabs/error"));
|
|
32
|
-
const test_1 = __importStar(require("@sprucelabs/test"));
|
|
33
|
-
const errorAssert_utility_1 = __importDefault(require("../../utilities/errorAssert.utility"));
|
|
34
|
-
class TestError extends error_1.default {
|
|
35
|
-
}
|
|
36
|
-
class AssertsSpruceErrorTest extends test_1.default {
|
|
37
|
-
static async failsWhenErrorCodeDoesNotMatch() {
|
|
38
|
-
const err = new TestError({ code: 'ERROR_ONE', booleanParam: true });
|
|
39
|
-
test_1.assert.doesThrow(() => errorAssert_utility_1.default.assertError(err, 'ERROR_THREE'), /Invalid error code. Expected.*?ERROR_THREE.*?but got.*?ERROR_ONE/gis);
|
|
40
|
-
}
|
|
41
|
-
static async failsWhenErrorIsNotSpruceError() {
|
|
42
|
-
test_1.assert.doesThrow(
|
|
43
|
-
//@ts-ignore
|
|
44
|
-
() => errorAssert_utility_1.default.assertError(new Error('taco bell'), 'ERROR_THREE'), /Did not receive a SpruceError/);
|
|
45
|
-
test_1.assert.doesThrow(
|
|
46
|
-
//@ts-ignore
|
|
47
|
-
() => errorAssert_utility_1.default.assertError(
|
|
48
|
-
//@ts-ignore
|
|
49
|
-
{ options: { code: 'TEST_ERROR' } }, 'TEST_ERROR'), /Did not receive a SpruceError/);
|
|
50
|
-
}
|
|
51
|
-
static async failsWhenCodeMatchesButOptionsDoNotMatch() {
|
|
52
|
-
const err = new TestError({ code: 'ERROR_ONE', booleanParam: true });
|
|
53
|
-
test_1.assert.doesThrow(() => errorAssert_utility_1.default.assertError(err, 'ERROR_ONE', { hello: 'world' }), /hello(.*?)was not found in/gis);
|
|
54
|
-
}
|
|
55
|
-
static async passesWhenCodeMatches() {
|
|
56
|
-
const err = new TestError({ code: 'ERROR_ONE', booleanParam: true });
|
|
57
|
-
errorAssert_utility_1.default.assertError(err, 'ERROR_ONE');
|
|
58
|
-
}
|
|
59
|
-
static async passesWhenCodeAndPayloadMatches() {
|
|
60
|
-
const err = new TestError({ code: 'ERROR_ONE', booleanParam: true });
|
|
61
|
-
errorAssert_utility_1.default.assertError(err, 'ERROR_ONE', { booleanParam: true });
|
|
62
|
-
}
|
|
63
|
-
static async testPrettyPrinting() {
|
|
64
|
-
try {
|
|
65
|
-
throw new TestError({ code: 'ERROR_ONE', booleanParam: true });
|
|
66
|
-
}
|
|
67
|
-
catch (err) {
|
|
68
|
-
errorAssert_utility_1.default.assertError(err, 'ERROR_TWO');
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
static strippingFriendlyMessage(options, expected) {
|
|
72
|
-
const actual = errorAssert_utility_1.default.stripFriendlyMessageFromOptions(options);
|
|
73
|
-
test_1.assert.isEqualDeep(actual, expected);
|
|
74
|
-
}
|
|
75
|
-
static strippingFriendlyMessageConvertsSpruceErrorToOptions() {
|
|
76
|
-
const actual = errorAssert_utility_1.default.stripFriendlyMessageFromOptions({
|
|
77
|
-
fun: {
|
|
78
|
-
times: [
|
|
79
|
-
new TestError({ code: 'ERROR_ONE', booleanParam: true }),
|
|
80
|
-
new TestError({ code: 'ERROR_TWO', textParam: 'text' }),
|
|
81
|
-
],
|
|
82
|
-
},
|
|
83
|
-
});
|
|
84
|
-
test_1.assert.isEqualDeep(actual, {
|
|
85
|
-
fun: {
|
|
86
|
-
times: [
|
|
87
|
-
{
|
|
88
|
-
options: {
|
|
89
|
-
code: 'ERROR_ONE',
|
|
90
|
-
booleanParam: true,
|
|
91
|
-
},
|
|
92
|
-
},
|
|
93
|
-
{
|
|
94
|
-
options: {
|
|
95
|
-
code: 'ERROR_TWO',
|
|
96
|
-
textParam: 'text',
|
|
97
|
-
},
|
|
98
|
-
},
|
|
99
|
-
],
|
|
100
|
-
},
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
__decorate([
|
|
105
|
-
(0, test_1.test)()
|
|
106
|
-
], AssertsSpruceErrorTest, "failsWhenErrorCodeDoesNotMatch", null);
|
|
107
|
-
__decorate([
|
|
108
|
-
(0, test_1.test)()
|
|
109
|
-
], AssertsSpruceErrorTest, "failsWhenErrorIsNotSpruceError", null);
|
|
110
|
-
__decorate([
|
|
111
|
-
(0, test_1.test)()
|
|
112
|
-
], AssertsSpruceErrorTest, "failsWhenCodeMatchesButOptionsDoNotMatch", null);
|
|
113
|
-
__decorate([
|
|
114
|
-
(0, test_1.test)()
|
|
115
|
-
], AssertsSpruceErrorTest, "passesWhenCodeMatches", null);
|
|
116
|
-
__decorate([
|
|
117
|
-
(0, test_1.test)()
|
|
118
|
-
], AssertsSpruceErrorTest, "passesWhenCodeAndPayloadMatches", null);
|
|
119
|
-
__decorate([
|
|
120
|
-
test_1.test.skip('Enable to review pretty printed output. Always fails.')
|
|
121
|
-
], AssertsSpruceErrorTest, "testPrettyPrinting", null);
|
|
122
|
-
__decorate([
|
|
123
|
-
(0, test_1.test)('can strip friendly message from options top level', { code: 'TEST', friendlyMessage: 'go away' }, { code: 'TEST' }),
|
|
124
|
-
(0, test_1.test)('can strip friendly message from options at one level', { results: { code: 'TEST', friendlyMessage: 'go away' } }, { results: { code: 'TEST' } }),
|
|
125
|
-
(0, test_1.test)('can strip friendly message from options at one level in array', { results: [{ code: 'TEST', friendlyMessage: 'go away' }] }, { results: [{ code: 'TEST' }] }),
|
|
126
|
-
(0, test_1.test)('can strip friendly message from options at two levels', { results: { errors: [{ code: 'TEST', friendlyMessage: 'go away' }] } }, { results: { errors: [{ code: 'TEST' }] } }),
|
|
127
|
-
(0, test_1.test)('can handle null value', {
|
|
128
|
-
results: {
|
|
129
|
-
errors: [
|
|
130
|
-
{ code: 'TEST', aNullValue: null, friendlyMessage: 'go away' },
|
|
131
|
-
],
|
|
132
|
-
},
|
|
133
|
-
}, { results: { errors: [{ code: 'TEST', aNullValue: null }] } })
|
|
134
|
-
], AssertsSpruceErrorTest, "strippingFriendlyMessage", null);
|
|
135
|
-
__decorate([
|
|
136
|
-
(0, test_1.test)()
|
|
137
|
-
], AssertsSpruceErrorTest, "strippingFriendlyMessageConvertsSpruceErrorToOptions", null);
|
|
138
|
-
exports.default = AssertsSpruceErrorTest;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import AbstractSpruceTest from '@sprucelabs/test';
|
|
2
|
-
export default class AssertsSpruceErrorTest extends AbstractSpruceTest {
|
|
3
|
-
protected static failsWhenErrorCodeDoesNotMatch(): Promise<void>;
|
|
4
|
-
protected static failsWhenErrorIsNotSpruceError(): Promise<void>;
|
|
5
|
-
protected static failsWhenCodeMatchesButOptionsDoNotMatch(): Promise<void>;
|
|
6
|
-
protected static passesWhenCodeMatches(): Promise<void>;
|
|
7
|
-
protected static passesWhenCodeAndPayloadMatches(): Promise<void>;
|
|
8
|
-
protected static testPrettyPrinting(): Promise<void>;
|
|
9
|
-
protected static strippingFriendlyMessage(options: any, expected: any): void;
|
|
10
|
-
protected static strippingFriendlyMessageConvertsSpruceErrorToOptions(): void;
|
|
11
|
-
}
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
8
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
9
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
10
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
11
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
12
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
13
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
14
|
-
});
|
|
15
|
-
};
|
|
16
|
-
import AbstractSpruceError from '@sprucelabs/error';
|
|
17
|
-
import AbstractSpruceTest, { test, assert } from '@sprucelabs/test';
|
|
18
|
-
import errorAssertUtil from '../../utilities/errorAssert.utility.js';
|
|
19
|
-
class TestError extends AbstractSpruceError {
|
|
20
|
-
}
|
|
21
|
-
export default class AssertsSpruceErrorTest extends AbstractSpruceTest {
|
|
22
|
-
static failsWhenErrorCodeDoesNotMatch() {
|
|
23
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
24
|
-
const err = new TestError({ code: 'ERROR_ONE', booleanParam: true });
|
|
25
|
-
assert.doesThrow(() => errorAssertUtil.assertError(err, 'ERROR_THREE'), /Invalid error code. Expected.*?ERROR_THREE.*?but got.*?ERROR_ONE/gis);
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
static failsWhenErrorIsNotSpruceError() {
|
|
29
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
30
|
-
assert.doesThrow(
|
|
31
|
-
//@ts-ignore
|
|
32
|
-
() => errorAssertUtil.assertError(new Error('taco bell'), 'ERROR_THREE'), /Did not receive a SpruceError/);
|
|
33
|
-
assert.doesThrow(
|
|
34
|
-
//@ts-ignore
|
|
35
|
-
() => errorAssertUtil.assertError(
|
|
36
|
-
//@ts-ignore
|
|
37
|
-
{ options: { code: 'TEST_ERROR' } }, 'TEST_ERROR'), /Did not receive a SpruceError/);
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
static failsWhenCodeMatchesButOptionsDoNotMatch() {
|
|
41
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
42
|
-
const err = new TestError({ code: 'ERROR_ONE', booleanParam: true });
|
|
43
|
-
assert.doesThrow(() => errorAssertUtil.assertError(err, 'ERROR_ONE', { hello: 'world' }), /hello(.*?)was not found in/gis);
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
static passesWhenCodeMatches() {
|
|
47
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
-
const err = new TestError({ code: 'ERROR_ONE', booleanParam: true });
|
|
49
|
-
errorAssertUtil.assertError(err, 'ERROR_ONE');
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
static passesWhenCodeAndPayloadMatches() {
|
|
53
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
54
|
-
const err = new TestError({ code: 'ERROR_ONE', booleanParam: true });
|
|
55
|
-
errorAssertUtil.assertError(err, 'ERROR_ONE', { booleanParam: true });
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
static testPrettyPrinting() {
|
|
59
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
60
|
-
try {
|
|
61
|
-
throw new TestError({ code: 'ERROR_ONE', booleanParam: true });
|
|
62
|
-
}
|
|
63
|
-
catch (err) {
|
|
64
|
-
errorAssertUtil.assertError(err, 'ERROR_TWO');
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
static strippingFriendlyMessage(options, expected) {
|
|
69
|
-
const actual = errorAssertUtil.stripFriendlyMessageFromOptions(options);
|
|
70
|
-
assert.isEqualDeep(actual, expected);
|
|
71
|
-
}
|
|
72
|
-
static strippingFriendlyMessageConvertsSpruceErrorToOptions() {
|
|
73
|
-
const actual = errorAssertUtil.stripFriendlyMessageFromOptions({
|
|
74
|
-
fun: {
|
|
75
|
-
times: [
|
|
76
|
-
new TestError({ code: 'ERROR_ONE', booleanParam: true }),
|
|
77
|
-
new TestError({ code: 'ERROR_TWO', textParam: 'text' }),
|
|
78
|
-
],
|
|
79
|
-
},
|
|
80
|
-
});
|
|
81
|
-
assert.isEqualDeep(actual, {
|
|
82
|
-
fun: {
|
|
83
|
-
times: [
|
|
84
|
-
{
|
|
85
|
-
options: {
|
|
86
|
-
code: 'ERROR_ONE',
|
|
87
|
-
booleanParam: true,
|
|
88
|
-
},
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
options: {
|
|
92
|
-
code: 'ERROR_TWO',
|
|
93
|
-
textParam: 'text',
|
|
94
|
-
},
|
|
95
|
-
},
|
|
96
|
-
],
|
|
97
|
-
},
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
__decorate([
|
|
102
|
-
test()
|
|
103
|
-
], AssertsSpruceErrorTest, "failsWhenErrorCodeDoesNotMatch", null);
|
|
104
|
-
__decorate([
|
|
105
|
-
test()
|
|
106
|
-
], AssertsSpruceErrorTest, "failsWhenErrorIsNotSpruceError", null);
|
|
107
|
-
__decorate([
|
|
108
|
-
test()
|
|
109
|
-
], AssertsSpruceErrorTest, "failsWhenCodeMatchesButOptionsDoNotMatch", null);
|
|
110
|
-
__decorate([
|
|
111
|
-
test()
|
|
112
|
-
], AssertsSpruceErrorTest, "passesWhenCodeMatches", null);
|
|
113
|
-
__decorate([
|
|
114
|
-
test()
|
|
115
|
-
], AssertsSpruceErrorTest, "passesWhenCodeAndPayloadMatches", null);
|
|
116
|
-
__decorate([
|
|
117
|
-
test.skip('Enable to review pretty printed output. Always fails.')
|
|
118
|
-
], AssertsSpruceErrorTest, "testPrettyPrinting", null);
|
|
119
|
-
__decorate([
|
|
120
|
-
test('can strip friendly message from options top level', { code: 'TEST', friendlyMessage: 'go away' }, { code: 'TEST' }),
|
|
121
|
-
test('can strip friendly message from options at one level', { results: { code: 'TEST', friendlyMessage: 'go away' } }, { results: { code: 'TEST' } }),
|
|
122
|
-
test('can strip friendly message from options at one level in array', { results: [{ code: 'TEST', friendlyMessage: 'go away' }] }, { results: [{ code: 'TEST' }] }),
|
|
123
|
-
test('can strip friendly message from options at two levels', { results: { errors: [{ code: 'TEST', friendlyMessage: 'go away' }] } }, { results: { errors: [{ code: 'TEST' }] } }),
|
|
124
|
-
test('can handle null value', {
|
|
125
|
-
results: {
|
|
126
|
-
errors: [
|
|
127
|
-
{ code: 'TEST', aNullValue: null, friendlyMessage: 'go away' },
|
|
128
|
-
],
|
|
129
|
-
},
|
|
130
|
-
}, { results: { errors: [{ code: 'TEST', aNullValue: null }] } })
|
|
131
|
-
], AssertsSpruceErrorTest, "strippingFriendlyMessage", null);
|
|
132
|
-
__decorate([
|
|
133
|
-
test()
|
|
134
|
-
], AssertsSpruceErrorTest, "strippingFriendlyMessageConvertsSpruceErrorToOptions", null);
|