MCPcopy
hub / github.com/showdownjs/showdown / validate

Function validate

src/showdown.js:264–364  ·  view source on GitHub ↗

* Validate extension * @param {array} extension * @param {string} name * @returns {{valid: boolean, error: string}}

(extension, name)

Source from the content-addressed store, hash-verified

262 * @returns {{valid: boolean, error: string}}
263 */
264function validate (extension, name) {
265 'use strict';
266
267 var errMsg = (name) ? 'Error in ' + name + ' extension->' : 'Error in unnamed extension',
268 ret = {
269 valid: true,
270 error: ''
271 };
272
273 if (!showdown.helper.isArray(extension)) {
274 extension = [extension];
275 }
276
277 for (var i = 0; i < extension.length; ++i) {
278 var baseMsg = errMsg + ' sub-extension ' + i + ': ',
279 ext = extension[i];
280 if (typeof ext !== 'object') {
281 ret.valid = false;
282 ret.error = baseMsg + 'must be an object, but ' + typeof ext + ' given';
283 return ret;
284 }
285
286 if (!showdown.helper.isString(ext.type)) {
287 ret.valid = false;
288 ret.error = baseMsg + 'property "type" must be a string, but ' + typeof ext.type + ' given';
289 return ret;
290 }
291
292 var type = ext.type = ext.type.toLowerCase();
293
294 // normalize extension type
295 if (type === 'language') {
296 type = ext.type = 'lang';
297 }
298
299 if (type === 'html') {
300 type = ext.type = 'output';
301 }
302
303 if (type !== 'lang' && type !== 'output' && type !== 'listener') {
304 ret.valid = false;
305 ret.error = baseMsg + 'type ' + type + ' is not recognized. Valid values: "lang/language", "output/html" or "listener"';
306 return ret;
307 }
308
309 if (type === 'listener') {
310 if (showdown.helper.isUndefined(ext.listeners)) {
311 ret.valid = false;
312 ret.error = baseMsg + '. Extensions of type "listener" must have a property called "listeners"';
313 return ret;
314 }
315 } else {
316 if (showdown.helper.isUndefined(ext.filter) && showdown.helper.isUndefined(ext.regex)) {
317 ret.valid = false;
318 ret.error = baseMsg + type + ' extensions must define either a "regex" property or a "filter" method';
319 return ret;
320 }
321 }

Callers 3

showdown.jsFile · 0.85
_parseExtensionFunction · 0.85
legacyExtensionLoadingFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…