@adobe/acc-js-sdk 1.0.7 → 1.1.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.
- package/CHANGELOG.md +39 -1
- package/MIGRATION.md +160 -0
- package/README.md +303 -64
- package/compile.js +1 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/src/application.js +687 -186
- package/src/client.js +18 -10
- package/src/domUtil.js +6 -3
- package/src/entityAccessor.js +5 -5
- package/src/index.js +58 -2
- package/src/testUtil.js +47 -0
- package/src/util.js +144 -0
- package/src/xtkCaster.js +37 -0
- package/test/application.test.js +2053 -649
- package/test/client.test.js +78 -7
- package/test/domUtil.test.js +150 -2
- package/test/escape.test.js +79 -47
- package/test/index.test.js +69 -1
- package/test/mock.js +11 -1
- package/test/testUtil.test.js +64 -0
- package/test/util.test.js +167 -1
- package/test/xtkCaster.test.js +122 -1
package/src/client.js
CHANGED
|
@@ -225,16 +225,16 @@ class Credentials {
|
|
|
225
225
|
|
|
226
226
|
/**
|
|
227
227
|
* @typedef {Object} ConnectionOptions
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
228
|
+
* @property {string} representation - the representation to use, i.e. "SimpleJson" (the default), "BadgerFish", or "xml"
|
|
229
|
+
* @property {boolean} rememberMe - The Campaign `rememberMe` attribute which can be used to extend the lifetime of session tokens
|
|
230
|
+
* @property {number} entityCacheTTL - The TTL (in milliseconds) after which cached XTK entities expire. Defaults to 5 minutes
|
|
231
|
+
* @property {number} methodCacheTTL - The TTL (in milliseconds) after which cached XTK methods expire. Defaults to 5 minutes
|
|
232
|
+
* @property {number} optionCacheTTL - The TTL (in milliseconds) after which cached XTK options expire. Defaults to 5 minutes
|
|
233
|
+
* @property {boolean} traceAPICalls - Activates the tracing of all API calls
|
|
234
|
+
* @property {Utils.Transport} transport - Overrides the transport (i.e. HTTP layer)
|
|
235
|
+
* @property {boolean} noStorage - De-activate using of local storage. By default, and in addition to in-memory cache, entities, methods, and options are also persisted in local storage if there is one.
|
|
236
|
+
* @property {Storage} storage - Overrides the storage interface (i.e. LocalStorage)
|
|
237
|
+
* @memberOf Campaign
|
|
238
238
|
*/
|
|
239
239
|
|
|
240
240
|
|
|
@@ -1102,6 +1102,14 @@ class Client {
|
|
|
1102
1102
|
var urn = that._methodCache.getSoapUrn(schemaId, methodName);
|
|
1103
1103
|
var soapCall = that._prepareSoapCall(urn, methodName);
|
|
1104
1104
|
|
|
1105
|
+
// If method is called with one parameter which is a function, then we assume it's a hook: the function will return
|
|
1106
|
+
// the actual list of parameters
|
|
1107
|
+
let isfunc = parameters && typeof parameters === "function";
|
|
1108
|
+
if (!isfunc && parameters && parameters.length >= 1 && typeof parameters[0] === "function")
|
|
1109
|
+
isfunc = true;
|
|
1110
|
+
if (isfunc)
|
|
1111
|
+
parameters = parameters[0](method, callContext);
|
|
1112
|
+
|
|
1105
1113
|
const isStatic = DomUtil.getAttributeAsBoolean(method, "static");
|
|
1106
1114
|
var object = callContext.object;
|
|
1107
1115
|
if (!isStatic) {
|
package/src/domUtil.js
CHANGED
|
@@ -19,7 +19,7 @@ var JSDOM;
|
|
|
19
19
|
|
|
20
20
|
/* istanbul ignore else */
|
|
21
21
|
if (!Util.isBrowser()) {
|
|
22
|
-
|
|
22
|
+
JSDOM = require("jsdom").JSDOM;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
/**********************************************************************************
|
|
@@ -40,7 +40,7 @@ else {
|
|
|
40
40
|
return new XMLSerializer().serializeToString(dom);
|
|
41
41
|
};
|
|
42
42
|
};
|
|
43
|
-
|
|
43
|
+
|
|
44
44
|
JSDOM = jsdom;
|
|
45
45
|
}
|
|
46
46
|
|
|
@@ -562,7 +562,10 @@ class XPathElement {
|
|
|
562
562
|
class XPath {
|
|
563
563
|
|
|
564
564
|
constructor(path) {
|
|
565
|
-
|
|
565
|
+
path = (path || "").trim();
|
|
566
|
+
if (path && path.startsWith("[") && path.endsWith("]"))
|
|
567
|
+
path = path.substring(1, path.length - 1).trim();
|
|
568
|
+
this._path = path;
|
|
566
569
|
}
|
|
567
570
|
|
|
568
571
|
/**
|
package/src/entityAccessor.js
CHANGED
|
@@ -69,7 +69,7 @@ class EntityAccessor {
|
|
|
69
69
|
*/
|
|
70
70
|
static getAttributeAsString(entity, name) {
|
|
71
71
|
if (entity.documentElement) entity = entity.documentElement;
|
|
72
|
-
if (entity.
|
|
72
|
+
if (entity.nodeType && entity.tagName)
|
|
73
73
|
return DomUtil.getAttributeAsString(entity, name);
|
|
74
74
|
else if (entity instanceof BadgerFishObject)
|
|
75
75
|
return XtkCaster.asString(entity[`@${name}`]);
|
|
@@ -95,7 +95,7 @@ class EntityAccessor {
|
|
|
95
95
|
*/
|
|
96
96
|
static getAttributeAsLong(entity, name) {
|
|
97
97
|
if (entity.documentElement) entity = entity.documentElement;
|
|
98
|
-
if (entity.
|
|
98
|
+
if (entity.nodeType && entity.tagName)
|
|
99
99
|
return DomUtil.getAttributeAsLong(entity, name);
|
|
100
100
|
else if (entity instanceof BadgerFishObject)
|
|
101
101
|
return XtkCaster.asLong(entity[`@${name}`]);
|
|
@@ -121,7 +121,7 @@ class EntityAccessor {
|
|
|
121
121
|
*/
|
|
122
122
|
static getAttributeAsBoolean(entity, name) {
|
|
123
123
|
if (entity.documentElement) entity = entity.documentElement;
|
|
124
|
-
if (entity.
|
|
124
|
+
if (entity.nodeType && entity.tagName)
|
|
125
125
|
return DomUtil.getAttributeAsBoolean(entity, name);
|
|
126
126
|
else if (entity instanceof BadgerFishObject)
|
|
127
127
|
return XtkCaster.asBoolean(entity[`@${name}`]);
|
|
@@ -148,7 +148,7 @@ class EntityAccessor {
|
|
|
148
148
|
*/
|
|
149
149
|
static getChildElements(entity, tagName) {
|
|
150
150
|
if (entity.documentElement) entity = entity.documentElement;
|
|
151
|
-
if (entity.
|
|
151
|
+
if (entity.nodeType && entity.tagName) {
|
|
152
152
|
const elements = [];
|
|
153
153
|
var child = DomUtil.getFirstChildElement(entity);
|
|
154
154
|
while (child) {
|
|
@@ -184,7 +184,7 @@ class EntityAccessor {
|
|
|
184
184
|
*/
|
|
185
185
|
static getElement(entity, tagName) {
|
|
186
186
|
if (entity.documentElement) entity = entity.documentElement;
|
|
187
|
-
if (entity.
|
|
187
|
+
if (entity.nodeType && entity.tagName) {
|
|
188
188
|
var child = DomUtil.getFirstChildElement(entity);
|
|
189
189
|
while (child) {
|
|
190
190
|
if (tagName == child.tagName)
|
package/src/index.js
CHANGED
|
@@ -23,6 +23,7 @@ const DomUtil = require('./domUtil.js').DomUtil;
|
|
|
23
23
|
const XtkCaster = require('./xtkCaster.js').XtkCaster;
|
|
24
24
|
const { Client, Credentials, ConnectionParameters } = require('./client.js');
|
|
25
25
|
const request = require('./transport.js').request;
|
|
26
|
+
const { TestUtil } = require('./testUtil');
|
|
26
27
|
|
|
27
28
|
/**
|
|
28
29
|
* Get/Set the transport function (defaults to Axios). This function is used for testing / mocking the transport layer.
|
|
@@ -127,8 +128,7 @@ class SDK {
|
|
|
127
128
|
* @example
|
|
128
129
|
* expect(sdk.escapeXtk`@name=${"Rock 'n' Roll"}`).toBe("@name='Rock \\'n\\' Roll'");
|
|
129
130
|
*/
|
|
130
|
-
escapeXtk(p1, ...p2)
|
|
131
|
-
{
|
|
131
|
+
escapeXtk(p1, ...p2) {
|
|
132
132
|
// first syntax: only one parameter which is a string => returns the escaped string.
|
|
133
133
|
// that's how the Campaign function in common.js behaves
|
|
134
134
|
if (p1 === undefined || p1 === null)
|
|
@@ -147,9 +147,65 @@ class SDK {
|
|
|
147
147
|
}
|
|
148
148
|
return str;
|
|
149
149
|
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Escapes a string of characters so that in can be used in a SQL like statement.
|
|
153
|
+
* @param {string | any} text the text to escape. If not a string, it will be casted to a xtk string first
|
|
154
|
+
* @param {boolean?} escapeXtkParams indicates that the escape text contains Xtk parameters (using $ character)
|
|
155
|
+
* @returns the escaped string
|
|
156
|
+
*/
|
|
157
|
+
escapeForLike(text, escapeXtkParams) {
|
|
158
|
+
text = XtkCaster.asString(text);
|
|
159
|
+
if (!text) return "";
|
|
160
|
+
text = text.replace(/\\/g, "\\\\")
|
|
161
|
+
.replace(/'/g, "\\'")
|
|
162
|
+
.replace(/%/g, "\\%")
|
|
163
|
+
.replace(/_/g, "\\_");
|
|
164
|
+
if (escapeXtkParams)
|
|
165
|
+
text = text.replace(/\$/g, "' + Char('36') + '");
|
|
166
|
+
return text;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Expands an xpath, i.e. enclose it with [..] brackets if necessary
|
|
171
|
+
* @param {string} xpath the xpath
|
|
172
|
+
* @returns {string} the expanded xpath
|
|
173
|
+
*/
|
|
174
|
+
expandXPath(xpath) {
|
|
175
|
+
if (!xpath) return xpath;
|
|
176
|
+
if (xpath.startsWith("[") && xpath.endsWith("]"))
|
|
177
|
+
return xpath;
|
|
178
|
+
if (xpath.indexOf('/') === -1 && xpath.indexOf('-') === -1 && xpath.indexOf(':') === -1)
|
|
179
|
+
return xpath;
|
|
180
|
+
return `[${xpath}]`;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
unexpandXPath(xpath) {
|
|
184
|
+
if (!xpath) return xpath;
|
|
185
|
+
if (xpath.startsWith("[") && xpath.endsWith("]"))
|
|
186
|
+
return xpath.substring(1, xpath.length - 1);
|
|
187
|
+
return xpath;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Convert a javascript value into an xtk constant with proper quoting
|
|
192
|
+
* @param {any} value the value to convert
|
|
193
|
+
* @param {string} type the xtk type
|
|
194
|
+
* @returns {string} the text literal which can be used in a Xtk expression or condition
|
|
195
|
+
*/
|
|
196
|
+
xtkConstText(value, type) {
|
|
197
|
+
if (!type || type === 'string' || type === 'memo') {
|
|
198
|
+
return sdk.escapeXtk(XtkCaster.asString(value));
|
|
199
|
+
}
|
|
200
|
+
const constText = XtkCaster.asString(XtkCaster.as(value, type));
|
|
201
|
+
if (XtkCaster.isTimeType(type))
|
|
202
|
+
return `#${constText}#`;
|
|
203
|
+
return constText;
|
|
204
|
+
}
|
|
150
205
|
}
|
|
151
206
|
|
|
152
207
|
const sdk = new SDK();
|
|
208
|
+
sdk.TestUtil = TestUtil;
|
|
153
209
|
sdk.XtkCaster = XtkCaster;
|
|
154
210
|
sdk.Credentials = Credentials;
|
|
155
211
|
sdk.DomUtil = DomUtil;
|
package/src/testUtil.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const { DomUtil } = require("./domUtil");
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
Copyright 2022 Adobe. All rights reserved.
|
|
5
|
+
This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
you may not use this file except in compliance with the License. You may obtain a copy
|
|
7
|
+
of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, software distributed under
|
|
10
|
+
the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
11
|
+
OF ANY KIND, either express or implied. See the License for the specific language
|
|
12
|
+
governing permissions and limitations under the License.
|
|
13
|
+
*/
|
|
14
|
+
(function() {
|
|
15
|
+
"use strict";
|
|
16
|
+
|
|
17
|
+
const { newSchema } = require("./application");
|
|
18
|
+
|
|
19
|
+
/**********************************************************************************
|
|
20
|
+
*
|
|
21
|
+
* Utilities for testing
|
|
22
|
+
*
|
|
23
|
+
*********************************************************************************/
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @namespace Utils
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @memberof Utils
|
|
31
|
+
* @class
|
|
32
|
+
* @constructor
|
|
33
|
+
*/
|
|
34
|
+
class TestUtil {
|
|
35
|
+
|
|
36
|
+
static newSchema(xml) {
|
|
37
|
+
if (typeof xml === "string")
|
|
38
|
+
xml = DomUtil.parse(xml);
|
|
39
|
+
return newSchema(xml);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
// Public expots
|
|
45
|
+
exports.TestUtil = TestUtil;
|
|
46
|
+
|
|
47
|
+
})();
|
package/src/util.js
CHANGED
|
@@ -135,7 +135,151 @@ class Util {
|
|
|
135
135
|
}
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
+
/**
|
|
139
|
+
* The ArrayMap object is used to access elements as either an array or a map
|
|
140
|
+
*
|
|
141
|
+
* @class
|
|
142
|
+
* @constructor
|
|
143
|
+
* @memberof Utils
|
|
144
|
+
*/
|
|
145
|
+
|
|
146
|
+
class ArrayMap {
|
|
147
|
+
constructor() {
|
|
148
|
+
// List of items, as an ordered array. Use defineProperty to make it non-enumerable
|
|
149
|
+
// and support for for ... in loop to iterate by item key
|
|
150
|
+
Object.defineProperty(this, "_items", {
|
|
151
|
+
value: [],
|
|
152
|
+
writable: false,
|
|
153
|
+
enumerable: false,
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
Object.defineProperty(this, "_map", {
|
|
157
|
+
value: [],
|
|
158
|
+
writable: false,
|
|
159
|
+
enumerable: false,
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
// Number of items. Use defineProperty to make it non-enumerable
|
|
163
|
+
// and support for for ... in loop to iterate by item key
|
|
164
|
+
Object.defineProperty(this, "length", {
|
|
165
|
+
value: 0,
|
|
166
|
+
writable: true,
|
|
167
|
+
enumerable: false,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
_push(key, value) {
|
|
172
|
+
let isNumKey = false;
|
|
173
|
+
if (key) {
|
|
174
|
+
// reserved keyworkds
|
|
175
|
+
const isReserved = key === "_items" || key === "length" || key === "_push" || key === "forEach" || key === "map" || key === "_map" || key === "get" || key === "find" || key === "flatMap" || key === "filter";
|
|
176
|
+
|
|
177
|
+
// already a child with the name => there's a problem with the schema
|
|
178
|
+
if (!isReserved && this[key]) throw new Error(`Failed to add element '${key}' to ArrayMap. There's already an item with the same name`);
|
|
179
|
+
|
|
180
|
+
// Set key as a enumerable property, so that elements can be accessed by key,
|
|
181
|
+
// but also iterated on with a for ... in loop
|
|
182
|
+
// For compatibility
|
|
183
|
+
if (!isReserved) this[key] = value;
|
|
184
|
+
this._map[key] = value;
|
|
185
|
+
|
|
186
|
+
// Special case where keys are numbers or strings convertible with numbers
|
|
187
|
+
const numKey = +key;
|
|
188
|
+
if (numKey === numKey) {
|
|
189
|
+
// keys is a number. If it matches the current index, then we are good,
|
|
190
|
+
// and we can add the property as an enumerable property
|
|
191
|
+
isNumKey = true;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
if (!isNumKey) {
|
|
196
|
+
// Set the index property so that items can be accessed by array index.
|
|
197
|
+
// However, make it non-enumerable to make sure indexes do not show up in a for .. in loop
|
|
198
|
+
Object.defineProperty(this, this._items.length, {
|
|
199
|
+
value: value,
|
|
200
|
+
writable: false,
|
|
201
|
+
enumerable: false,
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
// Add to array and set length
|
|
205
|
+
this._items.push(value);
|
|
206
|
+
this.length = this._items.length;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Executes a provided function once for each array element.
|
|
211
|
+
* @param {*} callback Function that is called for every element of the array
|
|
212
|
+
* @param {*} thisArg Optional value to use as this when executing the callback function.
|
|
213
|
+
* @returns a new array
|
|
214
|
+
*/
|
|
215
|
+
forEach(callback, thisArg) {
|
|
216
|
+
return this._items.forEach(callback, thisArg);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Returns the first element that satisfies the provided testing function. If no values satisfy the testing function, undefined is returned.
|
|
221
|
+
* @param {*} callback Function that is called for every element of the array
|
|
222
|
+
* @param {*} thisArg Optional value to use as this when executing the callback function.
|
|
223
|
+
* @returns the first element matching the testing function
|
|
224
|
+
*/
|
|
225
|
+
find(callback, thisArg) {
|
|
226
|
+
return this._items.find(callback, thisArg);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* creates a new array with all elements that pass the test implemented by the provided function.
|
|
231
|
+
* @param {*} callback Function that is called for every element of the array
|
|
232
|
+
* @param {*} thisArg Optional value to use as this when executing the callback function.
|
|
233
|
+
* @returns an array containing elements passing the test function
|
|
234
|
+
*/
|
|
235
|
+
filter(callback, thisArg) {
|
|
236
|
+
return this._items.filter(callback, thisArg);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Get a element by either name (access as a map) or index (access as an array). Returns undefined if the element does not exist or
|
|
241
|
+
* if the array index is out of range.
|
|
242
|
+
* @param {string|number} indexOrKey the name or index of the element
|
|
243
|
+
* @returns the element matching the name or index
|
|
244
|
+
*/
|
|
245
|
+
get(indexOrKey) {
|
|
246
|
+
if (typeof indexOrKey === 'number') return this._items[indexOrKey];
|
|
247
|
+
return this._map[indexOrKey];
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Creates a new array populated with the results of calling a provided function on every element in the calling array.
|
|
252
|
+
* @param {*} callback Function that is called for every element of the array
|
|
253
|
+
* @param {*} thisArg Optional value to use as this when executing the callback function.
|
|
254
|
+
* @returns a new array
|
|
255
|
+
*/
|
|
256
|
+
map(callback, thisArg) {
|
|
257
|
+
return this._items.map(callback, thisArg);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Returns a new array formed by applying a given callback function to each element of the array, and then flattening the result by one level.
|
|
262
|
+
* @param {*} callback Function that is called for every element of the array
|
|
263
|
+
* @param {*} thisArg Optional value to use as this when executing the callback function.
|
|
264
|
+
* @returns a new array
|
|
265
|
+
*/
|
|
266
|
+
flatMap(callback, thisArg) {
|
|
267
|
+
return this._items.flatMap(callback, thisArg);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Iterates over all the elements using the for ... of syntax.
|
|
272
|
+
* @returns returns each element one after the other
|
|
273
|
+
*/
|
|
274
|
+
*[Symbol.iterator] () {
|
|
275
|
+
for (const item of this._items) {
|
|
276
|
+
yield item;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
138
281
|
// Public expots
|
|
139
282
|
exports.Util = Util;
|
|
283
|
+
exports.ArrayMap = ArrayMap;
|
|
140
284
|
|
|
141
285
|
})();
|
package/src/xtkCaster.js
CHANGED
|
@@ -341,6 +341,16 @@ class XtkCaster {
|
|
|
341
341
|
return number;
|
|
342
342
|
}
|
|
343
343
|
|
|
344
|
+
/**
|
|
345
|
+
* Convert a raw value into a timestamp (alias to the "asTimestamp" function)
|
|
346
|
+
*
|
|
347
|
+
* @param {*} value is the raw value to convert
|
|
348
|
+
* @return {Date} the timestamp, possibly null
|
|
349
|
+
*/
|
|
350
|
+
static asDatetime(value) {
|
|
351
|
+
return this.asTimestamp(value);
|
|
352
|
+
}
|
|
353
|
+
|
|
344
354
|
/**
|
|
345
355
|
* Convert a raw value into a timestamp
|
|
346
356
|
*
|
|
@@ -421,8 +431,35 @@ class XtkCaster {
|
|
|
421
431
|
return timespan;
|
|
422
432
|
}
|
|
423
433
|
|
|
434
|
+
/**
|
|
435
|
+
* Tests if a given type is a date or time type
|
|
436
|
+
* @param {string|number} type the type name
|
|
437
|
+
* @returns {boolean} true if the type is a date and/or time type
|
|
438
|
+
*/
|
|
439
|
+
static isTimeType(type) {
|
|
440
|
+
return type === "datetime" || type === "datetimetz" || type === "datetimenotz" || type === "timestamp" || type === "date" || type === "time" || type === "timespan" || type === 7 || type === 10 || type === 14;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
/**
|
|
444
|
+
* Tests if a given type is a string type
|
|
445
|
+
* @param {string|number} type the type name
|
|
446
|
+
* @returns {boolean} true if the type is a string type
|
|
447
|
+
*/
|
|
448
|
+
static isStringType(type) {
|
|
449
|
+
return type === "string" || type === "memo" || type === 6 || type === 12 || type === 13 || type === "blob" || type === "html" || type === "CDATA";
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
/**
|
|
453
|
+
* Tests if a given type is a numeric type
|
|
454
|
+
* @param {string|number} type the type name
|
|
455
|
+
* @returns {boolean} true if the type is a numeric type
|
|
456
|
+
*/
|
|
457
|
+
static isNumericType(type) {
|
|
458
|
+
return type === "byte" || type === 1 || type === "short" || type === 2 || type === "int" || type === "long" || type === 3 || type === "float" || type === 4 || type === "double" || type === 5 || type === "timespan" || type === 14;
|
|
459
|
+
}
|
|
424
460
|
}
|
|
425
461
|
|
|
462
|
+
|
|
426
463
|
exports.XtkCaster = XtkCaster;
|
|
427
464
|
|
|
428
465
|
})();
|