lucid-package 0.0.44 → 0.0.46
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 +1 -1
- package/src/packagemanifest.js +44 -41
package/package.json
CHANGED
package/src/packagemanifest.js
CHANGED
|
@@ -3,19 +3,22 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.readManifest = exports.SettingType = void 0;
|
|
4
4
|
const fs = require("fs");
|
|
5
5
|
const fsPromises = require("fs/promises");
|
|
6
|
-
const
|
|
7
|
-
const validators_1 = require("lucid-extension-sdk/sdk/core/validators/validators");
|
|
6
|
+
const lucid_extension_sdk_1 = require("lucid-extension-sdk");
|
|
8
7
|
const supportedproduct_1 = require("./supportedproduct");
|
|
9
8
|
var SettingType;
|
|
10
9
|
(function (SettingType) {
|
|
11
10
|
SettingType["STRING"] = "string";
|
|
12
11
|
})(SettingType = exports.SettingType || (exports.SettingType = {}));
|
|
13
12
|
const versionRegex = /^\d+\.\d+\.\d+$/;
|
|
13
|
+
const uuidRegex = /^[a-f\d]{8}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{12}$/i;
|
|
14
14
|
function validateManifestOrThrow(manifest) {
|
|
15
|
-
if (!(0,
|
|
15
|
+
if (!(0, lucid_extension_sdk_1.isObject)(manifest)) {
|
|
16
16
|
throw new Error('manifest.json must be a valid JSON object');
|
|
17
17
|
}
|
|
18
|
-
if (!(0,
|
|
18
|
+
if (manifest['id'] !== undefined && (!(0, lucid_extension_sdk_1.isString)(manifest['id']) || !uuidRegex.test(manifest['id']))) {
|
|
19
|
+
throw new Error('manifest.json: If "id" is specified, must be a UUID matching the package ID from the Lucid developer portal');
|
|
20
|
+
}
|
|
21
|
+
if (!(0, lucid_extension_sdk_1.isString)(manifest['version']) || !versionRegex.test(manifest['version'])) {
|
|
19
22
|
throw new Error('manifest.json: "version" must be a string in the format <major>.<minor>.<patch>');
|
|
20
23
|
}
|
|
21
24
|
function validateUniqueNames(kindOfThings, things) {
|
|
@@ -24,55 +27,55 @@ function validateManifestOrThrow(manifest) {
|
|
|
24
27
|
}
|
|
25
28
|
}
|
|
26
29
|
if (manifest['settings']) {
|
|
27
|
-
if (!(0,
|
|
30
|
+
if (!(0, lucid_extension_sdk_1.isTypedArray)(lucid_extension_sdk_1.isObject)(manifest['settings'])) {
|
|
28
31
|
throw new Error('manifest.json: "settings" must be an array of objects');
|
|
29
32
|
}
|
|
30
33
|
validateUniqueNames('settings', manifest['settings']);
|
|
31
34
|
for (const setting of manifest['settings']) {
|
|
32
|
-
if (!(0,
|
|
35
|
+
if (!(0, lucid_extension_sdk_1.isString)(setting['name'])) {
|
|
33
36
|
throw new Error('manifest.json: setting "name" must be a string');
|
|
34
37
|
}
|
|
35
|
-
if (!(0,
|
|
38
|
+
if (!(0, lucid_extension_sdk_1.isString)(setting['label'])) {
|
|
36
39
|
throw new Error('manifest.json: setting "label" must be a string');
|
|
37
40
|
}
|
|
38
|
-
if (!(0,
|
|
41
|
+
if (!(0, lucid_extension_sdk_1.isString)(setting['description'])) {
|
|
39
42
|
throw new Error('manifest.json: setting "description" must be a string');
|
|
40
43
|
}
|
|
41
|
-
if (!(0,
|
|
44
|
+
if (!(0, lucid_extension_sdk_1.enumValidator)(SettingType)(setting['type'])) {
|
|
42
45
|
throw new Error('manifest.json: setting "type" must be "string"');
|
|
43
46
|
}
|
|
44
47
|
}
|
|
45
48
|
}
|
|
46
49
|
if (manifest['extensions']) {
|
|
47
|
-
if (!(0,
|
|
50
|
+
if (!(0, lucid_extension_sdk_1.isTypedArray)(lucid_extension_sdk_1.isObject)(manifest['extensions'])) {
|
|
48
51
|
throw new Error('manifest.json: "extensions" must be an array of objects');
|
|
49
52
|
}
|
|
50
53
|
validateUniqueNames('extensions', manifest['extensions']);
|
|
51
54
|
for (const extension of manifest['extensions']) {
|
|
52
|
-
if (!(0,
|
|
55
|
+
if (!(0, lucid_extension_sdk_1.isString)(extension['name'])) {
|
|
53
56
|
throw new Error('manifest.json: extension "name" must be a string');
|
|
54
57
|
}
|
|
55
|
-
if (!(0,
|
|
58
|
+
if (!(0, lucid_extension_sdk_1.isString)(extension['title'])) {
|
|
56
59
|
throw new Error('manifest.json: extension "title" must be a string');
|
|
57
60
|
}
|
|
58
|
-
if (!(0,
|
|
61
|
+
if (!(0, lucid_extension_sdk_1.isString)(extension['codePath'])) {
|
|
59
62
|
throw new Error('manifest.json: extension "codePath" must be a string');
|
|
60
63
|
}
|
|
61
|
-
if (!(0,
|
|
64
|
+
if (!(0, lucid_extension_sdk_1.isTypedArray)(lucid_extension_sdk_1.isString)(extension['scopes'])) {
|
|
62
65
|
throw new Error('manifest.json: extension "scopes" must be a string array');
|
|
63
66
|
}
|
|
64
67
|
if ((extension['product'] && extension['products']) ||
|
|
65
|
-
(!(0,
|
|
68
|
+
(!(0, lucid_extension_sdk_1.isDef)(extension['product']) && !(0, lucid_extension_sdk_1.isDef)(extension['products']))) {
|
|
66
69
|
throw new Error('either the "product" or "products" field must be specified and not both');
|
|
67
70
|
}
|
|
68
71
|
const supportedProducts = Object.values(supportedproduct_1.SupportedProduct);
|
|
69
72
|
if (extension['product']) {
|
|
70
|
-
if (!(0,
|
|
73
|
+
if (!(0, lucid_extension_sdk_1.enumValidator)(supportedproduct_1.SupportedProduct)(extension['product'])) {
|
|
71
74
|
throw new Error(`manifest.json: found ${extension['product']}. extension "product" must be one of ${supportedProducts}`);
|
|
72
75
|
}
|
|
73
76
|
}
|
|
74
77
|
if (extension['products']) {
|
|
75
|
-
if (!(0,
|
|
78
|
+
if (!(0, lucid_extension_sdk_1.isTypedArray)((0, lucid_extension_sdk_1.enumValidator)(supportedproduct_1.SupportedProduct))(extension['products']) ||
|
|
76
79
|
extension['products'].length === 0) {
|
|
77
80
|
throw new Error(`manifest.json: found ${extension['products']}. extension "products" must be an array containing values from ${supportedProducts}`);
|
|
78
81
|
}
|
|
@@ -80,15 +83,15 @@ function validateManifestOrThrow(manifest) {
|
|
|
80
83
|
}
|
|
81
84
|
}
|
|
82
85
|
if (manifest['shapeLibraries']) {
|
|
83
|
-
if (!(0,
|
|
86
|
+
if (!(0, lucid_extension_sdk_1.isTypedArray)(lucid_extension_sdk_1.isObject)(manifest['shapeLibraries'])) {
|
|
84
87
|
throw new Error('manifest.json: "shapeLibraries" must be an array of objects');
|
|
85
88
|
}
|
|
86
89
|
validateUniqueNames('shapeLibraries', manifest['shapeLibraries']);
|
|
87
90
|
for (const shapeLibrary of manifest['shapeLibraries']) {
|
|
88
|
-
if (!(0,
|
|
91
|
+
if (!(0, lucid_extension_sdk_1.isString)(shapeLibrary['name'])) {
|
|
89
92
|
throw new Error('manifest.json: shape library "name" must be a string');
|
|
90
93
|
}
|
|
91
|
-
if (!(0,
|
|
94
|
+
if (!(0, lucid_extension_sdk_1.isString)(shapeLibrary['lcszPath'])) {
|
|
92
95
|
throw new Error('manifest.json: shape library "lcszPath" must be a string');
|
|
93
96
|
}
|
|
94
97
|
if (shapeLibrary['product'] !== 'chart' && shapeLibrary['product'] !== 'spark') {
|
|
@@ -97,15 +100,15 @@ function validateManifestOrThrow(manifest) {
|
|
|
97
100
|
}
|
|
98
101
|
}
|
|
99
102
|
if (manifest['oauthProviders']) {
|
|
100
|
-
if (!(0,
|
|
103
|
+
if (!(0, lucid_extension_sdk_1.isTypedArray)(lucid_extension_sdk_1.isObject)(manifest['oauthProviders'])) {
|
|
101
104
|
throw new Error('manifest.json: "oauthProviders" must be an array of objects');
|
|
102
105
|
}
|
|
103
106
|
validateUniqueNames('oauthProviders', manifest['oauthProviders']);
|
|
104
107
|
for (const provider of manifest['oauthProviders']) {
|
|
105
|
-
if (!(0,
|
|
108
|
+
if (!(0, lucid_extension_sdk_1.isString)(provider['name'])) {
|
|
106
109
|
throw new Error('manifest.json: OAuth provider "name" must be a string');
|
|
107
110
|
}
|
|
108
|
-
if (!(0,
|
|
111
|
+
if (!(0, lucid_extension_sdk_1.isString)(provider['title'])) {
|
|
109
112
|
throw new Error('manifest.json: OAuth provider "title" must be a string');
|
|
110
113
|
}
|
|
111
114
|
if (provider['grantType'] &&
|
|
@@ -113,7 +116,7 @@ function validateManifestOrThrow(manifest) {
|
|
|
113
116
|
provider['grantType'] !== 'clientCredentials') {
|
|
114
117
|
throw new Error('manifest.json: OAuth provider "grantType" must be "authorizationCode" or "clientCredentials"');
|
|
115
118
|
}
|
|
116
|
-
if (provider['grantType'] === 'authorizationCode' && !(0,
|
|
119
|
+
if (provider['grantType'] === 'authorizationCode' && !(0, lucid_extension_sdk_1.isString)(provider['authorizationUrl'])) {
|
|
117
120
|
throw new Error('manifest.json: OAuth provider "authorizationUrl" must be a string');
|
|
118
121
|
}
|
|
119
122
|
if (provider['grantType'] === 'clientCredentials' && provider['authorizationUrl']) {
|
|
@@ -122,13 +125,13 @@ function validateManifestOrThrow(manifest) {
|
|
|
122
125
|
if (provider['grantType'] === 'clientCredentials' && provider['usePkce']) {
|
|
123
126
|
throw new Error('manifest.json: OAuth provider "usePkce" must not be provided when grantType is "clientCredentials"');
|
|
124
127
|
}
|
|
125
|
-
if (!(0,
|
|
128
|
+
if (!(0, lucid_extension_sdk_1.isString)(provider['tokenUrl'])) {
|
|
126
129
|
throw new Error('manifest.json: OAuth provider "tokenUrl" must be a string');
|
|
127
130
|
}
|
|
128
|
-
if (!(0,
|
|
131
|
+
if (!(0, lucid_extension_sdk_1.isTypedArray)(lucid_extension_sdk_1.isString)(provider['scopes'])) {
|
|
129
132
|
throw new Error('manifest.json: OAuth provider "scopes" must be a string array');
|
|
130
133
|
}
|
|
131
|
-
if (!(0,
|
|
134
|
+
if (!(0, lucid_extension_sdk_1.isTypedArray)(lucid_extension_sdk_1.isString)(provider['domainWhitelist'])) {
|
|
132
135
|
throw new Error('manifest.json: OAuth provider "domainWhitelist" must be a string array');
|
|
133
136
|
}
|
|
134
137
|
if (provider['clientAuthentication'] !== 'basic' &&
|
|
@@ -138,54 +141,54 @@ function validateManifestOrThrow(manifest) {
|
|
|
138
141
|
}
|
|
139
142
|
}
|
|
140
143
|
if (manifest['mergeProviders']) {
|
|
141
|
-
if (!(0,
|
|
144
|
+
if (!(0, lucid_extension_sdk_1.isTypedArray)(lucid_extension_sdk_1.isObject)(manifest['mergeProviders'])) {
|
|
142
145
|
throw new Error('manifest.json: "mergeProviders" must be an array of objects');
|
|
143
146
|
}
|
|
144
147
|
validateUniqueNames('mergeProviders', manifest['mergeProviders']);
|
|
145
148
|
for (const provider of manifest['mergeProviders']) {
|
|
146
|
-
if (!(0,
|
|
149
|
+
if (!(0, lucid_extension_sdk_1.isString)(provider['name'])) {
|
|
147
150
|
throw new Error('manifest.json: Merge provider "name" must be a string');
|
|
148
151
|
}
|
|
149
|
-
if (!(0,
|
|
152
|
+
if (!(0, lucid_extension_sdk_1.isString)(provider['title'])) {
|
|
150
153
|
throw new Error('manifest.json: Merge provider "title" must be a string');
|
|
151
154
|
}
|
|
152
|
-
if (!(0,
|
|
155
|
+
if (!(0, lucid_extension_sdk_1.isTypedArray)(lucid_extension_sdk_1.isString)(provider['categories'])) {
|
|
153
156
|
throw new Error('manifest.json: Merge provider "categories" must be a string array');
|
|
154
157
|
}
|
|
155
|
-
if (provider['integration'] && !(0,
|
|
158
|
+
if (provider['integration'] && !(0, lucid_extension_sdk_1.isString)(provider['integration'])) {
|
|
156
159
|
throw new Error('manifest.json: Merge provider "integration" must be a string');
|
|
157
160
|
}
|
|
158
161
|
}
|
|
159
162
|
}
|
|
160
163
|
if (manifest['dataConnectors']) {
|
|
161
|
-
if (!(0,
|
|
164
|
+
if (!(0, lucid_extension_sdk_1.isTypedArray)(lucid_extension_sdk_1.isObject)(manifest['dataConnectors'])) {
|
|
162
165
|
throw new Error('manifest.json: "dataConnectors" must be an array of objects');
|
|
163
166
|
}
|
|
164
167
|
validateUniqueNames('dataConnectors', manifest['dataConnectors']);
|
|
165
168
|
for (const provider of manifest['dataConnectors']) {
|
|
166
|
-
if (!(0,
|
|
169
|
+
if (!(0, lucid_extension_sdk_1.isString)(provider['name'])) {
|
|
167
170
|
throw new Error('manifest.json: Data connector "name" must be a string');
|
|
168
171
|
}
|
|
169
|
-
if (!(0,
|
|
172
|
+
if (!(0, lucid_extension_sdk_1.isString)(provider['oauthProviderName'])) {
|
|
170
173
|
throw new Error('manifest.json: Data connector "oauthProviderName" must be a string');
|
|
171
174
|
}
|
|
172
|
-
if (!(0,
|
|
175
|
+
if (!(0, lucid_extension_sdk_1.isString)(provider['callbackBaseUrl'])) {
|
|
173
176
|
throw new Error('manifest.json: Data connector "callbackBaseUrl" must be a string');
|
|
174
177
|
}
|
|
175
|
-
if (!(0,
|
|
178
|
+
if (!(0, lucid_extension_sdk_1.isRecord)(lucid_extension_sdk_1.isString)(provider['callbackEvents'])) {
|
|
176
179
|
throw new Error('manifest.json: Data connector "callbackEvents" must be a record from strings to strings');
|
|
177
180
|
}
|
|
178
181
|
}
|
|
179
182
|
}
|
|
180
183
|
}
|
|
181
184
|
function deepMixin(target, mixin) {
|
|
182
|
-
if ((0,
|
|
185
|
+
if ((0, lucid_extension_sdk_1.isArray)(target) && (0, lucid_extension_sdk_1.isArray)(mixin)) {
|
|
183
186
|
for (let i = 0; i < mixin.length; i++) {
|
|
184
187
|
const value = mixin[i];
|
|
185
188
|
if (i >= target.length) {
|
|
186
189
|
target[i] = value;
|
|
187
190
|
}
|
|
188
|
-
else if ((0,
|
|
191
|
+
else if ((0, lucid_extension_sdk_1.isObject)(value) || (0, lucid_extension_sdk_1.isArray)(value)) {
|
|
189
192
|
deepMixin(target[i], value);
|
|
190
193
|
}
|
|
191
194
|
else {
|
|
@@ -193,10 +196,10 @@ function deepMixin(target, mixin) {
|
|
|
193
196
|
}
|
|
194
197
|
}
|
|
195
198
|
}
|
|
196
|
-
else if ((0,
|
|
199
|
+
else if ((0, lucid_extension_sdk_1.isObject)(target) && (0, lucid_extension_sdk_1.isObject)(mixin)) {
|
|
197
200
|
for (var key in mixin) {
|
|
198
201
|
const value = mixin[key];
|
|
199
|
-
if ((0,
|
|
202
|
+
if ((0, lucid_extension_sdk_1.isObject)(value) || (0, lucid_extension_sdk_1.isArray)(value)) {
|
|
200
203
|
deepMixin(target[key], value);
|
|
201
204
|
}
|
|
202
205
|
else {
|