chenyc
2025-12-09 545c24c6a711d71b65f3d4e8122fee3837fb1edc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
"use strict";
 
var from         = require("es5-ext/array/from")
  , ensureString = require("type/string/ensure")
  , primitiveSet = require("es5-ext/object/primitive-set")
  , esniff       = require("./");
 
var allowedSeparators = primitiveSet.apply(null, from(".+-*/,&|;"));
 
module.exports = function (code, sep/*, limit*/) {
    var expressions, fromIndex, limit = arguments[2] || Infinity;
    code = ensureString(code);
    sep = ensureString(sep);
    if (!allowedSeparators[sep]) throw new Error(sep + " is not supported separator");
    expressions = [];
    fromIndex = 0;
    esniff(code, function (emitter) {
        emitter.on("trigger:" + sep, function (accessor) {
            if (accessor.scopeDepth !== 0) return;
            var index = accessor.index;
            if (expressions.push(code.slice(fromIndex, index)) === limit) accessor.stop();
            fromIndex = index + 1;
        });
    });
    if (expressions.length < limit) expressions.push(code.slice(fromIndex));
    return expressions;
};