unicodejs: main (log #959563)

sourcepatches

This run took 31 seconds.

$ date
--- stdout ---
Sat Mar 18 22:45:23 UTC 2023

--- end ---
$ git clone file:///srv/git/unicodejs.git repo --depth=1 -b master
--- stderr ---
Cloning into 'repo'...
--- stdout ---

--- end ---
$ git config user.name libraryupgrader
--- stdout ---

--- end ---
$ git config user.email tools.libraryupgrader@tools.wmflabs.org
--- stdout ---

--- end ---
$ git submodule update --init
--- stdout ---

--- end ---
$ grr init
--- stdout ---
Installed commit-msg hook.

--- end ---
$ git show-ref refs/heads/master
--- stdout ---
4ac3a3fc1823d762b0f3a150d696c3ea9354f59e refs/heads/master

--- end ---
$ /usr/bin/npm audit --json --legacy-peer-deps
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {},
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 0,
      "moderate": 0,
      "high": 0,
      "critical": 0,
      "total": 0
    },
    "dependencies": {
      "prod": 1,
      "dev": 480,
      "optional": 1,
      "peer": 0,
      "peerOptional": 0,
      "total": 480
    }
  }
}

--- end ---
Upgrading n:eslint-config-wikimedia from 0.22.1 -> 0.24.0
Upgrading n:grunt from 1.5.3 -> 1.6.1
$ /usr/bin/npm install
--- stdout ---

added 482 packages, and audited 483 packages in 6s

52 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

--- end ---
$ package-lock-lint package-lock.json
--- stdout ---
Checking package-lock.json

--- end ---
$ /usr/bin/npm install grunt-eslint@24.0.0 --save-exact
--- stdout ---

up to date, audited 483 packages in 868ms

52 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

--- end ---
$ package-lock-lint package-lock.json
--- stdout ---
Checking package-lock.json

--- end ---
$ ./node_modules/.bin/eslint . --fix
--- stdout ---

/src/repo/tests/unicodejs.test.js
  29:5   error  Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint
  30:14  error  ES2015 'String.fromCodePoint' method is forbidden               es-x/no-string-fromcodepoint

/src/repo/tools/unicodejs-properties.js
  1:1  error  ES2023 Hashbang comments are forbidden  es-x/no-hashbang

/src/repo/tools/unicodejs-tests.js
  1:1  error  ES2023 Hashbang comments are forbidden  es-x/no-hashbang

✖ 4 problems (4 errors, 0 warnings)


--- end ---
$ ./node_modules/.bin/eslint . -f json
--- stdout ---
[{"filePath":"/src/repo/.eslintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/Gruntfile.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/build/.eslintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/build/moduleUtils.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/build/modules.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/build/tasks/set-dev.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/build/tasks/set-meta.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/jsduck.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/package-lock.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/package.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/generated/unicodejs.derivedbidiclasses.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/generated/unicodejs.derivedcoreproperties.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/generated/unicodejs.derivedgeneralcategories.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/generated/unicodejs.emojiproperties.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/generated/unicodejs.graphemebreakproperties.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/generated/unicodejs.wordbreakproperties.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/unicodejs.characterclass.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/unicodejs.graphemebreak.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/unicodejs.js","messages":[],"suppressedMessages":[{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '>>'.","line":98,"column":24,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":98,"endColumn":47,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '&'.","line":99,"column":24,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":99,"endColumn":49,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '>>'.","line":102,"column":24,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":102,"endColumn":47,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '&'.","line":103,"column":24,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":103,"endColumn":49,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '>>'.","line":115,"column":31,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":115,"endColumn":62,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '>>'.","line":117,"column":31,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":117,"endColumn":62,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '>>'.","line":165,"column":26,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":165,"endColumn":51,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '&'.","line":166,"column":26,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":166,"endColumn":53,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/unicodejs.textstring.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/unicodejs.wordbreak.js","messages":[],"suppressedMessages":[{"ruleId":"no-fallthrough","severity":2,"message":"Expected a 'break' statement before 'case'.","line":166,"column":4,"nodeType":"SwitchCase","messageId":"case","endLine":167,"endColumn":17,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-fallthrough","severity":2,"message":"Expected a 'break' statement before 'case'.","line":244,"column":4,"nodeType":"SwitchCase","messageId":"case","endLine":246,"endColumn":92,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-fallthrough","severity":2,"message":"Expected a 'break' statement before 'case'.","line":248,"column":4,"nodeType":"SwitchCase","messageId":"case","endLine":248,"endColumn":67,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-fallthrough","severity":2,"message":"Expected a 'break' statement before 'case'.","line":250,"column":4,"nodeType":"SwitchCase","messageId":"case","endLine":250,"endColumn":98,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-fallthrough","severity":2,"message":"Expected a 'break' statement before 'case'.","line":252,"column":4,"nodeType":"SwitchCase","messageId":"case","endLine":252,"endColumn":98,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-fallthrough","severity":2,"message":"Expected a 'break' statement before 'case'.","line":256,"column":4,"nodeType":"SwitchCase","messageId":"case","endLine":256,"endColumn":58,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-fallthrough","severity":2,"message":"Expected a 'break' statement before 'case'.","line":258,"column":4,"nodeType":"SwitchCase","messageId":"case","endLine":258,"endColumn":93,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-fallthrough","severity":2,"message":"Expected a 'break' statement before 'case'.","line":260,"column":4,"nodeType":"SwitchCase","messageId":"case","endLine":261,"endColumn":18,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-fallthrough","severity":2,"message":"Expected a 'break' statement before 'case'.","line":268,"column":4,"nodeType":"SwitchCase","messageId":"case","endLine":270,"endColumn":18,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-fallthrough","severity":2,"message":"Expected a 'break' statement before 'case'.","line":282,"column":4,"nodeType":"SwitchCase","messageId":"case","endLine":284,"endColumn":18,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/.eslintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/generated/unicodejs.graphemebreak.testdata.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/generated/unicodejs.wordbreak.testdata.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/unicodejs.characterclass.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/unicodejs.graphemebreak.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/unicodejs.namespace.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/unicodejs.test.js","messages":[{"ruleId":"es/no-string-fromcodepoint","message":"Definition for rule 'es/no-string-fromcodepoint' was not found.","line":29,"column":5,"endLine":29,"endColumn":59,"severity":2,"nodeType":null},{"ruleId":"es-x/no-string-fromcodepoint","severity":2,"message":"ES2015 'String.fromCodePoint' method is forbidden.","line":30,"column":14,"nodeType":"MemberExpression","messageId":"forbidden","endLine":30,"endColumn":34}],"suppressedMessages":[],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/*!\n * UnicodeJS Base module tests\n *\n * @copyright 2013-2018 UnicodeJS team and others; see AUTHORS.txt\n * @license The MIT License (MIT); see LICENSE.txt\n */\n\nunicodeJS.testdata = {};\nunicodeJS.test = {\n\tparseTestReduce: function ( arr, line ) {\n\t\tvar breakMap = {\n\t\t\t\t'÷': true,\n\t\t\t\t'×': false\n\t\t\t},\n\t\t\tskip = false,\n\t\t\tchars = '',\n\t\t\texpected = [],\n\t\t\tparts = line.split( '#' ),\n\t\t\tdata = parts[ 0 ].trim().split( ' ' );\n\n\t\tdata.forEach( function ( str, i ) {\n\t\t\tvar codepoint;\n\t\t\tif ( i % 2 === 0 ) {\n\t\t\t\t// Tests at even offsets\n\t\t\t\texpected.push( breakMap[ str ] );\n\t\t\t} else {\n\t\t\t\tcodepoint = +( '0x' + str );\n\t\t\t\t// Chars at odd offsets\n\t\t\t\t// eslint-disable-next-line es/no-string-fromcodepoint\n\t\t\t\tchars += String.fromCodePoint( codepoint );\n\t\t\t\t// For surrogate pairs, add an expected no-break between them\n\t\t\t\tif ( codepoint > 0xFFFF ) {\n\t\t\t\t\texpected.push( false );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\tif ( !skip ) {\n\t\t\tarr.push( {\n\t\t\t\tmsg: line,\n\t\t\t\tstring: chars,\n\t\t\t\texpected: expected\n\t\t\t} );\n\t\t}\n\t\treturn arr;\n\t}\n};\n\nQUnit.module( 'unicodeJS' );\n\nQUnit.test( 'prevNextCodepoint', function ( assert ) {\n\tvar tests = [\n\t\t// string, nextValues, prevValues, message\n\t\t[\n\t\t\t'XYZ',\n\t\t\t[ 'X', 'Y', 'Z', null ],\n\t\t\t[ null, 'X', 'Y', 'Z' ],\n\t\t\t'no surrogate'\n\t\t],\n\t\t[\n\t\t\t'X\\ud800\\udc00YZ',\n\t\t\t[ 'X', '\\ud800\\udc00', '\\udc00', 'Y', 'Z', null ],\n\t\t\t[ null, 'X', '\\ud800', '\\ud800\\udc00', 'Y', 'Z' ],\n\t\t\t'pair'\n\t\t],\n\t\t[\n\t\t\t'\\ud800WX\\ud800YZ\\ud800',\n\t\t\t[ '\\ud800', 'W', 'X', '\\ud800', 'Y', 'Z', '\\ud800', null ],\n\t\t\t[ null, '\\ud800', 'W', 'X', '\\ud800', 'Y', 'Z', '\\ud800' ],\n\t\t\t'unpaired leading'\n\t\t],\n\t\t[\n\t\t\t'\\udc00WX\\udc00YZ\\udc00',\n\t\t\t[ '\\udc00', 'W', 'X', '\\udc00', 'Y', 'Z', '\\udc00', null ],\n\t\t\t[ null, '\\udc00', 'W', 'X', '\\udc00', 'Y', 'Z', '\\udc00' ],\n\t\t\t'unpaired trailing'\n\t\t]\n\t];\n\ttests.forEach( function ( test ) {\n\t\tvar s = new unicodeJS.TextString( test[ 0 ] );\n\t\tvar nextValues = test[ 1 ];\n\t\tvar prevValues = test[ 2 ];\n\t\tvar message = test[ 3 ];\n\t\tnextValues.forEach( function ( value, i ) {\n\t\t\tassert.strictEqual(\n\t\t\t\ts.nextCodepoint( i ),\n\t\t\t\tvalue,\n\t\t\t\tmessage + ': nextCodepoint(' + i + ')'\n\t\t\t);\n\t\t} );\n\t\tprevValues.forEach( function ( value, i ) {\n\t\t\tassert.strictEqual(\n\t\t\t\ts.prevCodepoint( i ),\n\t\t\t\tvalue,\n\t\t\t\tmessage + ': prevCodepoint(' + i + ')'\n\t\t\t);\n\t\t} );\n\t} );\n} );\n\nQUnit.test( 'charRangeArrayRegexp', function ( assert ) {\n\tvar equalityTests = [\n\t\t[ [ 0x0040 ], '\\\\u0040', 'single BMP character' ],\n\t\t[ [ 0xFFFF ], '\\\\uffff', 'highest BMP character' ],\n\t\t[\n\t\t\t[\n\t\t\t\t0x005F,\n\t\t\t\t[ 0x203F, 0x2040 ],\n\t\t\t\t0x2054,\n\t\t\t\t[ 0xFE33, 0xFE34 ],\n\t\t\t\t[ 0xFE4D, 0xFE4F ],\n\t\t\t\t0xFF3F\n\t\t\t],\n\t\t\t'[\\\\u005f\\\\u203f-\\\\u2040\\\\u2054\\\\ufe33-\\\\ufe34\\\\ufe4d-\\\\ufe4f\\\\uff3f]',\n\t\t\t'multiple BMP ranges (= ExtendNumLet from wordbreak rules)'\n\t\t],\n\t\t[ [ 0xD7FF ], '\\\\ud7ff', 'just below surrogate range' ],\n\t\t[ [ 0xE000 ], '\\\\ue000', 'just above surrogate range' ],\n\t\t[ [ 0x10000 ], '\\\\ud800\\\\udc00', 'lowest non-BMP character' ],\n\t\t[ [ 0x10001 ], '\\\\ud800\\\\udc01', 'second-lowest non-BMP character' ],\n\t\t[ [ 0x103FF ], '\\\\ud800\\\\udfff', 'highest character with D800 leading surrogate' ],\n\t\t[ [ 0x10400 ], '\\\\ud801\\\\udc00', 'lowest character with D801 leading surrogate' ],\n\t\t[\n\t\t\t[ [ 0xFF00, 0xFFFF ] ],\n\t\t\t'[\\\\uff00-\\\\uffff]',\n\t\t\t'single range at top of BMP'\n\t\t],\n\t\t[\n\t\t\t[ [ 0xFF00, 0x10000 ] ],\n\t\t\t'[\\\\uff00-\\\\uffff]|\\\\ud800\\\\udc00',\n\t\t\t'single range spanning BMP and non-BMP'\n\t\t],\n\t\t[\n\t\t\t[ 0xFFFF, 0x10000, 0x10002 ],\n\t\t\t'\\\\uffff|\\\\ud800\\\\udc00|\\\\ud800\\\\udc02', // TODO: could compact\n\t\t\t'single characters, both BMP and non-BMP'\n\t\t],\n\t\t[\n\t\t\t[ [ 0x0300, 0x0400 ], 0x10FFFF ],\n\t\t\t'[\\\\u0300-\\\\u0400]|\\\\udbff\\\\udfff',\n\t\t\t'BMP range and non-BMP character'\n\t\t],\n\t\t[\n\t\t\t[ [ 0xFF00, 0x103FF ] ],\n\t\t\t'[\\\\uff00-\\\\uffff]|\\\\ud800[\\\\udc00-\\\\udfff]',\n\t\t\t'range to top of D800 leading surrogate range'\n\t\t],\n\t\t[\n\t\t\t[ [ 0xFF00, 0x10400 ] ],\n\t\t\t'[\\\\uff00-\\\\uffff]|\\\\ud800[\\\\udc00-\\\\udfff]|\\\\ud801\\\\udc00',\n\t\t\t'range to start of D801 leading surrogate range'\n\t\t],\n\t\t[\n\t\t\t[ [ 0xFF00, 0x10401 ] ],\n\t\t\t'[\\\\uff00-\\\\uffff]|\\\\ud800[\\\\udc00-\\\\udfff]|\\\\ud801[\\\\udc00-\\\\udc01]',\n\t\t\t'range past start of D801 leading surrogate range'\n\t\t],\n\t\t[\n\t\t\t[ [ 0xFF00, 0x15555 ] ],\n\t\t\t'[\\\\uff00-\\\\uffff]|[\\\\ud800-\\\\ud814][\\\\udc00-\\\\udfff]|\\\\ud815[\\\\udc00-\\\\udd55]',\n\t\t\t'range spanning multiple leading surrogate ranges'\n\t\t],\n\t\t[\n\t\t\t[ [ 0x10454, 0x10997 ] ],\n\t\t\t'\\\\ud801[\\\\udc54-\\\\udfff]|\\\\ud802[\\\\udc00-\\\\udd97]',\n\t\t\t'range starting within one leading surrogate range, and ending in the next'\n\t\t],\n\t\t[\n\t\t\t[ [ 0x20222, 0x29999 ] ],\n\t\t\t'\\\\ud840[\\\\ude22-\\\\udfff]|[\\\\ud841-\\\\ud865][\\\\udc00-\\\\udfff]|\\\\ud866[\\\\udc00-\\\\udd99]',\n\t\t\t'range starting within one leading surrogate range, and ending in a distant one'\n\t\t],\n\t\t[\n\t\t\t[ 0x00AD, [ 0x0600, 0x0604 ], 0x06DD, 0x070F,\n\t\t\t\t[ 0x200E, 0x200F ], [ 0x202A, 0x202E ], [ 0x2060, 0x2064 ],\n\t\t\t\t[ 0x206A, 0x206F ], 0xFEFF, [ 0xFFF9, 0xFFFB ],\n\t\t\t\t0x110BD, [ 0x1D173, 0x1D17A ],\n\t\t\t\t0xE0001, [ 0xE0020, 0xE007F ]\n\t\t\t],\n\t\t\t// TODO: could compact\n\t\t\t'[\\\\u00ad\\\\u0600-\\\\u0604\\\\u06dd\\\\u070f' +\n\t\t\t\t'\\\\u200e-\\\\u200f\\\\u202a-\\\\u202e\\\\u2060-\\\\u2064' +\n\t\t\t\t'\\\\u206a-\\\\u206f\\\\ufeff\\\\ufff9-\\\\ufffb]' +\n\t\t\t\t'|\\\\ud804\\\\udcbd|\\\\ud834[\\\\udd73-\\\\udd7a]|\\\\udb40\\\\udc01' +\n\t\t\t\t'|\\\\udb40[\\\\udc20-\\\\udc7f]',\n\t\t\t'multiple BMP and non-BMP ranges (= Format from wordbreak rules)'\n\t\t],\n\t\t[\n\t\t\t[ [ 0x0, 0xD7FF ], [ 0xE000, 0xFFFF ], [ 0x10000, 0x10FFFF ] ],\n\t\t\t'[\\\\u0000-\\\\ud7ff\\\\ue000-\\\\uffff]|[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n\t\t\t'largest possible range'\n\t\t]\n\t];\n\tvar throwTests = [\n\t\t[ [ 0xD800 ], 'surrogate character U+D800' ],\n\t\t[ [ 0xDFFF ], 'surrogate character U+DFFF' ],\n\t\t[ [ 0x110000 ], 'character too high' ],\n\t\t[ [ [ 0xCCCC, 0xDDDD ] ], 'surrogate overlap 1' ],\n\t\t[ [ [ 0xDDDD, 0xEEEE ] ], 'surrogate overlap 2' ],\n\t\t[ [ [ 0xDDDD, 0xEEEEE ] ], 'surrogate overlap 3' ],\n\t\t[ [ [ 0xCCCC, 0xEEEE ] ], 'surrogate overlap 4' ],\n\t\t[ [ [ 0x2, 0x1 ] ], 'min > max' ],\n\t\t[ [ [ 0x10FFFF, 0x110000 ] ], 'range too high' ]\n\t];\n\n\tequalityTests.forEach( function ( test ) {\n\t\tassert.strictEqual(\n\t\t\tunicodeJS.charRangeArrayRegexp( test[ 0 ] ),\n\t\t\ttest[ 1 ],\n\t\t\ttest[ 2 ]\n\t\t);\n\t} );\n\tthrowTests.forEach( function ( test ) {\n\t\tvar doTestFunc = function () {\n\t\t\tunicodeJS.charRangeArrayRegexp( test[ 0 ] );\n\t\t};\n\t\t/* eslint-enable no-loop-func */\n\t\tassert.throws(\n\t\t\tdoTestFunc,\n\t\t\tError,\n\t\t\t'throw: ' + test[ 1 ]\n\t\t);\n\t} );\n} );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/unicodejs.wordbreak.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tools/.eslintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tools/unicodejs-properties.js","messages":[{"ruleId":"es-x/no-hashbang","severity":2,"message":"ES2023 Hashbang comments are forbidden.","line":1,"column":1,"nodeType":"Shebang","messageId":"forbidden","endLine":1,"endColumn":20}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"#!/usr/bin/env node\n\n// Generates unicodejs.*(properties|categories).js from Unicode data\n\n'use strict';\n\nconst VERSION = '13.0.0',\n\thasOwn = Object.hasOwnProperty,\n\thttp = require( 'http' ),\n\tfs = require( 'fs-extra' ),\n\tdir = __dirname + '/../src/generated',\n\tdata = [\n\t\t{\n\t\t\turl: 'http://unicode.org/Public/%V/ucd/DerivedCoreProperties.txt',\n\t\t\tjsname: 'derivedcoreproperties',\n\t\t\tpropPatterns: [ /^(Alphabetic)$/ ]\n\t\t},\n\t\t{\n\t\t\turl: 'http://www.unicode.org/Public/%V/ucd/extracted/DerivedGeneralCategory.txt',\n\t\t\tjsname: 'derivedgeneralcategories',\n\t\t\tpropPatterns: [ /^(Pc)$/, /^(M).*$/ ]\n\t\t},\n\t\t{\n\t\t\turl: 'http://www.unicode.org/Public/%V/ucd/auxiliary/GraphemeBreakProperty.txt',\n\t\t\tjsname: 'graphemebreakproperties',\n\t\t\tfull: true,\n\t\t\tpropPatterns: [ /^(.*)$/ ],\n\t\t\texcludeSurrogates: true\n\t\t},\n\t\t{\n\t\t\turl: 'http://www.unicode.org/Public/%V/ucd/auxiliary/WordBreakProperty.txt',\n\t\t\tjsname: 'wordbreakproperties',\n\t\t\tfull: true,\n\t\t\tpropPatterns: [ /^(.*)$/ ]\n\t\t},\n\t\t{\n\t\t\turl: 'http://www.unicode.org/Public/%V/ucd/extracted/DerivedBidiClass.txt',\n\t\t\tjsname: 'derivedbidiclasses',\n\t\t\tpropPatterns: [ /^(L|R|AL)$/ ]\n\t\t},\n\t\t{\n\t\t\turl: 'http://www.unicode.org/Public/%V/ucd/emoji/emoji-data.txt',\n\t\t\tjsname: 'emojiproperties',\n\t\t\tpropPatterns: [ /^(Extended_Pictographic)$/ ]\n\t\t}\n\t];\n\nfunction extractProperties( body, jsname, full, propPatterns, excludeSurrogates ) {\n\tconst lines = body.split( /\\n/ ),\n\t\t// range[ property ] -> character range list e.g. [ 0x0040, [ 0x0060-0x0070 ], 0x00A3, ... ]\n\t\tranges = {},\n\t\t// A list of property name strings like \"Extend\", \"Format\" etc\n\t\tproperties = [],\n\t\tfragments = [],\n\t\tblankTest = /^\\s*(#|$)/,\n\t\tdefinitionTest = /^([0-9A-F]{4,6})(?:\\.\\.([0-9A-F]{4,6}))?\\s*;\\s*(\\w+)\\s*#/;\n\n\tlines.forEach( ( line ) => {\n\t\tline = line.trim();\n\t\t// Ignore comment or blank lines\n\t\tif ( line.match( blankTest ) ) {\n\t\t\treturn;\n\t\t}\n\t\t// Find things like one of the following:\n\t\t//   XXXX       ; propertyname\n\t\t//   XXXX..YYYY ; propertyname\n\t\tconst lineMatches = line.match( definitionTest );\n\t\tif ( !lineMatches ) {\n\t\t\tthrow new Error( 'Bad line: ' + line );\n\t\t}\n\n\t\tconst start = parseInt( lineMatches[ 1 ], 16 );\n\t\tconst end = parseInt( lineMatches[ 2 ] || lineMatches[ 1 ], 16 );\n\t\tconst propText = lineMatches[ 3 ];\n\n\t\tpropPatterns.forEach( function ( propPattern ) {\n\t\t\tconst propMatches = propText.match( propPattern );\n\t\t\tif ( propMatches ) {\n\t\t\t\tconst propName = propMatches[ 1 ];\n\t\t\t\tif ( !hasOwn.call( ranges, propName ) ) {\n\t\t\t\t\tproperties.push( propName );\n\t\t\t\t\tranges[ propName ] = [];\n\t\t\t\t}\n\t\t\t\tranges[ propName ].push( [ start, end ] );\n\t\t\t}\n\t\t} );\n\t} );\n\n\t// Translate ranges into js fragments\n\tproperties.forEach( ( prop ) => {\n\t\tconst rangeStrings = [],\n\t\t\tpropRanges = ranges[ prop ];\n\n\t\t// Merge consecutive ranges\n\t\tpropRanges.sort( ( a, b ) => {\n\t\t\treturn a[ 0 ] - b[ 0 ];\n\t\t} );\n\n\t\tfor ( let i = 1; i < propRanges.length; i++ ) {\n\t\t\tif ( propRanges[ i - 1 ][ 1 ] + 1 === propRanges[ i ][ 0 ] ) {\n\t\t\t\tpropRanges[ i - 1 ] = [\n\t\t\t\t\tpropRanges[ i - 1 ][ 0 ],\n\t\t\t\t\tpropRanges[ i ][ 1 ]\n\t\t\t\t];\n\t\t\t\tpropRanges.splice( i, 1 );\n\t\t\t\ti--;\n\t\t\t}\n\t\t}\n\n\t\tfunction toHex( num ) {\n\t\t\tconst hex = num.toString( 16 ).toUpperCase();\n\t\t\treturn '0x' + ( '0000' + hex ).slice( Math.min( -4, -hex.length ) );\n\t\t}\n\n\t\tpropRanges.forEach( ( propRange ) => {\n\t\t\tconst start = propRange[ 0 ],\n\t\t\t\tend = propRange[ 1 ];\n\n\t\t\tif ( excludeSurrogates && start === 0xD800 && end === 0xDFFF ) {\n\t\t\t\treturn;\n\t\t\t} else if ( end === start ) {\n\t\t\t\trangeStrings.push( toHex( start ) );\n\t\t\t} else if ( end === start + 1 ) {\n\t\t\t\trangeStrings.push( toHex( start ), toHex( end ) );\n\t\t\t} else {\n\t\t\t\trangeStrings.push( '[ ' + toHex( start ) + ', ' + toHex( end ) + ' ]' );\n\t\t\t}\n\t\t} );\n\t\tfragments.push( prop.replace( /_/g, '' ) + ': [ ' + rangeStrings.join( ', ' ) + ' ]' );\n\t} );\n\n\t// Write js file\n\tlet js = '// This file is GENERATED by tools/unicodejs-properties.js\\n' +\n\t\t'// DO NOT EDIT\\n' +\n\t\t'unicodeJS.' + jsname + ' = {\\n\\t';\n\tif ( !full ) {\n\t\tjs += '// partial extraction only\\n\\t';\n\t}\n\tjs += fragments.join( ',\\n\\t' ) +\n\t\t'\\n};\\n';\n\n\tconst filename = dir + '/unicodejs.' + jsname + '.js';\n\tfs.writeFile( filename, js, ( err ) => {\n\t\tif ( err ) {\n\t\t\tthrow err;\n\t\t}\n\t\tconsole.log( 'wrote ' + filename );\n\t} );\n}\n\nfs.emptyDir( dir, ( err ) => {\n\tif ( err ) {\n\t\tthrow err;\n\t}\n\tconsole.log( 'deleted old files' );\n\tdata.forEach( function ( options ) {\n\t\tconst url = options.url.replace( '%V', VERSION );\n\t\tconsole.log( 'fetching ' + url );\n\t\tconst request = http.get( url, ( res ) => {\n\t\t\tlet body = '';\n\n\t\t\tres.setEncoding( 'utf8' );\n\n\t\t\tres.on( 'data', function ( chunk ) {\n\t\t\t\tbody += chunk;\n\t\t\t} );\n\n\t\t\tres.on( 'end', function () {\n\t\t\t\textractProperties(\n\t\t\t\t\tbody,\n\t\t\t\t\toptions.jsname,\n\t\t\t\t\t!!options.full,\n\t\t\t\t\toptions.propPatterns,\n\t\t\t\t\t!!options.excludeSurrogates\n\t\t\t\t);\n\t\t\t} );\n\t\t} );\n\t\trequest.end();\n\t} );\n} );\n","usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tools/unicodejs-tests.js","messages":[{"ruleId":"es-x/no-hashbang","severity":2,"message":"ES2023 Hashbang comments are forbidden.","line":1,"column":1,"nodeType":"Shebang","messageId":"forbidden","endLine":1,"endColumn":20}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"#!/usr/bin/env node\n\n// Generates unicodejs.*.testdata.js from Unicode test data\n\n'use strict';\n\nconst VERSION = '13.0.0',\n\thttp = require( 'http' ),\n\tfs = require( 'fs-extra' ),\n\tdir = __dirname + '/../tests/generated',\n\tdata = [\n\t\t{\n\t\t\turl: 'http://www.unicode.org/Public/%V/ucd/auxiliary/WordBreakTest.txt',\n\t\t\tjsname: 'wordbreak'\n\t\t},\n\t\t{\n\t\t\turl: 'http://www.unicode.org/Public/%V/ucd/auxiliary/GraphemeBreakTest.txt',\n\t\t\tjsname: 'graphemebreak'\n\t\t}\n\t];\n\nfunction buildTests( body, jsname ) {\n\tconst output = [],\n\t\tlines = body.split( /\\n/ );\n\n\tlines.forEach( ( line ) => {\n\t\tconst parts = line.split( '#' );\n\t\tif ( !parts[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\t\toutput.push( line );\n\t} );\n\n\t// Write js file\n\tconst js = '// This file is GENERATED by tools/unicodejs-tests.js\\n' +\n\t\t'// DO NOT EDIT\\n' +\n\t\t'unicodeJS.testdata.' + jsname + ' = ' + JSON.stringify( output, null, '\\t' ).replace( /\"/g, '\\'' ) + ';\\n';\n\n\tconst filename = dir + '/unicodejs.' + jsname + '.testdata.js';\n\tfs.writeFile( filename, js, ( err ) => {\n\t\tif ( err ) {\n\t\t\tthrow err;\n\t\t}\n\t\tconsole.log( 'wrote ' + filename );\n\t} );\n}\n\nfs.emptyDir( dir, ( err ) => {\n\tif ( err ) {\n\t\tthrow err;\n\t}\n\tconsole.log( 'deleted old files' );\n\tdata.forEach( ( options ) => {\n\t\tconst url = options.url.replace( '%V', VERSION );\n\t\tconsole.log( 'fetching ' + url );\n\t\tconst request = http.get( url, ( res ) => {\n\t\t\tlet body = '';\n\n\t\t\tres.setEncoding( 'utf8' );\n\n\t\t\tres.on( 'data', ( chunk ) => {\n\t\t\t\tbody += chunk;\n\t\t\t} );\n\n\t\t\tres.on( 'end', () => {\n\t\t\t\tbuildTests( body, options.jsname );\n\t\t\t} );\n\t\t} );\n\t\trequest.end();\n\t} );\n} );\n","usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]}]

--- end ---
$ /usr/bin/npm ci --legacy-peer-deps
--- stdout ---

added 482 packages, and audited 483 packages in 5s

52 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

--- end ---
$ /usr/bin/npm test
--- stdout ---

> unicodejs@13.0.3 test
> grunt test

Running "set-meta" task

Running "set-dev" task

Running "clean:dist" (clean) task
>> 0 paths cleaned.

Running "concat:all" (concat) task

Running "copy:dist" (copy) task
Copied 4 files

Running "eslint:all" (eslint) task

/src/repo/.eslintrc.json
  1:1  error  Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint

/src/repo/Gruntfile.js
  1:1  error  Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint

/src/repo/jsduck.json
  1:1  error  Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint

/src/repo/package-lock.json
  1:1  error  Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint

/src/repo/package.json
  1:1  error  Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint

/src/repo/src/generated/unicodejs.derivedbidiclasses.js
  1:1  error  Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint

/src/repo/src/generated/unicodejs.derivedcoreproperties.js
  1:1  error  Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint

/src/repo/src/generated/unicodejs.derivedgeneralcategories.js
  1:1  error  Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint

/src/repo/src/generated/unicodejs.emojiproperties.js
  1:1  error  Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint

/src/repo/src/generated/unicodejs.graphemebreakproperties.js
  1:1  error  Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint

/src/repo/src/generated/unicodejs.wordbreakproperties.js
  1:1  error  Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint

/src/repo/src/unicodejs.characterclass.js
  1:1  error  Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint

/src/repo/src/unicodejs.graphemebreak.js
  1:1  error  Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint

/src/repo/src/unicodejs.js
  1:1  error  Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint

/src/repo/src/unicodejs.textstring.js
  1:1  error  Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint

/src/repo/src/unicodejs.wordbreak.js
  1:1  error  Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint

/src/repo/tests/.eslintrc.json
  1:1  error  Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint

/src/repo/tests/generated/unicodejs.graphemebreak.testdata.js
  1:1  error  Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint

/src/repo/tests/generated/unicodejs.wordbreak.testdata.js
  1:1  error  Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint

/src/repo/tests/unicodejs.characterclass.test.js
  1:1  error  Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint

/src/repo/tests/unicodejs.graphemebreak.test.js
  1:1  error  Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint

/src/repo/tests/unicodejs.namespace.js
  1:1  error  Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint

/src/repo/tests/unicodejs.test.js
   1:1   error    Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint
  29:5   error    Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint
  30:14  warning  ES2015 'String.fromCodePoint' method is forbidden               es-x/no-string-fromcodepoint

/src/repo/tests/unicodejs.wordbreak.test.js
  1:1  error  Definition for rule 'es/no-string-fromcodepoint' was not found  es/no-string-fromcodepoint

/src/repo/tools/unicodejs-properties.js
  1:1  error  ES2023 Hashbang comments are forbidden  es-x/no-hashbang

/src/repo/tools/unicodejs-tests.js
  1:1  error  ES2023 Hashbang comments are forbidden  es-x/no-hashbang

✖ 28 problems (27 errors, 1 warning)

Warning: Task "eslint:all" failed. Use --force to continue.

Aborted due to warnings.

--- end ---
Traceback (most recent call last):
  File "/venv/lib/python3.9/site-packages/runner-0.1.0-py3.9.egg/runner/__init__.py", line 1400, in main
    libup.run(args.repo, args.output, args.branch)
  File "/venv/lib/python3.9/site-packages/runner-0.1.0-py3.9.egg/runner/__init__.py", line 1338, in run
    self.npm_upgrade(plan)
  File "/venv/lib/python3.9/site-packages/runner-0.1.0-py3.9.egg/runner/__init__.py", line 1049, in npm_upgrade
    self.npm_test()
  File "/venv/lib/python3.9/site-packages/runner-0.1.0-py3.9.egg/runner/__init__.py", line 287, in npm_test
    self.check_call(['npm', 'test'])
  File "/venv/lib/python3.9/site-packages/runner-0.1.0-py3.9.egg/runner/shell2.py", line 54, in check_call
    res.check_returncode()
  File "/usr/lib/python3.9/subprocess.py", line 460, in check_returncode
    raise CalledProcessError(self.returncode, self.args, self.stdout,
subprocess.CalledProcessError: Command '['/usr/bin/npm', 'test']' returned non-zero exit status 3.
Source code is licensed under the AGPL.