|
(function(modules) { |
|
|
|
var installedModules = {}; |
|
|
|
|
|
function __webpack_require__(moduleId) { |
|
|
|
|
|
if(installedModules[moduleId]) { |
|
return installedModules[moduleId].exports; |
|
} |
|
|
|
var module = installedModules[moduleId] = { |
|
i: moduleId, |
|
l: false, |
|
exports: {} |
|
}; |
|
|
|
|
|
modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); |
|
|
|
|
|
module.l = true; |
|
|
|
|
|
return module.exports; |
|
} |
|
|
|
|
|
|
|
__webpack_require__.m = modules; |
|
|
|
|
|
__webpack_require__.c = installedModules; |
|
|
|
|
|
__webpack_require__.d = function(exports, name, getter) { |
|
if(!__webpack_require__.o(exports, name)) { |
|
Object.defineProperty(exports, name, { enumerable: true, get: getter }); |
|
} |
|
}; |
|
|
|
|
|
__webpack_require__.r = function(exports) { |
|
if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { |
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); |
|
} |
|
Object.defineProperty(exports, '__esModule', { value: true }); |
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
__webpack_require__.t = function(value, mode) { |
|
if(mode & 1) value = __webpack_require__(value); |
|
if(mode & 8) return value; |
|
if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; |
|
var ns = Object.create(null); |
|
__webpack_require__.r(ns); |
|
Object.defineProperty(ns, 'default', { enumerable: true, value: value }); |
|
if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); |
|
return ns; |
|
}; |
|
|
|
|
|
__webpack_require__.n = function(module) { |
|
var getter = module && module.__esModule ? |
|
function getDefault() { return module['default']; } : |
|
function getModuleExports() { return module; }; |
|
__webpack_require__.d(getter, 'a', getter); |
|
return getter; |
|
}; |
|
|
|
|
|
__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; |
|
|
|
|
|
__webpack_require__.p = ""; |
|
|
|
|
|
|
|
return __webpack_require__(__webpack_require__.s = "./node_modules/babel-loader/lib/index.js?!./node_modules/scratch-vm/src/extension-support/extension-worker.js"); |
|
}) |
|
|
|
({ |
|
|
|
"./node_modules/babel-loader/lib/index.js?!./node_modules/scratch-vm/src/extension-support/extension-worker.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports, __webpack_require__) { |
|
|
|
(function(global) { |
|
|
|
const ScratchCommon = __webpack_require__( "./node_modules/scratch-vm/src/extension-support/tw-extension-api-common.js"); |
|
const createScratchX = __webpack_require__( "./node_modules/scratch-vm/src/extension-support/tw-scratchx-compatibility-layer.js"); |
|
const dispatch = __webpack_require__( "./node_modules/scratch-vm/src/dispatch/worker-dispatch.js"); |
|
const log = __webpack_require__( "./node_modules/scratch-vm/src/util/log.js"); |
|
const { |
|
isWorker |
|
} = __webpack_require__( "./node_modules/scratch-vm/src/extension-support/tw-extension-worker-context.js"); |
|
const createTranslate = __webpack_require__( "./node_modules/scratch-vm/src/extension-support/tw-l10n.js"); |
|
const translate = createTranslate(null); |
|
const loadScripts = url => { |
|
if (isWorker) { |
|
importScripts(url); |
|
} else { |
|
return new Promise((resolve, reject) => { |
|
const script = document.createElement('script'); |
|
script.onload = () => resolve(); |
|
script.onerror = () => { |
|
reject(new Error("Error in sandboxed script: ".concat(url, ". Check the console for more information."))); |
|
}; |
|
script.src = url; |
|
document.body.appendChild(script); |
|
}); |
|
} |
|
}; |
|
class ExtensionWorker { |
|
constructor() { |
|
this.nextExtensionId = 0; |
|
this.initialRegistrations = []; |
|
this.firstRegistrationPromise = new Promise(resolve => { |
|
this.firstRegistrationCallback = resolve; |
|
}); |
|
dispatch.waitForConnection.then(() => { |
|
dispatch.call('extensions', 'allocateWorker').then(async x => { |
|
const [id, extension] = x; |
|
this.workerId = id; |
|
try { |
|
await loadScripts(extension); |
|
await this.firstRegistrationPromise; |
|
const initialRegistrations = this.initialRegistrations; |
|
this.initialRegistrations = null; |
|
Promise.all(initialRegistrations).then(() => dispatch.call('extensions', 'onWorkerInit', id)); |
|
} catch (e) { |
|
log.error(e); |
|
dispatch.call('extensions', 'onWorkerInit', id, "".concat(e)); |
|
} |
|
}); |
|
}); |
|
this.extensions = []; |
|
} |
|
register(extensionObject) { |
|
const extensionId = this.nextExtensionId++; |
|
this.extensions.push(extensionObject); |
|
const serviceName = "extension.".concat(this.workerId, ".").concat(extensionId); |
|
const promise = dispatch.setService(serviceName, extensionObject).then(() => dispatch.call('extensions', 'registerExtensionService', serviceName)); |
|
if (this.initialRegistrations) { |
|
this.firstRegistrationCallback(); |
|
this.initialRegistrations.push(promise); |
|
} |
|
return promise; |
|
} |
|
} |
|
global.Scratch = global.Scratch || {}; |
|
Object.assign(global.Scratch, ScratchCommon, { |
|
canFetch: () => Promise.resolve(true), |
|
fetch: function (_fetch) { |
|
function fetch(_x, _x2) { |
|
return _fetch.apply(this, arguments); |
|
} |
|
fetch.toString = function () { |
|
return _fetch.toString(); |
|
}; |
|
return fetch; |
|
}((url, options) => fetch(url, options)), |
|
canOpenWindow: () => Promise.resolve(false), |
|
openWindow: () => Promise.reject(new Error('Scratch.openWindow not supported in sandboxed extensions')), |
|
canRedirect: () => Promise.resolve(false), |
|
redirect: () => Promise.reject(new Error('Scratch.redirect not supported in sandboxed extensions')), |
|
canRecordAudio: () => Promise.resolve(false), |
|
canRecordVideo: () => Promise.resolve(false), |
|
canReadClipboard: () => Promise.resolve(false), |
|
canNotify: () => Promise.resolve(false), |
|
canGeolocate: () => Promise.resolve(false), |
|
canEmbed: () => Promise.resolve(false), |
|
canUnsandbox: () => Promise.resolve(false), |
|
canScreenshotCamera: () => Promise.resolve(false), |
|
canDownload: () => Promise.resolve(false), |
|
download: () => Promise.reject(new Error('Scratch.download not supported in sandboxed extensions')), |
|
translate |
|
}); |
|
|
|
|
|
|
|
|
|
const extensionWorker = new ExtensionWorker(); |
|
global.Scratch.extensions = { |
|
register: extensionWorker.register.bind(extensionWorker) |
|
}; |
|
global.ScratchExtensions = createScratchX(global.Scratch); |
|
}.call(this, __webpack_require__( "./node_modules/webpack/buildin/global.js"))) |
|
|
|
}), |
|
|
|
"./node_modules/format-message-formats/index.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports) { |
|
|
|
|
|
var LONG = 'long' |
|
var SHORT = 'short' |
|
var NARROW = 'narrow' |
|
var NUMERIC = 'numeric' |
|
var TWODIGIT = '2-digit' |
|
|
|
|
|
|
|
|
|
module.exports = { |
|
number: { |
|
decimal: { |
|
style: 'decimal' |
|
}, |
|
integer: { |
|
style: 'decimal', |
|
maximumFractionDigits: 0 |
|
}, |
|
currency: { |
|
style: 'currency', |
|
currency: 'USD' |
|
}, |
|
percent: { |
|
style: 'percent' |
|
}, |
|
default: { |
|
style: 'decimal' |
|
} |
|
}, |
|
date: { |
|
short: { |
|
month: NUMERIC, |
|
day: NUMERIC, |
|
year: TWODIGIT |
|
}, |
|
medium: { |
|
month: SHORT, |
|
day: NUMERIC, |
|
year: NUMERIC |
|
}, |
|
long: { |
|
month: LONG, |
|
day: NUMERIC, |
|
year: NUMERIC |
|
}, |
|
full: { |
|
month: LONG, |
|
day: NUMERIC, |
|
year: NUMERIC, |
|
weekday: LONG |
|
}, |
|
default: { |
|
month: SHORT, |
|
day: NUMERIC, |
|
year: NUMERIC |
|
} |
|
}, |
|
time: { |
|
short: { |
|
hour: NUMERIC, |
|
minute: NUMERIC |
|
}, |
|
medium: { |
|
hour: NUMERIC, |
|
minute: NUMERIC, |
|
second: NUMERIC |
|
}, |
|
long: { |
|
hour: NUMERIC, |
|
minute: NUMERIC, |
|
second: NUMERIC, |
|
timeZoneName: SHORT |
|
}, |
|
full: { |
|
hour: NUMERIC, |
|
minute: NUMERIC, |
|
second: NUMERIC, |
|
timeZoneName: SHORT |
|
}, |
|
default: { |
|
hour: NUMERIC, |
|
minute: NUMERIC, |
|
second: NUMERIC |
|
} |
|
}, |
|
duration: { |
|
default: { |
|
hours: { |
|
minimumIntegerDigits: 1, |
|
maximumFractionDigits: 0 |
|
}, |
|
minutes: { |
|
minimumIntegerDigits: 2, |
|
maximumFractionDigits: 0 |
|
}, |
|
seconds: { |
|
minimumIntegerDigits: 2, |
|
maximumFractionDigits: 3 |
|
} |
|
} |
|
}, |
|
parseNumberPattern: function (pattern) { |
|
if (!pattern) return |
|
var options = {} |
|
var currency = pattern.match(/\b[A-Z]{3}\b/i) |
|
var syms = pattern.replace(/[^¤]/g, '').length |
|
if (!syms && currency) syms = 1 |
|
if (syms) { |
|
options.style = 'currency' |
|
options.currencyDisplay = syms === 1 ? 'symbol' : syms === 2 ? 'code' : 'name' |
|
options.currency = currency ? currency[0].toUpperCase() : 'USD' |
|
} else if (pattern.indexOf('%') >= 0) { |
|
options.style = 'percent' |
|
} |
|
if (!/[@#0]/.test(pattern)) return options.style ? options : undefined |
|
options.useGrouping = pattern.indexOf(',') >= 0 |
|
if (/E\+?[@#0]+/i.test(pattern) || pattern.indexOf('@') >= 0) { |
|
var size = pattern.replace(/E\+?[@#0]+|[^@#0]/gi, '') |
|
options.minimumSignificantDigits = Math.min(Math.max(size.replace(/[^@0]/g, '').length, 1), 21) |
|
options.maximumSignificantDigits = Math.min(Math.max(size.length, 1), 21) |
|
} else { |
|
var parts = pattern.replace(/[^#0.]/g, '').split('.') |
|
var integer = parts[0] |
|
var n = integer.length - 1 |
|
while (integer[n] === '0') --n |
|
options.minimumIntegerDigits = Math.min(Math.max(integer.length - 1 - n, 1), 21) |
|
var fraction = parts[1] || '' |
|
n = 0 |
|
while (fraction[n] === '0') ++n |
|
options.minimumFractionDigits = Math.min(Math.max(n, 0), 20) |
|
while (fraction[n] === '#') ++n |
|
options.maximumFractionDigits = Math.min(Math.max(n, 0), 20) |
|
} |
|
return options |
|
}, |
|
parseDatePattern: function (pattern) { |
|
if (!pattern) return |
|
var options = {} |
|
for (var i = 0; i < pattern.length;) { |
|
var current = pattern[i] |
|
var n = 1 |
|
while (pattern[++i] === current) ++n |
|
switch (current) { |
|
case 'G': |
|
options.era = n === 5 ? NARROW : n === 4 ? LONG : SHORT |
|
break |
|
case 'y': |
|
case 'Y': |
|
options.year = n === 2 ? TWODIGIT : NUMERIC |
|
break |
|
case 'M': |
|
case 'L': |
|
n = Math.min(Math.max(n - 1, 0), 4) |
|
options.month = [NUMERIC, TWODIGIT, SHORT, LONG, NARROW][n] |
|
break |
|
case 'E': |
|
case 'e': |
|
case 'c': |
|
options.weekday = n === 5 ? NARROW : n === 4 ? LONG : SHORT |
|
break |
|
case 'd': |
|
case 'D': |
|
options.day = n === 2 ? TWODIGIT : NUMERIC |
|
break |
|
case 'h': |
|
case 'K': |
|
options.hour12 = true |
|
options.hour = n === 2 ? TWODIGIT : NUMERIC |
|
break |
|
case 'H': |
|
case 'k': |
|
options.hour12 = false |
|
options.hour = n === 2 ? TWODIGIT : NUMERIC |
|
break |
|
case 'm': |
|
options.minute = n === 2 ? TWODIGIT : NUMERIC |
|
break |
|
case 's': |
|
case 'S': |
|
options.second = n === 2 ? TWODIGIT : NUMERIC |
|
break |
|
case 'z': |
|
case 'Z': |
|
case 'v': |
|
case 'V': |
|
options.timeZoneName = n === 1 ? SHORT : LONG |
|
break |
|
} |
|
} |
|
return Object.keys(options).length ? options : undefined |
|
} |
|
} |
|
|
|
|
|
}), |
|
|
|
"./node_modules/format-message-interpret/index.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var formats = __webpack_require__( "./node_modules/format-message-formats/index.js") |
|
var lookupClosestLocale = __webpack_require__( "./node_modules/lookup-closest-locale/index.js") |
|
var plurals = __webpack_require__( "./node_modules/format-message-interpret/plurals.js") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
exports = module.exports = function interpret ( |
|
ast, |
|
locale, |
|
types |
|
) { |
|
return interpretAST(ast, null, locale || 'en', types || {}, true) |
|
} |
|
|
|
exports.toParts = function toParts ( |
|
ast, |
|
locale, |
|
types |
|
) { |
|
return interpretAST(ast, null, locale || 'en', types || {}, false) |
|
} |
|
|
|
function interpretAST ( |
|
elements, |
|
parent, |
|
locale, |
|
types, |
|
join |
|
) { |
|
var parts = elements.map(function (element) { |
|
return interpretElement(element, parent, locale, types, join) |
|
}) |
|
|
|
if (!join) { |
|
return function format (args) { |
|
return parts.reduce(function (parts, part) { |
|
return parts.concat(part(args)) |
|
}, []) |
|
} |
|
} |
|
|
|
if (parts.length === 1) return parts[0] |
|
return function format (args) { |
|
var message = '' |
|
for (var e = 0; e < parts.length; ++e) { |
|
message += parts[e](args) |
|
} |
|
return message |
|
} |
|
} |
|
|
|
function interpretElement ( |
|
element, |
|
parent, |
|
locale, |
|
types, |
|
join |
|
) { |
|
if (typeof element === 'string') { |
|
var value = element |
|
return function format () { return value } |
|
} |
|
|
|
var id = element[0] |
|
var type = element[1] |
|
|
|
if (parent && element[0] === '#') { |
|
id = parent[0] |
|
var offset = parent[2] |
|
var formatter = (types.number || defaults.number)([id, 'number'], locale) |
|
return function format (args) { |
|
return formatter(getArg(id, args) - offset, args) |
|
} |
|
} |
|
|
|
|
|
var children |
|
if (type === 'plural' || type === 'selectordinal') { |
|
children = {} |
|
Object.keys(element[3]).forEach(function (key) { |
|
children[key] = interpretAST(element[3][key], element, locale, types, join) |
|
}) |
|
element = [element[0], element[1], element[2], children] |
|
} else if (element[2] && typeof element[2] === 'object') { |
|
children = {} |
|
Object.keys(element[2]).forEach(function (key) { |
|
children[key] = interpretAST(element[2][key], element, locale, types, join) |
|
}) |
|
element = [element[0], element[1], children] |
|
} |
|
|
|
var getFrmt = type && (types[type] || defaults[type]) |
|
if (getFrmt) { |
|
var frmt = getFrmt(element, locale) |
|
return function format (args) { |
|
return frmt(getArg(id, args), args) |
|
} |
|
} |
|
|
|
return join |
|
? function format (args) { return String(getArg(id, args)) } |
|
: function format (args) { return getArg(id, args) } |
|
} |
|
|
|
function getArg (id, args) { |
|
if (args && (id in args)) return args[id] |
|
var parts = id.split('.') |
|
var a = args |
|
for (var i = 0, ii = parts.length; a && i < ii; ++i) { |
|
a = a[parts[i]] |
|
} |
|
return a |
|
} |
|
|
|
function interpretNumber (element, locales) { |
|
var style = element[2] |
|
var options = formats.number[style] || formats.parseNumberPattern(style) || formats.number.default |
|
return new Intl.NumberFormat(locales, options).format |
|
} |
|
|
|
function interpretDuration (element, locales) { |
|
var style = element[2] |
|
var options = formats.duration[style] || formats.duration.default |
|
var fs = new Intl.NumberFormat(locales, options.seconds).format |
|
var fm = new Intl.NumberFormat(locales, options.minutes).format |
|
var fh = new Intl.NumberFormat(locales, options.hours).format |
|
var sep = /^fi$|^fi-|^da/.test(String(locales)) ? '.' : ':' |
|
|
|
return function (s, args) { |
|
s = +s |
|
if (!isFinite(s)) return fs(s) |
|
var h = ~~(s / 60 / 60) |
|
var m = ~~(s / 60 % 60) |
|
var dur = (h ? (fh(Math.abs(h)) + sep) : '') + |
|
fm(Math.abs(m)) + sep + fs(Math.abs(s % 60)) |
|
return s < 0 ? fh(-1).replace(fh(1), dur) : dur |
|
} |
|
} |
|
|
|
function interpretDateTime (element, locales) { |
|
var type = element[1] |
|
var style = element[2] |
|
var options = formats[type][style] || formats.parseDatePattern(style) || formats[type].default |
|
return new Intl.DateTimeFormat(locales, options).format |
|
} |
|
|
|
function interpretPlural (element, locales) { |
|
var type = element[1] |
|
var pluralType = type === 'selectordinal' ? 'ordinal' : 'cardinal' |
|
var offset = element[2] |
|
var children = element[3] |
|
var pluralRules |
|
if (Intl.PluralRules && Intl.PluralRules.supportedLocalesOf(locales).length > 0) { |
|
pluralRules = new Intl.PluralRules(locales, { type: pluralType }) |
|
} else { |
|
var locale = lookupClosestLocale(locales, plurals) |
|
var select = (locale && plurals[locale][pluralType]) || returnOther |
|
pluralRules = { select: select } |
|
} |
|
|
|
return function (value, args) { |
|
var clause = |
|
children['=' + +value] || |
|
children[pluralRules.select(value - offset)] || |
|
children.other |
|
return clause(args) |
|
} |
|
} |
|
|
|
function returnOther () { return 'other' } |
|
|
|
function interpretSelect (element, locales) { |
|
var children = element[2] |
|
return function (value, args) { |
|
var clause = children[value] || children.other |
|
return clause(args) |
|
} |
|
} |
|
|
|
var defaults = { |
|
number: interpretNumber, |
|
ordinal: interpretNumber, |
|
spellout: interpretNumber, |
|
duration: interpretDuration, |
|
date: interpretDateTime, |
|
time: interpretDateTime, |
|
plural: interpretPlural, |
|
selectordinal: interpretPlural, |
|
select: interpretSelect |
|
} |
|
exports.types = defaults |
|
|
|
|
|
}), |
|
|
|
"./node_modules/format-message-interpret/plurals.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
|
|
|
|
var zero = 'zero', one = 'one', two = 'two', few = 'few', many = 'many', other = 'other' |
|
var f = [ |
|
function (s) { |
|
var n = +s |
|
return n === 1 ? one |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return 0 <= n && n <= 1 ? one |
|
: other |
|
}, |
|
function (s) { |
|
var i = Math.floor(Math.abs(+s)) |
|
var n = +s |
|
return i === 0 || n === 1 ? one |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return n === 0 ? zero |
|
: n === 1 ? one |
|
: n === 2 ? two |
|
: 3 <= n % 100 && n % 100 <= 10 ? few |
|
: 11 <= n % 100 && n % 100 <= 99 ? many |
|
: other |
|
}, |
|
function (s) { |
|
var i = Math.floor(Math.abs(+s)) |
|
var v = (s + '.').split('.')[1].length |
|
return i === 1 && v === 0 ? one |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return n % 10 === 1 && n % 100 !== 11 ? one |
|
: (2 <= n % 10 && n % 10 <= 4) && (n % 100 < 12 || 14 < n % 100) ? few |
|
: n % 10 === 0 || (5 <= n % 10 && n % 10 <= 9) || (11 <= n % 100 && n % 100 <= 14) ? many |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return n % 10 === 1 && (n % 100 !== 11 && n % 100 !== 71 && n % 100 !== 91) ? one |
|
: n % 10 === 2 && (n % 100 !== 12 && n % 100 !== 72 && n % 100 !== 92) ? two |
|
: ((3 <= n % 10 && n % 10 <= 4) || n % 10 === 9) && ((n % 100 < 10 || 19 < n % 100) && (n % 100 < 70 || 79 < n % 100) && (n % 100 < 90 || 99 < n % 100)) ? few |
|
: n !== 0 && n % 1000000 === 0 ? many |
|
: other |
|
}, |
|
function (s) { |
|
var i = Math.floor(Math.abs(+s)) |
|
var v = (s + '.').split('.')[1].length |
|
var f = +(s + '.').split('.')[1] |
|
return v === 0 && i % 10 === 1 && i % 100 !== 11 || f % 10 === 1 && f % 100 !== 11 ? one |
|
: v === 0 && (2 <= i % 10 && i % 10 <= 4) && (i % 100 < 12 || 14 < i % 100) || (2 <= f % 10 && f % 10 <= 4) && (f % 100 < 12 || 14 < f % 100) ? few |
|
: other |
|
}, |
|
function (s) { |
|
var i = Math.floor(Math.abs(+s)) |
|
var v = (s + '.').split('.')[1].length |
|
return i === 1 && v === 0 ? one |
|
: (2 <= i && i <= 4) && v === 0 ? few |
|
: v !== 0 ? many |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return n === 0 ? zero |
|
: n === 1 ? one |
|
: n === 2 ? two |
|
: n === 3 ? few |
|
: n === 6 ? many |
|
: other |
|
}, |
|
function (s) { |
|
var i = Math.floor(Math.abs(+s)) |
|
var t = +('' + s).replace(/^[^.]*.?|0+$/g, '') |
|
var n = +s |
|
return n === 1 || t !== 0 && (i === 0 || i === 1) ? one |
|
: other |
|
}, |
|
function (s) { |
|
var i = Math.floor(Math.abs(+s)) |
|
var v = (s + '.').split('.')[1].length |
|
var f = +(s + '.').split('.')[1] |
|
return v === 0 && i % 100 === 1 || f % 100 === 1 ? one |
|
: v === 0 && i % 100 === 2 || f % 100 === 2 ? two |
|
: v === 0 && (3 <= i % 100 && i % 100 <= 4) || (3 <= f % 100 && f % 100 <= 4) ? few |
|
: other |
|
}, |
|
function (s) { |
|
var i = Math.floor(Math.abs(+s)) |
|
return i === 0 || i === 1 ? one |
|
: other |
|
}, |
|
function (s) { |
|
var i = Math.floor(Math.abs(+s)) |
|
var v = (s + '.').split('.')[1].length |
|
var f = +(s + '.').split('.')[1] |
|
return v === 0 && (i === 1 || i === 2 || i === 3) || v === 0 && (i % 10 !== 4 && i % 10 !== 6 && i % 10 !== 9) || v !== 0 && (f % 10 !== 4 && f % 10 !== 6 && f % 10 !== 9) ? one |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return n === 1 ? one |
|
: n === 2 ? two |
|
: 3 <= n && n <= 6 ? few |
|
: 7 <= n && n <= 10 ? many |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return n === 1 || n === 11 ? one |
|
: n === 2 || n === 12 ? two |
|
: ((3 <= n && n <= 10) || (13 <= n && n <= 19)) ? few |
|
: other |
|
}, |
|
function (s) { |
|
var i = Math.floor(Math.abs(+s)) |
|
var v = (s + '.').split('.')[1].length |
|
return v === 0 && i % 10 === 1 ? one |
|
: v === 0 && i % 10 === 2 ? two |
|
: v === 0 && (i % 100 === 0 || i % 100 === 20 || i % 100 === 40 || i % 100 === 60 || i % 100 === 80) ? few |
|
: v !== 0 ? many |
|
: other |
|
}, |
|
function (s) { |
|
var i = Math.floor(Math.abs(+s)) |
|
var v = (s + '.').split('.')[1].length |
|
var n = +s |
|
return i === 1 && v === 0 ? one |
|
: i === 2 && v === 0 ? two |
|
: v === 0 && (n < 0 || 10 < n) && n % 10 === 0 ? many |
|
: other |
|
}, |
|
function (s) { |
|
var i = Math.floor(Math.abs(+s)) |
|
var t = +('' + s).replace(/^[^.]*.?|0+$/g, '') |
|
return t === 0 && i % 10 === 1 && i % 100 !== 11 || t !== 0 ? one |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return n === 1 ? one |
|
: n === 2 ? two |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return n === 0 ? zero |
|
: n === 1 ? one |
|
: other |
|
}, |
|
function (s) { |
|
var i = Math.floor(Math.abs(+s)) |
|
var n = +s |
|
return n === 0 ? zero |
|
: (i === 0 || i === 1) && n !== 0 ? one |
|
: other |
|
}, |
|
function (s) { |
|
var f = +(s + '.').split('.')[1] |
|
var n = +s |
|
return n % 10 === 1 && (n % 100 < 11 || 19 < n % 100) ? one |
|
: (2 <= n % 10 && n % 10 <= 9) && (n % 100 < 11 || 19 < n % 100) ? few |
|
: f !== 0 ? many |
|
: other |
|
}, |
|
function (s) { |
|
var v = (s + '.').split('.')[1].length |
|
var f = +(s + '.').split('.')[1] |
|
var n = +s |
|
return n % 10 === 0 || (11 <= n % 100 && n % 100 <= 19) || v === 2 && (11 <= f % 100 && f % 100 <= 19) ? zero |
|
: n % 10 === 1 && n % 100 !== 11 || v === 2 && f % 10 === 1 && f % 100 !== 11 || v !== 2 && f % 10 === 1 ? one |
|
: other |
|
}, |
|
function (s) { |
|
var i = Math.floor(Math.abs(+s)) |
|
var v = (s + '.').split('.')[1].length |
|
var f = +(s + '.').split('.')[1] |
|
return v === 0 && i % 10 === 1 && i % 100 !== 11 || f % 10 === 1 && f % 100 !== 11 ? one |
|
: other |
|
}, |
|
function (s) { |
|
var i = Math.floor(Math.abs(+s)) |
|
var v = (s + '.').split('.')[1].length |
|
var n = +s |
|
return i === 1 && v === 0 ? one |
|
: v !== 0 || n === 0 || n !== 1 && (1 <= n % 100 && n % 100 <= 19) ? few |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return n === 1 ? one |
|
: n === 0 || (2 <= n % 100 && n % 100 <= 10) ? few |
|
: 11 <= n % 100 && n % 100 <= 19 ? many |
|
: other |
|
}, |
|
function (s) { |
|
var i = Math.floor(Math.abs(+s)) |
|
var v = (s + '.').split('.')[1].length |
|
return i === 1 && v === 0 ? one |
|
: v === 0 && (2 <= i % 10 && i % 10 <= 4) && (i % 100 < 12 || 14 < i % 100) ? few |
|
: v === 0 && i !== 1 && (0 <= i % 10 && i % 10 <= 1) || v === 0 && (5 <= i % 10 && i % 10 <= 9) || v === 0 && (12 <= i % 100 && i % 100 <= 14) ? many |
|
: other |
|
}, |
|
function (s) { |
|
var i = Math.floor(Math.abs(+s)) |
|
return 0 <= i && i <= 1 ? one |
|
: other |
|
}, |
|
function (s) { |
|
var i = Math.floor(Math.abs(+s)) |
|
var v = (s + '.').split('.')[1].length |
|
return v === 0 && i % 10 === 1 && i % 100 !== 11 ? one |
|
: v === 0 && (2 <= i % 10 && i % 10 <= 4) && (i % 100 < 12 || 14 < i % 100) ? few |
|
: v === 0 && i % 10 === 0 || v === 0 && (5 <= i % 10 && i % 10 <= 9) || v === 0 && (11 <= i % 100 && i % 100 <= 14) ? many |
|
: other |
|
}, |
|
function (s) { |
|
var i = Math.floor(Math.abs(+s)) |
|
var n = +s |
|
return i === 0 || n === 1 ? one |
|
: 2 <= n && n <= 10 ? few |
|
: other |
|
}, |
|
function (s) { |
|
var i = Math.floor(Math.abs(+s)) |
|
var f = +(s + '.').split('.')[1] |
|
var n = +s |
|
return (n === 0 || n === 1) || i === 0 && f === 1 ? one |
|
: other |
|
}, |
|
function (s) { |
|
var i = Math.floor(Math.abs(+s)) |
|
var v = (s + '.').split('.')[1].length |
|
return v === 0 && i % 100 === 1 ? one |
|
: v === 0 && i % 100 === 2 ? two |
|
: v === 0 && (3 <= i % 100 && i % 100 <= 4) || v !== 0 ? few |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return (0 <= n && n <= 1) || (11 <= n && n <= 99) ? one |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return n === 1 || n === 5 || n === 7 || n === 8 || n === 9 || n === 10 ? one |
|
: n === 2 || n === 3 ? two |
|
: n === 4 ? few |
|
: n === 6 ? many |
|
: other |
|
}, |
|
function (s) { |
|
var i = Math.floor(Math.abs(+s)) |
|
return (i % 10 === 1 || i % 10 === 2 || i % 10 === 5 || i % 10 === 7 || i % 10 === 8) || (i % 100 === 20 || i % 100 === 50 || i % 100 === 70 || i % 100 === 80) ? one |
|
: (i % 10 === 3 || i % 10 === 4) || (i % 1000 === 100 || i % 1000 === 200 || i % 1000 === 300 || i % 1000 === 400 || i % 1000 === 500 || i % 1000 === 600 || i % 1000 === 700 || i % 1000 === 800 || i % 1000 === 900) ? few |
|
: i === 0 || i % 10 === 6 || (i % 100 === 40 || i % 100 === 60 || i % 100 === 90) ? many |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return (n % 10 === 2 || n % 10 === 3) && (n % 100 !== 12 && n % 100 !== 13) ? few |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return n === 1 || n === 3 ? one |
|
: n === 2 ? two |
|
: n === 4 ? few |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return n === 0 || n === 7 || n === 8 || n === 9 ? zero |
|
: n === 1 ? one |
|
: n === 2 ? two |
|
: n === 3 || n === 4 ? few |
|
: n === 5 || n === 6 ? many |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return n % 10 === 1 && n % 100 !== 11 ? one |
|
: n % 10 === 2 && n % 100 !== 12 ? two |
|
: n % 10 === 3 && n % 100 !== 13 ? few |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return n === 1 || n === 11 ? one |
|
: n === 2 || n === 12 ? two |
|
: n === 3 || n === 13 ? few |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return n === 1 ? one |
|
: n === 2 || n === 3 ? two |
|
: n === 4 ? few |
|
: n === 6 ? many |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return n === 1 || n === 5 ? one |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return n === 11 || n === 8 || n === 80 || n === 800 ? many |
|
: other |
|
}, |
|
function (s) { |
|
var i = Math.floor(Math.abs(+s)) |
|
return i === 1 ? one |
|
: i === 0 || ((2 <= i % 100 && i % 100 <= 20) || i % 100 === 40 || i % 100 === 60 || i % 100 === 80) ? many |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return n % 10 === 6 || n % 10 === 9 || n % 10 === 0 && n !== 0 ? many |
|
: other |
|
}, |
|
function (s) { |
|
var i = Math.floor(Math.abs(+s)) |
|
return i % 10 === 1 && i % 100 !== 11 ? one |
|
: i % 10 === 2 && i % 100 !== 12 ? two |
|
: (i % 10 === 7 || i % 10 === 8) && (i % 100 !== 17 && i % 100 !== 18) ? many |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return n === 1 ? one |
|
: n === 2 || n === 3 ? two |
|
: n === 4 ? few |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return 1 <= n && n <= 4 ? one |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return (n === 1 || n === 5 || (7 <= n && n <= 9)) ? one |
|
: n === 2 || n === 3 ? two |
|
: n === 4 ? few |
|
: n === 6 ? many |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return n === 1 ? one |
|
: n % 10 === 4 && n % 100 !== 14 ? many |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return (n % 10 === 1 || n % 10 === 2) && (n % 100 !== 11 && n % 100 !== 12) ? one |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return (n % 10 === 6 || n % 10 === 9) || n === 10 ? few |
|
: other |
|
}, |
|
function (s) { |
|
var n = +s |
|
return n % 10 === 3 && n % 100 !== 13 ? few |
|
: other |
|
} |
|
] |
|
|
|
module.exports = { |
|
af: { cardinal: f[0] }, |
|
ak: { cardinal: f[1] }, |
|
am: { cardinal: f[2] }, |
|
ar: { cardinal: f[3] }, |
|
ars: { cardinal: f[3] }, |
|
as: { cardinal: f[2], ordinal: f[34] }, |
|
asa: { cardinal: f[0] }, |
|
ast: { cardinal: f[4] }, |
|
az: { cardinal: f[0], ordinal: f[35] }, |
|
be: { cardinal: f[5], ordinal: f[36] }, |
|
bem: { cardinal: f[0] }, |
|
bez: { cardinal: f[0] }, |
|
bg: { cardinal: f[0] }, |
|
bh: { cardinal: f[1] }, |
|
bn: { cardinal: f[2], ordinal: f[34] }, |
|
br: { cardinal: f[6] }, |
|
brx: { cardinal: f[0] }, |
|
bs: { cardinal: f[7] }, |
|
ca: { cardinal: f[4], ordinal: f[37] }, |
|
ce: { cardinal: f[0] }, |
|
cgg: { cardinal: f[0] }, |
|
chr: { cardinal: f[0] }, |
|
ckb: { cardinal: f[0] }, |
|
cs: { cardinal: f[8] }, |
|
cy: { cardinal: f[9], ordinal: f[38] }, |
|
da: { cardinal: f[10] }, |
|
de: { cardinal: f[4] }, |
|
dsb: { cardinal: f[11] }, |
|
dv: { cardinal: f[0] }, |
|
ee: { cardinal: f[0] }, |
|
el: { cardinal: f[0] }, |
|
en: { cardinal: f[4], ordinal: f[39] }, |
|
eo: { cardinal: f[0] }, |
|
es: { cardinal: f[0] }, |
|
et: { cardinal: f[4] }, |
|
eu: { cardinal: f[0] }, |
|
fa: { cardinal: f[2] }, |
|
ff: { cardinal: f[12] }, |
|
fi: { cardinal: f[4] }, |
|
fil: { cardinal: f[13], ordinal: f[0] }, |
|
fo: { cardinal: f[0] }, |
|
fr: { cardinal: f[12], ordinal: f[0] }, |
|
fur: { cardinal: f[0] }, |
|
fy: { cardinal: f[4] }, |
|
ga: { cardinal: f[14], ordinal: f[0] }, |
|
gd: { cardinal: f[15], ordinal: f[40] }, |
|
gl: { cardinal: f[4] }, |
|
gsw: { cardinal: f[0] }, |
|
gu: { cardinal: f[2], ordinal: f[41] }, |
|
guw: { cardinal: f[1] }, |
|
gv: { cardinal: f[16] }, |
|
ha: { cardinal: f[0] }, |
|
haw: { cardinal: f[0] }, |
|
he: { cardinal: f[17] }, |
|
hi: { cardinal: f[2], ordinal: f[41] }, |
|
hr: { cardinal: f[7] }, |
|
hsb: { cardinal: f[11] }, |
|
hu: { cardinal: f[0], ordinal: f[42] }, |
|
hy: { cardinal: f[12], ordinal: f[0] }, |
|
ia: { cardinal: f[4] }, |
|
io: { cardinal: f[4] }, |
|
is: { cardinal: f[18] }, |
|
it: { cardinal: f[4], ordinal: f[43] }, |
|
iu: { cardinal: f[19] }, |
|
iw: { cardinal: f[17] }, |
|
jgo: { cardinal: f[0] }, |
|
ji: { cardinal: f[4] }, |
|
jmc: { cardinal: f[0] }, |
|
ka: { cardinal: f[0], ordinal: f[44] }, |
|
kab: { cardinal: f[12] }, |
|
kaj: { cardinal: f[0] }, |
|
kcg: { cardinal: f[0] }, |
|
kk: { cardinal: f[0], ordinal: f[45] }, |
|
kkj: { cardinal: f[0] }, |
|
kl: { cardinal: f[0] }, |
|
kn: { cardinal: f[2] }, |
|
ks: { cardinal: f[0] }, |
|
ksb: { cardinal: f[0] }, |
|
ksh: { cardinal: f[20] }, |
|
ku: { cardinal: f[0] }, |
|
kw: { cardinal: f[19] }, |
|
ky: { cardinal: f[0] }, |
|
lag: { cardinal: f[21] }, |
|
lb: { cardinal: f[0] }, |
|
lg: { cardinal: f[0] }, |
|
ln: { cardinal: f[1] }, |
|
lt: { cardinal: f[22] }, |
|
lv: { cardinal: f[23] }, |
|
mas: { cardinal: f[0] }, |
|
mg: { cardinal: f[1] }, |
|
mgo: { cardinal: f[0] }, |
|
mk: { cardinal: f[24], ordinal: f[46] }, |
|
ml: { cardinal: f[0] }, |
|
mn: { cardinal: f[0] }, |
|
mo: { cardinal: f[25], ordinal: f[0] }, |
|
mr: { cardinal: f[2], ordinal: f[47] }, |
|
mt: { cardinal: f[26] }, |
|
nah: { cardinal: f[0] }, |
|
naq: { cardinal: f[19] }, |
|
nb: { cardinal: f[0] }, |
|
nd: { cardinal: f[0] }, |
|
ne: { cardinal: f[0], ordinal: f[48] }, |
|
nl: { cardinal: f[4] }, |
|
nn: { cardinal: f[0] }, |
|
nnh: { cardinal: f[0] }, |
|
no: { cardinal: f[0] }, |
|
nr: { cardinal: f[0] }, |
|
nso: { cardinal: f[1] }, |
|
ny: { cardinal: f[0] }, |
|
nyn: { cardinal: f[0] }, |
|
om: { cardinal: f[0] }, |
|
or: { cardinal: f[0], ordinal: f[49] }, |
|
os: { cardinal: f[0] }, |
|
pa: { cardinal: f[1] }, |
|
pap: { cardinal: f[0] }, |
|
pl: { cardinal: f[27] }, |
|
prg: { cardinal: f[23] }, |
|
ps: { cardinal: f[0] }, |
|
pt: { cardinal: f[28] }, |
|
'pt-PT': { cardinal: f[4] }, |
|
rm: { cardinal: f[0] }, |
|
ro: { cardinal: f[25], ordinal: f[0] }, |
|
rof: { cardinal: f[0] }, |
|
ru: { cardinal: f[29] }, |
|
rwk: { cardinal: f[0] }, |
|
saq: { cardinal: f[0] }, |
|
sc: { cardinal: f[4], ordinal: f[43] }, |
|
scn: { cardinal: f[4], ordinal: f[43] }, |
|
sd: { cardinal: f[0] }, |
|
sdh: { cardinal: f[0] }, |
|
se: { cardinal: f[19] }, |
|
seh: { cardinal: f[0] }, |
|
sh: { cardinal: f[7] }, |
|
shi: { cardinal: f[30] }, |
|
si: { cardinal: f[31] }, |
|
sk: { cardinal: f[8] }, |
|
sl: { cardinal: f[32] }, |
|
sma: { cardinal: f[19] }, |
|
smi: { cardinal: f[19] }, |
|
smj: { cardinal: f[19] }, |
|
smn: { cardinal: f[19] }, |
|
sms: { cardinal: f[19] }, |
|
sn: { cardinal: f[0] }, |
|
so: { cardinal: f[0] }, |
|
sq: { cardinal: f[0], ordinal: f[50] }, |
|
sr: { cardinal: f[7] }, |
|
ss: { cardinal: f[0] }, |
|
ssy: { cardinal: f[0] }, |
|
st: { cardinal: f[0] }, |
|
sv: { cardinal: f[4], ordinal: f[51] }, |
|
sw: { cardinal: f[4] }, |
|
syr: { cardinal: f[0] }, |
|
ta: { cardinal: f[0] }, |
|
te: { cardinal: f[0] }, |
|
teo: { cardinal: f[0] }, |
|
ti: { cardinal: f[1] }, |
|
tig: { cardinal: f[0] }, |
|
tk: { cardinal: f[0], ordinal: f[52] }, |
|
tl: { cardinal: f[13], ordinal: f[0] }, |
|
tn: { cardinal: f[0] }, |
|
tr: { cardinal: f[0] }, |
|
ts: { cardinal: f[0] }, |
|
tzm: { cardinal: f[33] }, |
|
ug: { cardinal: f[0] }, |
|
uk: { cardinal: f[29], ordinal: f[53] }, |
|
ur: { cardinal: f[4] }, |
|
uz: { cardinal: f[0] }, |
|
ve: { cardinal: f[0] }, |
|
vo: { cardinal: f[0] }, |
|
vun: { cardinal: f[0] }, |
|
wa: { cardinal: f[1] }, |
|
wae: { cardinal: f[0] }, |
|
xh: { cardinal: f[0] }, |
|
xog: { cardinal: f[0] }, |
|
yi: { cardinal: f[4] }, |
|
zu: { cardinal: f[2] }, |
|
lo: { ordinal: f[0] }, |
|
ms: { ordinal: f[0] }, |
|
vi: { ordinal: f[0] } |
|
} |
|
|
|
|
|
}), |
|
|
|
"./node_modules/format-message-parse/index.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var ARG_OPN = '{' |
|
var ARG_CLS = '}' |
|
var ARG_SEP = ',' |
|
var NUM_ARG = '#' |
|
var TAG_OPN = '<' |
|
var TAG_CLS = '>' |
|
var TAG_END = '</' |
|
var TAG_SELF_CLS = '/>' |
|
var ESC = '\'' |
|
var OFFSET = 'offset:' |
|
var simpleTypes = [ |
|
'number', |
|
'date', |
|
'time', |
|
'ordinal', |
|
'duration', |
|
'spellout' |
|
] |
|
var submTypes = [ |
|
'plural', |
|
'select', |
|
'selectordinal' |
|
] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
exports = module.exports = function parse ( |
|
pattern, |
|
options |
|
) { |
|
return parseAST({ |
|
pattern: String(pattern), |
|
index: 0, |
|
tagsType: (options && options.tagsType) || null, |
|
tokens: (options && options.tokens) || null |
|
}, '') |
|
} |
|
|
|
function parseAST (current, parentType) { |
|
var pattern = current.pattern |
|
var length = pattern.length |
|
var elements = [] |
|
var start = current.index |
|
var text = parseText(current, parentType) |
|
if (text) elements.push(text) |
|
if (text && current.tokens) current.tokens.push(['text', pattern.slice(start, current.index)]) |
|
while (current.index < length) { |
|
if (pattern[current.index] === ARG_CLS) { |
|
if (!parentType) throw expected(current) |
|
break |
|
} |
|
if (parentType && current.tagsType && pattern.slice(current.index, current.index + TAG_END.length) === TAG_END) break |
|
elements.push(parsePlaceholder(current)) |
|
start = current.index |
|
text = parseText(current, parentType) |
|
if (text) elements.push(text) |
|
if (text && current.tokens) current.tokens.push(['text', pattern.slice(start, current.index)]) |
|
} |
|
return elements |
|
} |
|
|
|
function parseText (current, parentType) { |
|
var pattern = current.pattern |
|
var length = pattern.length |
|
var isHashSpecial = (parentType === 'plural' || parentType === 'selectordinal') |
|
var isAngleSpecial = !!current.tagsType |
|
var isArgStyle = (parentType === '{style}') |
|
var text = '' |
|
while (current.index < length) { |
|
var char = pattern[current.index] |
|
if ( |
|
char === ARG_OPN || char === ARG_CLS || |
|
(isHashSpecial && char === NUM_ARG) || |
|
(isAngleSpecial && char === TAG_OPN) || |
|
(isArgStyle && isWhitespace(char.charCodeAt(0))) |
|
) { |
|
break |
|
} else if (char === ESC) { |
|
char = pattern[++current.index] |
|
if (char === ESC) { |
|
text += char |
|
++current.index |
|
} else if ( |
|
|
|
char === ARG_OPN || char === ARG_CLS || |
|
(isHashSpecial && char === NUM_ARG) || |
|
(isAngleSpecial && char === TAG_OPN) || |
|
isArgStyle |
|
) { |
|
text += char |
|
while (++current.index < length) { |
|
char = pattern[current.index] |
|
if (char === ESC && pattern[current.index + 1] === ESC) { |
|
text += ESC |
|
++current.index |
|
} else if (char === ESC) { |
|
++current.index |
|
break |
|
} else { |
|
text += char |
|
} |
|
} |
|
} else { |
|
text += ESC |
|
|
|
} |
|
} else { |
|
text += char |
|
++current.index |
|
} |
|
} |
|
return text |
|
} |
|
|
|
function isWhitespace (code) { |
|
return ( |
|
(code >= 0x09 && code <= 0x0D) || |
|
code === 0x20 || code === 0x85 || code === 0xA0 || code === 0x180E || |
|
(code >= 0x2000 && code <= 0x200D) || |
|
code === 0x2028 || code === 0x2029 || code === 0x202F || code === 0x205F || |
|
code === 0x2060 || code === 0x3000 || code === 0xFEFF |
|
) |
|
} |
|
|
|
function skipWhitespace (current) { |
|
var pattern = current.pattern |
|
var length = pattern.length |
|
var start = current.index |
|
while (current.index < length && isWhitespace(pattern.charCodeAt(current.index))) { |
|
++current.index |
|
} |
|
if (start < current.index && current.tokens) { |
|
current.tokens.push(['space', current.pattern.slice(start, current.index)]) |
|
} |
|
} |
|
|
|
function parsePlaceholder (current) { |
|
var pattern = current.pattern |
|
if (pattern[current.index] === NUM_ARG) { |
|
if (current.tokens) current.tokens.push(['syntax', NUM_ARG]) |
|
++current.index |
|
return [NUM_ARG] |
|
} |
|
|
|
var tag = parseTag(current) |
|
if (tag) return tag |
|
|
|
|
|
if (pattern[current.index] !== ARG_OPN) throw expected(current, ARG_OPN) |
|
if (current.tokens) current.tokens.push(['syntax', ARG_OPN]) |
|
++current.index |
|
skipWhitespace(current) |
|
|
|
var id = parseId(current) |
|
if (!id) throw expected(current, 'placeholder id') |
|
if (current.tokens) current.tokens.push(['id', id]) |
|
skipWhitespace(current) |
|
|
|
var char = pattern[current.index] |
|
if (char === ARG_CLS) { |
|
if (current.tokens) current.tokens.push(['syntax', ARG_CLS]) |
|
++current.index |
|
return [id] |
|
} |
|
|
|
if (char !== ARG_SEP) throw expected(current, ARG_SEP + ' or ' + ARG_CLS) |
|
if (current.tokens) current.tokens.push(['syntax', ARG_SEP]) |
|
++current.index |
|
skipWhitespace(current) |
|
|
|
var type = parseId(current) |
|
if (!type) throw expected(current, 'placeholder type') |
|
if (current.tokens) current.tokens.push(['type', type]) |
|
skipWhitespace(current) |
|
char = pattern[current.index] |
|
if (char === ARG_CLS) { |
|
if (current.tokens) current.tokens.push(['syntax', ARG_CLS]) |
|
if (type === 'plural' || type === 'selectordinal' || type === 'select') { |
|
throw expected(current, type + ' sub-messages') |
|
} |
|
++current.index |
|
return [id, type] |
|
} |
|
|
|
if (char !== ARG_SEP) throw expected(current, ARG_SEP + ' or ' + ARG_CLS) |
|
if (current.tokens) current.tokens.push(['syntax', ARG_SEP]) |
|
++current.index |
|
skipWhitespace(current) |
|
|
|
var arg |
|
if (type === 'plural' || type === 'selectordinal') { |
|
var offset = parsePluralOffset(current) |
|
skipWhitespace(current) |
|
arg = [id, type, offset, parseSubMessages(current, type)] |
|
} else if (type === 'select') { |
|
arg = [id, type, parseSubMessages(current, type)] |
|
} else if (simpleTypes.indexOf(type) >= 0) { |
|
arg = [id, type, parseSimpleFormat(current)] |
|
} else { |
|
var index = current.index |
|
var format = parseSimpleFormat(current) |
|
skipWhitespace(current) |
|
if (pattern[current.index] === ARG_OPN) { |
|
current.index = index |
|
format = parseSubMessages(current, type) |
|
} |
|
arg = [id, type, format] |
|
} |
|
|
|
skipWhitespace(current) |
|
if (pattern[current.index] !== ARG_CLS) throw expected(current, ARG_CLS) |
|
if (current.tokens) current.tokens.push(['syntax', ARG_CLS]) |
|
++current.index |
|
return arg |
|
} |
|
|
|
function parseTag (current) { |
|
var tagsType = current.tagsType |
|
if (!tagsType || current.pattern[current.index] !== TAG_OPN) return |
|
|
|
if (current.pattern.slice(current.index, current.index + TAG_END.length) === TAG_END) { |
|
throw expected(current, null, 'closing tag without matching opening tag') |
|
} |
|
if (current.tokens) current.tokens.push(['syntax', TAG_OPN]) |
|
++current.index |
|
|
|
var id = parseId(current, true) |
|
if (!id) throw expected(current, 'placeholder id') |
|
if (current.tokens) current.tokens.push(['id', id]) |
|
skipWhitespace(current) |
|
|
|
if (current.pattern.slice(current.index, current.index + TAG_SELF_CLS.length) === TAG_SELF_CLS) { |
|
if (current.tokens) current.tokens.push(['syntax', TAG_SELF_CLS]) |
|
current.index += TAG_SELF_CLS.length |
|
return [id, tagsType] |
|
} |
|
if (current.pattern[current.index] !== TAG_CLS) throw expected(current, TAG_CLS) |
|
if (current.tokens) current.tokens.push(['syntax', TAG_CLS]) |
|
++current.index |
|
|
|
var children = parseAST(current, tagsType) |
|
|
|
var end = current.index |
|
if (current.pattern.slice(current.index, current.index + TAG_END.length) !== TAG_END) throw expected(current, TAG_END + id + TAG_CLS) |
|
if (current.tokens) current.tokens.push(['syntax', TAG_END]) |
|
current.index += TAG_END.length |
|
var closeId = parseId(current, true) |
|
if (closeId && current.tokens) current.tokens.push(['id', closeId]) |
|
if (id !== closeId) { |
|
current.index = end |
|
throw expected(current, TAG_END + id + TAG_CLS, TAG_END + closeId + TAG_CLS) |
|
} |
|
skipWhitespace(current) |
|
if (current.pattern[current.index] !== TAG_CLS) throw expected(current, TAG_CLS) |
|
if (current.tokens) current.tokens.push(['syntax', TAG_CLS]) |
|
++current.index |
|
|
|
return [id, tagsType, { children: children }] |
|
} |
|
|
|
function parseId (current, isTag) { |
|
var pattern = current.pattern |
|
var length = pattern.length |
|
var id = '' |
|
while (current.index < length) { |
|
var char = pattern[current.index] |
|
if ( |
|
char === ARG_OPN || char === ARG_CLS || char === ARG_SEP || |
|
char === NUM_ARG || char === ESC || isWhitespace(char.charCodeAt(0)) || |
|
(isTag && (char === TAG_OPN || char === TAG_CLS || char === '/')) |
|
) break |
|
id += char |
|
++current.index |
|
} |
|
return id |
|
} |
|
|
|
function parseSimpleFormat (current) { |
|
var start = current.index |
|
var style = parseText(current, '{style}') |
|
if (!style) throw expected(current, 'placeholder style name') |
|
if (current.tokens) current.tokens.push(['style', current.pattern.slice(start, current.index)]) |
|
return style |
|
} |
|
|
|
function parsePluralOffset (current) { |
|
var pattern = current.pattern |
|
var length = pattern.length |
|
var offset = 0 |
|
if (pattern.slice(current.index, current.index + OFFSET.length) === OFFSET) { |
|
if (current.tokens) current.tokens.push(['offset', 'offset'], ['syntax', ':']) |
|
current.index += OFFSET.length |
|
skipWhitespace(current) |
|
var start = current.index |
|
while (current.index < length && isDigit(pattern.charCodeAt(current.index))) { |
|
++current.index |
|
} |
|
if (start === current.index) throw expected(current, 'offset number') |
|
if (current.tokens) current.tokens.push(['number', pattern.slice(start, current.index)]) |
|
offset = +pattern.slice(start, current.index) |
|
} |
|
return offset |
|
} |
|
|
|
function isDigit (code) { |
|
return (code >= 0x30 && code <= 0x39) |
|
} |
|
|
|
function parseSubMessages (current, parentType) { |
|
var pattern = current.pattern |
|
var length = pattern.length |
|
var options = {} |
|
while (current.index < length && pattern[current.index] !== ARG_CLS) { |
|
var selector = parseId(current) |
|
if (!selector) throw expected(current, 'sub-message selector') |
|
if (current.tokens) current.tokens.push(['selector', selector]) |
|
skipWhitespace(current) |
|
options[selector] = parseSubMessage(current, parentType) |
|
skipWhitespace(current) |
|
} |
|
if (!options.other && submTypes.indexOf(parentType) >= 0) { |
|
throw expected(current, null, null, '"other" sub-message must be specified in ' + parentType) |
|
} |
|
return options |
|
} |
|
|
|
function parseSubMessage (current, parentType) { |
|
if (current.pattern[current.index] !== ARG_OPN) throw expected(current, ARG_OPN + ' to start sub-message') |
|
if (current.tokens) current.tokens.push(['syntax', ARG_OPN]) |
|
++current.index |
|
var message = parseAST(current, parentType) |
|
if (current.pattern[current.index] !== ARG_CLS) throw expected(current, ARG_CLS + ' to end sub-message') |
|
if (current.tokens) current.tokens.push(['syntax', ARG_CLS]) |
|
++current.index |
|
return message |
|
} |
|
|
|
function expected (current, expected, found, message) { |
|
var pattern = current.pattern |
|
var lines = pattern.slice(0, current.index).split(/\r?\n/) |
|
var offset = current.index |
|
var line = lines.length |
|
var column = lines.slice(-1)[0].length |
|
found = found || ( |
|
(current.index >= pattern.length) ? 'end of message pattern' |
|
: (parseId(current) || pattern[current.index]) |
|
) |
|
if (!message) message = errorMessage(expected, found) |
|
message += ' in ' + pattern.replace(/\r?\n/g, '\n') |
|
return new SyntaxError(message, expected, found, offset, line, column) |
|
} |
|
|
|
function errorMessage (expected, found) { |
|
if (!expected) return 'Unexpected ' + found + ' found' |
|
return 'Expected ' + expected + ' but found ' + found |
|
} |
|
|
|
|
|
|
|
|
|
|
|
function SyntaxError (message, expected, found, offset, line, column) { |
|
Error.call(this, message) |
|
this.name = 'SyntaxError' |
|
this.message = message |
|
this.expected = expected |
|
this.found = found |
|
this.offset = offset |
|
this.line = line |
|
this.column = column |
|
} |
|
SyntaxError.prototype = Object.create(Error.prototype) |
|
exports.SyntaxError = SyntaxError |
|
|
|
|
|
}), |
|
|
|
"./node_modules/format-message/index.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports, __webpack_require__) { |
|
|
|
"use strict"; |
|
|
|
|
|
var parse = __webpack_require__( "./node_modules/format-message-parse/index.js") |
|
var interpret = __webpack_require__( "./node_modules/format-message-interpret/index.js") |
|
var plurals = __webpack_require__( "./node_modules/format-message-interpret/plurals.js") |
|
var lookupClosestLocale = __webpack_require__( "./node_modules/lookup-closest-locale/index.js") |
|
var origFormats = __webpack_require__( "./node_modules/format-message-formats/index.js") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function assign (target, source) { |
|
Object.keys(source).forEach(function (key) { target[key] = source[key] }) |
|
return target |
|
} |
|
|
|
function namespace () { |
|
var formats = assign({}, origFormats) |
|
var currentLocales = 'en' |
|
var translations = {} |
|
var generateId = function (pattern) { return pattern } |
|
var missingReplacement = null |
|
var missingTranslation = 'warning' |
|
var types = {} |
|
|
|
function formatMessage (msg, args, locales) { |
|
var pattern = typeof msg === 'string' ? msg : msg.default |
|
var id = (typeof msg === 'object' && msg.id) || generateId(pattern) |
|
var translated = translate(pattern, id, locales || currentLocales) |
|
var format = translated.format || ( |
|
translated.format = interpret(parse(translated.message), locales || currentLocales, types) |
|
) |
|
return format(args) |
|
} |
|
|
|
formatMessage.rich = function rich (msg, args, locales) { |
|
var pattern = typeof msg === 'string' ? msg : msg.default |
|
var id = (typeof msg === 'object' && msg.id) || generateId(pattern) |
|
var translated = translate(pattern, id, locales || currentLocales) |
|
var format = translated.toParts || ( |
|
translated.toParts = interpret.toParts(parse(translated.message, { tagsType: tagsType }), locales || currentLocales, types) |
|
) |
|
return format(args) |
|
} |
|
|
|
var tagsType = '<>' |
|
function richType (node, locales) { |
|
var style = node[2] |
|
return function (fn, args) { |
|
var props = typeof style === 'object' ? mapObject(style, args) : style |
|
return typeof fn === 'function' ? fn(props) : fn |
|
} |
|
} |
|
types[tagsType] = richType |
|
|
|
function mapObject (object, args) { |
|
return Object.keys(object).reduce(function (mapped, key) { |
|
mapped[key] = object[key](args) |
|
return mapped |
|
}, {}) |
|
} |
|
|
|
function translate (pattern, id, locales) { |
|
var locale = lookupClosestLocale(locales, translations) || 'en' |
|
var messages = translations[locale] || (translations[locale] = {}) |
|
var translated = messages[id] |
|
if (typeof translated === 'string') { |
|
translated = messages[id] = { message: translated } |
|
} |
|
if (!translated) { |
|
var message = 'Translation for "' + id + '" in "' + locale + '" is missing' |
|
if (missingTranslation === 'warning') { |
|
|
|
if (typeof console !== 'undefined') console.warn(message) |
|
} else if (missingTranslation !== 'ignore') { |
|
throw new Error(message) |
|
} |
|
var replacement = typeof missingReplacement === 'function' |
|
? missingReplacement(pattern, id, locale) || pattern |
|
: missingReplacement || pattern |
|
translated = messages[id] = { message: replacement } |
|
} |
|
return translated |
|
} |
|
|
|
formatMessage.setup = function setup (opt) { |
|
opt = opt || {} |
|
if (opt.locale) currentLocales = opt.locale |
|
if ('translations' in opt) translations = opt.translations || {} |
|
if (opt.generateId) generateId = opt.generateId |
|
if ('missingReplacement' in opt) missingReplacement = opt.missingReplacement |
|
if (opt.missingTranslation) missingTranslation = opt.missingTranslation |
|
if (opt.formats) { |
|
if (opt.formats.number) assign(formats.number, opt.formats.number) |
|
if (opt.formats.date) assign(formats.date, opt.formats.date) |
|
if (opt.formats.time) assign(formats.time, opt.formats.time) |
|
} |
|
if (opt.types) { |
|
types = opt.types |
|
types[tagsType] = richType |
|
} |
|
return { |
|
locale: currentLocales, |
|
translations: translations, |
|
generateId: generateId, |
|
missingReplacement: missingReplacement, |
|
missingTranslation: missingTranslation, |
|
formats: formats, |
|
types: types |
|
} |
|
} |
|
|
|
formatMessage.number = function (value, style, locales) { |
|
var options = (style && formats.number[style]) || |
|
formats.parseNumberPattern(style) || |
|
formats.number.default |
|
return new Intl.NumberFormat(locales || currentLocales, options).format(value) |
|
} |
|
|
|
formatMessage.date = function (value, style, locales) { |
|
var options = (style && formats.date[style]) || |
|
formats.parseDatePattern(style) || |
|
formats.date.default |
|
return new Intl.DateTimeFormat(locales || currentLocales, options).format(value) |
|
} |
|
|
|
formatMessage.time = function (value, style, locales) { |
|
var options = (style && formats.time[style]) || |
|
formats.parseDatePattern(style) || |
|
formats.time.default |
|
return new Intl.DateTimeFormat(locales || currentLocales, options).format(value) |
|
} |
|
|
|
formatMessage.select = function (value, options) { |
|
return options[value] || options.other |
|
} |
|
|
|
formatMessage.custom = function (placeholder, locales, value, args) { |
|
if (!(placeholder[1] in types)) return value |
|
return types[placeholder[1]](placeholder, locales)(value, args) |
|
} |
|
|
|
formatMessage.plural = plural.bind(null, 'cardinal') |
|
formatMessage.selectordinal = plural.bind(null, 'ordinal') |
|
function plural ( |
|
pluralType, |
|
value, |
|
offset, |
|
options, |
|
locale |
|
) { |
|
if (typeof offset === 'object' && typeof options !== 'object') { |
|
locale = options |
|
options = offset |
|
offset = 0 |
|
} |
|
var closest = lookupClosestLocale(locale || currentLocales, plurals) |
|
var plural = (closest && plurals[closest][pluralType]) || returnOther |
|
return options['=' + +value] || options[plural(value - offset)] || options.other |
|
} |
|
function returnOther () { return 'other' } |
|
|
|
formatMessage.namespace = namespace |
|
|
|
return formatMessage |
|
} |
|
|
|
module.exports = exports = namespace() |
|
|
|
|
|
}), |
|
|
|
"./node_modules/lookup-closest-locale/index.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports) { |
|
|
|
|
|
|
|
|
|
module.exports = function lookupClosestLocale (locale, available) { |
|
if (typeof locale === 'string' && available[locale]) return locale |
|
var locales = [].concat(locale || []) |
|
for (var l = 0, ll = locales.length; l < ll; ++l) { |
|
var current = locales[l].split('-') |
|
while (current.length) { |
|
var candidate = current.join('-') |
|
if (available[candidate]) return candidate |
|
current.pop() |
|
} |
|
} |
|
} |
|
|
|
|
|
}), |
|
|
|
"./node_modules/microee/index.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports) { |
|
|
|
function M() { this._events = {}; } |
|
M.prototype = { |
|
on: function(ev, cb) { |
|
this._events || (this._events = {}); |
|
var e = this._events; |
|
(e[ev] || (e[ev] = [])).push(cb); |
|
return this; |
|
}, |
|
removeListener: function(ev, cb) { |
|
var e = this._events[ev] || [], i; |
|
for(i = e.length-1; i >= 0 && e[i]; i--){ |
|
if(e[i] === cb || e[i].cb === cb) { e.splice(i, 1); } |
|
} |
|
}, |
|
removeAllListeners: function(ev) { |
|
if(!ev) { this._events = {}; } |
|
else { this._events[ev] && (this._events[ev] = []); } |
|
}, |
|
listeners: function(ev) { |
|
return (this._events ? this._events[ev] || [] : []); |
|
}, |
|
emit: function(ev) { |
|
this._events || (this._events = {}); |
|
var args = Array.prototype.slice.call(arguments, 1), i, e = this._events[ev] || []; |
|
for(i = e.length-1; i >= 0 && e[i]; i--){ |
|
e[i].apply(this, args); |
|
} |
|
return this; |
|
}, |
|
when: function(ev, cb) { |
|
return this.once(ev, cb, true); |
|
}, |
|
once: function(ev, cb, when) { |
|
if(!cb) return this; |
|
function c() { |
|
if(!when) this.removeListener(ev, c); |
|
if(cb.apply(this, arguments) && when) this.removeListener(ev, c); |
|
} |
|
c.cb = cb; |
|
this.on(ev, c); |
|
return this; |
|
} |
|
}; |
|
M.mixin = function(dest) { |
|
var o = M.prototype, k; |
|
for (k in o) { |
|
o.hasOwnProperty(k) && (dest.prototype[k] = o[k]); |
|
} |
|
}; |
|
module.exports = M; |
|
|
|
|
|
}), |
|
|
|
"./node_modules/minilog/lib/common/filter.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports, __webpack_require__) { |
|
|
|
|
|
var Transform = __webpack_require__( "./node_modules/minilog/lib/common/transform.js"); |
|
|
|
var levelMap = { debug: 1, info: 2, warn: 3, error: 4 }; |
|
|
|
function Filter() { |
|
this.enabled = true; |
|
this.defaultResult = true; |
|
this.clear(); |
|
} |
|
|
|
Transform.mixin(Filter); |
|
|
|
|
|
Filter.prototype.allow = function(name, level) { |
|
this._white.push({ n: name, l: levelMap[level] }); |
|
return this; |
|
}; |
|
|
|
|
|
Filter.prototype.deny = function(name, level) { |
|
this._black.push({ n: name, l: levelMap[level] }); |
|
return this; |
|
}; |
|
|
|
Filter.prototype.clear = function() { |
|
this._white = []; |
|
this._black = []; |
|
return this; |
|
}; |
|
|
|
function test(rule, name) { |
|
|
|
return (rule.n.test ? rule.n.test(name) : rule.n == name); |
|
}; |
|
|
|
Filter.prototype.test = function(name, level) { |
|
var i, len = Math.max(this._white.length, this._black.length); |
|
for(i = 0; i < len; i++) { |
|
if(this._white[i] && test(this._white[i], name) && levelMap[level] >= this._white[i].l) { |
|
return true; |
|
} |
|
if(this._black[i] && test(this._black[i], name) && levelMap[level] <= this._black[i].l) { |
|
return false; |
|
} |
|
} |
|
return this.defaultResult; |
|
}; |
|
|
|
Filter.prototype.write = function(name, level, args) { |
|
if(!this.enabled || this.test(name, level)) { |
|
return this.emit('item', name, level, args); |
|
} |
|
}; |
|
|
|
module.exports = Filter; |
|
|
|
|
|
}), |
|
|
|
"./node_modules/minilog/lib/common/minilog.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports, __webpack_require__) { |
|
|
|
var Transform = __webpack_require__( "./node_modules/minilog/lib/common/transform.js"), |
|
Filter = __webpack_require__( "./node_modules/minilog/lib/common/filter.js"); |
|
|
|
var log = new Transform(), |
|
slice = Array.prototype.slice; |
|
|
|
exports = module.exports = function create(name) { |
|
var o = function() { log.write(name, undefined, slice.call(arguments)); return o; }; |
|
o.debug = function() { log.write(name, 'debug', slice.call(arguments)); return o; }; |
|
o.info = function() { log.write(name, 'info', slice.call(arguments)); return o; }; |
|
o.warn = function() { log.write(name, 'warn', slice.call(arguments)); return o; }; |
|
o.error = function() { log.write(name, 'error', slice.call(arguments)); return o; }; |
|
o.log = o.debug; |
|
o.suggest = exports.suggest; |
|
o.format = log.format; |
|
return o; |
|
}; |
|
|
|
|
|
exports.defaultBackend = exports.defaultFormatter = null; |
|
|
|
exports.pipe = function(dest) { |
|
return log.pipe(dest); |
|
}; |
|
|
|
exports.end = exports.unpipe = exports.disable = function(from) { |
|
return log.unpipe(from); |
|
}; |
|
|
|
exports.Transform = Transform; |
|
exports.Filter = Filter; |
|
|
|
|
|
exports.suggest = new Filter(); |
|
|
|
exports.enable = function() { |
|
if(exports.defaultFormatter) { |
|
return log.pipe(exports.suggest) |
|
.pipe(exports.defaultFormatter) |
|
.pipe(exports.defaultBackend); |
|
} |
|
return log.pipe(exports.suggest) |
|
.pipe(exports.defaultBackend); |
|
}; |
|
|
|
|
|
|
|
}), |
|
|
|
"./node_modules/minilog/lib/common/transform.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports, __webpack_require__) { |
|
|
|
var microee = __webpack_require__( "./node_modules/microee/index.js"); |
|
|
|
|
|
function Transform() {} |
|
|
|
microee.mixin(Transform); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Transform.prototype.write = function(name, level, args) { |
|
this.emit('item', name, level, args); |
|
}; |
|
|
|
Transform.prototype.end = function() { |
|
this.emit('end'); |
|
this.removeAllListeners(); |
|
}; |
|
|
|
Transform.prototype.pipe = function(dest) { |
|
var s = this; |
|
|
|
s.emit('unpipe', dest); |
|
|
|
dest.emit('pipe', s); |
|
|
|
function onItem() { |
|
dest.write.apply(dest, Array.prototype.slice.call(arguments)); |
|
} |
|
function onEnd() { !dest._isStdio && dest.end(); } |
|
|
|
s.on('item', onItem); |
|
s.on('end', onEnd); |
|
|
|
s.when('unpipe', function(from) { |
|
var match = (from === dest) || typeof from == 'undefined'; |
|
if(match) { |
|
s.removeListener('item', onItem); |
|
s.removeListener('end', onEnd); |
|
dest.emit('unpipe'); |
|
} |
|
return match; |
|
}); |
|
|
|
return dest; |
|
}; |
|
|
|
Transform.prototype.unpipe = function(from) { |
|
this.emit('unpipe', from); |
|
return this; |
|
}; |
|
|
|
Transform.prototype.format = function(dest) { |
|
throw new Error([ |
|
'Warning: .format() is deprecated in Minilog v2! Use .pipe() instead. For example:', |
|
'var Minilog = require(\'minilog\');', |
|
'Minilog', |
|
' .pipe(Minilog.backends.console.formatClean)', |
|
' .pipe(Minilog.backends.console);'].join('\n')); |
|
}; |
|
|
|
Transform.mixin = function(dest) { |
|
var o = Transform.prototype, k; |
|
for (k in o) { |
|
o.hasOwnProperty(k) && (dest.prototype[k] = o[k]); |
|
} |
|
}; |
|
|
|
module.exports = Transform; |
|
|
|
|
|
}), |
|
|
|
"./node_modules/minilog/lib/web/array.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports, __webpack_require__) { |
|
|
|
var Transform = __webpack_require__( "./node_modules/minilog/lib/common/transform.js"), |
|
cache = [ ]; |
|
|
|
var logger = new Transform(); |
|
|
|
logger.write = function(name, level, args) { |
|
cache.push([ name, level, args ]); |
|
}; |
|
|
|
|
|
logger.get = function() { return cache; }; |
|
logger.empty = function() { cache = []; }; |
|
|
|
module.exports = logger; |
|
|
|
|
|
}), |
|
|
|
"./node_modules/minilog/lib/web/console.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports, __webpack_require__) { |
|
|
|
var Transform = __webpack_require__( "./node_modules/minilog/lib/common/transform.js"); |
|
|
|
var newlines = /\n+$/, |
|
logger = new Transform(); |
|
|
|
logger.write = function(name, level, args) { |
|
var i = args.length-1; |
|
if (typeof console === 'undefined' || !console.log) { |
|
return; |
|
} |
|
if(console.log.apply) { |
|
return console.log.apply(console, [name, level].concat(args)); |
|
} else if(JSON && JSON.stringify) { |
|
|
|
|
|
if(args[i] && typeof args[i] == 'string') { |
|
args[i] = args[i].replace(newlines, ''); |
|
} |
|
try { |
|
for(i = 0; i < args.length; i++) { |
|
args[i] = JSON.stringify(args[i]); |
|
} |
|
} catch(e) {} |
|
console.log(args.join(' ')); |
|
} |
|
}; |
|
|
|
logger.formatters = ['color', 'minilog']; |
|
logger.color = __webpack_require__( "./node_modules/minilog/lib/web/formatters/color.js"); |
|
logger.minilog = __webpack_require__( "./node_modules/minilog/lib/web/formatters/minilog.js"); |
|
|
|
module.exports = logger; |
|
|
|
|
|
}), |
|
|
|
"./node_modules/minilog/lib/web/formatters/color.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports, __webpack_require__) { |
|
|
|
var Transform = __webpack_require__( "./node_modules/minilog/lib/common/transform.js"), |
|
color = __webpack_require__( "./node_modules/minilog/lib/web/formatters/util.js"); |
|
|
|
var colors = { debug: ['cyan'], info: ['purple' ], warn: [ 'yellow', true ], error: [ 'red', true ] }, |
|
logger = new Transform(); |
|
|
|
logger.write = function(name, level, args) { |
|
var fn = console.log; |
|
if(console[level] && console[level].apply) { |
|
fn = console[level]; |
|
fn.apply(console, [ '%c'+name+' %c'+level, color('gray'), color.apply(color, colors[level])].concat(args)); |
|
} |
|
}; |
|
|
|
|
|
logger.pipe = function() { }; |
|
|
|
module.exports = logger; |
|
|
|
|
|
}), |
|
|
|
"./node_modules/minilog/lib/web/formatters/minilog.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports, __webpack_require__) { |
|
|
|
var Transform = __webpack_require__( "./node_modules/minilog/lib/common/transform.js"), |
|
color = __webpack_require__( "./node_modules/minilog/lib/web/formatters/util.js"), |
|
colors = { debug: ['gray'], info: ['purple' ], warn: [ 'yellow', true ], error: [ 'red', true ] }, |
|
logger = new Transform(); |
|
|
|
logger.write = function(name, level, args) { |
|
var fn = console.log; |
|
if(level != 'debug' && console[level]) { |
|
fn = console[level]; |
|
} |
|
|
|
var subset = [], i = 0; |
|
if(level != 'info') { |
|
for(; i < args.length; i++) { |
|
if(typeof args[i] != 'string') break; |
|
} |
|
fn.apply(console, [ '%c'+name +' '+ args.slice(0, i).join(' '), color.apply(color, colors[level]) ].concat(args.slice(i))); |
|
} else { |
|
fn.apply(console, [ '%c'+name, color.apply(color, colors[level]) ].concat(args)); |
|
} |
|
}; |
|
|
|
|
|
logger.pipe = function() { }; |
|
|
|
module.exports = logger; |
|
|
|
|
|
}), |
|
|
|
"./node_modules/minilog/lib/web/formatters/util.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports) { |
|
|
|
var hex = { |
|
black: '#000', |
|
red: '#c23621', |
|
green: '#25bc26', |
|
yellow: '#bbbb00', |
|
blue: '#492ee1', |
|
magenta: '#d338d3', |
|
cyan: '#33bbc8', |
|
gray: '#808080', |
|
purple: '#708' |
|
}; |
|
function color(fg, isInverse) { |
|
if(isInverse) { |
|
return 'color: #fff; background: '+hex[fg]+';'; |
|
} else { |
|
return 'color: '+hex[fg]+';'; |
|
} |
|
} |
|
|
|
module.exports = color; |
|
|
|
|
|
}), |
|
|
|
"./node_modules/minilog/lib/web/index.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports, __webpack_require__) { |
|
|
|
var Minilog = __webpack_require__( "./node_modules/minilog/lib/common/minilog.js"); |
|
|
|
var oldEnable = Minilog.enable, |
|
oldDisable = Minilog.disable, |
|
isChrome = (typeof navigator != 'undefined' && /chrome/i.test(navigator.userAgent)), |
|
console = __webpack_require__( "./node_modules/minilog/lib/web/console.js"); |
|
|
|
|
|
Minilog.defaultBackend = (isChrome ? console.minilog : console); |
|
|
|
|
|
if(typeof window != 'undefined') { |
|
try { |
|
Minilog.enable(JSON.parse(window.localStorage['minilogSettings'])); |
|
} catch(e) {} |
|
if(window.location && window.location.search) { |
|
var match = RegExp('[?&]minilog=([^&]*)').exec(window.location.search); |
|
match && Minilog.enable(decodeURIComponent(match[1])); |
|
} |
|
} |
|
|
|
|
|
Minilog.enable = function() { |
|
oldEnable.call(Minilog, true); |
|
try { window.localStorage['minilogSettings'] = JSON.stringify(true); } catch(e) {} |
|
return this; |
|
}; |
|
|
|
Minilog.disable = function() { |
|
oldDisable.call(Minilog); |
|
try { delete window.localStorage.minilogSettings; } catch(e) {} |
|
return this; |
|
}; |
|
|
|
exports = module.exports = Minilog; |
|
|
|
exports.backends = { |
|
array: __webpack_require__( "./node_modules/minilog/lib/web/array.js"), |
|
browser: Minilog.defaultBackend, |
|
localStorage: __webpack_require__( "./node_modules/minilog/lib/web/localstorage.js"), |
|
jQuery: __webpack_require__( "./node_modules/minilog/lib/web/jquery_simple.js") |
|
}; |
|
|
|
|
|
}), |
|
|
|
"./node_modules/minilog/lib/web/jquery_simple.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports, __webpack_require__) { |
|
|
|
var Transform = __webpack_require__( "./node_modules/minilog/lib/common/transform.js"); |
|
|
|
var cid = new Date().valueOf().toString(36); |
|
|
|
function AjaxLogger(options) { |
|
this.url = options.url || ''; |
|
this.cache = []; |
|
this.timer = null; |
|
this.interval = options.interval || 30*1000; |
|
this.enabled = true; |
|
this.jQuery = window.jQuery; |
|
this.extras = {}; |
|
} |
|
|
|
Transform.mixin(AjaxLogger); |
|
|
|
AjaxLogger.prototype.write = function(name, level, args) { |
|
if(!this.timer) { this.init(); } |
|
this.cache.push([name, level].concat(args)); |
|
}; |
|
|
|
AjaxLogger.prototype.init = function() { |
|
if(!this.enabled || !this.jQuery) return; |
|
var self = this; |
|
this.timer = setTimeout(function() { |
|
var i, logs = [], ajaxData, url = self.url; |
|
if(self.cache.length == 0) return self.init(); |
|
|
|
|
|
for(i = 0; i < self.cache.length; i++) { |
|
try { |
|
JSON.stringify(self.cache[i]); |
|
logs.push(self.cache[i]); |
|
} catch(e) { } |
|
} |
|
if(self.jQuery.isEmptyObject(self.extras)) { |
|
ajaxData = JSON.stringify({ logs: logs }); |
|
url = self.url + '?client_id=' + cid; |
|
} else { |
|
ajaxData = JSON.stringify(self.jQuery.extend({logs: logs}, self.extras)); |
|
} |
|
|
|
self.jQuery.ajax(url, { |
|
type: 'POST', |
|
cache: false, |
|
processData: false, |
|
data: ajaxData, |
|
contentType: 'application/json', |
|
timeout: 10000 |
|
}).success(function(data, status, jqxhr) { |
|
if(data.interval) { |
|
self.interval = Math.max(1000, data.interval); |
|
} |
|
}).error(function() { |
|
self.interval = 30000; |
|
}).always(function() { |
|
self.init(); |
|
}); |
|
self.cache = []; |
|
}, this.interval); |
|
}; |
|
|
|
AjaxLogger.prototype.end = function() {}; |
|
|
|
|
|
AjaxLogger.jQueryWait = function(onDone) { |
|
if(typeof window !== 'undefined' && (window.jQuery || window.$)) { |
|
return onDone(window.jQuery || window.$); |
|
} else if (typeof window !== 'undefined') { |
|
setTimeout(function() { AjaxLogger.jQueryWait(onDone); }, 200); |
|
} |
|
}; |
|
|
|
module.exports = AjaxLogger; |
|
|
|
|
|
}), |
|
|
|
"./node_modules/minilog/lib/web/localstorage.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports, __webpack_require__) { |
|
|
|
var Transform = __webpack_require__( "./node_modules/minilog/lib/common/transform.js"), |
|
cache = false; |
|
|
|
var logger = new Transform(); |
|
|
|
logger.write = function(name, level, args) { |
|
if(typeof window == 'undefined' || typeof JSON == 'undefined' || !JSON.stringify || !JSON.parse) return; |
|
try { |
|
if(!cache) { cache = (window.localStorage.minilog ? JSON.parse(window.localStorage.minilog) : []); } |
|
cache.push([ new Date().toString(), name, level, args ]); |
|
window.localStorage.minilog = JSON.stringify(cache); |
|
} catch(e) {} |
|
}; |
|
|
|
module.exports = logger; |
|
|
|
}), |
|
|
|
"./node_modules/scratch-vm/src/dispatch/shared-dispatch.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports, __webpack_require__) { |
|
|
|
const log = __webpack_require__( "./node_modules/scratch-vm/src/util/log.js"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SharedDispatch { |
|
constructor() { |
|
|
|
|
|
|
|
|
|
|
|
|
|
this.callbacks = []; |
|
|
|
|
|
|
|
|
|
|
|
this.nextResponseId = 0; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
call(service, method) { |
|
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { |
|
args[_key - 2] = arguments[_key]; |
|
} |
|
return this.transferCall(service, method, null, ...args); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
transferCall(service, method, transfer) { |
|
try { |
|
const { |
|
provider, |
|
isRemote |
|
} = this._getServiceProvider(service); |
|
if (provider) { |
|
for (var _len2 = arguments.length, args = new Array(_len2 > 3 ? _len2 - 3 : 0), _key2 = 3; _key2 < _len2; _key2++) { |
|
args[_key2 - 3] = arguments[_key2]; |
|
} |
|
if (isRemote) { |
|
return this._remoteTransferCall(provider, service, method, transfer, ...args); |
|
} |
|
const result = provider[method].apply(provider, args); |
|
return Promise.resolve(result); |
|
} |
|
return Promise.reject(new Error("Service not found: ".concat(service))); |
|
} catch (e) { |
|
return Promise.reject(e); |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_isRemoteService(service) { |
|
var _this$_getServiceProv, _this$_getServiceProv2; |
|
return (_this$_getServiceProv = (_this$_getServiceProv2 = this._getServiceProvider(service)) === null || _this$_getServiceProv2 === void 0 ? void 0 : _this$_getServiceProv2.isRemote) !== null && _this$_getServiceProv !== void 0 ? _this$_getServiceProv : false; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_remoteCall(provider, service, method) { |
|
for (var _len3 = arguments.length, args = new Array(_len3 > 3 ? _len3 - 3 : 0), _key3 = 3; _key3 < _len3; _key3++) { |
|
args[_key3 - 3] = arguments[_key3]; |
|
} |
|
return this._remoteTransferCall(provider, service, method, null, ...args); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_remoteTransferCall(provider, service, method, transfer) { |
|
for (var _len4 = arguments.length, args = new Array(_len4 > 4 ? _len4 - 4 : 0), _key4 = 4; _key4 < _len4; _key4++) { |
|
args[_key4 - 4] = arguments[_key4]; |
|
} |
|
return new Promise((resolve, reject) => { |
|
const responseId = this._storeCallbacks(resolve, reject); |
|
|
|
|
|
|
|
|
|
|
|
if (args.length > 0 && typeof args[args.length - 1].func === 'function') { |
|
args.pop(); |
|
args.pop(); |
|
} |
|
if (transfer) { |
|
provider.postMessage({ |
|
service, |
|
method, |
|
responseId, |
|
args |
|
}, transfer); |
|
} else { |
|
provider.postMessage({ |
|
service, |
|
method, |
|
responseId, |
|
args |
|
}); |
|
} |
|
}); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_storeCallbacks(resolve, reject) { |
|
const responseId = this.nextResponseId++; |
|
this.callbacks[responseId] = [resolve, reject]; |
|
return responseId; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_deliverResponse(responseId, message) { |
|
try { |
|
const [resolve, reject] = this.callbacks[responseId]; |
|
delete this.callbacks[responseId]; |
|
if (message.error) { |
|
reject(message.error); |
|
} else { |
|
resolve(message.result); |
|
} |
|
} catch (e) { |
|
log.error("Dispatch callback failed: ".concat(e)); |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_onMessage(worker, event) { |
|
|
|
const message = event.data; |
|
message.args = message.args || []; |
|
let promise; |
|
if (message.service) { |
|
if (message.service === 'dispatch') { |
|
promise = this._onDispatchMessage(worker, message); |
|
} else { |
|
promise = this.call(message.service, message.method, ...message.args); |
|
} |
|
} else if (typeof message.responseId === 'undefined') { |
|
log.error("Dispatch caught malformed message from a worker: ".concat(JSON.stringify(event))); |
|
} else { |
|
this._deliverResponse(message.responseId, message); |
|
} |
|
if (promise) { |
|
if (typeof message.responseId === 'undefined') { |
|
log.error("Dispatch message missing required response ID: ".concat(JSON.stringify(event))); |
|
} else { |
|
promise.then(result => worker.postMessage({ |
|
responseId: message.responseId, |
|
result |
|
}), error => worker.postMessage({ |
|
responseId: message.responseId, |
|
error: "".concat(error) |
|
})); |
|
} |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_getServiceProvider(service) { |
|
throw new Error("Could not get provider for ".concat(service, ": _getServiceProvider not implemented")); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_onDispatchMessage(worker, message) { |
|
throw new Error("Unimplemented dispatch message handler cannot handle ".concat(message.method, " method")); |
|
} |
|
} |
|
module.exports = SharedDispatch; |
|
|
|
}), |
|
|
|
"./node_modules/scratch-vm/src/dispatch/worker-dispatch.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports, __webpack_require__) { |
|
|
|
const SharedDispatch = __webpack_require__( "./node_modules/scratch-vm/src/dispatch/shared-dispatch.js"); |
|
const log = __webpack_require__( "./node_modules/scratch-vm/src/util/log.js"); |
|
const { |
|
centralDispatchService |
|
} = __webpack_require__( "./node_modules/scratch-vm/src/extension-support/tw-extension-worker-context.js"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WorkerDispatch extends SharedDispatch { |
|
constructor() { |
|
super(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this._connectionPromise = new Promise(resolve => { |
|
this._onConnect = resolve; |
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.services = {}; |
|
this._onMessage = this._onMessage.bind(this, centralDispatchService); |
|
if (typeof self !== 'undefined') { |
|
self.onmessage = this._onMessage; |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
get waitForConnection() { |
|
return this._connectionPromise; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
setService(service, provider) { |
|
if (this.services.hasOwnProperty(service)) { |
|
log.warn("Worker dispatch replacing existing service provider for ".concat(service)); |
|
} |
|
this.services[service] = provider; |
|
return this.waitForConnection.then(() => this._remoteCall(centralDispatchService, 'dispatch', 'setService', service)); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_getServiceProvider(service) { |
|
|
|
const provider = this.services[service]; |
|
return { |
|
provider: provider || centralDispatchService, |
|
isRemote: !provider |
|
}; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_onDispatchMessage(worker, message) { |
|
let promise; |
|
switch (message.method) { |
|
case 'handshake': |
|
promise = this._onConnect(); |
|
break; |
|
case 'terminate': |
|
|
|
setTimeout(() => self.close(), 0); |
|
promise = Promise.resolve(); |
|
break; |
|
default: |
|
log.error("Worker dispatch received message for unknown method: ".concat(message.method)); |
|
} |
|
return promise; |
|
} |
|
} |
|
module.exports = new WorkerDispatch(); |
|
|
|
}), |
|
|
|
"./node_modules/scratch-vm/src/extension-support/argument-alignment.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports) { |
|
|
|
|
|
|
|
|
|
|
|
const ArgumentAlignment = { |
|
|
|
|
|
|
|
DEFAULT: null, |
|
|
|
|
|
|
|
LEFT: 'LEFT', |
|
|
|
|
|
|
|
CENTER: 'CENTRE', |
|
|
|
|
|
|
|
RIGHT: 'RIGHT' |
|
}; |
|
module.exports = ArgumentAlignment; |
|
|
|
}), |
|
|
|
"./node_modules/scratch-vm/src/extension-support/argument-type.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports) { |
|
|
|
|
|
|
|
|
|
|
|
const ArgumentType = { |
|
|
|
|
|
|
|
ANGLE: 'angle', |
|
|
|
|
|
|
|
BOOLEAN: 'Boolean', |
|
|
|
|
|
|
|
COLOR: 'color', |
|
|
|
|
|
|
|
NUMBER: 'number', |
|
|
|
|
|
|
|
STRING: 'string', |
|
|
|
|
|
|
|
MATRIX: 'matrix', |
|
|
|
|
|
|
|
NOTE: 'note', |
|
|
|
|
|
|
|
IMAGE: 'image', |
|
|
|
|
|
|
|
POLYGON: 'polygon', |
|
|
|
|
|
|
|
CUSTOM: 'custom', |
|
|
|
|
|
|
|
COSTUME: 'costume', |
|
|
|
|
|
|
|
SOUND: 'sound', |
|
|
|
|
|
|
|
|
|
|
|
VARIABLE: 'variable', |
|
|
|
|
|
|
|
|
|
|
|
LIST: 'list', |
|
|
|
|
|
|
|
|
|
|
|
BROADCAST: 'broadcast', |
|
|
|
|
|
|
|
SEPERATOR: 'seperator' |
|
}; |
|
module.exports = ArgumentType; |
|
|
|
}), |
|
|
|
"./node_modules/scratch-vm/src/extension-support/block-shape.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports) { |
|
|
|
|
|
|
|
|
|
|
|
const BlockShape = { |
|
|
|
|
|
|
|
HEXAGONAL: 1, |
|
|
|
|
|
|
|
ROUND: 2, |
|
|
|
|
|
|
|
SQUARE: 3, |
|
|
|
|
|
|
|
LEAF: 4, |
|
|
|
|
|
|
|
PLUS: 5, |
|
|
|
|
|
|
|
OCTAGONAL: 6, |
|
|
|
|
|
|
|
BUMPED: 7, |
|
|
|
|
|
|
|
INDENTED: 8, |
|
|
|
|
|
|
|
SCRAPPED: 9, |
|
|
|
|
|
|
|
ARROW: 10, |
|
|
|
|
|
|
|
TICKET: 11 |
|
}; |
|
module.exports = BlockShape; |
|
|
|
}), |
|
|
|
"./node_modules/scratch-vm/src/extension-support/block-type.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports) { |
|
|
|
|
|
|
|
|
|
|
|
const BlockType = { |
|
|
|
|
|
|
|
BOOLEAN: 'Boolean', |
|
|
|
|
|
|
|
BUTTON: 'button', |
|
|
|
|
|
|
|
LABEL: 'label', |
|
|
|
|
|
|
|
COMMAND: 'command', |
|
|
|
|
|
|
|
|
|
CONDITIONAL: 'conditional', |
|
|
|
|
|
|
|
|
|
EVENT: 'event', |
|
|
|
|
|
|
|
HAT: 'hat', |
|
|
|
|
|
|
|
|
|
LOOP: 'loop', |
|
|
|
|
|
|
|
REPORTER: 'reporter', |
|
|
|
|
|
|
|
XML: 'xml' |
|
}; |
|
module.exports = BlockType; |
|
|
|
}), |
|
|
|
"./node_modules/scratch-vm/src/extension-support/notch-shape.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports) { |
|
|
|
|
|
|
|
|
|
|
|
const NotchShape = { |
|
|
|
|
|
|
|
SWITCH: "switchCase", |
|
|
|
|
|
|
|
HEXAGON: "hexagon", |
|
|
|
|
|
|
|
ROUND: "round", |
|
|
|
|
|
|
|
SQUARE: "square", |
|
|
|
|
|
|
|
LEAF: "leaf", |
|
|
|
|
|
|
|
PLUS: "plus", |
|
|
|
|
|
|
|
OCTAGONAL: "octagonal", |
|
|
|
|
|
|
|
BUMPED: "bumped", |
|
|
|
|
|
|
|
INDENTED: "indented", |
|
|
|
|
|
|
|
SCRAPPED: "scrapped", |
|
|
|
|
|
|
|
ARROW: "arrow", |
|
|
|
|
|
|
|
TICKET: "ticket", |
|
|
|
|
|
|
|
JIGSAW: "jigsaw", |
|
INVERTED: "inverted", |
|
PINCER: "pincer" |
|
}; |
|
module.exports = NotchShape; |
|
|
|
}), |
|
|
|
"./node_modules/scratch-vm/src/extension-support/target-type.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports) { |
|
|
|
|
|
|
|
|
|
|
|
const TargetType = { |
|
|
|
|
|
|
|
SPRITE: 'sprite', |
|
|
|
|
|
|
|
STAGE: 'stage' |
|
}; |
|
module.exports = TargetType; |
|
|
|
}), |
|
|
|
"./node_modules/scratch-vm/src/extension-support/tw-extension-api-common.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports, __webpack_require__) { |
|
|
|
const ArgumentType = __webpack_require__( "./node_modules/scratch-vm/src/extension-support/argument-type.js"); |
|
const ArgumentAlignment = __webpack_require__( "./node_modules/scratch-vm/src/extension-support/argument-alignment.js"); |
|
const BlockType = __webpack_require__( "./node_modules/scratch-vm/src/extension-support/block-type.js"); |
|
const BlockShape = __webpack_require__( "./node_modules/scratch-vm/src/extension-support/block-shape.js"); |
|
const NotchShape = __webpack_require__( "./node_modules/scratch-vm/src/extension-support/notch-shape.js"); |
|
const TargetType = __webpack_require__( "./node_modules/scratch-vm/src/extension-support/target-type.js"); |
|
const Cast = __webpack_require__( "./node_modules/scratch-vm/src/util/cast.js"); |
|
const Clone = __webpack_require__( "./node_modules/scratch-vm/src/util/clone.js"); |
|
const Color = __webpack_require__( "./node_modules/scratch-vm/src/util/color.js"); |
|
const Scratch = { |
|
ArgumentType, |
|
ArgumentAlignment, |
|
BlockType, |
|
BlockShape, |
|
NotchShape, |
|
TargetType, |
|
Cast, |
|
Clone, |
|
Color |
|
}; |
|
module.exports = Scratch; |
|
|
|
}), |
|
|
|
"./node_modules/scratch-vm/src/extension-support/tw-extension-worker-context.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports) { |
|
|
|
module.exports = { |
|
isWorker: true, |
|
|
|
centralDispatchService: self |
|
}; |
|
|
|
}), |
|
|
|
"./node_modules/scratch-vm/src/extension-support/tw-l10n.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports, __webpack_require__) { |
|
|
|
const formatMessage = __webpack_require__( "./node_modules/format-message/index.js"); |
|
|
|
|
|
|
|
|
|
|
|
const createTranslate = vm => { |
|
const namespace = formatMessage.namespace(); |
|
const translate = (message, args) => { |
|
if (message && typeof message === 'object') { |
|
|
|
} else if (typeof message === 'string') { |
|
message = { |
|
default: message |
|
}; |
|
} else { |
|
throw new Error('unsupported data type in translate()'); |
|
} |
|
return namespace(message, args); |
|
}; |
|
const generateId = defaultMessage => "_".concat(defaultMessage); |
|
const getLocale = () => { |
|
if (vm) return vm.getLocale(); |
|
if (typeof navigator !== 'undefined') return navigator.language; |
|
return 'en'; |
|
}; |
|
let storedTranslations = {}; |
|
translate.setup = newTranslations => { |
|
if (newTranslations) { |
|
storedTranslations = newTranslations; |
|
} |
|
namespace.setup({ |
|
locale: getLocale(), |
|
missingTranslation: 'ignore', |
|
generateId, |
|
translations: storedTranslations |
|
}); |
|
}; |
|
Object.defineProperty(translate, 'language', { |
|
configurable: true, |
|
enumerable: true, |
|
get: () => getLocale() |
|
}); |
|
translate.setup({}); |
|
if (vm) { |
|
vm.on('LOCALE_CHANGED', () => { |
|
translate.setup(null); |
|
}); |
|
} |
|
return translate; |
|
}; |
|
module.exports = createTranslate; |
|
|
|
}), |
|
|
|
"./node_modules/scratch-vm/src/extension-support/tw-scratchx-compatibility-layer.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports, __webpack_require__) { |
|
|
|
|
|
|
|
const ArgumentType = __webpack_require__( "./node_modules/scratch-vm/src/extension-support/argument-type.js"); |
|
const BlockType = __webpack_require__( "./node_modules/scratch-vm/src/extension-support/block-type.js"); |
|
const { |
|
argumentIndexToId, |
|
generateExtensionId |
|
} = __webpack_require__( "./node_modules/scratch-vm/src/extension-support/tw-scratchx-utilities.js"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const parseScratchXBlockType = type => { |
|
if (type === '' || type === ' ' || type === 'w') { |
|
return { |
|
type: BlockType.COMMAND, |
|
async: type === 'w' |
|
}; |
|
} |
|
if (type === 'r' || type === 'R') { |
|
return { |
|
type: BlockType.REPORTER, |
|
async: type === 'R' |
|
}; |
|
} |
|
if (type === 'b') { |
|
return { |
|
type: BlockType.BOOLEAN, |
|
|
|
async: false |
|
}; |
|
} |
|
if (type === 'h') { |
|
return { |
|
type: BlockType.HAT, |
|
async: false |
|
}; |
|
} |
|
throw new Error("Unknown ScratchX block type: ".concat(type)); |
|
}; |
|
const isScratchCompatibleValue = v => typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean'; |
|
|
|
|
|
|
|
|
|
|
|
const parseScratchXArgument = (argument, defaultValue) => { |
|
const result = {}; |
|
const hasDefaultValue = isScratchCompatibleValue(defaultValue); |
|
if (hasDefaultValue) { |
|
result.defaultValue = defaultValue; |
|
} |
|
|
|
if (argument === 's') { |
|
result.type = ArgumentType.STRING; |
|
if (!hasDefaultValue) { |
|
result.defaultValue = ''; |
|
} |
|
} else if (argument === 'n') { |
|
result.type = ArgumentType.NUMBER; |
|
if (!hasDefaultValue) { |
|
result.defaultValue = 0; |
|
} |
|
} else if (argument[0] === 'm') { |
|
result.type = ArgumentType.STRING; |
|
const split = argument.split(/\.|:/); |
|
const menuName = split[1]; |
|
result.menu = menuName; |
|
} else { |
|
throw new Error("Unknown ScratchX argument type: ".concat(argument)); |
|
} |
|
return result; |
|
}; |
|
const wrapScratchXFunction = (originalFunction, argumentCount, async) => args => { |
|
|
|
const argumentList = []; |
|
for (let i = 0; i < argumentCount; i++) { |
|
argumentList.push(args[argumentIndexToId(i)]); |
|
} |
|
if (async) { |
|
return new Promise(resolve => { |
|
originalFunction(...argumentList, resolve); |
|
}); |
|
} |
|
return originalFunction(...argumentList); |
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
const convert = (name, descriptor, functions) => { |
|
const extensionId = generateExtensionId(name); |
|
const info = { |
|
id: extensionId, |
|
name: descriptor.displayName || name, |
|
blocks: [], |
|
color1: '#4a4a5e', |
|
color2: '#31323f', |
|
color3: '#191a21' |
|
}; |
|
const scratch3Extension = { |
|
getInfo: () => info, |
|
_getStatus: functions._getStatus |
|
}; |
|
if (descriptor.url) { |
|
info.docsURI = descriptor.url; |
|
} |
|
for (const blockDescriptor of descriptor.blocks) { |
|
if (blockDescriptor.length === 1) { |
|
|
|
info.blocks.push('---'); |
|
continue; |
|
} |
|
const scratchXBlockType = blockDescriptor[0]; |
|
const blockText = blockDescriptor[1]; |
|
const functionName = blockDescriptor[2]; |
|
const defaultArgumentValues = blockDescriptor.slice(3); |
|
let scratchText = ''; |
|
const argumentInfo = []; |
|
const blockTextParts = blockText.split(/%([\w.:]+)/g); |
|
for (let i = 0; i < blockTextParts.length; i++) { |
|
const part = blockTextParts[i]; |
|
const isArgument = i % 2 === 1; |
|
if (isArgument) { |
|
parseScratchXArgument(part); |
|
const argumentIndex = Math.floor(i / 2).toString(); |
|
const argumentDefaultValue = defaultArgumentValues[argumentIndex]; |
|
const argumentId = argumentIndexToId(argumentIndex); |
|
argumentInfo[argumentId] = parseScratchXArgument(part, argumentDefaultValue); |
|
scratchText += "[".concat(argumentId, "]"); |
|
} else { |
|
scratchText += part; |
|
} |
|
} |
|
const scratch3BlockType = parseScratchXBlockType(scratchXBlockType); |
|
const blockInfo = { |
|
opcode: functionName, |
|
blockType: scratch3BlockType.type, |
|
text: scratchText, |
|
arguments: argumentInfo |
|
}; |
|
info.blocks.push(blockInfo); |
|
const originalFunction = functions[functionName]; |
|
const argumentCount = argumentInfo.length; |
|
scratch3Extension[functionName] = wrapScratchXFunction(originalFunction, argumentCount, scratch3BlockType.async); |
|
} |
|
const menus = descriptor.menus; |
|
if (menus) { |
|
const scratch3Menus = {}; |
|
for (const menuName of Object.keys(menus) || {}) { |
|
const menuItems = menus[menuName]; |
|
const menuInfo = { |
|
items: menuItems |
|
}; |
|
scratch3Menus[menuName] = menuInfo; |
|
} |
|
info.menus = scratch3Menus; |
|
} |
|
return scratch3Extension; |
|
}; |
|
const extensionNameToExtension = new Map(); |
|
|
|
|
|
|
|
|
|
|
|
const createScratchX = Scratch => { |
|
const register = (name, descriptor, functions) => { |
|
const scratch3Extension = convert(name, descriptor, functions); |
|
extensionNameToExtension.set(name, scratch3Extension); |
|
Scratch.extensions.register(scratch3Extension); |
|
}; |
|
|
|
|
|
|
|
|
|
|
|
const getStatus = extensionName => { |
|
const extension = extensionNameToExtension.get(extensionName); |
|
if (extension) { |
|
return extension._getStatus(); |
|
} |
|
return { |
|
status: 0, |
|
msg: 'does not exist' |
|
}; |
|
}; |
|
return { |
|
register, |
|
getStatus |
|
}; |
|
}; |
|
module.exports = createScratchX; |
|
|
|
}), |
|
|
|
"./node_modules/scratch-vm/src/extension-support/tw-scratchx-utilities.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const generateExtensionId = scratchXName => { |
|
const sanitizedName = scratchXName.replace(/[^a-z0-9]/gi, '').toLowerCase(); |
|
return "sbx".concat(sanitizedName); |
|
}; |
|
|
|
|
|
|
|
|
|
|
|
const argumentIndexToId = i => i.toString(); |
|
module.exports = { |
|
generateExtensionId, |
|
argumentIndexToId |
|
}; |
|
|
|
}), |
|
|
|
"./node_modules/scratch-vm/src/util/cast.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports, __webpack_require__) { |
|
|
|
const Color = __webpack_require__( "./node_modules/scratch-vm/src/util/color.js"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const isNotActuallyZero = val => { |
|
if (typeof val !== 'string') return false; |
|
for (let i = 0; i < val.length; i++) { |
|
const code = val.charCodeAt(i); |
|
|
|
|
|
|
|
|
|
|
|
if (code === 48 || code === 9) { |
|
return false; |
|
} |
|
} |
|
return true; |
|
}; |
|
class Cast { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static toNumber(value) { |
|
|
|
|
|
if (typeof value === 'number') { |
|
|
|
|
|
if (Number.isNaN(value)) { |
|
return 0; |
|
} |
|
return value; |
|
} |
|
const n = Number(value); |
|
if (Number.isNaN(n)) { |
|
|
|
|
|
return 0; |
|
} |
|
return n; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static toBoolean(value) { |
|
|
|
if (typeof value === 'boolean') { |
|
return value; |
|
} |
|
if (typeof value === 'string') { |
|
|
|
if (value === '' || value === '0' || value.toLowerCase() === 'false') { |
|
return false; |
|
} |
|
|
|
return true; |
|
} |
|
|
|
return Boolean(value); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
static toString(value) { |
|
return String(value); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
static toRgbColorList(value) { |
|
const color = Cast.toRgbColorObject(value); |
|
return [color.r, color.g, color.b]; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
static toRgbColorObject(value) { |
|
let color; |
|
if (typeof value === 'string' && value.substring(0, 1) === '#') { |
|
color = Color.hexToRgb(value); |
|
|
|
|
|
if (!color) color = { |
|
r: 0, |
|
g: 0, |
|
b: 0, |
|
a: 255 |
|
}; |
|
} else { |
|
color = Color.decimalToRgb(Cast.toNumber(value)); |
|
} |
|
return color; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
static isWhiteSpace(val) { |
|
return val === null || typeof val === 'string' && val.trim().length === 0; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static compare(v1, v2) { |
|
let n1 = Number(v1); |
|
let n2 = Number(v2); |
|
if (n1 === 0 && isNotActuallyZero(v1)) { |
|
n1 = NaN; |
|
} else if (n2 === 0 && isNotActuallyZero(v2)) { |
|
n2 = NaN; |
|
} |
|
if (isNaN(n1) || isNaN(n2)) { |
|
|
|
|
|
const s1 = String(v1).toLowerCase(); |
|
const s2 = String(v2).toLowerCase(); |
|
if (s1 < s2) { |
|
return -1; |
|
} else if (s1 > s2) { |
|
return 1; |
|
} |
|
return 0; |
|
} |
|
|
|
if (n1 === Infinity && n2 === Infinity || n1 === -Infinity && n2 === -Infinity) { |
|
return 0; |
|
} |
|
|
|
return n1 - n2; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
static isInt(val) { |
|
|
|
if (typeof val === 'number') { |
|
if (isNaN(val)) { |
|
|
|
return true; |
|
} |
|
|
|
return val === Math.floor(val); |
|
} else if (typeof val === 'boolean') { |
|
|
|
return true; |
|
} else if (typeof val === 'string') { |
|
|
|
return val.indexOf('.') < 0; |
|
} |
|
return false; |
|
} |
|
static get LIST_INVALID() { |
|
return 'INVALID'; |
|
} |
|
static get LIST_ALL() { |
|
return 'ALL'; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static toListIndex(index, length, acceptAll) { |
|
if (typeof index !== 'number') { |
|
if (index === 'all') { |
|
return acceptAll ? Cast.LIST_ALL : Cast.LIST_INVALID; |
|
} |
|
if (index === 'last') { |
|
if (length > 0) { |
|
return length; |
|
} |
|
return Cast.LIST_INVALID; |
|
} else if (index === 'random' || index === 'any') { |
|
if (length > 0) { |
|
return 1 + Math.floor(Math.random() * length); |
|
} |
|
return Cast.LIST_INVALID; |
|
} |
|
} |
|
index = Math.floor(Cast.toNumber(index)); |
|
if (index < 1 || index > length) { |
|
return Cast.LIST_INVALID; |
|
} |
|
return index; |
|
} |
|
} |
|
module.exports = Cast; |
|
|
|
}), |
|
|
|
"./node_modules/scratch-vm/src/util/clone.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports) { |
|
|
|
|
|
|
|
|
|
|
|
class Clone { |
|
|
|
|
|
|
|
|
|
|
|
|
|
static simple(original) { |
|
return JSON.parse(JSON.stringify(original)); |
|
} |
|
} |
|
module.exports = Clone; |
|
|
|
}), |
|
|
|
"./node_modules/scratch-vm/src/util/color.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports) { |
|
|
|
class Color { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static get RGB_BLACK() { |
|
return { |
|
r: 0, |
|
g: 0, |
|
b: 0 |
|
}; |
|
} |
|
|
|
|
|
static get RGB_WHITE() { |
|
return { |
|
r: 255, |
|
g: 255, |
|
b: 255 |
|
}; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
static decimalToHex(decimal) { |
|
if (decimal < 0) { |
|
decimal += 0xFFFFFF + 1; |
|
} |
|
let hex = Math.round(Number(decimal)).toString(16); |
|
hex = "#".concat('000000'.substr(0, 6 - hex.length)).concat(hex); |
|
return hex; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
static decimalToRgb(decimal) { |
|
const a = decimal >> 24 & 0xFF; |
|
const r = decimal >> 16 & 0xFF; |
|
const g = decimal >> 8 & 0xFF; |
|
const b = decimal & 0xFF; |
|
return { |
|
r: r, |
|
g: g, |
|
b: b, |
|
a: a > 0 ? a : 255 |
|
}; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
static hexToRgb(hex) { |
|
if (hex.startsWith('#')) { |
|
hex = hex.substring(1); |
|
} |
|
if (hex.length === 8) { |
|
hex = hex.slice(0, 6); |
|
} |
|
const parsed = parseInt(hex, 16); |
|
if (isNaN(parsed)) { |
|
return null; |
|
} |
|
if (hex.length === 6) { |
|
return { |
|
r: parsed >> 16 & 0xff, |
|
g: parsed >> 8 & 0xff, |
|
b: parsed & 0xff |
|
}; |
|
} else if (hex.length === 3) { |
|
const r = parsed >> 8 & 0xf; |
|
const g = parsed >> 4 & 0xf; |
|
const b = parsed & 0xf; |
|
return { |
|
r: r << 4 | r, |
|
g: g << 4 | g, |
|
b: b << 4 | b |
|
}; |
|
} |
|
return null; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
static rgbToHex(rgb) { |
|
return Color.decimalToHex(Color.rgbToDecimal(rgb)); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
static rgbToDecimal(rgb) { |
|
return (rgb.r << 16) + (rgb.g << 8) + rgb.b; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
static hexToDecimal(hex) { |
|
return Color.rgbToDecimal(Color.hexToRgb(hex)); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
static hsvToRgb(hsv) { |
|
let h = hsv.h % 360; |
|
if (h < 0) h += 360; |
|
const s = Math.max(0, Math.min(hsv.s, 1)); |
|
const v = Math.max(0, Math.min(hsv.v, 1)); |
|
const i = Math.floor(h / 60); |
|
const f = h / 60 - i; |
|
const p = v * (1 - s); |
|
const q = v * (1 - s * f); |
|
const t = v * (1 - s * (1 - f)); |
|
let r; |
|
let g; |
|
let b; |
|
switch (i) { |
|
default: |
|
case 0: |
|
r = v; |
|
g = t; |
|
b = p; |
|
break; |
|
case 1: |
|
r = q; |
|
g = v; |
|
b = p; |
|
break; |
|
case 2: |
|
r = p; |
|
g = v; |
|
b = t; |
|
break; |
|
case 3: |
|
r = p; |
|
g = q; |
|
b = v; |
|
break; |
|
case 4: |
|
r = t; |
|
g = p; |
|
b = v; |
|
break; |
|
case 5: |
|
r = v; |
|
g = p; |
|
b = q; |
|
break; |
|
} |
|
return { |
|
r: Math.floor(r * 255), |
|
g: Math.floor(g * 255), |
|
b: Math.floor(b * 255) |
|
}; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
static rgbToHsv(rgb) { |
|
const r = rgb.r / 255; |
|
const g = rgb.g / 255; |
|
const b = rgb.b / 255; |
|
const x = Math.min(Math.min(r, g), b); |
|
const v = Math.max(Math.max(r, g), b); |
|
|
|
|
|
let h = 0; |
|
let s = 0; |
|
if (x !== v) { |
|
const f = r === x ? g - b : g === x ? b - r : r - g; |
|
const i = r === x ? 3 : g === x ? 5 : 1; |
|
h = (i - f / (v - x)) * 60 % 360; |
|
s = (v - x) / v; |
|
} |
|
return { |
|
h: h, |
|
s: s, |
|
v: v |
|
}; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static mixRgb(rgb0, rgb1, fraction1) { |
|
if (fraction1 <= 0) return rgb0; |
|
if (fraction1 >= 1) return rgb1; |
|
const fraction0 = 1 - fraction1; |
|
return { |
|
r: fraction0 * rgb0.r + fraction1 * rgb1.r, |
|
g: fraction0 * rgb0.g + fraction1 * rgb1.g, |
|
b: fraction0 * rgb0.b + fraction1 * rgb1.b |
|
}; |
|
} |
|
} |
|
module.exports = Color; |
|
|
|
}), |
|
|
|
"./node_modules/scratch-vm/src/util/log.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports, __webpack_require__) { |
|
|
|
const minilog = __webpack_require__( "./node_modules/minilog/lib/web/index.js"); |
|
minilog.enable(); |
|
module.exports = minilog('vm'); |
|
|
|
}), |
|
|
|
"./node_modules/webpack/buildin/global.js": |
|
|
|
|
|
|
|
|
|
(function(module, exports) { |
|
|
|
var g; |
|
|
|
|
|
g = (function() { |
|
return this; |
|
})(); |
|
|
|
try { |
|
|
|
g = g || new Function("return this")(); |
|
} catch (e) { |
|
|
|
if (typeof window === "object") g = window; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
module.exports = g; |
|
|
|
|
|
}) |
|
|
|
}); |
|
|