mirror of
https://github.com/titanscouting/tra-analysis.git
synced 2025-07-26 12:48:50 +00:00
apps
data analysis
website
functions
node_modules
.bin
@firebase
@google-cloud
@grpc
@mrmlnc
@nodelib
@protobufjs
@types
accepts
acorn
acorn-es7-plugin
ajv
ansi-regex
arr-diff
arr-flatten
arr-union
array-filter
array-flatten
array-union
array-uniq
array-unique
arrify
ascli
asn1
assert-plus
assign-symbols
async
asynckit
atob
aws-sign2
aws4
axios
balanced-match
base
bcrypt-pbkdf
body-parser
brace-expansion
braces
buffer-equal-constant-time
buffer-from
bun
bytebuffer
bytes
cache-base
call-me-maybe
call-signature
camelcase
capture-stack-trace
caseless
class-utils
cliui
code-point-at
collection-visit
colour
combined-stream
component-emitter
compressible
concat-map
concat-stream
configstore
content-disposition
content-type
cookie
cookie-signature
copy-descriptor
core-js
core-util-is
cors
create-error-class
crypto-random-string
dashdash
debug
decamelize
decode-uri-component
deep-equal
define-properties
define-property
delayed-stream
depd
destroy
diff-match-patch
dir-glob
dom-storage
dot-prop
duplexify
eastasianwidth
ecc-jsbn
ecdsa-sig-formatter
ee-first
empower
empower-core
encodeurl
end-of-stream
ent
escape-html
espurify
estraverse
etag
expand-brackets
express
extend
extend-shallow
extglob
extsprintf
fast-deep-equal
fast-glob
fast-json-stable-stringify
faye-websocket
fill-range
finalhandler
firebase-admin
firebase-functions
follow-redirects
for-in
forever-agent
form-data
forwarded
fragment-cache
fresh
fs.realpath
functional-red-black-tree
gcp-metadata
gcs-resumable-upload
get-value
getpass
glob
glob-parent
glob-to-regexp
.travis.yml
README.md
index.js
package.json
test.js
globby
google-auth-library
google-auto-auth
google-gax
google-p12-pem
google-proto-files
graceful-fs
grpc
gtoken
har-schema
har-validator
has-value
has-values
hash-stream-validation
http-errors
http-parser-js
http-signature
iconv-lite
ignore
imurmurhash
indexof
inflight
inherits
invert-kv
ipaddr.js
is
is-accessor-descriptor
is-buffer
is-data-descriptor
is-descriptor
is-extendable
is-extglob
is-fullwidth-code-point
is-glob
is-number
is-obj
is-plain-object
is-stream-ended
is-typedarray
is-windows
isarray
isobject
isstream
jsbn
json-schema
json-schema-traverse
json-stringify-safe
jsonwebtoken
jsprim
jwa
jws
kind-of
lcid
lodash
lodash.camelcase
lodash.clone
lodash.includes
lodash.isboolean
lodash.isinteger
lodash.isnumber
lodash.isplainobject
lodash.isstring
lodash.merge
lodash.once
log-driver
long
lru-cache
make-dir
map-cache
map-visit
media-typer
merge-descriptors
merge2
methmeth
methods
micromatch
mime
mime-db
mime-types
minimatch
mixin-deep
modelo
ms
nan
nanomatch
negotiator
node-forge
number-is-nan
oauth-sign
object-assign
object-copy
object-keys
object-visit
object.pick
on-finished
once
optjs
os-locale
parseurl
pascalcase
path-dirname
path-is-absolute
path-to-regexp
path-type
performance-now
pify
posix-character-classes
power-assert
power-assert-context-formatter
power-assert-context-reducer-ast
power-assert-context-traversal
power-assert-formatter
power-assert-renderer-assertion
power-assert-renderer-base
power-assert-renderer-comparison
power-assert-renderer-diagram
power-assert-renderer-file
power-assert-util-string-width
process-nextick-args
protobufjs
proxy-addr
pseudomap
psl
pump
pumpify
punycode
qs
range-parser
raw-body
readable-stream
regex-not
repeat-element
repeat-string
request
resolve-url
ret
retry-axios
retry-request
safe-buffer
safe-regex
safer-buffer
send
serve-static
set-value
setprototypeof
signal-exit
slash
snakeize
snapdragon
snapdragon-node
snapdragon-util
source-map
source-map-resolve
source-map-url
split-array-stream
split-string
sshpk
static-extend
statuses
stream-events
stream-shift
string-format-obj
string-width
string_decoder
stringifier
strip-ansi
stubs
through2
to-object-path
to-regex
to-regex-range
tough-cookie
traverse
tslib
tunnel-agent
tweetnacl
type-is
type-name
typedarray
union-value
unique-string
universal-deep-strict-equal
unpipe
unset-value
uri-js
urix
use
util-deprecate
utils-merge
uuid
vary
verror
websocket-driver
websocket-extensions
window-size
wrap-ansi
wrappy
write-file-atomic
xdg-basedir
xmlhttprequest
xtend
y18n
yallist
yargs
index.js
package-lock.json
package.json
node_modules
public
.firebaserc
.gitignore
.runtimeconfig.json
firebase.json
firestore.indexes.json
firestore.rules
package-lock.json
.gitattributes
.gitignore
132 lines
3.4 KiB
JavaScript
132 lines
3.4 KiB
JavaScript
module.exports = function (glob, opts) {
|
|
if (typeof glob !== 'string') {
|
|
throw new TypeError('Expected a string');
|
|
}
|
|
|
|
var str = String(glob);
|
|
|
|
// The regexp we are building, as a string.
|
|
var reStr = "";
|
|
|
|
// Whether we are matching so called "extended" globs (like bash) and should
|
|
// support single character matching, matching ranges of characters, group
|
|
// matching, etc.
|
|
var extended = opts ? !!opts.extended : false;
|
|
|
|
// When globstar is _false_ (default), '/foo/*' is translated a regexp like
|
|
// '^\/foo\/.*$' which will match any string beginning with '/foo/'
|
|
// When globstar is _true_, '/foo/*' is translated to regexp like
|
|
// '^\/foo\/[^/]*$' which will match any string beginning with '/foo/' BUT
|
|
// which does not have a '/' to the right of it.
|
|
// E.g. with '/foo/*' these will match: '/foo/bar', '/foo/bar.txt' but
|
|
// these will not '/foo/bar/baz', '/foo/bar/baz.txt'
|
|
// Lastely, when globstar is _true_, '/foo/**' is equivelant to '/foo/*' when
|
|
// globstar is _false_
|
|
var globstar = opts ? !!opts.globstar : false;
|
|
|
|
// If we are doing extended matching, this boolean is true when we are inside
|
|
// a group (eg {*.html,*.js}), and false otherwise.
|
|
var inGroup = false;
|
|
|
|
// RegExp flags (eg "i" ) to pass in to RegExp constructor.
|
|
var flags = opts && typeof( opts.flags ) === "string" ? opts.flags : "";
|
|
|
|
var c;
|
|
for (var i = 0, len = str.length; i < len; i++) {
|
|
c = str[i];
|
|
|
|
switch (c) {
|
|
case "\\":
|
|
case "/":
|
|
case "$":
|
|
case "^":
|
|
case "+":
|
|
case ".":
|
|
case "(":
|
|
case ")":
|
|
case "=":
|
|
case "!":
|
|
case "|":
|
|
reStr += "\\" + c;
|
|
break;
|
|
|
|
case "?":
|
|
if (extended) {
|
|
reStr += ".";
|
|
break;
|
|
}
|
|
|
|
case "[":
|
|
case "]":
|
|
if (extended) {
|
|
reStr += c;
|
|
break;
|
|
}
|
|
|
|
case "{":
|
|
if (extended) {
|
|
inGroup = true;
|
|
reStr += "(";
|
|
break;
|
|
}
|
|
|
|
case "}":
|
|
if (extended) {
|
|
inGroup = false;
|
|
reStr += ")";
|
|
break;
|
|
}
|
|
|
|
case ",":
|
|
if (inGroup) {
|
|
reStr += "|";
|
|
break;
|
|
}
|
|
reStr += "\\" + c;
|
|
break;
|
|
|
|
case "*":
|
|
// Move over all consecutive "*"'s.
|
|
// Also store the previous and next characters
|
|
var prevChar = str[i - 1];
|
|
var starCount = 1;
|
|
while(str[i + 1] === "*") {
|
|
starCount++;
|
|
i++;
|
|
}
|
|
var nextChar = str[i + 1];
|
|
|
|
if (!globstar) {
|
|
// globstar is disabled, so treat any number of "*" as one
|
|
reStr += ".*";
|
|
} else {
|
|
// globstar is enabled, so determine if this is a globstar segment
|
|
var isGlobstar = starCount > 1 // multiple "*"'s
|
|
&& (prevChar === "/" || prevChar === undefined) // from the start of the segment
|
|
&& (nextChar === "/" || nextChar === undefined) // to the end of the segment
|
|
|
|
if (isGlobstar) {
|
|
// it's a globstar, so match zero or more path segments
|
|
reStr += "(?:[^/]*(?:\/|$))*";
|
|
i++; // move over the "/"
|
|
} else {
|
|
// it's not a globstar, so only match one path segment
|
|
reStr += "[^/]*";
|
|
}
|
|
}
|
|
break;
|
|
|
|
default:
|
|
reStr += c;
|
|
}
|
|
}
|
|
|
|
// When regexp 'g' flag is specified don't
|
|
// constrain the regular expression with ^ & $
|
|
if (!flags || !~flags.indexOf('g')) {
|
|
reStr = "^" + reStr + "$";
|
|
}
|
|
|
|
return new RegExp(reStr, flags);
|
|
};
|