Neo javascript
Neo Skills 是專為現代 AI Agent 設計的全方位能力擴充套件。本專案透過標準化的通訊架構,為 AI 代理安裝可插拔的「技能模組 (Skills)」,使其不僅僅是一個聊天機器人,而是能轉化為具備「感知-推理-行動」能力的多領域專家。
npx -y skills add Benknightdark/neo-skills --skill neo-javascriptAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 7 stars7 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Use this skill when writing, reviewing, debugging, or modernizing JavaScript across browser, Node.js, and pure JS projects. Trigger for ES module/CommonJS issues, async patterns, functional array/set/iterator code, DOM/runtime behavior, or version-aware ECMAScript syntax.
SKILL.md
9.9 KB, as published. Nobody here has run it
Modern JavaScript (ES6+) Expert Skill
Trigger On
- The user asks to write, debug, refactor, or review JavaScript code.
- The project directory contains
*.js,*.mjs, or JavaScript configuration files (e.g.,eslint.config.js,vite.config.js). - HTML files (
*.html) or Razor views (*.cshtml) contain inline<script>blocks or reference external.jsfiles via<script src="...">. - The target runtime is a modern browser (Chrome 80+, Firefox 78+, Safari 14+) or a pure JS environment.
- Code modernization is needed (e.g., converting
vartoconst/let, callbacks toasync/await, legacy scripts to ESM).
Workflow
- Perceive (Environment Awareness):
- Inspect ESLint / Biome configuration to identify the project's
ecmaVersionand coding conventions. - Determine runtime target: browser (check for DOM APIs, bundler config like
vite.config.js,webpack.config.js). - Detect JavaScript embedded in HTML (
*.html) or Razor views (*.cshtml): identify inline<script>blocks and external<script src="...">references. For.cshtmlfiles, note the interplay with Razor syntax (@directives,@section Scripts). - Identify the effective ES version upper limit based on the runtime/transpiler configuration (e.g., Babel targets, TypeScript
target, browserslist). For inline scripts without a build pipeline, default to the browser's native ES support.
- Inspect ESLint / Biome configuration to identify the project's
- Reason (Planning Phase):
- Evaluate the modernization level of the current code to determine the refactoring strategy.
- In environments targeting older runtimes (e.g., IE11 via Babel), avoid using features without polyfill support, but prioritize using
const/let, arrow functions, and template literals. - In modern environments (modern browsers), actively adopt new features to reduce boilerplate code.
- Be aware of browser-specific concerns (DOM manipulation, Web APIs, rendering performance).
- Act (Execution Phase):
- Write high-quality code using modern syntax to improve readability and maintainability.
- Implement immutable data patterns (spread operators,
Object.freeze,structuredClone, immutable array methods). - Utilize
async/awaitandPromisecomposition for asynchronous operations. - Prefer ESM (
import/export) as the standard module system.
- Validate (Standard Validation):
- Validate strict equality (
===) usage and absence ofvardeclarations. - Check if asynchronous operations correctly handle errors (
try/catcharoundawait,.catch()on Promises). - Ensure code avoids common security pitfalls (no
eval(), no prototype pollution, noinnerHTMLwith unsanitized input). - Verify naming conventions follow community standards (camelCase for variables/functions, PascalCase for classes).
- Validate strict equality (
Feature Roadmap (ES6 - ES2025+)
ES6 & ES2016-ES2019 (Origin)
- Arrow Functions:
(a, b) => a + bconcise function syntax with lexicalthisbinding. let/const: Block-scoped variable declarations replacingvar.- Template Literals:
`Hello, ${name}!`for string interpolation and multi-line strings. - Destructuring:
const { id, name } = user;extract values from objects and arrays. - Default / Rest / Spread: Default parameters,
...restparameters, and...spreadfor arrays/objects. - Classes:
classsyntax for prototype-based inheritance withconstructor,extends, andsuper. - Promises:
new Promise((resolve, reject) => ...)for asynchronous flow control. - Modules:
import/exportfor modular code organization (ES Modules). - Symbol / Map / Set: New primitive type and collection data structures.
- String Methods (ES6):
includes(),startsWith(),endsWith()for easier string searching. - Array Methods (ES6):
Array.from(),Array.of(),find(),findIndex()for enhanced array manipulation. - Number/Math Methods (ES6):
Number.isInteger(),Number.isNaN(),Math.trunc(),Math.sign(). - Generators & Iterators:
function*andfor...offor lazy iteration. async/await(ES2017): Syntactic sugar for Promise-based asynchronous code.- Object.values / Object.entries (ES2017): Iterate over object values and key-value pairs.
- Rest / Spread Properties (ES2018):
{ ...obj }for object shallow cloning and rest extraction. Promise.finally(ES2018): Execute cleanup logic regardless of fulfillment or rejection.- Async Iteration (ES2018):
for await...offor consuming async iterables. Array.flat/flatMap(ES2019): Flatten nested arrays and map-then-flatten in one step.Object.fromEntries(ES2019): Convert key-value pairs back into an object.- Optional Catch Binding (ES2019):
catch { }without requiring the error parameter.
ES2020 & ES2021 (Foundation)
- Optional Chaining (
?.): Safely access deeply nested properties without manual null checks. - Nullish Coalescing (
??): Provide defaults only fornull/undefined, unlike||which also catches0,"",false. BigInt: Arbitrary-precision integer arithmetic via123nliteral syntax.Promise.allSettled(): Wait for all promises to complete regardless of rejection.globalThis: Universal reference to the global object across all environments.- Dynamic
import(): Load modules conditionally or lazily at runtime. - Logical Assignment (
&&=,||=,??=): Combine logical operators with assignment for concise state updates. String.prototype.replaceAll(): Replace all occurrences without regex.Promise.any(): Resolve with the first fulfilled promise, reject only if all reject.- Numeric Separators:
1_000_000for readable large numbers.
ES2022 & ES2023 (Productivity)
- Top-level
await: Useawaitdirectly in ESM modules without wrapping in an async function. - Error Cause (
{ cause }): Chain errors to preserve root cause context. Array.at(): Negative indexing for arrays, e.g.,arr.at(-1)for the last element.Object.hasOwn(): Safer, prototype-independent property check replacinghasOwnProperty.- Class Fields: Public and private (
#field) instance fields and methods. - RegExp Match Indices (
/dflag): Get start/end positions of captured groups. - Immutable Array Methods:
toSorted(),toReversed(),toSpliced(),with()— return new arrays without mutation. Array.findLast()/findLastIndex(): Search arrays from the end.
ES2024 & ES2025+ (Version-Specific Features)
Promise.withResolvers(): Destructure{ promise, resolve, reject }for cleaner deferred patterns.Object.groupBy()/Map.groupBy(): Group array elements by a classifier function.- Set Methods:
union(),intersection(),difference(),symmetricDifference(),isSubsetOf(),isSupersetOf(),isDisjointFrom(). - Iterator Helpers:
.map(),.filter(),.take(),.drop(),.flatMap(),.toArray()on iterators. RegExp.escape(): Safely escape special characters for use in RegExp construction.- Import Attributes:
import data from './data.json' with { type: 'json' }. - Decorators (Stage 3): Class and method decorators for cross-cutting concerns.
Promise.try(): Safely start a promise chain from a synchronous or asynchronous function.- Well-formed Unicode Strings:
String.prototype.isWellFormed()andtoWellFormed(). - Temporal API (Stage 3): A modern replacement for the
Dateobject, providing robust date/time arithmetic. - Explicit Resource Management (Stage 3):
usingkeyword withSymbol.disposefor deterministic cleanup.
Coding Standards
- Variable Declarations: Always use
constby default; useletonly when reassignment is necessary. Never usevar. - Modules: Use ESM (
import/export) as the default module system. Useimport()for dynamic/lazy loading. - Immutability: Prefer non-mutating array methods (
toSorted,toReversed,with), spread operators, andstructuredClonefor deep copies. - Async Safety: Always wrap
awaitintry/catchor chain.catch(). Never leave Promises unhandled. UseAbortControllerfor cancellable operations.
Deliver
- Runtime-Optimized Code: Provide the most appropriate modern syntax code based on the target runtime and ES version.
- Modernization Insights: Provide specific refactoring suggestions for upgrading from older JavaScript syntax to new features (e.g., from callbacks to
async/await, fromvartoconst/let). - Syntax Explanations: Clearly explain the design intent and advantages behind the modern JavaScript features used.
Validate
- Ensure the provided code complies with the syntax specifications of the target ES version and runtime.
- Validate whether the code follows JavaScript best practices for error handling, null safety, and immutability.
- Confirm the code has good readability and modern conventions (e.g., proper use of destructuring, template literals, ESM).