npm / json5 / 2.2.3

json5 2.2.3

Source
https://github.com/json5/json5
Artifact scanned
json5-2.2.3.tgz (npm tarball · 49.1 KB · SHA-256 08afb33db600…)
Compared with
json5-2.2.2.tgz (0 signals introduced since)
Files
19 scanned, 0 skipped (binary, oversized, or unrecognised)
Signals
0 critical · 0 warn · 15 info
Scan time
8.4 s
LLM review
Reviewed by claude-haiku-5-5 (Anthropic): 11 of 11 warn and critical signals; 11 demoted to info.
Disclude version
4.3.0
Scanned (UTC)
2026-10-23 16:57

Signals

Ordered by severity, then signals introduced in this release. Hidden characters are shown as ⟨U+…⟩.

  1. info warn → info by review long-line dist/index.js:304:1

    line length 7110 characters (raw pass, confidence 0.65)

    	var ID_Start = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5
    likely benign LLM, confidence 0.95 Generated Unicode ID_Start character-class regex in a bundled JavaScript file.
    Reasoning

    The line is a long Unicode-range regex for ID_Start, the kind of table generated by parser libraries. Length alone is expected in a generated, minified bundle, and nothing in the snippet is executable or hidden.

  2. info warn → info by review long-line dist/index.js:305:1

    line length 8568 characters (raw pass, confidence 0.65)

    	var ID_Continue = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D
    likely benign LLM, confidence 0.95 Generated Unicode ID_Continue character-class regex in a bundled JavaScript file.
    Reasoning

    This is the ID_Continue Unicode regex table, the same generated pattern as ID_Start. The long line is a formatting artifact of a bundled parser.

  3. info warn → info by review long-line dist/index.min.mjs:1:1

    line length 29459 characters (raw pass, confidence 0.65)

    var Space_Separator=/[\u1680\u2000-\u200A\u202F\u205F\u3000]/,ID_Start=/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u
    likely benign LLM, confidence 0.93 Minified parser bundle whose first line defines Unicode identifier regexes.
    Reasoning

    The line is a minified bundle that defines ID_Start and related Unicode-class regexes, consistent with a JSON5/parser library. Long minified lines are expected and the snippet shows no decoding or execution.

  4. info unicode-zero-width dist/index.min.mjs:1:16111

    U+200C ZERO WIDTH NON-JOINER in source (in string/comment) (raw pass, confidence 0.45)

    "Z"||u>="0"&&u<="9"||"$"===u||"_"===u||"⟨U+200C⟩"===u||"⟨U+200D⟩"===u||unicode.ID_Continue.test(u)),isDigit:u=>"string"==typeof u&&/[0-9]/.test(u),isHexDigit:u=>"string"==typeof u&&/[0-9A-Fa-f]/.test(u)};let source,parseState,stack,pos,line,column,token,key,root;var parse=function(u,D){source=String(u),parseState="start",stack=[
  5. info unicode-zero-width dist/index.min.mjs:1:16122

    U+200D ZERO WIDTH JOINER in source (in string/comment) (raw pass, confidence 0.45)

    &&u<="9"||"$"===u||"_"===u||"⟨U+200C⟩"===u||"⟨U+200D⟩"===u||unicode.ID_Continue.test(u)),isDigit:u=>"string"==typeof u&&/[0-9]/.test(u),isHexDigit:u=>"string"==typeof u&&/[0-9A-Fa-f]/.test(u)};let source,parseState,stack,pos,line,column,token,key,root;var parse=function(u,D){source=String(u),parseState="start",stack=[],pos=0,lin
  6. info warn → info by review unicode-zero-width dist/index.min.mjs:1:19405

    U+200C ZERO WIDTH NON-JOINER in source (raw pass, confidence 0.75)

    erName(){switch(c){case"$":case"_":case"⟨U+200C⟩":case"⟨U+200D⟩":return void(buffer+=read());case"\\":return read(),void(lexState="identifierNameEscape")}if(!util.isIdContinueChar(c))return newToken("identifier",buffer);buffer+=read()},identifierNameEscape(){if("u"!==c)throw invalidChar(read());read();const u=unicodeEscape();swi
    likely benign LLM, confidence 0.85 Zero-width non-joiner literal used as a valid identifier-continue character in a lexer.
    Reasoning

    The literal ZWNJ inside a switch case in an identifier-lexing routine is there because ECMAScript permits U+200C in identifier-continue positions. It is a spec-conformance detail of a parser, not a disguised payload.

  7. info warn → info by review unicode-zero-width dist/index.min.mjs:1:19415

    U+200D ZERO WIDTH JOINER in source (raw pass, confidence 0.75)

    witch(c){case"$":case"_":case"⟨U+200C⟩":case"⟨U+200D⟩":return void(buffer+=read());case"\\":return read(),void(lexState="identifierNameEscape")}if(!util.isIdContinueChar(c))return newToken("identifier",buffer);buffer+=read()},identifierNameEscape(){if("u"!==c)throw invalidChar(read());read();const u=unicodeEscape();switch(u){cas
    likely benign LLM, confidence 0.85 Zero-width joiner literal in a lexer's identifier-continue case list.
    Reasoning

    The ZWJ literal appears in the same identifier-continue case list, matching the ECMAScript identifier rules. A minified lexer is the expected context, and the character does not drive any dangerous behavior.

  8. info warn → info by review unicode-zero-width dist/index.min.mjs:1:19713

    U+200C ZERO WIDTH NON-JOINER in source (raw pass, confidence 0.75)

    Escape();switch(u){case"$":case"_":case"⟨U+200C⟩":case"⟨U+200D⟩":break;default:if(!util.isIdContinueChar(u))throw invalidIdentifier()}buffer+=u,lexState="identifierName"},sign(){switch(c){case".":return buffer=read(),void(lexState="decimalPointLeading");case"0":return buffer=read(),void(lexState="zero");case"1":case"2":case"3":c
    likely benign LLM, confidence 0.85 Zero-width non-joiner in the identifier-escape validation branch of a lexer.
    Reasoning

    This occurrence sits in the identifier-escape handling of the same lexer, where ZWNJ is a permitted identifier character per spec. The code validates characters rather than hiding logic.

  9. info warn → info by review unicode-zero-width dist/index.min.mjs:1:19723

    U+200D ZERO WIDTH JOINER in source (raw pass, confidence 0.75)

    witch(u){case"$":case"_":case"⟨U+200C⟩":case"⟨U+200D⟩":break;default:if(!util.isIdContinueChar(u))throw invalidIdentifier()}buffer+=u,lexState="identifierName"},sign(){switch(c){case".":return buffer=read(),void(lexState="decimalPointLeading");case"0":return buffer=read(),void(lexState="zero");case"1":case"2":case"3":case"4":cas
    likely benign LLM, confidence 0.85 Zero-width joiner in the identifier-escape validation branch of a lexer.
    Reasoning

    The ZWJ literal in the identifier-escape validation is part of the spec-defined identifier character set, in the same lexer. It is a legitimate parsing detail.

  10. info warn → info by review long-line dist/index.mjs:3:1

    line length 7109 characters (raw pass, confidence 0.65)

    var ID_Start = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\
    likely benign LLM, confidence 0.95 Generated Unicode ID_Start regex in an ES module build.
    Reasoning

    This is the unminified ID_Start Unicode regex in the ESM build of the same library. The long line is only a generated-table artifact.

  11. info warn → info by review long-line dist/index.mjs:4:1

    line length 8567 characters (raw pass, confidence 0.65)

    var ID_Continue = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0
    likely benign LLM, confidence 0.95 Generated Unicode ID_Continue regex in an ES module build.
    Reasoning

    This is the generated ID_Continue Unicode regex in the ES module build, the same benign table as its siblings.

  12. info whitespace-anomaly dist/index.mjs:7:1

    file mixes tab and space indentation (3 tab-indented and 1079 space-indented lines) (raw pass, confidence 0.40)

    var unicode = {
    	Space_Separator: Space_Separator,
    	ID_Start: ID_Start,
    	ID_Continue: ID_Continue
  13. info warn → info by review long-line lib/unicode.js:3:1

    line length 7119 characters (raw pass, confidence 0.65)

    module.exports.ID_Start = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u
    likely benign LLM, confidence 0.95 Exported ID_Start Unicode regex table in a library source module.
    Reasoning

    The source module exports the ID_Start regex table as a CommonJS module, which is how parser libraries ship Unicode tables. Long lines here are normal for generated data.

  14. info warn → info by review long-line lib/unicode.js:4:1

    line length 8577 characters (raw pass, confidence 0.65)

    module.exports.ID_Continue = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\
    likely benign LLM, confidence 0.95 Exported ID_Continue Unicode regex table in a library source module.
    Reasoning

    The module exports the ID_Continue regex table, consistent with the dist builds. This is ordinary generated Unicode data.

  15. info identifier-low-length lib/util.js:1:1

    31 of 62 non-conventional identifiers are single-character (50%) (token pass, confidence 0.50)

Reproduce This Scan

Run disclude locally to verify. These commands scan the published file; the "new in this release" marks come from comparing it with the previous release's file, which they don't repeat. Add --format sarif for SARIF output. Add --llm (with an API key in the environment) to include the LLM review.

cargo install disclude --version 4.3.0
curl -fsSL -o json5-2.2.3.tgz https://registry.npmjs.org/json5/-/json5-2.2.3.tgz
printf '%s  %s\n' 08afb33db600d11fc89b98fac4054f19d5d3e0fe527063116150e1ecc2d2377b json5-2.2.3.tgz | shasum -a 256 -c -
mkdir pkg && tar -xzf json5-2.2.3.tgz -C pkg --strip-components 1
disclude scan --untrusted --severity info pkg