IOTConnect-Web/node_modules/esniff/function.js

41 lines
1.1 KiB
JavaScript
Raw Normal View History

2024-05-09 01:49:52 +00:00
"use strict";
var ensureString = require("type/string/ensure")
, isValue = require("type/value/is")
, esniff = require("./");
module.exports = function (name/*, options*/) {
var options = Object(arguments[1])
, asProperty = options.asProperty
, asPlain = isValue(options.asPlain) ? options.asPlain : true;
var length, names;
name = ensureString(name);
names = name.split(".").map(function (prop) {
prop = prop.trim();
if (!prop) throw new TypeError(name + " is not valid function name");
return prop;
});
length = names.length;
return function (code) {
code = ensureString(code);
return esniff(code, function (emitter) {
emitter.on("trigger:" + names[0][0], function (accessor) {
if (accessor.previousToken === ".") {
if (!asProperty) return;
} else if (!asPlain) {
return;
}
for (var i = 0, propertyName; (propertyName = names[i]); ++i) {
if (!accessor.skipCodePart(propertyName)) return;
accessor.skipWhitespace();
if (i < length - 1) {
if (!accessor.skipCodePart(".")) return;
accessor.skipWhitespace();
}
}
accessor.collectScope();
});
});
};
};