[{"data":1,"prerenderedAt":525},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-changelog":87,"-getting-started-changelog-surround":520},[4,40,66],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20,25,30,35],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F2.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F3.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F4.configuration","i-lucide-settings",{"title":26,"path":27,"stem":28,"icon":29},"Supported Formats","\u002Fgetting-started\u002Fsupported-formats","1.getting-started\u002F5.supported-formats","i-lucide-file-code",{"title":31,"path":32,"stem":33,"icon":34},"Agent Skill","\u002Fgetting-started\u002Fagent-skill","1.getting-started\u002F6.agent-skill","i-lucide-cpu",{"title":36,"path":37,"stem":38,"icon":39},"Changelog","\u002Fgetting-started\u002Fchangelog","1.getting-started\u002F7.changelog","i-lucide-scroll-text",{"title":41,"path":42,"stem":43,"children":44,"icon":46},"Reporters","\u002Freporters","2.reporters\u002F1.index",[45,47,51,56,61],{"title":41,"path":42,"stem":43,"icon":46},"i-lucide-file-chart-column",{"title":48,"path":49,"stem":50,"icon":29},"HTML Reporter","\u002Freporters\u002Fhtml","2.reporters\u002F2.html",{"title":52,"path":53,"stem":54,"icon":55},"JSON Reporter","\u002Freporters\u002Fjson","2.reporters\u002F3.json","i-lucide-braces",{"title":57,"path":58,"stem":59,"icon":60},"Badge Reporter","\u002Freporters\u002Fbadge","2.reporters\u002F4.badge","i-lucide-award",{"title":62,"path":63,"stem":64,"icon":65},"SARIF Reporter","\u002Freporters\u002Fsarif","2.reporters\u002F5.sarif","i-lucide-shield-check",{"title":67,"path":68,"stem":69,"children":70,"icon":72},"API","\u002Fapi","3.api\u002F1.index",[71,73,78,83],{"title":67,"path":68,"stem":69,"icon":72},"i-lucide-code",{"title":74,"path":75,"stem":76,"icon":77},"Core Package","\u002Fapi\u002Fcore","3.api\u002F2.core","i-lucide-box",{"title":79,"path":80,"stem":81,"icon":82},"Server API","\u002Fapi\u002Fserver","3.api\u002F3.server","i-lucide-server",{"title":84,"path":85,"stem":86,"icon":77},"MCP Server","\u002Fapi\u002Fmcp-server","3.api\u002F4.mcp-server",{"id":88,"title":36,"body":89,"description":512,"extension":513,"links":514,"meta":515,"navigation":516,"path":37,"seo":517,"stem":38,"__hash__":519},"docs\u002F1.getting-started\u002F7.changelog.md",{"type":90,"value":91,"toc":488},"minimark",[92,97,109,113,127,131,139,143,150,154,159,246,250,298,302,307,311,353,357,364,368,376,380,392,396,411,415,419,463,467,475,479],[93,94,96],"h2",{"id":95},"overview","Overview",[98,99,100,101,108],"p",{},"For the full, up-to-date changelog, see the ",[102,103,107],"a",{"href":104,"rel":105},"https:\u002F\u002Fgithub.com\u002Fkucherenko\u002Fjscpd\u002Fblob\u002Fmaster\u002Fapps\u002Fjscpd\u002FCHANGELOG.md",[106],"nofollow","jscpd GitHub repository",".",[93,110,112],{"id":111},"v423-latest","v4.2.3 (Latest)",[114,115,116,124],"ul",{},[117,118,119,123],"li",{},[120,121,122],"strong",{},"fix(finder):"," resolve relative ignore patterns against scan dirs (#611)",[117,125,126],{},"Dependency bumps across all packages",[93,128,130],{"id":129},"v422","v4.2.2",[114,132,133],{},[117,134,135,138],{},[120,136,137],{},"fix(tokenizer):"," resolve quadratic bash tokenization hang",[93,140,142],{"id":141},"v421","v4.2.1",[114,144,145],{},[117,146,147,149],{},[120,148,137],{}," fix tokenization issue for cross-format detection",[93,151,153],{"id":152},"v420","v4.2.0",[155,156,158],"h3",{"id":157},"new-features","New Features",[114,160,161,172,190,200,210,218,230],{},[117,162,163,166,167,171],{},[120,164,165],{},"Custom tokenizer backend"," — ",[168,169,170],"code",{},"@jscpd\u002Ftokenizer"," now uses a self-contained reprism-based engine. ~11.5% faster tokenization on real projects (avg 1126 ms → 997 ms on a 548-file, 223-format scan).",[117,173,174,177,178,181,182,185,186,189],{},[120,175,176],{},"Cross-format detection"," — Vue SFC (",[168,179,180],{},".vue","), Svelte (",[168,183,184],{},".svelte","), Astro (",[168,187,188],{},".astro","), and Markdown files are tokenized per-block\u002Fper-section, enabling duplicate detection between embedded blocks and standalone source files.",[117,191,192,195,196,199],{},[120,193,194],{},"223 supported formats"," — Apex, CFML\u002FColdFusion, GDScript, Svelte, Astro, and 70+ additional languages (up from 152). Run ",[168,197,198],{},"jscpd --list"," to see the full list.",[117,201,202,205,206,209],{},[120,203,204],{},"Shebang detection"," — extensionless executable scripts are auto-detected via their ",[168,207,208],{},"#!"," shebang line.",[117,211,212,217],{},[120,213,214],{},[168,215,216],{},"--store-path"," — specify a custom directory for the LevelDB token cache, eliminating collisions when multiple jscpd processes run concurrently.",[117,219,220,225,226,229],{},[120,221,222],{},[168,223,224],{},"--skipComments"," — shorthand for ",[168,227,228],{},"--mode weak",". Strips comments before tokenization.",[117,231,232,237,238,241,242,245],{},[120,233,234],{},[168,235,236],{},"--formats-names"," — map specific filenames (e.g. ",[168,239,240],{},"Makefile",", ",[168,243,244],{},"Dockerfile",") to a detection format.",[155,247,249],{"id":248},"bug-fixes","Bug Fixes",[114,251,252,261,269,278,284,292],{},[117,253,254,257,258,108],{},[120,255,256],{},"Entire-file duplicates silently dropped"," (#728) — fixed RabinKarp end-of-file flush bug in ",[168,259,260],{},"@jscpd\u002Fcore",[117,262,263,266,267,108],{},[120,264,265],{},"ReDoS hang on Lisp\u002FElisp files"," (#737) — replaced catastrophic backtracking with a linear regex in ",[168,268,170],{},[117,270,271,277],{},[120,272,273,274],{},"Process crash on malformed ",[168,275,276],{},"package.json"," (#739) — now emits a warning and continues.",[117,279,280,283],{},[120,281,282],{},"Vue SFC cross-file detection broken"," — blocks now use resolved sub-format namespace.",[117,285,286,289,290,108],{},[120,287,288],{},"Vue SFC incorrect column numbers"," — fixed in ",[168,291,170],{},[117,293,294,297],{},[120,295,296],{},"50 dependency security vulnerabilities"," remediated.",[93,299,301],{"id":300},"v411","v4.1.1",[114,303,304],{},[117,305,306],{},"Update hash function, improve performance and keep browser support.",[93,308,310],{"id":309},"v410","v4.1.0",[114,312,313,323,332,338,344,350],{},[117,314,315,318,319,322],{},[120,316,317],{},"AI reporter"," (",[168,320,321],{},"--reporters ai",") — compact, token-efficient output for LLMs.",[117,324,325,331],{},[120,326,327,330],{},[168,328,329],{},"--noTips"," flag"," — suppress usage-tip messages after detection.",[117,333,334,337],{},[120,335,336],{},"Execution timer"," — timing summary shown after detection completes.",[117,339,340,343],{},[120,341,342],{},"Tokenizer speed"," — lazy Prism grammar loading, O(1) extension lookup, native MD5 hashing.",[117,345,346,349],{},[120,347,348],{},"New languages:"," Apex and CFML (ColdFusion).",[117,351,352],{},"Test coverage raised to 98%+.",[93,354,356],{"id":355},"v409","v4.0.9",[114,358,359],{},[117,360,361,363],{},[120,362,317],{}," integrated as a named reporter.",[93,365,367],{"id":366},"v408","v4.0.8",[114,369,370],{},[117,371,372,375],{},[120,373,374],{},"GDScript support"," — detect duplicate code in Godot Engine GDScript files.",[93,377,379],{"id":378},"v407-v406","v4.0.7 – v4.0.6",[114,381,382,389],{},[117,383,384,385,388],{},"Fixed build output issues and ",[168,386,387],{},".gitignore"," pattern parsing.",[117,390,391],{},"Merged several community pull requests.",[93,393,395],{"id":394},"v404-v402","v4.0.4 – v4.0.2",[114,397,398,408],{},[117,399,400,403,404,407],{},[120,401,402],{},"SARIF reporter"," integrated as a named reporter (",[168,405,406],{},"--reporters sarif",").",[117,409,410],{},"Fixed package resolution issues in SARIF reporter integration.",[93,412,414],{"id":413},"v400","v4.0.0",[155,416,418],{"id":417},"breaking-changes","Breaking Changes",[114,420,421,434,448,458],{},[117,422,423,426,427,430,431,108],{},[120,424,425],{},"Monorepo restructure"," — tool moved to ",[168,428,429],{},"apps\u002Fjscpd",", sub-packages extracted to ",[168,432,433],{},"packages\u002F*",[117,435,436,439,440,443,444,447],{},[120,437,438],{},"Build system replaced"," — migrated from ",[168,441,442],{},"tsc"," to ",[168,445,446],{},"tsup",", producing ESM+CJS dual-mode bundles.",[117,449,450,453,454,457],{},[120,451,452],{},"Test runner migrated"," — switched from ",[168,455,456],{},"ava"," to Vitest.",[117,459,460,108],{},[120,461,462],{},"Requires Node.js 18+",[155,464,466],{"id":465},"changes","Changes",[114,468,469,472],{},[117,470,471],{},"Monorepo migrated from Lerna to Turborepo.",[117,473,474],{},"Changesets adopted as the release management tool.",[93,476,478],{"id":477},"earlier-releases-v1x-v3x","Earlier releases (v1.x – v3.x)",[98,480,481,482,487],{},"See the ",[102,483,486],{"href":484,"rel":485},"https:\u002F\u002Fgithub.com\u002Fkucherenko\u002Fjscpd\u002Fblob\u002Fmaster\u002FCHANGELOG.md",[106],"root CHANGELOG"," for the full history of jscpd versions 1.0.0 through 3.5.10, covering the tool's origins, the TypeScript rewrite, LevelDB store, pluggable reporters, monorepo extraction, and all the improvements made from 2018 through 2023.",{"title":489,"searchDepth":490,"depth":490,"links":491},"",2,[492,493,494,495,496,501,502,503,504,505,506,507,511],{"id":95,"depth":490,"text":96},{"id":111,"depth":490,"text":112},{"id":129,"depth":490,"text":130},{"id":141,"depth":490,"text":142},{"id":152,"depth":490,"text":153,"children":497},[498,500],{"id":157,"depth":499,"text":158},3,{"id":248,"depth":499,"text":249},{"id":300,"depth":490,"text":301},{"id":309,"depth":490,"text":310},{"id":355,"depth":490,"text":356},{"id":366,"depth":490,"text":367},{"id":378,"depth":490,"text":379},{"id":394,"depth":490,"text":395},{"id":413,"depth":490,"text":414,"children":508},[509,510],{"id":417,"depth":499,"text":418},{"id":465,"depth":499,"text":466},{"id":477,"depth":490,"text":478},"Release history and what's new in jscpd.","md",null,{},{"icon":39},{"title":36,"description":518},"jscpd release notes and version history.","b3K7mt1YsQ8tkQyjrHxXGC14sUg-lkwo2cpGVLY-aYQ",[521,523],{"title":31,"path":32,"stem":33,"description":522,"icon":34,"children":-1},"Use jscpd with AI coding assistants to automatically detect and refactor code duplications.",{"title":41,"path":42,"stem":43,"description":524,"icon":46,"children":-1},"Output formats and reporters in jscpd.",1779030426301]