@markw65/monkeyc-optimizer 1.0.7 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -1
- package/build/api.cjs +7342 -63
- package/build/optimizer.cjs +403 -87
- package/build/util.cjs +10 -20
- package/package.json +4 -3
package/build/optimizer.cjs
CHANGED
|
@@ -7185,12 +7185,64 @@ const promises_namespaceObject = require("fs/promises");
|
|
|
7185
7185
|
const external_path_namespaceObject = require("path");
|
|
7186
7186
|
;// CONCATENATED MODULE: external "./api.cjs"
|
|
7187
7187
|
const external_api_cjs_namespaceObject = require("./api.cjs");
|
|
7188
|
+
// EXTERNAL MODULE: ./node_modules/xml2js/lib/xml2js.js
|
|
7189
|
+
var xml2js = __webpack_require__(5055);
|
|
7188
7190
|
;// CONCATENATED MODULE: external "./util.cjs"
|
|
7189
7191
|
const external_util_cjs_namespaceObject = require("./util.cjs");
|
|
7192
|
+
;// CONCATENATED MODULE: ./src/sdk-util.js
|
|
7193
|
+
|
|
7194
|
+
|
|
7195
|
+
|
|
7196
|
+
|
|
7197
|
+
|
|
7198
|
+
const isWin = process.platform == "win32";
|
|
7199
|
+
|
|
7200
|
+
const appSupport = isWin
|
|
7201
|
+
? `${process.env.APPDATA}`.replace(/\\/g, "/")
|
|
7202
|
+
: `${process.env.HOME}/Library/Application Support`;
|
|
7203
|
+
|
|
7204
|
+
const connectiq = `${appSupport}/Garmin/ConnectIQ`;
|
|
7205
|
+
|
|
7206
|
+
function getSdkPath() {
|
|
7207
|
+
return promises_namespaceObject.readFile(connectiq + "/current-sdk.cfg")
|
|
7208
|
+
.then((contents) => contents.toString().replace(/^\s*(.*?)\s*$/s, "$1"));
|
|
7209
|
+
}
|
|
7210
|
+
|
|
7211
|
+
async function getDeviceInfo() {
|
|
7212
|
+
const files = await (0,external_util_cjs_namespaceObject.globa)(`${connectiq}/Devices/*/compiler.json`);
|
|
7213
|
+
return Promise.all(
|
|
7214
|
+
files.map((file) => {
|
|
7215
|
+
return promises_namespaceObject.readFile(file).then((data) => {
|
|
7216
|
+
const { deviceId, appTypes, deviceFamily } = JSON.parse(
|
|
7217
|
+
data.toString()
|
|
7218
|
+
);
|
|
7219
|
+
return [deviceId, { appTypes, deviceFamily }];
|
|
7220
|
+
});
|
|
7221
|
+
})
|
|
7222
|
+
).then((info) => {
|
|
7223
|
+
return Object.fromEntries(info);
|
|
7224
|
+
});
|
|
7225
|
+
}
|
|
7226
|
+
|
|
7227
|
+
async function getProjectInfo() {
|
|
7228
|
+
const sdk = await getSdkPath();
|
|
7229
|
+
const data = await promises_namespaceObject.readFile(external_path_namespaceObject.join(sdk, "bin", "projectInfo.xml"));
|
|
7230
|
+
return (0,xml2js.parseStringPromise)(data.toString(), { trim: true });
|
|
7231
|
+
}
|
|
7232
|
+
|
|
7233
|
+
async function getLanguages() {
|
|
7234
|
+
const projectInfo = await getProjectInfo();
|
|
7235
|
+
return projectInfo["monkeybrains"]["languages"][0]["language"].map((p) => ({
|
|
7236
|
+
id: p.$.id,
|
|
7237
|
+
name: p.$.name,
|
|
7238
|
+
}));
|
|
7239
|
+
}
|
|
7240
|
+
|
|
7190
7241
|
;// CONCATENATED MODULE: ./src/build.js
|
|
7191
7242
|
|
|
7192
7243
|
|
|
7193
7244
|
|
|
7245
|
+
|
|
7194
7246
|
async function build_project(product, options, lineCallback) {
|
|
7195
7247
|
const {
|
|
7196
7248
|
workspace,
|
|
@@ -7204,7 +7256,7 @@ async function build_project(product, options, lineCallback) {
|
|
|
7204
7256
|
typeCheckLevel,
|
|
7205
7257
|
returnCommand,
|
|
7206
7258
|
} = options;
|
|
7207
|
-
const sdk = await
|
|
7259
|
+
const sdk = await getSdkPath();
|
|
7208
7260
|
let extraArgs = [];
|
|
7209
7261
|
if (compilerOptions) {
|
|
7210
7262
|
extraArgs.push(...compilerOptions.split(/\s+/));
|
|
@@ -7235,7 +7287,7 @@ async function build_project(product, options, lineCallback) {
|
|
|
7235
7287
|
if (product) {
|
|
7236
7288
|
extraArgs.push("-d", simulatorBuild !== false ? `${product}_sim` : product);
|
|
7237
7289
|
}
|
|
7238
|
-
const exe = external_path_namespaceObject.resolve(sdk, "bin",
|
|
7290
|
+
const exe = external_path_namespaceObject.resolve(sdk, "bin", isWin ? "monkeyc.bat" : "monkeyc");
|
|
7239
7291
|
const args = [
|
|
7240
7292
|
["-o", program],
|
|
7241
7293
|
["-f", jungleFiles],
|
|
@@ -7265,8 +7317,6 @@ async function build_project(product, options, lineCallback) {
|
|
|
7265
7317
|
|
|
7266
7318
|
;// CONCATENATED MODULE: ./build/jungle.js
|
|
7267
7319
|
function peg$subclass(u,A){function E(){this.constructor=u}E.prototype=A.prototype,u.prototype=new E}function peg$SyntaxError(u,A,E,C){var F=Error.call(this,u);return Object.setPrototypeOf&&Object.setPrototypeOf(F,peg$SyntaxError.prototype),F.expected=A,F.found=E,F.location=C,F.name="SyntaxError",F}function peg$padEnd(u,A,E){return E=E||" ",u.length>A?u:(A-=u.length,u+(E+=E.repeat(A)).slice(0,A))}function peg$parse(u,A){var E,C,F,t,B={},r=(A=void 0!==A?A:{}).grammarSource,e={Jungle:Su},D=Su,n=/^[\n\r\u2028\u2029]/,o=/^[a-z\xB5\xDF-\xF6\xF8-\xFF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137-\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148-\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C-\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA-\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9-\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC-\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF-\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F-\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02AF\u0371\u0373\u0377\u037B-\u037D\u0390\u03AC-\u03CE\u03D0-\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB-\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE-\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0560-\u0588\u10D0-\u10FA\u10FD-\u10FF\u13F8-\u13FD\u1C80-\u1C88\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6-\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FC7\u1FD0-\u1FD3\u1FD6-\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6-\u1FF7\u210A\u210E-\u210F\u2113\u212F\u2134\u2139\u213C-\u213D\u2146-\u2149\u214E\u2184\u2C30-\u2C5E\u2C61\u2C65-\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73-\u2C74\u2C76-\u2C7B\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3-\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7AF\uA7B5\uA7B7\uA7B9\uA7FA\uAB30-\uAB5A\uAB60-\uAB65\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A]/,s=/^[\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0374\u037A\u0559\u0640\u06E5-\u06E6\u07F4-\u07F5\u07FA\u081A\u0824\u0828\u0971\u0E46\u0EC6\u10FC\u17D7\u1843\u1AA7\u1C78-\u1C7D\u1D2C-\u1D6A\u1D78\u1D9B-\u1DBF\u2071\u207F\u2090-\u209C\u2C7C-\u2C7D\u2D6F\u2E2F\u3005\u3031-\u3035\u303B\u309D-\u309E\u30FC-\u30FE\uA015\uA4F8-\uA4FD\uA60C\uA67F\uA69C-\uA69D\uA717-\uA71F\uA770\uA788\uA7F8-\uA7F9\uA9CF\uA9E6\uAA70\uAADD\uAAF3-\uAAF4\uAB5C-\uAB5F\uFF70\uFF9E-\uFF9F]/,a=/^[\xAA\xBA\u01BB\u01C0-\u01C3\u0294\u05D0-\u05EA\u05EF-\u05F2\u0620-\u063F\u0641-\u064A\u066E-\u066F\u0671-\u06D3\u06D5\u06EE-\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u0800-\u0815\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0972-\u0980\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC-\u09DD\u09DF-\u09E1\u09F0-\u09F1\u09FC\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0-\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3D\u0B5C-\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60-\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0-\u0CE1\u0CF1-\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32-\u0E33\u0E40-\u0E45\u0E81-\u0E82\u0E84\u0E87-\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA-\u0EAB\u0EAD-\u0EB0\u0EB2-\u0EB3\u0EBD\u0EC0-\u0EC4\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065-\u1066\u106E-\u1070\u1075-\u1081\u108E\u1100-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17DC\u1820-\u1842\u1844-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE-\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C77\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5-\u1CF6\u2135-\u2138\u2D30-\u2D67\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3006\u303C\u3041-\u3096\u309F\u30A1-\u30FA\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEF\uA000-\uA014\uA016-\uA48C\uA4D0-\uA4F7\uA500-\uA60B\uA610-\uA61F\uA62A-\uA62B\uA66E\uA6A0-\uA6E5\uA78F\uA7F7\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD-\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9E0-\uA9E4\uA9E7-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA6F\uAA71-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5-\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADC\uAAE0-\uAAEA\uAAF2\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF66-\uFF6F\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/,c=/^[\u01C5\u01C8\u01CB\u01F2\u1F88-\u1F8F\u1F98-\u1F9F\u1FA8-\u1FAF\u1FBC\u1FCC\u1FFC]/,l=/^[A-Z\xC0-\xD6\xD8-\xDE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178-\u0179\u017B\u017D\u0181-\u0182\u0184\u0186-\u0187\u0189-\u018B\u018E-\u0191\u0193-\u0194\u0196-\u0198\u019C-\u019D\u019F-\u01A0\u01A2\u01A4\u01A6-\u01A7\u01A9\u01AC\u01AE-\u01AF\u01B1-\u01B3\u01B5\u01B7-\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A-\u023B\u023D-\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E-\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9-\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0-\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1C90-\u1CBA\u1CBD-\u1CBF\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E-\u213F\u2145\u2183\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D-\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AE\uA7B0-\uA7B4\uA7B6\uA7B8\uFF21-\uFF3A]/,i=/^[\u0903\u093B\u093E-\u0940\u0949-\u094C\u094E-\u094F\u0982-\u0983\u09BE-\u09C0\u09C7-\u09C8\u09CB-\u09CC\u09D7\u0A03\u0A3E-\u0A40\u0A83\u0ABE-\u0AC0\u0AC9\u0ACB-\u0ACC\u0B02-\u0B03\u0B3E\u0B40\u0B47-\u0B48\u0B4B-\u0B4C\u0B57\u0BBE-\u0BBF\u0BC1-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD7\u0C01-\u0C03\u0C41-\u0C44\u0C82-\u0C83\u0CBE\u0CC0-\u0CC4\u0CC7-\u0CC8\u0CCA-\u0CCB\u0CD5-\u0CD6\u0D02-\u0D03\u0D3E-\u0D40\u0D46-\u0D48\u0D4A-\u0D4C\u0D57\u0D82-\u0D83\u0DCF-\u0DD1\u0DD8-\u0DDF\u0DF2-\u0DF3\u0F3E-\u0F3F\u0F7F\u102B-\u102C\u1031\u1038\u103B-\u103C\u1056-\u1057\u1062-\u1064\u1067-\u106D\u1083-\u1084\u1087-\u108C\u108F\u109A-\u109C\u17B6\u17BE-\u17C5\u17C7-\u17C8\u1923-\u1926\u1929-\u192B\u1930-\u1931\u1933-\u1938\u1A19-\u1A1A\u1A55\u1A57\u1A61\u1A63-\u1A64\u1A6D-\u1A72\u1B04\u1B35\u1B3B\u1B3D-\u1B41\u1B43-\u1B44\u1B82\u1BA1\u1BA6-\u1BA7\u1BAA\u1BE7\u1BEA-\u1BEC\u1BEE\u1BF2-\u1BF3\u1C24-\u1C2B\u1C34-\u1C35\u1CE1\u1CF2-\u1CF3\u1CF7\u302E-\u302F\uA823-\uA824\uA827\uA880-\uA881\uA8B4-\uA8C3\uA952-\uA953\uA983\uA9B4-\uA9B5\uA9BA-\uA9BB\uA9BD-\uA9C0\uAA2F-\uAA30\uAA33-\uAA34\uAA4D\uAA7B\uAA7D\uAAEB\uAAEE-\uAAEF\uAAF5\uABE3-\uABE4\uABE6-\uABE7\uABE9-\uABEA\uABEC]/,f=/^[\u0300-\u036F\u0483-\u0487\u0591-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7-\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962-\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2-\u09E3\u09FE\u0A01-\u0A02\u0A3C\u0A41-\u0A42\u0A47-\u0A48\u0A4B-\u0A4D\u0A51\u0A70-\u0A71\u0A75\u0A81-\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7-\u0AC8\u0ACD\u0AE2-\u0AE3\u0AFA-\u0AFF\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B56\u0B62-\u0B63\u0B82\u0BC0\u0BCD\u0C00\u0C04\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56\u0C62-\u0C63\u0C81\u0CBC\u0CBF\u0CC6\u0CCC-\u0CCD\u0CE2-\u0CE3\u0D00-\u0D01\u0D3B-\u0D3C\u0D41-\u0D44\u0D4D\u0D62-\u0D63\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB-\u0EBC\u0EC8-\u0ECD\u0F18-\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86-\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039-\u103A\u103D-\u103E\u1058-\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085-\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17B4-\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u1885-\u1886\u18A9\u1920-\u1922\u1927-\u1928\u1932\u1939-\u193B\u1A17-\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABD\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80-\u1B81\u1BA2-\u1BA5\u1BA8-\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8-\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8-\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u3099-\u309A\uA66F\uA674-\uA67D\uA69E-\uA69F\uA6F0-\uA6F1\uA802\uA806\uA80B\uA825-\uA826\uA8C4-\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9E5\uAA29-\uAA2E\uAA31-\uAA32\uAA35-\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7-\uAAB8\uAABE-\uAABF\uAAC1\uAAEC-\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F]/,h=/^[0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19]/,x=/^[\u16EE-\u16F0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303A\uA6E6-\uA6EF]/,p=/^[_\u203F-\u2040\u2054\uFE33-\uFE34\uFE4D-\uFE4F\uFF3F]/,d=/^[ \xA0\u1680\u2000-\u200A\u202F\u205F\u3000]/,P={type:"any"},g=Pu("=",!1),v=Pu(".",!1),y=Pu(";",!1),m=Pu("$(",!1),$=Pu(")",!1),S=vu("raw string"),b=vu("quoted string"),w=Pu('"',!1),j=Pu("[",!1),O=Pu("]",!1),R=Pu(" ",!1),_=Pu("\t",!1),L=Pu("\\",!1),z=vu("identifier"),M=Pu("_",!1),Z=Pu("$",!1),k=Pu("-",!1),q=Pu("",!1),J=Pu("",!1),N=Pu("/",!1),Q=Pu("*",!1),U=vu("whitespace"),G=Pu("\v",!1),H=Pu("\f",!1),I=Pu(" ",!1),K=Pu("\ufeff",!1),T=gu(["\n","\r","\u2028","\u2029"],!1,!1),V=vu("end of line"),W=Pu("\n",!1),X=Pu("\r\n",!1),Y=Pu("\r",!1),uu=Pu("\u2028",!1),Au=Pu("\u2029",!1),Eu=vu("comment"),Cu=Pu("#",!1),Fu=gu([["a","z"],"µ",["ß","ö"],["ø","ÿ"],"ā","ă","ą","ć","ĉ","ċ","č","ď","đ","ē","ĕ","ė","ę","ě","ĝ","ğ","ġ","ģ","ĥ","ħ","ĩ","ī","ĭ","į","ı","ij","ĵ",["ķ","ĸ"],"ĺ","ļ","ľ","ŀ","ł","ń","ņ",["ň","ʼn"],"ŋ","ō","ŏ","ő","œ","ŕ","ŗ","ř","ś","ŝ","ş","š","ţ","ť","ŧ","ũ","ū","ŭ","ů","ű","ų","ŵ","ŷ","ź","ż",["ž","ƀ"],"ƃ","ƅ","ƈ",["ƌ","ƍ"],"ƒ","ƕ",["ƙ","ƛ"],"ƞ","ơ","ƣ","ƥ","ƨ",["ƪ","ƫ"],"ƭ","ư","ƴ","ƶ",["ƹ","ƺ"],["ƽ","ƿ"],"dž","lj","nj","ǎ","ǐ","ǒ","ǔ","ǖ","ǘ","ǚ",["ǜ","ǝ"],"ǟ","ǡ","ǣ","ǥ","ǧ","ǩ","ǫ","ǭ",["ǯ","ǰ"],"dz","ǵ","ǹ","ǻ","ǽ","ǿ","ȁ","ȃ","ȅ","ȇ","ȉ","ȋ","ȍ","ȏ","ȑ","ȓ","ȕ","ȗ","ș","ț","ȝ","ȟ","ȡ","ȣ","ȥ","ȧ","ȩ","ȫ","ȭ","ȯ","ȱ",["ȳ","ȹ"],"ȼ",["ȿ","ɀ"],"ɂ","ɇ","ɉ","ɋ","ɍ",["ɏ","ʓ"],["ʕ","ʯ"],"ͱ","ͳ","ͷ",["ͻ","ͽ"],"ΐ",["ά","ώ"],["ϐ","ϑ"],["ϕ","ϗ"],"ϙ","ϛ","ϝ","ϟ","ϡ","ϣ","ϥ","ϧ","ϩ","ϫ","ϭ",["ϯ","ϳ"],"ϵ","ϸ",["ϻ","ϼ"],["а","џ"],"ѡ","ѣ","ѥ","ѧ","ѩ","ѫ","ѭ","ѯ","ѱ","ѳ","ѵ","ѷ","ѹ","ѻ","ѽ","ѿ","ҁ","ҋ","ҍ","ҏ","ґ","ғ","ҕ","җ","ҙ","қ","ҝ","ҟ","ҡ","ң","ҥ","ҧ","ҩ","ҫ","ҭ","ү","ұ","ҳ","ҵ","ҷ","ҹ","һ","ҽ","ҿ","ӂ","ӄ","ӆ","ӈ","ӊ","ӌ",["ӎ","ӏ"],"ӑ","ӓ","ӕ","ӗ","ә","ӛ","ӝ","ӟ","ӡ","ӣ","ӥ","ӧ","ө","ӫ","ӭ","ӯ","ӱ","ӳ","ӵ","ӷ","ӹ","ӻ","ӽ","ӿ","ԁ","ԃ","ԅ","ԇ","ԉ","ԋ","ԍ","ԏ","ԑ","ԓ","ԕ","ԗ","ԙ","ԛ","ԝ","ԟ","ԡ","ԣ","ԥ","ԧ","ԩ","ԫ","ԭ","ԯ",["ՠ","ֈ"],["ა","ჺ"],["ჽ","ჿ"],["ᏸ","ᏽ"],["ᲀ","ᲈ"],["ᴀ","ᴫ"],["ᵫ","ᵷ"],["ᵹ","ᶚ"],"ḁ","ḃ","ḅ","ḇ","ḉ","ḋ","ḍ","ḏ","ḑ","ḓ","ḕ","ḗ","ḙ","ḛ","ḝ","ḟ","ḡ","ḣ","ḥ","ḧ","ḩ","ḫ","ḭ","ḯ","ḱ","ḳ","ḵ","ḷ","ḹ","ḻ","ḽ","ḿ","ṁ","ṃ","ṅ","ṇ","ṉ","ṋ","ṍ","ṏ","ṑ","ṓ","ṕ","ṗ","ṙ","ṛ","ṝ","ṟ","ṡ","ṣ","ṥ","ṧ","ṩ","ṫ","ṭ","ṯ","ṱ","ṳ","ṵ","ṷ","ṹ","ṻ","ṽ","ṿ","ẁ","ẃ","ẅ","ẇ","ẉ","ẋ","ẍ","ẏ","ẑ","ẓ",["ẕ","ẝ"],"ẟ","ạ","ả","ấ","ầ","ẩ","ẫ","ậ","ắ","ằ","ẳ","ẵ","ặ","ẹ","ẻ","ẽ","ế","ề","ể","ễ","ệ","ỉ","ị","ọ","ỏ","ố","ồ","ổ","ỗ","ộ","ớ","ờ","ở","ỡ","ợ","ụ","ủ","ứ","ừ","ử","ữ","ự","ỳ","ỵ","ỷ","ỹ","ỻ","ỽ",["ỿ","ἇ"],["ἐ","ἕ"],["ἠ","ἧ"],["ἰ","ἷ"],["ὀ","ὅ"],["ὐ","ὗ"],["ὠ","ὧ"],["ὰ","ώ"],["ᾀ","ᾇ"],["ᾐ","ᾗ"],["ᾠ","ᾧ"],["ᾰ","ᾴ"],["ᾶ","ᾷ"],"ι",["ῂ","ῄ"],["ῆ","ῇ"],["ῐ","ΐ"],["ῖ","ῗ"],["ῠ","ῧ"],["ῲ","ῴ"],["ῶ","ῷ"],"ℊ",["ℎ","ℏ"],"ℓ","ℯ","ℴ","ℹ",["ℼ","ℽ"],["ⅆ","ⅉ"],"ⅎ","ↄ",["ⰰ","ⱞ"],"ⱡ",["ⱥ","ⱦ"],"ⱨ","ⱪ","ⱬ","ⱱ",["ⱳ","ⱴ"],["ⱶ","ⱻ"],"ⲁ","ⲃ","ⲅ","ⲇ","ⲉ","ⲋ","ⲍ","ⲏ","ⲑ","ⲓ","ⲕ","ⲗ","ⲙ","ⲛ","ⲝ","ⲟ","ⲡ","ⲣ","ⲥ","ⲧ","ⲩ","ⲫ","ⲭ","ⲯ","ⲱ","ⲳ","ⲵ","ⲷ","ⲹ","ⲻ","ⲽ","ⲿ","ⳁ","ⳃ","ⳅ","ⳇ","ⳉ","ⳋ","ⳍ","ⳏ","ⳑ","ⳓ","ⳕ","ⳗ","ⳙ","ⳛ","ⳝ","ⳟ","ⳡ",["ⳣ","ⳤ"],"ⳬ","ⳮ","ⳳ",["ⴀ","ⴥ"],"ⴧ","ⴭ","ꙁ","ꙃ","ꙅ","ꙇ","ꙉ","ꙋ","ꙍ","ꙏ","ꙑ","ꙓ","ꙕ","ꙗ","ꙙ","ꙛ","ꙝ","ꙟ","ꙡ","ꙣ","ꙥ","ꙧ","ꙩ","ꙫ","ꙭ","ꚁ","ꚃ","ꚅ","ꚇ","ꚉ","ꚋ","ꚍ","ꚏ","ꚑ","ꚓ","ꚕ","ꚗ","ꚙ","ꚛ","ꜣ","ꜥ","ꜧ","ꜩ","ꜫ","ꜭ",["ꜯ","ꜱ"],"ꜳ","ꜵ","ꜷ","ꜹ","ꜻ","ꜽ","ꜿ","ꝁ","ꝃ","ꝅ","ꝇ","ꝉ","ꝋ","ꝍ","ꝏ","ꝑ","ꝓ","ꝕ","ꝗ","ꝙ","ꝛ","ꝝ","ꝟ","ꝡ","ꝣ","ꝥ","ꝧ","ꝩ","ꝫ","ꝭ","ꝯ",["ꝱ","ꝸ"],"ꝺ","ꝼ","ꝿ","ꞁ","ꞃ","ꞅ","ꞇ","ꞌ","ꞎ","ꞑ",["ꞓ","ꞕ"],"ꞗ","ꞙ","ꞛ","ꞝ","ꞟ","ꞡ","ꞣ","ꞥ","ꞧ","ꞩ","ꞯ","ꞵ","ꞷ","ꞹ","ꟺ",["ꬰ","ꭚ"],["ꭠ","ꭥ"],["ꭰ","ꮿ"],["ff","st"],["ﬓ","ﬗ"],["a","z"]],!1,!1),tu=gu([["ʰ","ˁ"],["ˆ","ˑ"],["ˠ","ˤ"],"ˬ","ˮ","ʹ","ͺ","ՙ","ـ",["ۥ","ۦ"],["ߴ","ߵ"],"ߺ","ࠚ","ࠤ","ࠨ","ॱ","ๆ","ໆ","ჼ","ៗ","ᡃ","ᪧ",["ᱸ","ᱽ"],["ᴬ","ᵪ"],"ᵸ",["ᶛ","ᶿ"],"ⁱ","ⁿ",["ₐ","ₜ"],["ⱼ","ⱽ"],"ⵯ","ⸯ","々",["〱","〵"],"〻",["ゝ","ゞ"],["ー","ヾ"],"ꀕ",["ꓸ","ꓽ"],"ꘌ","ꙿ",["ꚜ","ꚝ"],["ꜗ","ꜟ"],"ꝰ","ꞈ",["ꟸ","ꟹ"],"ꧏ","ꧦ","ꩰ","ꫝ",["ꫳ","ꫴ"],["ꭜ","ꭟ"],"ー",["゙","゚"]],!1,!1),Bu=gu(["ª","º","ƻ",["ǀ","ǃ"],"ʔ",["א","ת"],["ׯ","ײ"],["ؠ","ؿ"],["ف","ي"],["ٮ","ٯ"],["ٱ","ۓ"],"ە",["ۮ","ۯ"],["ۺ","ۼ"],"ۿ","ܐ",["ܒ","ܯ"],["ݍ","ޥ"],"ޱ",["ߊ","ߪ"],["ࠀ","ࠕ"],["ࡀ","ࡘ"],["ࡠ","ࡪ"],["ࢠ","ࢴ"],["ࢶ","ࢽ"],["ऄ","ह"],"ऽ","ॐ",["क़","ॡ"],["ॲ","ঀ"],["অ","ঌ"],["এ","ঐ"],["ও","ন"],["প","র"],"ল",["শ","হ"],"ঽ","ৎ",["ড়","ঢ়"],["য়","ৡ"],["ৰ","ৱ"],"ৼ",["ਅ","ਊ"],["ਏ","ਐ"],["ਓ","ਨ"],["ਪ","ਰ"],["ਲ","ਲ਼"],["ਵ","ਸ਼"],["ਸ","ਹ"],["ਖ਼","ੜ"],"ਫ਼",["ੲ","ੴ"],["અ","ઍ"],["એ","ઑ"],["ઓ","ન"],["પ","ર"],["લ","ળ"],["વ","હ"],"ઽ","ૐ",["ૠ","ૡ"],"ૹ",["ଅ","ଌ"],["ଏ","ଐ"],["ଓ","ନ"],["ପ","ର"],["ଲ","ଳ"],["ଵ","ହ"],"ଽ",["ଡ଼","ଢ଼"],["ୟ","ୡ"],"ୱ","ஃ",["அ","ஊ"],["எ","ஐ"],["ஒ","க"],["ங","ச"],"ஜ",["ஞ","ட"],["ண","த"],["ந","ப"],["ம","ஹ"],"ௐ",["అ","ఌ"],["ఎ","ఐ"],["ఒ","న"],["ప","హ"],"ఽ",["ౘ","ౚ"],["ౠ","ౡ"],"ಀ",["ಅ","ಌ"],["ಎ","ಐ"],["ಒ","ನ"],["ಪ","ಳ"],["ವ","ಹ"],"ಽ","ೞ",["ೠ","ೡ"],["ೱ","ೲ"],["അ","ഌ"],["എ","ഐ"],["ഒ","ഺ"],"ഽ","ൎ",["ൔ","ൖ"],["ൟ","ൡ"],["ൺ","ൿ"],["අ","ඖ"],["ක","න"],["ඳ","ර"],"ල",["ව","ෆ"],["ก","ะ"],["า","ำ"],["เ","ๅ"],["ກ","ຂ"],"ຄ",["ງ","ຈ"],"ຊ","ຍ",["ດ","ທ"],["ນ","ຟ"],["ມ","ຣ"],"ລ","ວ",["ສ","ຫ"],["ອ","ະ"],["າ","ຳ"],"ຽ",["ເ","ໄ"],["ໜ","ໟ"],"ༀ",["ཀ","ཇ"],["ཉ","ཬ"],["ྈ","ྌ"],["က","ဪ"],"ဿ",["ၐ","ၕ"],["ၚ","ၝ"],"ၡ",["ၥ","ၦ"],["ၮ","ၰ"],["ၵ","ႁ"],"ႎ",["ᄀ","ቈ"],["ቊ","ቍ"],["ቐ","ቖ"],"ቘ",["ቚ","ቝ"],["በ","ኈ"],["ኊ","ኍ"],["ነ","ኰ"],["ኲ","ኵ"],["ኸ","ኾ"],"ዀ",["ዂ","ዅ"],["ወ","ዖ"],["ዘ","ጐ"],["ጒ","ጕ"],["ጘ","ፚ"],["ᎀ","ᎏ"],["ᐁ","ᙬ"],["ᙯ","ᙿ"],["ᚁ","ᚚ"],["ᚠ","ᛪ"],["ᛱ","ᛸ"],["ᜀ","ᜌ"],["ᜎ","ᜑ"],["ᜠ","ᜱ"],["ᝀ","ᝑ"],["ᝠ","ᝬ"],["ᝮ","ᝰ"],["ក","ឳ"],"ៜ",["ᠠ","ᡂ"],["ᡄ","ᡸ"],["ᢀ","ᢄ"],["ᢇ","ᢨ"],"ᢪ",["ᢰ","ᣵ"],["ᤀ","ᤞ"],["ᥐ","ᥭ"],["ᥰ","ᥴ"],["ᦀ","ᦫ"],["ᦰ","ᧉ"],["ᨀ","ᨖ"],["ᨠ","ᩔ"],["ᬅ","ᬳ"],["ᭅ","ᭋ"],["ᮃ","ᮠ"],["ᮮ","ᮯ"],["ᮺ","ᯥ"],["ᰀ","ᰣ"],["ᱍ","ᱏ"],["ᱚ","ᱷ"],["ᳩ","ᳬ"],["ᳮ","ᳱ"],["ᳵ","ᳶ"],["ℵ","ℸ"],["ⴰ","ⵧ"],["ⶀ","ⶖ"],["ⶠ","ⶦ"],["ⶨ","ⶮ"],["ⶰ","ⶶ"],["ⶸ","ⶾ"],["ⷀ","ⷆ"],["ⷈ","ⷎ"],["ⷐ","ⷖ"],["ⷘ","ⷞ"],"〆","〼",["ぁ","ゖ"],"ゟ",["ァ","ヺ"],"ヿ",["ㄅ","ㄯ"],["ㄱ","ㆎ"],["ㆠ","ㆺ"],["ㇰ","ㇿ"],["㐀","䶵"],["一","鿯"],["ꀀ","ꀔ"],["ꀖ","ꒌ"],["ꓐ","ꓷ"],["ꔀ","ꘋ"],["ꘐ","ꘟ"],["ꘪ","ꘫ"],"ꙮ",["ꚠ","ꛥ"],"ꞏ","ꟷ",["ꟻ","ꠁ"],["ꠃ","ꠅ"],["ꠇ","ꠊ"],["ꠌ","ꠢ"],["ꡀ","ꡳ"],["ꢂ","ꢳ"],["ꣲ","ꣷ"],"ꣻ",["ꣽ","ꣾ"],["ꤊ","ꤥ"],["ꤰ","ꥆ"],["ꥠ","ꥼ"],["ꦄ","ꦲ"],["ꧠ","ꧤ"],["ꧧ","ꧯ"],["ꧺ","ꧾ"],["ꨀ","ꨨ"],["ꩀ","ꩂ"],["ꩄ","ꩋ"],["ꩠ","ꩯ"],["ꩱ","ꩶ"],"ꩺ",["ꩾ","ꪯ"],"ꪱ",["ꪵ","ꪶ"],["ꪹ","ꪽ"],"ꫀ","ꫂ",["ꫛ","ꫜ"],["ꫠ","ꫪ"],"ꫲ",["ꬁ","ꬆ"],["ꬉ","ꬎ"],["ꬑ","ꬖ"],["ꬠ","ꬦ"],["ꬨ","ꬮ"],["ꯀ","ꯢ"],["가","힣"],["ힰ","ퟆ"],["ퟋ","ퟻ"],["豈","舘"],["並","龎"],"יִ",["ײַ","ﬨ"],["שׁ","זּ"],["טּ","לּ"],"מּ",["נּ","סּ"],["ףּ","פּ"],["צּ","ﮱ"],["ﯓ","ﴽ"],["ﵐ","ﶏ"],["ﶒ","ﷇ"],["ﷰ","ﷻ"],["ﹰ","ﹴ"],["ﹶ","ﻼ"],["ヲ","ッ"],["ア","ン"],["ᅠ","ᄒ"],["ᅡ","ᅦ"],["ᅧ","ᅬ"],["ᅭ","ᅲ"],["ᅳ","ᅵ"]],!1,!1),ru=gu(["Dž","Lj","Nj","Dz",["ᾈ","ᾏ"],["ᾘ","ᾟ"],["ᾨ","ᾯ"],"ᾼ","ῌ","ῼ"],!1,!1),eu=gu([["A","Z"],["À","Ö"],["Ø","Þ"],"Ā","Ă","Ą","Ć","Ĉ","Ċ","Č","Ď","Đ","Ē","Ĕ","Ė","Ę","Ě","Ĝ","Ğ","Ġ","Ģ","Ĥ","Ħ","Ĩ","Ī","Ĭ","Į","İ","IJ","Ĵ","Ķ","Ĺ","Ļ","Ľ","Ŀ","Ł","Ń","Ņ","Ň","Ŋ","Ō","Ŏ","Ő","Œ","Ŕ","Ŗ","Ř","Ś","Ŝ","Ş","Š","Ţ","Ť","Ŧ","Ũ","Ū","Ŭ","Ů","Ű","Ų","Ŵ","Ŷ",["Ÿ","Ź"],"Ż","Ž",["Ɓ","Ƃ"],"Ƅ",["Ɔ","Ƈ"],["Ɖ","Ƌ"],["Ǝ","Ƒ"],["Ɠ","Ɣ"],["Ɩ","Ƙ"],["Ɯ","Ɲ"],["Ɵ","Ơ"],"Ƣ","Ƥ",["Ʀ","Ƨ"],"Ʃ","Ƭ",["Ʈ","Ư"],["Ʊ","Ƴ"],"Ƶ",["Ʒ","Ƹ"],"Ƽ","DŽ","LJ","NJ","Ǎ","Ǐ","Ǒ","Ǔ","Ǖ","Ǘ","Ǚ","Ǜ","Ǟ","Ǡ","Ǣ","Ǥ","Ǧ","Ǩ","Ǫ","Ǭ","Ǯ","DZ","Ǵ",["Ƕ","Ǹ"],"Ǻ","Ǽ","Ǿ","Ȁ","Ȃ","Ȅ","Ȇ","Ȉ","Ȋ","Ȍ","Ȏ","Ȑ","Ȓ","Ȕ","Ȗ","Ș","Ț","Ȝ","Ȟ","Ƞ","Ȣ","Ȥ","Ȧ","Ȩ","Ȫ","Ȭ","Ȯ","Ȱ","Ȳ",["Ⱥ","Ȼ"],["Ƚ","Ⱦ"],"Ɂ",["Ƀ","Ɇ"],"Ɉ","Ɋ","Ɍ","Ɏ","Ͱ","Ͳ","Ͷ","Ϳ","Ά",["Έ","Ί"],"Ό",["Ύ","Ώ"],["Α","Ρ"],["Σ","Ϋ"],"Ϗ",["ϒ","ϔ"],"Ϙ","Ϛ","Ϝ","Ϟ","Ϡ","Ϣ","Ϥ","Ϧ","Ϩ","Ϫ","Ϭ","Ϯ","ϴ","Ϸ",["Ϲ","Ϻ"],["Ͻ","Я"],"Ѡ","Ѣ","Ѥ","Ѧ","Ѩ","Ѫ","Ѭ","Ѯ","Ѱ","Ѳ","Ѵ","Ѷ","Ѹ","Ѻ","Ѽ","Ѿ","Ҁ","Ҋ","Ҍ","Ҏ","Ґ","Ғ","Ҕ","Җ","Ҙ","Қ","Ҝ","Ҟ","Ҡ","Ң","Ҥ","Ҧ","Ҩ","Ҫ","Ҭ","Ү","Ұ","Ҳ","Ҵ","Ҷ","Ҹ","Һ","Ҽ","Ҿ",["Ӏ","Ӂ"],"Ӄ","Ӆ","Ӈ","Ӊ","Ӌ","Ӎ","Ӑ","Ӓ","Ӕ","Ӗ","Ә","Ӛ","Ӝ","Ӟ","Ӡ","Ӣ","Ӥ","Ӧ","Ө","Ӫ","Ӭ","Ӯ","Ӱ","Ӳ","Ӵ","Ӷ","Ӹ","Ӻ","Ӽ","Ӿ","Ԁ","Ԃ","Ԅ","Ԇ","Ԉ","Ԋ","Ԍ","Ԏ","Ԑ","Ԓ","Ԕ","Ԗ","Ԙ","Ԛ","Ԝ","Ԟ","Ԡ","Ԣ","Ԥ","Ԧ","Ԩ","Ԫ","Ԭ","Ԯ",["Ա","Ֆ"],["Ⴀ","Ⴥ"],"Ⴧ","Ⴭ",["Ꭰ","Ᏽ"],["Ა","Ჺ"],["Ჽ","Ჿ"],"Ḁ","Ḃ","Ḅ","Ḇ","Ḉ","Ḋ","Ḍ","Ḏ","Ḑ","Ḓ","Ḕ","Ḗ","Ḙ","Ḛ","Ḝ","Ḟ","Ḡ","Ḣ","Ḥ","Ḧ","Ḩ","Ḫ","Ḭ","Ḯ","Ḱ","Ḳ","Ḵ","Ḷ","Ḹ","Ḻ","Ḽ","Ḿ","Ṁ","Ṃ","Ṅ","Ṇ","Ṉ","Ṋ","Ṍ","Ṏ","Ṑ","Ṓ","Ṕ","Ṗ","Ṙ","Ṛ","Ṝ","Ṟ","Ṡ","Ṣ","Ṥ","Ṧ","Ṩ","Ṫ","Ṭ","Ṯ","Ṱ","Ṳ","Ṵ","Ṷ","Ṹ","Ṻ","Ṽ","Ṿ","Ẁ","Ẃ","Ẅ","Ẇ","Ẉ","Ẋ","Ẍ","Ẏ","Ẑ","Ẓ","Ẕ","ẞ","Ạ","Ả","Ấ","Ầ","Ẩ","Ẫ","Ậ","Ắ","Ằ","Ẳ","Ẵ","Ặ","Ẹ","Ẻ","Ẽ","Ế","Ề","Ể","Ễ","Ệ","Ỉ","Ị","Ọ","Ỏ","Ố","Ồ","Ổ","Ỗ","Ộ","Ớ","Ờ","Ở","Ỡ","Ợ","Ụ","Ủ","Ứ","Ừ","Ử","Ữ","Ự","Ỳ","Ỵ","Ỷ","Ỹ","Ỻ","Ỽ","Ỿ",["Ἀ","Ἇ"],["Ἐ","Ἕ"],["Ἠ","Ἧ"],["Ἰ","Ἷ"],["Ὀ","Ὅ"],"Ὑ","Ὓ","Ὕ","Ὗ",["Ὠ","Ὧ"],["Ᾰ","Ά"],["Ὲ","Ή"],["Ῐ","Ί"],["Ῠ","Ῥ"],["Ὸ","Ώ"],"ℂ","ℇ",["ℋ","ℍ"],["ℐ","ℒ"],"ℕ",["ℙ","ℝ"],"ℤ","Ω","ℨ",["K","ℭ"],["ℰ","ℳ"],["ℾ","ℿ"],"ⅅ","Ↄ",["Ⰰ","Ⱞ"],"Ⱡ",["Ɫ","Ɽ"],"Ⱨ","Ⱪ","Ⱬ",["Ɑ","Ɒ"],"Ⱳ","Ⱶ",["Ȿ","Ⲁ"],"Ⲃ","Ⲅ","Ⲇ","Ⲉ","Ⲋ","Ⲍ","Ⲏ","Ⲑ","Ⲓ","Ⲕ","Ⲗ","Ⲙ","Ⲛ","Ⲝ","Ⲟ","Ⲡ","Ⲣ","Ⲥ","Ⲧ","Ⲩ","Ⲫ","Ⲭ","Ⲯ","Ⲱ","Ⲳ","Ⲵ","Ⲷ","Ⲹ","Ⲻ","Ⲽ","Ⲿ","Ⳁ","Ⳃ","Ⳅ","Ⳇ","Ⳉ","Ⳋ","Ⳍ","Ⳏ","Ⳑ","Ⳓ","Ⳕ","Ⳗ","Ⳙ","Ⳛ","Ⳝ","Ⳟ","Ⳡ","Ⳣ","Ⳬ","Ⳮ","Ⳳ","Ꙁ","Ꙃ","Ꙅ","Ꙇ","Ꙉ","Ꙋ","Ꙍ","Ꙏ","Ꙑ","Ꙓ","Ꙕ","Ꙗ","Ꙙ","Ꙛ","Ꙝ","Ꙟ","Ꙡ","Ꙣ","Ꙥ","Ꙧ","Ꙩ","Ꙫ","Ꙭ","Ꚁ","Ꚃ","Ꚅ","Ꚇ","Ꚉ","Ꚋ","Ꚍ","Ꚏ","Ꚑ","Ꚓ","Ꚕ","Ꚗ","Ꚙ","Ꚛ","Ꜣ","Ꜥ","Ꜧ","Ꜩ","Ꜫ","Ꜭ","Ꜯ","Ꜳ","Ꜵ","Ꜷ","Ꜹ","Ꜻ","Ꜽ","Ꜿ","Ꝁ","Ꝃ","Ꝅ","Ꝇ","Ꝉ","Ꝋ","Ꝍ","Ꝏ","Ꝑ","Ꝓ","Ꝕ","Ꝗ","Ꝙ","Ꝛ","Ꝝ","Ꝟ","Ꝡ","Ꝣ","Ꝥ","Ꝧ","Ꝩ","Ꝫ","Ꝭ","Ꝯ","Ꝺ","Ꝼ",["Ᵹ","Ꝿ"],"Ꞁ","Ꞃ","Ꞅ","Ꞇ","Ꞌ","Ɥ","Ꞑ","Ꞓ","Ꞗ","Ꞙ","Ꞛ","Ꞝ","Ꞟ","Ꞡ","Ꞣ","Ꞥ","Ꞧ","Ꞩ",["Ɦ","Ɪ"],["Ʞ","Ꞵ"],"Ꞷ","Ꞹ",["A","Z"]],!1,!1),Du=gu(["ः","ऻ",["ा","ी"],["ॉ","ौ"],["ॎ","ॏ"],["ং","ঃ"],["া","ী"],["ে","ৈ"],["ো","ৌ"],"ৗ","ਃ",["ਾ","ੀ"],"ઃ",["ા","ી"],"ૉ",["ો","ૌ"],["ଂ","ଃ"],"ା","ୀ",["େ","ୈ"],["ୋ","ୌ"],"ୗ",["ா","ி"],["ு","ூ"],["ெ","ை"],["ொ","ௌ"],"ௗ",["ఁ","ః"],["ు","ౄ"],["ಂ","ಃ"],"ಾ",["ೀ","ೄ"],["ೇ","ೈ"],["ೊ","ೋ"],["ೕ","ೖ"],["ം","ഃ"],["ാ","ീ"],["െ","ൈ"],["ൊ","ൌ"],"ൗ",["ං","ඃ"],["ා","ෑ"],["ෘ","ෟ"],["ෲ","ෳ"],["༾","༿"],"ཿ",["ါ","ာ"],"ေ","း",["ျ","ြ"],["ၖ","ၗ"],["ၢ","ၤ"],["ၧ","ၭ"],["ႃ","ႄ"],["ႇ","ႌ"],"ႏ",["ႚ","ႜ"],"ា",["ើ","ៅ"],["ះ","ៈ"],["ᤣ","ᤦ"],["ᤩ","ᤫ"],["ᤰ","ᤱ"],["ᤳ","ᤸ"],["ᨙ","ᨚ"],"ᩕ","ᩗ","ᩡ",["ᩣ","ᩤ"],["ᩭ","ᩲ"],"ᬄ","ᬵ","ᬻ",["ᬽ","ᭁ"],["ᭃ","᭄"],"ᮂ","ᮡ",["ᮦ","ᮧ"],"᮪","ᯧ",["ᯪ","ᯬ"],"ᯮ",["᯲","᯳"],["ᰤ","ᰫ"],["ᰴ","ᰵ"],"᳡",["ᳲ","ᳳ"],"᳷",["〮","〯"],["ꠣ","ꠤ"],"ꠧ",["ꢀ","ꢁ"],["ꢴ","ꣃ"],["ꥒ","꥓"],"ꦃ",["ꦴ","ꦵ"],["ꦺ","ꦻ"],["ꦽ","꧀"],["ꨯ","ꨰ"],["ꨳ","ꨴ"],"ꩍ","ꩻ","ꩽ","ꫫ",["ꫮ","ꫯ"],"ꫵ",["ꯣ","ꯤ"],["ꯦ","ꯧ"],["ꯩ","ꯪ"],"꯬"],!1,!1),nu=gu([["̀","ͯ"],["҃","҇"],["֑","ֽ"],"ֿ",["ׁ","ׂ"],["ׄ","ׅ"],"ׇ",["ؐ","ؚ"],["ً","ٟ"],"ٰ",["ۖ","ۜ"],["۟","ۤ"],["ۧ","ۨ"],["۪","ۭ"],"ܑ",["ܰ","݊"],["ަ","ް"],["߫","߳"],"߽",["ࠖ","࠙"],["ࠛ","ࠣ"],["ࠥ","ࠧ"],["ࠩ","࠭"],["࡙","࡛"],["࣓","࣡"],["ࣣ","ं"],"ऺ","़",["ु","ै"],"्",["॑","ॗ"],["ॢ","ॣ"],"ঁ","়",["ু","ৄ"],"্",["ৢ","ৣ"],"৾",["ਁ","ਂ"],"਼",["ੁ","ੂ"],["ੇ","ੈ"],["ੋ","੍"],"ੑ",["ੰ","ੱ"],"ੵ",["ઁ","ં"],"઼",["ુ","ૅ"],["ે","ૈ"],"્",["ૢ","ૣ"],["ૺ","૿"],"ଁ","଼","ି",["ୁ","ୄ"],"୍","ୖ",["ୢ","ୣ"],"ஂ","ீ","்","ఀ","ఄ",["ా","ీ"],["ె","ై"],["ొ","్"],["ౕ","ౖ"],["ౢ","ౣ"],"ಁ","಼","ಿ","ೆ",["ೌ","್"],["ೢ","ೣ"],["ഀ","ഁ"],["഻","഼"],["ു","ൄ"],"്",["ൢ","ൣ"],"්",["ි","ු"],"ූ","ั",["ิ","ฺ"],["็","๎"],"ັ",["ິ","ູ"],["ົ","ຼ"],["່","ໍ"],["༘","༙"],"༵","༷","༹",["ཱ","ཾ"],["ྀ","྄"],["྆","྇"],["ྍ","ྗ"],["ྙ","ྼ"],"࿆",["ိ","ူ"],["ဲ","့"],["္","်"],["ွ","ှ"],["ၘ","ၙ"],["ၞ","ၠ"],["ၱ","ၴ"],"ႂ",["ႅ","ႆ"],"ႍ","ႝ",["፝","፟"],["ᜒ","᜔"],["ᜲ","᜴"],["ᝒ","ᝓ"],["ᝲ","ᝳ"],["឴","឵"],["ិ","ួ"],"ំ",["៉","៓"],"៝",["᠋","᠍"],["ᢅ","ᢆ"],"ᢩ",["ᤠ","ᤢ"],["ᤧ","ᤨ"],"ᤲ",["᤹","᤻"],["ᨗ","ᨘ"],"ᨛ","ᩖ",["ᩘ","ᩞ"],"᩠","ᩢ",["ᩥ","ᩬ"],["ᩳ","᩼"],"᩿",["᪰","᪽"],["ᬀ","ᬃ"],"᬴",["ᬶ","ᬺ"],"ᬼ","ᭂ",["᭫","᭳"],["ᮀ","ᮁ"],["ᮢ","ᮥ"],["ᮨ","ᮩ"],["᮫","ᮭ"],"᯦",["ᯨ","ᯩ"],"ᯭ",["ᯯ","ᯱ"],["ᰬ","ᰳ"],["ᰶ","᰷"],["᳐","᳒"],["᳔","᳠"],["᳢","᳨"],"᳭","᳴",["᳸","᳹"],["᷀","᷹"],["᷻","᷿"],["⃐","⃜"],"⃡",["⃥","⃰"],["⳯","⳱"],"⵿",["ⷠ","ⷿ"],["〪","〭"],["゙","゚"],"꙯",["ꙴ","꙽"],["ꚞ","ꚟ"],["꛰","꛱"],"ꠂ","꠆","ꠋ",["ꠥ","ꠦ"],["꣄","ꣅ"],["꣠","꣱"],"ꣿ",["ꤦ","꤭"],["ꥇ","ꥑ"],["ꦀ","ꦂ"],"꦳",["ꦶ","ꦹ"],"ꦼ","ꧥ",["ꨩ","ꨮ"],["ꨱ","ꨲ"],["ꨵ","ꨶ"],"ꩃ","ꩌ","ꩼ","ꪰ",["ꪲ","ꪴ"],["ꪷ","ꪸ"],["ꪾ","꪿"],"꫁",["ꫬ","ꫭ"],"꫶","ꯥ","ꯨ","꯭","ﬞ",["︀","️"],["︠","︯"]],!1,!1),ou=gu([["0","9"],["٠","٩"],["۰","۹"],["߀","߉"],["०","९"],["০","৯"],["੦","੯"],["૦","૯"],["୦","୯"],["௦","௯"],["౦","౯"],["೦","೯"],["൦","൯"],["෦","෯"],["๐","๙"],["໐","໙"],["༠","༩"],["၀","၉"],["႐","႙"],["០","៩"],["᠐","᠙"],["᥆","᥏"],["᧐","᧙"],["᪀","᪉"],["᪐","᪙"],["᭐","᭙"],["᮰","᮹"],["᱀","᱉"],["᱐","᱙"],["꘠","꘩"],["꣐","꣙"],["꤀","꤉"],["꧐","꧙"],["꧰","꧹"],["꩐","꩙"],["꯰","꯹"],["0","9"]],!1,!1),su=gu([["ᛮ","ᛰ"],["Ⅰ","ↂ"],["ↅ","ↈ"],"〇",["〡","〩"],["〸","〺"],["ꛦ","ꛯ"]],!1,!1),au=gu(["_",["‿","⁀"],"⁔",["︳","︴"],["﹍","﹏"],"_"],!1,!1),cu=gu([" "," "," ",[" "," "]," "," "," "],!1,!1),lu=0,iu=0,fu=[{line:1,column:1}],hu=0,xu=[],pu=0,du={};if("startRule"in A){if(!(A.startRule in e))throw new Error("Can't start parsing from rule \""+A.startRule+'".');D=e[A.startRule]}function Pu(u,A){return{type:"literal",text:u,ignoreCase:A}}function gu(u,A,E){return{type:"class",parts:u,inverted:A,ignoreCase:E}}function vu(u){return{type:"other",description:u}}function yu(A){var E,C=fu[A];if(C)return C;for(E=A-1;!fu[E];)E--;for(C={line:(C=fu[E]).line,column:C.column};E<A;)10===u.charCodeAt(E)?(C.line++,C.column=1):C.column++,E++;return fu[A]=C,C}function mu(u,A){var E=yu(u),C=yu(A);return{source:r,start:{offset:u,line:E.line,column:E.column},end:{offset:A,line:C.line,column:C.column}}}function $u(u){lu<hu||(lu>hu&&(hu=lu,xu=[]),xu.push(u))}function Su(){var A,E,C,F,t,r=32*lu+0,e=du[r];if(e)return lu=e.nextPos,e.result;for(A=lu,E=[],C=lu,F=Ru(),(t=bu())!==B?C=t:(lu=C,C=B);C!==B;)E.push(C),C=lu,F=Ru(),(t=bu())!==B?C=t:(lu=C,C=B);return C=Ru(),F=lu,pu++,u.length>lu?(t=u.charAt(lu),lu++):(t=B,0===pu&&$u(P)),pu--,t===B?F=void 0:(lu=F,F=B),F!==B?A=E:(lu=A,A=B),du[r]={nextPos:lu,result:A},A}function bu(){var A,E,C,F,t,r=32*lu+1,e=du[r];return e?(lu=e.nextPos,e.result):(A=lu,(E=wu())!==B?(Ru(),61===u.charCodeAt(lu)?(C="=",lu++):(C=B,0===pu&&$u(g)),C!==B?(Ru(),(F=ju())!==B?(Ru(),iu=A,t=F,A=Uu({names:E.names,values:t})):(lu=A,A=B)):(lu=A,A=B)):(lu=A,A=B),du[r]={nextPos:lu,result:A},A)}function wu(){var A,E,C,F,t,r,e,D=32*lu+2,n=du[D];if(n)return lu=n.nextPos,n.result;if(A=lu,(E=Lu())!==B){for(C=[],F=lu,_u(),46===u.charCodeAt(lu)?(t=".",lu++):(t=B,0===pu&&$u(v)),t!==B?(_u(),(r=Lu())!==B?F=r:(lu=F,F=B)):(lu=F,F=B);F!==B;)C.push(F),F=lu,_u(),46===u.charCodeAt(lu)?(t=".",lu++):(t=B,0===pu&&$u(v)),t!==B?(_u(),(r=Lu())!==B?F=r:(lu=F,F=B)):(lu=F,F=B);iu=A,e=C,A=Uu({type:"QualifiedName",names:[E,...e]})}else lu=A,A=B;return du[D]={nextPos:lu,result:A},A}function ju(){var A,E,C,F,t,r,e,D=32*lu+3,n=du[D];if(n)return lu=n.nextPos,n.result;if(A=lu,(E=Ou())!==B){for(C=[],F=lu,_u(),59===u.charCodeAt(lu)?(t=";",lu++):(t=B,0===pu&&$u(y)),t!==B?(_u(),(r=Ou())!==B?F=r:(lu=F,F=B)):(lu=F,F=B);F!==B;)C.push(F),F=lu,_u(),59===u.charCodeAt(lu)?(t=";",lu++):(t=B,0===pu&&$u(y)),t!==B?(_u(),(r=Ou())!==B?F=r:(lu=F,F=B)):(lu=F,F=B);iu=A,e=C,A=[E,...e]}else lu=A,A=B;return du[D]={nextPos:lu,result:A},A}function Ou(){var A,E,C,F,t=32*lu+4,r=du[t];return r?(lu=r.nextPos,r.result):(A=lu,"$("===u.substr(lu,2)?(E="$(",lu+=2):(E=B,0===pu&&$u(m)),E!==B&&(C=wu())!==B?(41===u.charCodeAt(lu)?(F=")",lu++):(F=B,0===pu&&$u($)),F!==B?A=C:(lu=A,A=B)):(lu=A,A=B),A===B&&(A=function(){var u,A,E,C,F,t=32*lu+5,r=du[t];if(r)return lu=r.nextPos,r.result;if(pu++,u=lu,(A=Zu())!==B){for(E=[],C=lu,_u(),(F=Zu())!==B?C=F:(lu=C,C=B);C!==B;)E.push(C),C=lu,_u(),(F=Zu())!==B?C=F:(lu=C,C=B);iu=u,u=Uu({type:"Literal",value:A+E.join("")})}else lu=u,u=B;return pu--,u===B&&(A=B,0===pu&&$u(S)),du[t]={nextPos:lu,result:u},u}(),A===B&&(A=function(){var A,E,C,F,t,r,e,D,n,o,s=32*lu+6,a=du[s];if(a)return lu=a.nextPos,a.result;if(pu++,A=lu,34===u.charCodeAt(lu)?(E='"',lu++):(E=B,0===pu&&$u(w)),E!==B){if(C=lu,F=lu,t=[],(r=Zu())!==B)for(;r!==B;)t.push(r),r=Zu();else t=B;if(t!==B){if(r=[],e=lu,D=[],(n=qu())!==B)for(;n!==B;)D.push(n),n=qu();else D=B;if(D!==B){if(n=[],(o=Zu())!==B)for(;o!==B;)n.push(o),o=Zu();else n=B;n!==B?e=D=[D,n]:(lu=e,e=B)}else lu=e,e=B;for(;e!==B;){if(r.push(e),e=lu,D=[],(n=qu())!==B)for(;n!==B;)D.push(n),n=qu();else D=B;if(D!==B){if(n=[],(o=Zu())!==B)for(;o!==B;)n.push(o),o=Zu();else n=B;n!==B?e=D=[D,n]:(lu=e,e=B)}else lu=e,e=B}for(e=[],D=qu();D!==B;)e.push(D),D=qu();F=t=[t,r,e]}else lu=F,F=B;(C=F!==B?u.substring(C,lu):F)!==B?(34===u.charCodeAt(lu)?(F='"',lu++):(F=B,0===pu&&$u(w)),F!==B?(iu=A,A=Uu({type:"Literal",value:C})):(lu=A,A=B)):(lu=A,A=B)}else lu=A,A=B;return pu--,A===B&&(E=B,0===pu&&$u(b)),du[s]={nextPos:lu,result:A},A}(),A===B&&(A=function(){var A,E,C,F,t=32*lu+7,r=du[t];return r?(lu=r.nextPos,r.result):(A=lu,91===u.charCodeAt(lu)?(E="[",lu++):(E=B,0===pu&&$u(j)),E!==B&&(C=ju())!==B?(93===u.charCodeAt(lu)?(F="]",lu++):(F=B,0===pu&&$u(O)),F!==B?(iu=A,A=Uu({type:"SubList",values:C})):(lu=A,A=B)):(lu=A,A=B),du[t]={nextPos:lu,result:A},A)}()))),du[t]={nextPos:lu,result:A},A)}function Ru(){var u,A,E=32*lu+8,C=du[E];if(C)return lu=C.nextPos,C.result;for(u=[],(A=qu())===B&&(A=Nu())===B&&(A=Qu());A!==B;)u.push(A),(A=qu())===B&&(A=Nu())===B&&(A=Qu());return du[E]={nextPos:lu,result:u},u}function _u(){var A,E,C,F,t=32*lu+9,r=du[t];if(r)return lu=r.nextPos,r.result;for(A=[],32===u.charCodeAt(lu)?(E=" ",lu++):(E=B,0===pu&&$u(R)),E===B&&(9===u.charCodeAt(lu)?(E="\t",lu++):(E=B,0===pu&&$u(_)),E===B&&(E=lu,92===u.charCodeAt(lu)?(C="\\",lu++):(C=B,0===pu&&$u(L)),C!==B&&(F=Nu())!==B?E=C=[C,F]:(lu=E,E=B),E===B&&(E=Qu())));E!==B;)A.push(E),32===u.charCodeAt(lu)?(E=" ",lu++):(E=B,0===pu&&$u(R)),E===B&&(9===u.charCodeAt(lu)?(E="\t",lu++):(E=B,0===pu&&$u(_)),E===B&&(E=lu,92===u.charCodeAt(lu)?(C="\\",lu++):(C=B,0===pu&&$u(L)),C!==B&&(F=Nu())!==B?E=C=[C,F]:(lu=E,E=B),E===B&&(E=Qu())));return du[t]={nextPos:lu,result:A},A}function Lu(){var u,A,E,C,F=32*lu+10,t=du[F];if(t)return lu=t.nextPos,t.result;if(pu++,u=lu,(A=zu())!==B){for(E=[],C=Mu();C!==B;)E.push(C),C=Mu();iu=u,u=A+E.join("")}else lu=u,u=B;return pu--,u===B&&(A=B,0===pu&&$u(z)),du[F]={nextPos:lu,result:u},u}function zu(){var A,E=32*lu+11,C=du[E];return C?(lu=C.nextPos,C.result):(A=function(){var A,E=32*lu+14,C=du[E];return C?(lu=C.nextPos,C.result):(A=function(){var A,E=32*lu+25,C=du[E];return C?(lu=C.nextPos,C.result):(l.test(u.charAt(lu))?(A=u.charAt(lu),lu++):(A=B,0===pu&&$u(eu)),du[E]={nextPos:lu,result:A},A)}(),A===B&&(A=function(){var A,E=32*lu+21,C=du[E];return C?(lu=C.nextPos,C.result):(o.test(u.charAt(lu))?(A=u.charAt(lu),lu++):(A=B,0===pu&&$u(Fu)),du[E]={nextPos:lu,result:A},A)}(),A===B&&(A=function(){var A,E=32*lu+24,C=du[E];return C?(lu=C.nextPos,C.result):(c.test(u.charAt(lu))?(A=u.charAt(lu),lu++):(A=B,0===pu&&$u(ru)),du[E]={nextPos:lu,result:A},A)}(),A===B&&(A=function(){var A,E=32*lu+22,C=du[E];return C?(lu=C.nextPos,C.result):(s.test(u.charAt(lu))?(A=u.charAt(lu),lu++):(A=B,0===pu&&$u(tu)),du[E]={nextPos:lu,result:A},A)}(),A===B&&(A=function(){var A,E=32*lu+23,C=du[E];return C?(lu=C.nextPos,C.result):(a.test(u.charAt(lu))?(A=u.charAt(lu),lu++):(A=B,0===pu&&$u(Bu)),du[E]={nextPos:lu,result:A},A)}(),A===B&&(A=function(){var A,E=32*lu+29,C=du[E];return C?(lu=C.nextPos,C.result):(x.test(u.charAt(lu))?(A=u.charAt(lu),lu++):(A=B,0===pu&&$u(su)),du[E]={nextPos:lu,result:A},A)}()))))),du[E]={nextPos:lu,result:A},A)}(),A===B&&(95===u.charCodeAt(lu)?(A="_",lu++):(A=B,0===pu&&$u(M))),du[E]={nextPos:lu,result:A},A)}function Mu(){var A,E=32*lu+12,C=du[E];return C?(lu=C.nextPos,C.result):((A=zu())===B&&(A=function(){var A,E=32*lu+15,C=du[E];return C?(lu=C.nextPos,C.result):(A=function(){var A,E=32*lu+27,C=du[E];return C?(lu=C.nextPos,C.result):(f.test(u.charAt(lu))?(A=u.charAt(lu),lu++):(A=B,0===pu&&$u(nu)),du[E]={nextPos:lu,result:A},A)}(),A===B&&(A=function(){var A,E=32*lu+26,C=du[E];return C?(lu=C.nextPos,C.result):(i.test(u.charAt(lu))?(A=u.charAt(lu),lu++):(A=B,0===pu&&$u(Du)),du[E]={nextPos:lu,result:A},A)}()),du[E]={nextPos:lu,result:A},A)}(),A===B&&(A=function(){var A,E=32*lu+28,C=du[E];return C?(lu=C.nextPos,C.result):(h.test(u.charAt(lu))?(A=u.charAt(lu),lu++):(A=B,0===pu&&$u(ou)),du[E]={nextPos:lu,result:A},A)}(),A===B&&(A=function(){var A,E=32*lu+30,C=du[E];return C?(lu=C.nextPos,C.result):(p.test(u.charAt(lu))?(A=u.charAt(lu),lu++):(A=B,0===pu&&$u(au)),du[E]={nextPos:lu,result:A},A)}(),A===B&&(36===u.charCodeAt(lu)?(A="$",lu++):(A=B,0===pu&&$u(Z)),A===B&&(45===u.charCodeAt(lu)?(A="-",lu++):(A=B,0===pu&&$u(k)),A===B&&(8204===u.charCodeAt(lu)?(A="",lu++):(A=B,0===pu&&$u(q)),A===B&&(8205===u.charCodeAt(lu)?(A="",lu++):(A=B,0===pu&&$u(J))))))))),du[E]={nextPos:lu,result:A},A)}function Zu(){var A,E,C=32*lu+13,F=du[C];return F?(lu=F.nextPos,F.result):((A=Mu())===B&&(46===u.charCodeAt(lu)?(A=".",lu++):(A=B,0===pu&&$u(v)),A===B&&(47===u.charCodeAt(lu)?(A="/",lu++):(A=B,0===pu&&$u(N)),A===B&&(42===u.charCodeAt(lu)?(A="*",lu++):(A=B,0===pu&&$u(Q)),A===B&&(A=lu,92===u.charCodeAt(lu)?(E="\\",lu++):(E=B,0===pu&&$u(L)),E!==B&&(iu=A,E="/"),A=E)))),du[C]={nextPos:lu,result:A},A)}function ku(){var A,E=32*lu+16,C=du[E];return C?(lu=C.nextPos,C.result):(u.length>lu?(A=u.charAt(lu),lu++):(A=B,0===pu&&$u(P)),du[E]={nextPos:lu,result:A},A)}function qu(){var A,E=32*lu+17,C=du[E];return C?(lu=C.nextPos,C.result):(pu++,9===u.charCodeAt(lu)?(A="\t",lu++):(A=B,0===pu&&$u(_)),A===B&&(11===u.charCodeAt(lu)?(A="\v",lu++):(A=B,0===pu&&$u(G)),A===B&&(12===u.charCodeAt(lu)?(A="\f",lu++):(A=B,0===pu&&$u(H)),A===B&&(32===u.charCodeAt(lu)?(A=" ",lu++):(A=B,0===pu&&$u(R)),A===B&&(160===u.charCodeAt(lu)?(A=" ",lu++):(A=B,0===pu&&$u(I)),A===B&&(65279===u.charCodeAt(lu)?(A="\ufeff",lu++):(A=B,0===pu&&$u(K)),A===B&&(A=function(){var A,E=32*lu+31,C=du[E];return C?(lu=C.nextPos,C.result):(d.test(u.charAt(lu))?(A=u.charAt(lu),lu++):(A=B,0===pu&&$u(cu)),du[E]={nextPos:lu,result:A},A)}())))))),pu--,A===B&&0===pu&&$u(U),du[E]={nextPos:lu,result:A},A)}function Ju(){var A,E=32*lu+18,C=du[E];return C?(lu=C.nextPos,C.result):(n.test(u.charAt(lu))?(A=u.charAt(lu),lu++):(A=B,0===pu&&$u(T)),du[E]={nextPos:lu,result:A},A)}function Nu(){var A,E=32*lu+19,C=du[E];return C?(lu=C.nextPos,C.result):(pu++,10===u.charCodeAt(lu)?(A="\n",lu++):(A=B,0===pu&&$u(W)),A===B&&("\r\n"===u.substr(lu,2)?(A="\r\n",lu+=2):(A=B,0===pu&&$u(X)),A===B&&(13===u.charCodeAt(lu)?(A="\r",lu++):(A=B,0===pu&&$u(Y)),A===B&&(8232===u.charCodeAt(lu)?(A="\u2028",lu++):(A=B,0===pu&&$u(uu)),A===B&&(8233===u.charCodeAt(lu)?(A="\u2029",lu++):(A=B,0===pu&&$u(Au)))))),pu--,A===B&&0===pu&&$u(V),du[E]={nextPos:lu,result:A},A)}function Qu(){var A,E,C,F,t,r,e=32*lu+20,D=du[e];if(D)return lu=D.nextPos,D.result;if(pu++,A=lu,35===u.charCodeAt(lu)?(E="#",lu++):(E=B,0===pu&&$u(Cu)),E!==B){for(C=[],F=lu,t=lu,pu++,r=Ju(),pu--,r===B?t=void 0:(lu=t,t=B),t!==B&&(r=ku())!==B?F=t=[t,r]:(lu=F,F=B);F!==B;)C.push(F),F=lu,t=lu,pu++,r=Ju(),pu--,r===B?t=void 0:(lu=t,t=B),t!==B&&(r=ku())!==B?F=t=[t,r]:(lu=F,F=B);A=E=[E,C]}else lu=A,A=B;return pu--,A===B&&(E=B,0===pu&&$u(Eu)),du[e]={nextPos:lu,result:A},A}function Uu(u){return{...u,source:mu(iu,lu).source}}if((E=D())!==B&&lu===u.length)return E;throw E!==B&&lu<u.length&&$u({type:"end"}),C=xu,F=hu<u.length?u.charAt(hu):null,t=hu<u.length?mu(hu,hu+1):mu(hu,hu),new peg$SyntaxError(peg$SyntaxError.buildMessage(C,F),C,F,t)}peg$subclass(peg$SyntaxError,Error),peg$SyntaxError.prototype.format=function(u){var A="Error: "+this.message;if(this.location){var E,C=null;for(E=0;E<u.length;E++)if(u[E].source===this.location.source){C=u[E].text.split(/\r\n|\n|\r/g);break}var F=this.location.start,t=this.location.source+":"+F.line+":"+F.column;if(C){var B=this.location.end,r=peg$padEnd("",F.line.toString().length),e=C[F.line-1],D=F.line===B.line?B.column:e.length+1;A+="\n --\x3e "+t+"\n"+r+" |\n"+F.line+" | "+e+"\n"+r+" | "+peg$padEnd("",F.column-1)+peg$padEnd("",D-F.column,"^")}else A+="\n at "+t}return A},peg$SyntaxError.buildMessage=function(u,A){var E={literal:function(u){return'"'+F(u.text)+'"'},class:function(u){var A=u.parts.map((function(u){return Array.isArray(u)?t(u[0])+"-"+t(u[1]):t(u)}));return"["+(u.inverted?"^":"")+A+"]"},any:function(){return"any character"},end:function(){return"end of input"},other:function(u){return u.description}};function C(u){return u.charCodeAt(0).toString(16).toUpperCase()}function F(u){return u.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(u){return"\\x0"+C(u)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(u){return"\\x"+C(u)}))}function t(u){return u.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(u){return"\\x0"+C(u)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(u){return"\\x"+C(u)}))}function B(u){return E[u.type](u)}return"Expected "+function(u){var A,E,C=u.map(B);if(C.sort(),C.length>0){for(A=1,E=1;A<C.length;A++)C[A-1]!==C[A]&&(C[E]=C[A],E++);C.length=E}switch(C.length){case 1:return C[0];case 2:return C[0]+" or "+C[1];default:return C.slice(0,-1).join(", ")+", or "+C[C.length-1]}}(u)+" but "+function(u){return u?'"'+F(u)+'"':"end of input"}(A)+" found."};
|
|
7268
|
-
// EXTERNAL MODULE: ./node_modules/xml2js/lib/xml2js.js
|
|
7269
|
-
var xml2js = __webpack_require__(5055);
|
|
7270
7320
|
;// CONCATENATED MODULE: ./src/manifest.js
|
|
7271
7321
|
|
|
7272
7322
|
|
|
@@ -7288,27 +7338,11 @@ function manifestProducts(manifest) {
|
|
|
7288
7338
|
manifest["iq:manifest"]["iq:application"] ||
|
|
7289
7339
|
manifest["iq:manifest"]["iq:barrel"];
|
|
7290
7340
|
return app[0]["iq:products"][0]["iq:product"]
|
|
7291
|
-
.map((p) => p
|
|
7341
|
+
.map((p) => p.$.id)
|
|
7292
7342
|
.sort()
|
|
7293
7343
|
.filter((p, i, a) => !i || p !== a[i - 1]);
|
|
7294
7344
|
}
|
|
7295
7345
|
|
|
7296
|
-
async function getDeviceInfo() {
|
|
7297
|
-
const files = await (0,external_util_cjs_namespaceObject.globa)(`${external_util_cjs_namespaceObject.connectiq}/Devices/*/compiler.json`);
|
|
7298
|
-
return Promise.all(
|
|
7299
|
-
files.map((file) => {
|
|
7300
|
-
return promises_namespaceObject.readFile(file).then((data) => {
|
|
7301
|
-
const { deviceId, appTypes, deviceFamily } = JSON.parse(
|
|
7302
|
-
data.toString()
|
|
7303
|
-
);
|
|
7304
|
-
return [deviceId, { appTypes, deviceFamily }];
|
|
7305
|
-
});
|
|
7306
|
-
})
|
|
7307
|
-
).then((info) => {
|
|
7308
|
-
return Object.fromEntries(info);
|
|
7309
|
-
});
|
|
7310
|
-
}
|
|
7311
|
-
|
|
7312
7346
|
async function checkManifest(manifest, products) {
|
|
7313
7347
|
let ok = true;
|
|
7314
7348
|
if (!manifest["iq:manifest"]["$"]["xmlns:iq"]) {
|
|
@@ -7320,6 +7354,11 @@ async function checkManifest(manifest, products) {
|
|
|
7320
7354
|
if (!app) return ok;
|
|
7321
7355
|
|
|
7322
7356
|
const elm = app[0];
|
|
7357
|
+
const id = elm.$.id;
|
|
7358
|
+
if (id.length < 32 || !/^[-_0-9a-f.]+$/.test(id)) {
|
|
7359
|
+
ok = false;
|
|
7360
|
+
elm.$.id = "08070f9d-8b4e-40a4-9c49-fe67a2a55dec";
|
|
7361
|
+
}
|
|
7323
7362
|
const type = elm.$.type.replace(/-/, "").toLowerCase();
|
|
7324
7363
|
const deviceInfo = await getDeviceInfo();
|
|
7325
7364
|
const allowedProducts = products.sort().filter(
|
|
@@ -7365,6 +7404,54 @@ async function checkManifest(manifest, products) {
|
|
|
7365
7404
|
|
|
7366
7405
|
|
|
7367
7406
|
|
|
7407
|
+
|
|
7408
|
+
|
|
7409
|
+
async function default_jungle() {
|
|
7410
|
+
const assignments = [];
|
|
7411
|
+
const devices = await getDeviceInfo();
|
|
7412
|
+
const languages = await getLanguages();
|
|
7413
|
+
const literal = (value) => ({ type: "Literal", value });
|
|
7414
|
+
const qname = (name) => ({ type: "QualifiedName", names: name.split(".") });
|
|
7415
|
+
const assign = (name, values) =>
|
|
7416
|
+
assignments.push({ names: name.split("."), values });
|
|
7417
|
+
const rassign = (name, values, base) => {
|
|
7418
|
+
assign(name, base ? [qname(name)].concat(values) : values);
|
|
7419
|
+
};
|
|
7420
|
+
const rezAndLang = (id, rez, base) => {
|
|
7421
|
+
if (base) {
|
|
7422
|
+
assign(id, [qname(base)]);
|
|
7423
|
+
}
|
|
7424
|
+
rassign(`${id}.resourcePath`, [literal(rez)], base);
|
|
7425
|
+
|
|
7426
|
+
languages.forEach((l) =>
|
|
7427
|
+
rassign(`${id}.lang.${l.id}`, [literal(`${rez}-${l.id}`)], base)
|
|
7428
|
+
);
|
|
7429
|
+
};
|
|
7430
|
+
const done = {};
|
|
7431
|
+
|
|
7432
|
+
assign("base.sourcePath", [literal("./**.mc")]);
|
|
7433
|
+
rezAndLang("base", "resources");
|
|
7434
|
+
Object.entries(devices).forEach(([deviceId, { deviceFamily }]) => {
|
|
7435
|
+
const match = deviceFamily.match(/^(\w+)-\d+x\d+/);
|
|
7436
|
+
if (!match) {
|
|
7437
|
+
throw new Error(
|
|
7438
|
+
`Strange deviceFamily (${deviceFamily}) for device ${deviceId}`
|
|
7439
|
+
);
|
|
7440
|
+
}
|
|
7441
|
+
const shape = match[1];
|
|
7442
|
+
if (!(0,external_api_cjs_namespaceObject.hasProperty)(done, shape)) {
|
|
7443
|
+
rezAndLang(shape, `resources-${shape}`, "base");
|
|
7444
|
+
done[shape] = true;
|
|
7445
|
+
}
|
|
7446
|
+
if (!(0,external_api_cjs_namespaceObject.hasProperty)(done, deviceFamily)) {
|
|
7447
|
+
rezAndLang(deviceFamily, `resources-${deviceFamily}`, shape);
|
|
7448
|
+
done[deviceFamily] = true;
|
|
7449
|
+
}
|
|
7450
|
+
rezAndLang(deviceId, `resources-${deviceId}`, deviceFamily);
|
|
7451
|
+
});
|
|
7452
|
+
return process_assignments(assignments, {});
|
|
7453
|
+
}
|
|
7454
|
+
|
|
7368
7455
|
function process_assignments(assignments, current) {
|
|
7369
7456
|
return assignments.reduce((state, a) => {
|
|
7370
7457
|
const { node, dot, dotnames } = a.names.reduce(
|
|
@@ -7382,30 +7469,30 @@ function process_assignments(assignments, current) {
|
|
|
7382
7469
|
);
|
|
7383
7470
|
// an assignment to a node overwrites its old value
|
|
7384
7471
|
Object.keys(node).forEach((k) => delete node[k]);
|
|
7385
|
-
|
|
7386
|
-
|
|
7387
|
-
|
|
7388
|
-
|
|
7389
|
-
|
|
7390
|
-
|
|
7391
|
-
|
|
7392
|
-
|
|
7393
|
-
|
|
7394
|
-
|
|
7395
|
-
|
|
7396
|
-
|
|
7397
|
-
|
|
7398
|
-
|
|
7399
|
-
|
|
7400
|
-
|
|
7401
|
-
|
|
7402
|
-
|
|
7403
|
-
|
|
7404
|
-
|
|
7472
|
+
const process_list = (values) => {
|
|
7473
|
+
for (let i = values.length; i--; ) {
|
|
7474
|
+
const v = values[i];
|
|
7475
|
+
if (
|
|
7476
|
+
v.type == "QualifiedName" &&
|
|
7477
|
+
v.names.every((n, i) => n === a.names[i])
|
|
7478
|
+
) {
|
|
7479
|
+
values.splice(
|
|
7480
|
+
i,
|
|
7481
|
+
1,
|
|
7482
|
+
...(dot
|
|
7483
|
+
? dot.map((v) =>
|
|
7484
|
+
v.type == "QualifiedName"
|
|
7485
|
+
? { ...v, names: v.names.concat(dotnames) }
|
|
7486
|
+
: v
|
|
7487
|
+
)
|
|
7488
|
+
: [])
|
|
7489
|
+
);
|
|
7490
|
+
} else if (v.type == "SubList") {
|
|
7491
|
+
process_list(v.values);
|
|
7405
7492
|
}
|
|
7406
|
-
}
|
|
7407
|
-
|
|
7408
|
-
|
|
7493
|
+
}
|
|
7494
|
+
};
|
|
7495
|
+
process_list(a.values);
|
|
7409
7496
|
if (
|
|
7410
7497
|
a.names.length === 1 &&
|
|
7411
7498
|
a.values.length === 1 &&
|
|
@@ -7472,14 +7559,11 @@ async function parse_one(file) {
|
|
|
7472
7559
|
// return a jungle object with all local variables resolved,
|
|
7473
7560
|
// but all qualifier references left unresolved.
|
|
7474
7561
|
async function process_jungles(sources) {
|
|
7475
|
-
const sdk = await (0,external_util_cjs_namespaceObject.getSdkPath)();
|
|
7476
|
-
|
|
7477
7562
|
if (!Array.isArray(sources)) {
|
|
7478
7563
|
sources = [sources];
|
|
7479
7564
|
}
|
|
7480
|
-
const
|
|
7481
|
-
const
|
|
7482
|
-
const state = {};
|
|
7565
|
+
const results = await Promise.all(sources.map(parse_one));
|
|
7566
|
+
const state = await default_jungle();
|
|
7483
7567
|
results.forEach((r) => process_assignments(r, state));
|
|
7484
7568
|
return state;
|
|
7485
7569
|
}
|
|
@@ -7579,12 +7663,15 @@ async function resolve_literals(qualifier, default_source) {
|
|
|
7579
7663
|
(
|
|
7580
7664
|
await Promise.all(
|
|
7581
7665
|
literals.map(async (v) => {
|
|
7666
|
+
if (v.type == "SubList") {
|
|
7667
|
+
return resolve_file_list(v.values);
|
|
7668
|
+
}
|
|
7582
7669
|
let resolved = resolve_filename(v, default_source);
|
|
7583
7670
|
if (/[*?\[\]\{\}]/.test(resolved)) {
|
|
7584
7671
|
// Jungle files can contain "./**.mc" which is supposed to match
|
|
7585
7672
|
// any mc file under "./". The standard way to express that
|
|
7586
7673
|
// is "./**/*.mc", which is what glob expects, so translate.
|
|
7587
|
-
resolved = resolved.replace(
|
|
7674
|
+
resolved = resolved.replace(/[\\\/]\*\*([^\\\/])/g, "/**/*$1");
|
|
7588
7675
|
const match = await (0,external_util_cjs_namespaceObject.globa)(resolved);
|
|
7589
7676
|
return match.length ? resolved : null;
|
|
7590
7677
|
} else {
|
|
@@ -7627,6 +7714,87 @@ async function resolve_literals(qualifier, default_source) {
|
|
|
7627
7714
|
resolve_literal_list(qualifier, "annotations");
|
|
7628
7715
|
}
|
|
7629
7716
|
|
|
7717
|
+
async function find_build_instructions_in_resource(file) {
|
|
7718
|
+
const data = await promises_namespaceObject.readFile(file);
|
|
7719
|
+
const rez = await (0,xml2js.parseStringPromise)(data).catch(() => ({}));
|
|
7720
|
+
if (rez.build && rez.build.exclude) {
|
|
7721
|
+
const dir = external_path_namespaceObject.dirname(file);
|
|
7722
|
+
const sourceExcludes = rez.build.exclude
|
|
7723
|
+
.map((e) => e.$.file)
|
|
7724
|
+
.filter((f) => f != null)
|
|
7725
|
+
.map((f) => external_path_namespaceObject.resolve(dir, f).replace(/\\/g, "/"));
|
|
7726
|
+
|
|
7727
|
+
const filePatterns = rez.build.exclude
|
|
7728
|
+
.map((e) => e.$.dir)
|
|
7729
|
+
.filter((f) => f != null)
|
|
7730
|
+
.map((f) => external_path_namespaceObject.join(dir, f, "**", "*.mc").replace(/\\/g, "/"));
|
|
7731
|
+
if (filePatterns.length) {
|
|
7732
|
+
const files = (
|
|
7733
|
+
await Promise.all(filePatterns.map((p) => (0,external_util_cjs_namespaceObject.globa)(p)))
|
|
7734
|
+
).flat();
|
|
7735
|
+
sourceExcludes.push(...files);
|
|
7736
|
+
}
|
|
7737
|
+
const excludeAnnotations = rez.build.exclude
|
|
7738
|
+
.map((e) => e.$.annotation)
|
|
7739
|
+
.filter((f) => f != null);
|
|
7740
|
+
return { sourceExcludes, excludeAnnotations };
|
|
7741
|
+
}
|
|
7742
|
+
}
|
|
7743
|
+
async function find_build_instructions(targets) {
|
|
7744
|
+
const resourceGroups = {};
|
|
7745
|
+
await Promise.all(
|
|
7746
|
+
targets.map(async (p) => {
|
|
7747
|
+
if (!p.qualifier.resourcePath) return;
|
|
7748
|
+
const key = p.qualifier.resourcePath.join(";");
|
|
7749
|
+
if (!(0,external_api_cjs_namespaceObject.hasProperty)(resourceGroups, key)) {
|
|
7750
|
+
resourceGroups[key] = {
|
|
7751
|
+
resourcePath: p.qualifier.resourcePath,
|
|
7752
|
+
products: [],
|
|
7753
|
+
};
|
|
7754
|
+
const paths = (
|
|
7755
|
+
await Promise.all(
|
|
7756
|
+
p.qualifier.resourcePath.map((pattern) =>
|
|
7757
|
+
(0,external_util_cjs_namespaceObject.globa)(pattern, { mark: true })
|
|
7758
|
+
)
|
|
7759
|
+
)
|
|
7760
|
+
).flat();
|
|
7761
|
+
|
|
7762
|
+
const sourceExcludes = [];
|
|
7763
|
+
const excludeAnnotations = [];
|
|
7764
|
+
const resourceFiles = await Promise.all(
|
|
7765
|
+
paths.map((path) =>
|
|
7766
|
+
path.endsWith("/") ? (0,external_util_cjs_namespaceObject.globa)(`${path}**/*.xml`, { mark: true }) : path
|
|
7767
|
+
)
|
|
7768
|
+
);
|
|
7769
|
+
const buildInstructions = await Promise.all(
|
|
7770
|
+
resourceFiles
|
|
7771
|
+
.flat()
|
|
7772
|
+
.filter((file) => !file.endsWith("/"))
|
|
7773
|
+
.map((file) => find_build_instructions_in_resource(file))
|
|
7774
|
+
);
|
|
7775
|
+
buildInstructions
|
|
7776
|
+
.filter((i) => i != null)
|
|
7777
|
+
.map((i) => {
|
|
7778
|
+
if (i.sourceExcludes) sourceExcludes.push(...i.sourceExcludes);
|
|
7779
|
+
if (i.excludeAnnotations)
|
|
7780
|
+
excludeAnnotations.push(...i.excludeAnnotations);
|
|
7781
|
+
});
|
|
7782
|
+
if (sourceExcludes.length) {
|
|
7783
|
+
p.qualifier.sourceExcludes = sourceExcludes;
|
|
7784
|
+
}
|
|
7785
|
+
if (excludeAnnotations.length) {
|
|
7786
|
+
if (p.qualifier.excludeAnnotations) {
|
|
7787
|
+
p.qualifier.excludeAnnotations.push(excludeAnnotations);
|
|
7788
|
+
} else {
|
|
7789
|
+
p.qualifier.excludeAnnotations = excludeAnnotations;
|
|
7790
|
+
}
|
|
7791
|
+
}
|
|
7792
|
+
}
|
|
7793
|
+
resourceGroups[key].products.push(p.product);
|
|
7794
|
+
})
|
|
7795
|
+
);
|
|
7796
|
+
}
|
|
7797
|
+
|
|
7630
7798
|
function identify_optimizer_groups(targets, options) {
|
|
7631
7799
|
const groups = {};
|
|
7632
7800
|
let key = 0;
|
|
@@ -7679,8 +7847,13 @@ function identify_optimizer_groups(targets, options) {
|
|
|
7679
7847
|
: null;
|
|
7680
7848
|
|
|
7681
7849
|
targets.forEach((target) => {
|
|
7682
|
-
let {
|
|
7683
|
-
|
|
7850
|
+
let {
|
|
7851
|
+
sourcePath,
|
|
7852
|
+
sourceExcludes,
|
|
7853
|
+
barrelPath,
|
|
7854
|
+
excludeAnnotations,
|
|
7855
|
+
annotations,
|
|
7856
|
+
} = target.qualifier;
|
|
7684
7857
|
if (excludeAnnotations && ignoredExcludeAnnotations) {
|
|
7685
7858
|
excludeAnnotations = getStrsWithIgnore(
|
|
7686
7859
|
excludeAnnotations,
|
|
@@ -7699,6 +7872,7 @@ function identify_optimizer_groups(targets, options) {
|
|
|
7699
7872
|
}
|
|
7700
7873
|
const optimizerConfig = {
|
|
7701
7874
|
sourcePath,
|
|
7875
|
+
sourceExcludes,
|
|
7702
7876
|
barrelPath,
|
|
7703
7877
|
excludeAnnotations,
|
|
7704
7878
|
annotations,
|
|
@@ -7724,12 +7898,12 @@ async function get_jungle(jungles, options) {
|
|
|
7724
7898
|
jungles = jungles
|
|
7725
7899
|
.split(";")
|
|
7726
7900
|
.map((jungle) => external_path_namespaceObject.resolve(options.workspace || "./", jungle));
|
|
7727
|
-
const
|
|
7901
|
+
const state = await process_jungles(jungles);
|
|
7728
7902
|
// apparently square_watch is an alias for rectangle_watch
|
|
7729
|
-
|
|
7903
|
+
state["square_watch"] = state["rectangle_watch"];
|
|
7730
7904
|
const manifest_node = resolve_node(
|
|
7731
|
-
|
|
7732
|
-
resolve_node_by_path(
|
|
7905
|
+
state,
|
|
7906
|
+
resolve_node_by_path(state, ["project", "manifest"])
|
|
7733
7907
|
);
|
|
7734
7908
|
if (!manifest_node) throw new Error("No manifest found!");
|
|
7735
7909
|
const manifest = resolve_filename(manifest_node[0]);
|
|
@@ -7737,22 +7911,23 @@ async function get_jungle(jungles, options) {
|
|
|
7737
7911
|
const targets = [];
|
|
7738
7912
|
let promise = Promise.resolve();
|
|
7739
7913
|
const add_one = (product, shape) => {
|
|
7740
|
-
const qualifier = resolve_node(
|
|
7914
|
+
const qualifier = resolve_node(state, state[product]);
|
|
7741
7915
|
if (!qualifier) return;
|
|
7742
7916
|
promise = promise
|
|
7743
7917
|
.then(() => resolve_literals(qualifier, manifest))
|
|
7744
7918
|
.then(() => targets.push({ product, qualifier, shape }));
|
|
7745
7919
|
};
|
|
7746
7920
|
manifestProducts(xml).forEach((product) => {
|
|
7747
|
-
if ((0,external_api_cjs_namespaceObject.hasProperty)(
|
|
7921
|
+
if ((0,external_api_cjs_namespaceObject.hasProperty)(state, product) && state[product].products) {
|
|
7748
7922
|
// this was something like round_watch. Add all the corresponding
|
|
7749
7923
|
// products.
|
|
7750
|
-
|
|
7924
|
+
state[product].products.forEach((p) => add_one(p, product));
|
|
7751
7925
|
} else {
|
|
7752
7926
|
add_one(product);
|
|
7753
7927
|
}
|
|
7754
7928
|
});
|
|
7755
7929
|
await promise;
|
|
7930
|
+
await find_build_instructions(targets);
|
|
7756
7931
|
identify_optimizer_groups(targets, options);
|
|
7757
7932
|
return { manifest, targets, xml };
|
|
7758
7933
|
}
|
|
@@ -7765,9 +7940,9 @@ const external_child_process_namespaceObject = require("child_process");
|
|
|
7765
7940
|
|
|
7766
7941
|
|
|
7767
7942
|
function launchSimulator() {
|
|
7768
|
-
return
|
|
7943
|
+
return getSdkPath().then((sdk) => {
|
|
7769
7944
|
const child = (0,external_child_process_namespaceObject.execFile)(
|
|
7770
|
-
external_path_namespaceObject.resolve(sdk, "bin",
|
|
7945
|
+
external_path_namespaceObject.resolve(sdk, "bin", isWin ? "simulator" : "connectiq")
|
|
7771
7946
|
);
|
|
7772
7947
|
child.unref();
|
|
7773
7948
|
});
|
|
@@ -8190,6 +8365,7 @@ async function optimizeMonkeyC(fileNames, buildConfig) {
|
|
|
8190
8365
|
(sc.superClass && checkInherited(sc, name))
|
|
8191
8366
|
);
|
|
8192
8367
|
|
|
8368
|
+
state.localsStack = [{}];
|
|
8193
8369
|
state.exposed = {};
|
|
8194
8370
|
state.calledFunctions = {};
|
|
8195
8371
|
state.pre = (node) => {
|
|
@@ -8239,8 +8415,74 @@ async function optimizeMonkeyC(fileNames, buildConfig) {
|
|
|
8239
8415
|
|
|
8240
8416
|
case "EnumDeclaration":
|
|
8241
8417
|
return false;
|
|
8242
|
-
case "
|
|
8418
|
+
case "ForStatement": {
|
|
8419
|
+
const map = state.localsStack.slice(-1).pop().map;
|
|
8420
|
+
if (map) {
|
|
8421
|
+
state.localsStack.push({ node, map: { ...map } });
|
|
8422
|
+
}
|
|
8423
|
+
break;
|
|
8424
|
+
}
|
|
8425
|
+
case "VariableDeclarator": {
|
|
8426
|
+
const locals = state.localsStack.slice(-1).pop();
|
|
8427
|
+
const { map } = locals;
|
|
8428
|
+
if (map) {
|
|
8429
|
+
if ((0,external_api_cjs_namespaceObject.hasProperty)(map, node.id.name)) {
|
|
8430
|
+
// We already have a variable with this name in scope
|
|
8431
|
+
// Recent monkeyc compilers complain, so rename it
|
|
8432
|
+
let suffix = 0;
|
|
8433
|
+
let node_name = node.id.name;
|
|
8434
|
+
const match = node_name.match(/^pmcr_(.*)_(\d+)$/);
|
|
8435
|
+
if (match) {
|
|
8436
|
+
node_name = match[1];
|
|
8437
|
+
suffix = parseInt(match[2], 10) + 1;
|
|
8438
|
+
}
|
|
8439
|
+
if (!locals.inners) {
|
|
8440
|
+
// find all the names declared in this scope, to avoid
|
|
8441
|
+
// more conflicts
|
|
8442
|
+
locals.inners = {};
|
|
8443
|
+
(0,external_api_cjs_namespaceObject.traverseAst)(locals.node, (node) => {
|
|
8444
|
+
if (node.type === "VariableDeclarator") {
|
|
8445
|
+
locals.inners[node.id.name] = true;
|
|
8446
|
+
}
|
|
8447
|
+
});
|
|
8448
|
+
}
|
|
8449
|
+
let name;
|
|
8450
|
+
while (true) {
|
|
8451
|
+
name = `pmcr_${node_name}_${suffix}`;
|
|
8452
|
+
if (
|
|
8453
|
+
!(0,external_api_cjs_namespaceObject.hasProperty)(map, name) &&
|
|
8454
|
+
!(0,external_api_cjs_namespaceObject.hasProperty)(locals.inners, name)
|
|
8455
|
+
) {
|
|
8456
|
+
// we also need to ensure that we don't hide the name of
|
|
8457
|
+
// an outer module, class, function, enum or variable,
|
|
8458
|
+
// since someone might want to access it from this scope.
|
|
8459
|
+
let ok = false;
|
|
8460
|
+
let i;
|
|
8461
|
+
for (i = state.stack.length; i--; ) {
|
|
8462
|
+
const elm = state.stack[i];
|
|
8463
|
+
if (ok) {
|
|
8464
|
+
if ((0,external_api_cjs_namespaceObject.hasProperty)(elm.decls, name)) {
|
|
8465
|
+
break;
|
|
8466
|
+
}
|
|
8467
|
+
} else if (elm.node.type === "FunctionDeclaration") {
|
|
8468
|
+
ok = true;
|
|
8469
|
+
}
|
|
8470
|
+
}
|
|
8471
|
+
if (i < 0) {
|
|
8472
|
+
break;
|
|
8473
|
+
}
|
|
8474
|
+
}
|
|
8475
|
+
suffix++;
|
|
8476
|
+
}
|
|
8477
|
+
map[node.id.name] = name;
|
|
8478
|
+
map[name] = true;
|
|
8479
|
+
node.id.name = name;
|
|
8480
|
+
} else {
|
|
8481
|
+
map[node.id.name] = true;
|
|
8482
|
+
}
|
|
8483
|
+
}
|
|
8243
8484
|
return ["init"];
|
|
8485
|
+
}
|
|
8244
8486
|
case "UnaryExpression":
|
|
8245
8487
|
if (node.operator == ":") {
|
|
8246
8488
|
// If we produce a Symbol, for a given name,
|
|
@@ -8255,6 +8497,15 @@ async function optimizeMonkeyC(fileNames, buildConfig) {
|
|
|
8255
8497
|
}
|
|
8256
8498
|
break;
|
|
8257
8499
|
case "Identifier": {
|
|
8500
|
+
const map = state.localsStack.slice(-1).pop().map;
|
|
8501
|
+
if (map) {
|
|
8502
|
+
if ((0,external_api_cjs_namespaceObject.hasProperty)(map, node.name)) {
|
|
8503
|
+
const name = map[node.name];
|
|
8504
|
+
if (name !== true) {
|
|
8505
|
+
node.name = name;
|
|
8506
|
+
}
|
|
8507
|
+
}
|
|
8508
|
+
}
|
|
8258
8509
|
if ((0,external_api_cjs_namespaceObject.hasProperty)(state.index, node.name)) {
|
|
8259
8510
|
if (!lookupAndReplace(node)) {
|
|
8260
8511
|
state.exposed[node.name] = true;
|
|
@@ -8275,7 +8526,20 @@ async function optimizeMonkeyC(fileNames, buildConfig) {
|
|
|
8275
8526
|
return ["object"];
|
|
8276
8527
|
}
|
|
8277
8528
|
break;
|
|
8529
|
+
case "BlockStatement": {
|
|
8530
|
+
const map = state.localsStack.slice(-1).pop().map;
|
|
8531
|
+
if (map) {
|
|
8532
|
+
state.localsStack.push({
|
|
8533
|
+
node,
|
|
8534
|
+
map: { ...map },
|
|
8535
|
+
});
|
|
8536
|
+
}
|
|
8537
|
+
break;
|
|
8538
|
+
}
|
|
8278
8539
|
case "FunctionDeclaration": {
|
|
8540
|
+
const map = {};
|
|
8541
|
+
node.params && node.params.forEach((p) => (map[p.name] = true));
|
|
8542
|
+
state.localsStack.push({ node, map });
|
|
8279
8543
|
const [parent] = state.stack.slice(-2);
|
|
8280
8544
|
if (parent.type == "ClassDeclaration" && !maybeCalled(node)) {
|
|
8281
8545
|
let used = false;
|
|
@@ -8295,6 +8559,9 @@ async function optimizeMonkeyC(fileNames, buildConfig) {
|
|
|
8295
8559
|
}
|
|
8296
8560
|
};
|
|
8297
8561
|
state.post = (node) => {
|
|
8562
|
+
if (state.localsStack.slice(-1).pop().node === node) {
|
|
8563
|
+
state.localsStack.pop();
|
|
8564
|
+
}
|
|
8298
8565
|
const opt = optimizeNode(node);
|
|
8299
8566
|
if (opt) {
|
|
8300
8567
|
replace(node, opt);
|
|
@@ -8443,6 +8710,14 @@ async function optimizeMonkeyC(fileNames, buildConfig) {
|
|
|
8443
8710
|
|
|
8444
8711
|
|
|
8445
8712
|
|
|
8713
|
+
|
|
8714
|
+
function relative_path_no_dotdot(relative) {
|
|
8715
|
+
return relative.replace(
|
|
8716
|
+
/^(\.\.[\\\/])+/,
|
|
8717
|
+
(str) => `__${"dot".repeat(str.length / 3)}__${str.slice(-1)}`
|
|
8718
|
+
);
|
|
8719
|
+
}
|
|
8720
|
+
|
|
8446
8721
|
async function getVSCodeSettings(path) {
|
|
8447
8722
|
try {
|
|
8448
8723
|
const settings = await promises_namespaceObject.readFile(path);
|
|
@@ -8470,7 +8745,7 @@ async function getConfig(options) {
|
|
|
8470
8745
|
if (config[key]) return;
|
|
8471
8746
|
if (!promise) {
|
|
8472
8747
|
promise = Promise.resolve()
|
|
8473
|
-
.then(() => getVSCodeSettings(`${
|
|
8748
|
+
.then(() => getVSCodeSettings(`${appSupport}/Code/User/settings.json`))
|
|
8474
8749
|
.then((globals) =>
|
|
8475
8750
|
getVSCodeSettings(`${config.workspace}/.vscode/settings.json`).then(
|
|
8476
8751
|
(locals) => ({ ...globals, ...locals })
|
|
@@ -8523,6 +8798,16 @@ async function generateOptimizedProject(options) {
|
|
|
8523
8798
|
const buildConfigs = {};
|
|
8524
8799
|
const products = {};
|
|
8525
8800
|
let pick_one = config.products ? config.products.indexOf("pick-one") : -1;
|
|
8801
|
+
if (config.skipOptimization) {
|
|
8802
|
+
if (pick_one >= 0) {
|
|
8803
|
+
options.products = [...options.products];
|
|
8804
|
+
options.products[pick_one] = targets[0].product;
|
|
8805
|
+
}
|
|
8806
|
+
return {
|
|
8807
|
+
jungleFiles: config.jungleFiles,
|
|
8808
|
+
program: external_path_namespaceObject.basename(external_path_namespaceObject.dirname(manifest)),
|
|
8809
|
+
};
|
|
8810
|
+
}
|
|
8526
8811
|
targets.forEach((p) => {
|
|
8527
8812
|
const key = p.group.key + (config.releaseBuild ? "-release" : "-debug");
|
|
8528
8813
|
if (!(0,external_api_cjs_namespaceObject.hasProperty)(buildConfigs, key)) {
|
|
@@ -8539,12 +8824,15 @@ async function generateOptimizedProject(options) {
|
|
|
8539
8824
|
}
|
|
8540
8825
|
if (
|
|
8541
8826
|
pick_one >= 0 ||
|
|
8542
|
-
!
|
|
8543
|
-
|
|
8544
|
-
(p.shape &&
|
|
8827
|
+
!options.products ||
|
|
8828
|
+
options.products.includes(p.product) ||
|
|
8829
|
+
(p.shape && options.products.includes(p.shape))
|
|
8545
8830
|
) {
|
|
8546
8831
|
if (pick_one >= 0) {
|
|
8547
|
-
|
|
8832
|
+
// don't modify the original array since it may be shared
|
|
8833
|
+
// (and *is* shared when we're called from test.js)
|
|
8834
|
+
options.products = [...options.products];
|
|
8835
|
+
options.products[pick_one] = p.product;
|
|
8548
8836
|
pick_one = -1;
|
|
8549
8837
|
}
|
|
8550
8838
|
if (!buildConfigs[key]) {
|
|
@@ -8561,10 +8849,12 @@ async function generateOptimizedProject(options) {
|
|
|
8561
8849
|
await promises_namespaceObject.mkdir(jungle_dir, { recursive: true });
|
|
8562
8850
|
const relative_path = (s) => external_path_namespaceObject.relative(jungle_dir, s);
|
|
8563
8851
|
let relative_manifest = relative_path(manifest);
|
|
8564
|
-
const manifestOk =
|
|
8565
|
-
|
|
8566
|
-
|
|
8567
|
-
|
|
8852
|
+
const manifestOk =
|
|
8853
|
+
!config.checkManifest ||
|
|
8854
|
+
(await checkManifest(
|
|
8855
|
+
xml,
|
|
8856
|
+
targets.map((t) => t.product)
|
|
8857
|
+
));
|
|
8568
8858
|
const promises = Object.keys(buildConfigs)
|
|
8569
8859
|
.sort()
|
|
8570
8860
|
.map((key) => {
|
|
@@ -8596,27 +8886,27 @@ async function generateOptimizedProject(options) {
|
|
|
8596
8886
|
}
|
|
8597
8887
|
|
|
8598
8888
|
const parts = [`project.manifest=${relative_manifest}`];
|
|
8599
|
-
const process_field = (prefix, base, name,
|
|
8600
|
-
base[name]
|
|
8601
|
-
|
|
8602
|
-
|
|
8603
|
-
|
|
8604
|
-
|
|
8605
|
-
|
|
8889
|
+
const process_field = (prefix, base, name, mapper) => {
|
|
8890
|
+
if (!base[name]) return;
|
|
8891
|
+
const map_one = (s) => (mapper ? mapper(s) : s);
|
|
8892
|
+
const map = (s) =>
|
|
8893
|
+
Array.isArray(s) ? `[${s.map(map_one).join(";")}]` : map_one(s);
|
|
8894
|
+
parts.push(`${prefix}${name} = ${base[name].map(map).join(";")}`);
|
|
8895
|
+
};
|
|
8606
8896
|
targets.forEach((jungle) => {
|
|
8607
8897
|
const { product, qualifier, group } = jungle;
|
|
8608
8898
|
const prefix = `${product}.`;
|
|
8609
8899
|
process_field(prefix, qualifier, "sourcePath", (s) =>
|
|
8610
|
-
external_path_namespaceObject.join(group.dir, external_path_namespaceObject.relative(workspace, s))
|
|
8611
|
-
.replace(/(
|
|
8900
|
+
external_path_namespaceObject.join(group.dir, relative_path_no_dotdot(external_path_namespaceObject.relative(workspace, s)))
|
|
8901
|
+
.replace(/([\\\/]\*\*)[\\\/]\*/g, "$1")
|
|
8612
8902
|
);
|
|
8613
8903
|
process_field(prefix, qualifier, "resourcePath", relative_path);
|
|
8614
8904
|
process_field(prefix, qualifier, "barrelPath", relative_path);
|
|
8615
8905
|
process_field(prefix, qualifier, "annotations");
|
|
8616
8906
|
process_field(prefix, qualifier, "excludeAnnotations");
|
|
8617
8907
|
if (qualifier.lang) {
|
|
8618
|
-
Object.
|
|
8619
|
-
process_field(`${prefix}lang.`,
|
|
8908
|
+
Object.keys(qualifier.lang).forEach((key) => {
|
|
8909
|
+
process_field(`${prefix}lang.`, qualifier.lang, key, relative_path);
|
|
8620
8910
|
});
|
|
8621
8911
|
}
|
|
8622
8912
|
});
|
|
@@ -8653,19 +8943,45 @@ async function generateOneConfig(config) {
|
|
|
8653
8943
|
)
|
|
8654
8944
|
)
|
|
8655
8945
|
.flat()
|
|
8656
|
-
.filter(
|
|
8946
|
+
.filter(
|
|
8947
|
+
(file) =>
|
|
8948
|
+
!file.endsWith("/") &&
|
|
8949
|
+
(!buildConfig.sourceExcludes ||
|
|
8950
|
+
!buildConfig.sourceExcludes.includes(file))
|
|
8951
|
+
)
|
|
8657
8952
|
.map((file) => external_path_namespaceObject.relative(workspace, file))
|
|
8658
8953
|
.filter((file) => !file.startsWith("bin"));
|
|
8659
8954
|
|
|
8660
8955
|
const fnMap = Object.fromEntries(
|
|
8661
8956
|
files
|
|
8662
8957
|
.filter((src) => /\.mc$/.test(src))
|
|
8663
|
-
.map((file) => [
|
|
8958
|
+
.map((file) => [
|
|
8959
|
+
external_path_namespaceObject.join(workspace, file),
|
|
8960
|
+
external_path_namespaceObject.join(output, relative_path_no_dotdot(file)),
|
|
8961
|
+
])
|
|
8664
8962
|
);
|
|
8665
8963
|
|
|
8666
|
-
const
|
|
8667
|
-
|
|
8668
|
-
|
|
8964
|
+
const actualOptimizedFiles = (
|
|
8965
|
+
await (0,external_util_cjs_namespaceObject.globa)(external_path_namespaceObject.join(output, "**", "*.mc"), { mark: true })
|
|
8966
|
+
)
|
|
8967
|
+
.filter((file) => !file.endsWith("/"))
|
|
8968
|
+
.sort();
|
|
8969
|
+
|
|
8970
|
+
// check that the set of files thats actually there is the same as the
|
|
8971
|
+
// set of files we're going to generate (in case eg a jungle file change
|
|
8972
|
+
// might have altered it)
|
|
8973
|
+
if (
|
|
8974
|
+
actualOptimizedFiles.length == files.length &&
|
|
8975
|
+
Object.values(fnMap)
|
|
8976
|
+
.sort()
|
|
8977
|
+
.every((f, i) => f == actualOptimizedFiles[i])
|
|
8978
|
+
) {
|
|
8979
|
+
// now if the newest source file is older than
|
|
8980
|
+
// the oldest optimized file, we don't need to regenerate
|
|
8981
|
+
const source_time = await (0,external_util_cjs_namespaceObject.last_modified)(Object.keys(fnMap));
|
|
8982
|
+
const opt_time = await (0,external_util_cjs_namespaceObject.first_modified)(Object.values(fnMap));
|
|
8983
|
+
if (source_time < opt_time && 1650992400974 < opt_time) return;
|
|
8984
|
+
}
|
|
8669
8985
|
|
|
8670
8986
|
await promises_namespaceObject.rm(output, { recursive: true, force: true });
|
|
8671
8987
|
await promises_namespaceObject.mkdir(output, { recursive: true });
|