npm / noxcturnal
noxcturnal
What changed in noxcturnal 0.1, from its official release notes, upgrade guides and advisories. Sources checked 2026-11-15.
7 breaking4 new APIs and options4 performance1 behavior and defaults41 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli initnoxcturnal 0.157 changes
Breaking changes 7
Removed the unused preflight option; native configuration belongs on PipelinePhase.native.
Unknown enabled native options now throw.
Fragment factories require one complete expression and reject self-contained early errors while allowing unresolved enclosing bindings.
JSX configuration honors Babel comment directive precedence, rejects invalid pragmas and conflicting runtime settings, and accepts escaped identifier paths.
The optional transform setting and its session enforcement are removed.
Pattern matching returns false for nodes outside static or computed member chains and throws when the declaration required for a node is omitted.
Each plugin must declare its query categories, and mutable query requests refresh cached facts.
New APIs and options 4
Add composable selectors for field predicates and immediate parent/child relationships, including indexed list children; match conditions filter delivery and child prefetch without granting data access.
A new transform option controls how diagnostic filenames are resolved; it defaults to the current working directory.
Plugins can require actual syntax before retaining native data or hydrating children; applicability is rechecked after source changes.
Module pipelines can remove unused top-level functions without changing parser semantics.
Performance 4
Binding details are loaded only for requested names, with uncached lookups batched and cached results reused.
Child data is fetched in batches for nodes matched by visitors rather than for every node of the same type.
Function-map generation reuses the input parse, collects maps before visitor edits and native language lowering, and skips collection when function maps are disabled.
Nested traversal bounds scans to the requested source range and uses compact indexes, reducing setup cost and memory while preserving visitor behavior.
Behavior and default changes 1
Native Flow support expands to readonly properties, variance, async components, and records, with detailed fallback diagnostics preserved.
Fixes and other changes 41
Composes strict directives, helpers, preambles, and epilogues against the edited body so replacements do not consume insertion anchors, while preserving wrapper scope and source-map provenance.
Emitted output now automatically preserves module strictness independently of selected transforms or plugins, including empty and visitor-only pipelines, while retaining explicit directives and sloppy script/CommonJS behavior.
Recognize parenthesized static callee roots in calleeGlobal fields and predicates, consistent with static member paths.
Recognize parenthesized static callee roots in calleePath fields and predicates, consistent with static member paths.
Unsupported decorated class expressions now return a pristine compatibility bailout instead of reporting successful output with decorators left in JavaScript; invalid input still throws.
Fixes legacy class default exports and preserves bindings, captures, temporary owners, and helper initialization when native transforms reuse source locations.
Keeps path.skip(), path.traverse(), and subscribeWithin() within their owning AST subtrees when source locations coincide, without retaining an index for skip-only visitors.
Fixes hoisting, JSX binding resolution, and derived-effect validation for nodes that share source locations.
Preserves merged declarations and validates infer types and resource redeclarations using AST ownership instead of source locations.
Named capture group lowering no longer rejects valid regular expressions containing numeric backreferences or legacy octal escapes in strict mode.
Errors now include filenames, source locations, and Babel-style code frames, with locations traced through earlier transform phases so Metro can identify the input file and line.
Plugin hooks and visitors consistently receive the original caller filename, preserving its extension and relative form when parser overrides or adapters select a different input dialect.
Input and output JSX settings are differentiated; input JSX grammar is disabled for .ts files so they are not interpreted as .tsx.
Unreachable var initializers are removed while hoisted bindings are preserved, preventing dependencies referenced only by those initializers from being retained after block-scoping transforms.
Callee names are inferred directly from the AST, preventing anonymous IIFE bodies from becoming names; parentheses, comments, and escaped string member keys are handled correctly.
Parser, semantic analysis, code generation, transformer, and React Compiler updates fix string enum mappings and coercion, private optional-chain receivers, resource disposal, and React Compiler miscompilations.
Async lowering now preserves transform selection, labels, bindings, strictness, lexical captures, and super references; iterator-result validation follows generated bindings.
Block-scoping transforms no longer hang on function-local loop-header or iterable bindings and preserve captured loop bindings and JavaScript binding behavior.
Extracted captured loops preserve labeled exits and static-block environments, and private writes resolve in the correct class environment.
Class lowering preserves private identities, initialization, lexical environments, computed keys, optional calls, and strict super references.
Setting comments to false now removes HTML-style JavaScript comments in scripts, including in native transform phases that return unchanged input.
Decorator lowering fixes legacy ordering and accessor metadata, supports rest-parameter decorators, and preserves class replacement and auto-accessor storage.
Editor replacements follow global and sticky regular expressions, handle Unicode empty matches and named captures, and reject invalid offsets before encoding.
The published ESM entry defines require and __dirname from import.meta.url before native initialization; CommonJS loading is unchanged.
Exponentiation assignment preserves receivers across computed-key effects, and generated temporaries are isolated during recursive parameter-default evaluation.
For-of loops use Babel's standard createForOfIteratorHelper in inline and runtime modes, adopting its iterator lookup and cleanup semantics.
Inline helpers preserve bindings, dependencies, directives, hashbangs, and source maps; adapter imports are emitted in ES modules.
Static member matching requires declared native facts; literal dots and backslashes in property names are escaped in memberPath strings.
Values crossing native transport retain distinctions for negative zero, non-finite numbers, null, numeric-looking strings, and strings Rust UTF-8 cannot hold.
Object-rest lowering is unified across option modes; array rest copies values without invoking source slice or species hooks.
Optimization preserves references, names, bindings, globals, eval visibility, and dynamic writes, and avoids misinterpreting isolated-surrogate string expressions.
Optional-chain lowering preserves method receivers across mutation, keeps parameter temporaries invocation-local, and honors grouped delete and call references.
Logical-assignment receivers are preserved across private getter effects and regexp allocations, and selected nullish lowering finishes in the same phase.
Program insertion preserves directive and statement boundaries, adding an empty statement when needed to prevent attachment to the inserted statement.
Transforms preserve diagnostic thresholds, run later transforms exactly once, retain helpers and Refresh registrations, and honor directives and memo-cache invalidation.
Regexp lowering preserves token contexts, flags, Unicode boundaries, set operations, string alternatives, and named capture metadata.
Scope renaming, UID allocation, ownership, and declaration insertion handle escaped identifiers, Unicode names, binding references, and supported statement locations correctly.
Composed transforms preserve sparse anchors, unmapped regions, original symbol names, and explicit fragment mapping policies; visitor and declaration locations account for JavaScript line terminators and Unicode header trivia.
Custom JSX factory and fragment imports survive TypeScript prepasses, unused forward alias dependencies are removed without module evaluation, and enum initializer effects are retained.
Object spread retains strict semantics when useBuiltIns is enabled; classic JSX props completion is limited to calls originating from JSX elements.
Nested contracts retain declared data, aliases classify function and class instances, matching routes run once, and skip or stop applies across a plugin's routes.