d4rt 0.2.4
d4rt: ^0.2.4 copied to clipboard
An interpreter and runtime for the Dart language. It allows you to execute Dart code dynamically in your Dart/Flutter applications
0.2.4 #
- feat: Enhance enum handling with improved equality checks and add comprehensive switch statement tests
0.2.3 #
- feat: Dart 3.0+ Pattern Matching, Relational/Logical Patterns,
for-in&if-caseCollection Elements- Added support for
RelationalPattern(> 0,< 100,>= 18,<= 65,== 'admin',!= null) in switch expressions, switch statements, andif-case. - Added support for
LogicalAndPattern(>= 0 && <= 100) with cumulative variable binding. - Added support for
ParenthesizedPattern((pattern)),NullCheckPattern(pattern?),NullAssertPattern(pattern!), andCastPattern(pattern as Type). - Added
for-inpattern destructuring loops (for (final (x, y) in points)andawait for (final (x, y) in stream)). - Added
for-inpattern elements ([for (final (k, v) in map.entries) '$k=$v']) andif-caseelements ([if (user case (var name, var age) when age >= 18) name]) in List, Set, and Map collection literals. - Added guard clauses (
whenclause) inSwitchPatternCasefor switch statements.
- Added support for
- feat: Closures, Capability & Stream Subtyping (
dart:isolate)- Added subtyping bridges across
Capability,SendPort(sp is Capability),ReceivePort(rp is Stream),Isolate,RawReceivePort,RemoteError(err is Error), andTransferableTypedData. - Added support for all callable and closure types (
InterpretedFunction,Callable, nativeFunction) inIsolate.run,ReceivePort.listen, andRawReceivePorthandlers. - Reordered isolate bridge definitions ensuring
SendPortandReceivePorttake precedence over abstractCapability.
- Added subtyping bridges across
- feat:
FlowBridge,ServiceProtocolInfo, Service Constants & Closures (dart:developer)- Added
FlowDeveloperbridge withFlow.begin(),Flow.step(id),Flow.end(id), andflow.id. - Added
ServiceProtocolInfoDeveloperbridge exposingserverUriandserverWebSocketUri. - Added
staticGettersfor standard error code constants onServiceExtensionResponse(invalidParams,extensionError,extensionErrorMin,extensionErrorMax). - Added support for all callable and closure types (
InterpretedFunction,Callable, nativeFunction) inTimeline.timeSyncandregisterExtension.
- Added
- feat:
HtmlEscapeModeStatic Getters,JsonUnsupportedObjectError& Codec Subtyping (dart:convert)- Added
staticGettersonHtmlEscapeMode(attribute,element,sqAttribute,unknown) and instance mode properties (escapeQuot,escapeApos,escapeLtGt,escapeSlash). - Added
JsonUnsupportedObjectErrorConvertbridge withcause,partialResult,unsupportedObject, andisSubtypeOfFunc. - Added robust closure and
BridgedInstanceunwrapping fortoEncodableinJsonCodec.encode,JsonEncoder.convert, and globaljsonEncode. - Added subtyping bridges across
Codec,Converter,Encoding,JsonCodec,Utf8Codec,AsciiCodec,Latin1Codec,Base64Codec,HtmlEscape, andLineSplitter.
- Added
- feat:
LinkBridge,HttpStatus&FileSystemEntitySubtyping (dart:io)- Added
LinkIobridge indart:iosupporting symbolic link management (create,target,update,resolveSymbolicLinks,rename,delete,exists,stat) with permission checks. - Added
HttpStatusIobridge indart:iocontaining all standard HTTP status code constants (HttpStatus.ok,HttpStatus.notFound, etc.). - Added unified
FileSystemEntitysubtyping and optimized bridge lookup ordering forFile,Directory, andLink.
- Added
- feat:
dart:asyncReliability,unawaited& Subtyping- Fixed argument resolution in
Timer.runcallback invocation. - Added global top-level function
unawaited(Future<void> future)indart:async. - Added
isSubtypeOfFuncsubtyping bridges onFuture,Stream,StreamSubscription,StreamTransformer,StreamIterator,StreamController,Timer, andTimeoutException.
- Fixed argument resolution in
- feat:
HasNextIterator, Queue.of()Constructors & Subtyping (dart:collection)- Added
HasNextIteratorCollectionbridge supportingHasNextIterator(iterator),hasNextgetter, andnext()method. - Added
.of(elements)factory constructors toQueueCollection,ListQueueCollection, andDoubleLinkedQueueCollection. - Added
DoubleLinkedQueueEntryCollectionbridge withappend,prepend,remove,previousEntry, andnextEntry. - Added
isSubtypeOfFuncsubtyping bridges acrossQueue,ListQueue,DoubleLinkedQueue,HashMap,LinkedHashMap,SplayTreeMap,HashSet,LinkedHashSet,SplayTreeSet,LinkedList,LinkedListEntry,UnmodifiableListView,UnmodifiableMapView, andUnmodifiableSetView. - Added
LinkedHashSetCollectionbridge indart:collectionwithLinkedHashSet(),LinkedHashSet.from(),LinkedHashSet.of(), andLinkedHashSet.identity(). - Added built-in
Settype check support invisitIsExpressionfor both native and bridged sets (set is Set).
- Added
- feat: Geometry & Operators Bridge (
Rectangle.fromPoints,Pointoperators indart:math)- Added
Rectangle.fromPoints(Point a, Point b)indart:math. - Added binary operator dispatch (
+,-,*, etc.) for bridged instances in expressions. - Added robust unwrapping and
isSubtypeOfFunconPoint,Rectangle, andMutableRectangle.
- Added
- feat:
TypedDataSupertype Bridge & Polymorphism (dart:typed_data)- Added
TypedDataBaseTypedDatabridge indart:typed_dataenablingdata is TypedDatatype checks and direct property access (buffer,lengthInBytes,offsetInBytes,elementSizeInBytes). - Improved
isSubtypeOfresolution across all bridged classes when unwrappingBridgedInstancevalues.
- Added
- feat: Advanced JSON Support & Automatic
toJson()Serialization (dart:convert)- Added
JsonEncoder.withIndent(indent, [toEncodable])for pretty-printing JSON in interpreted code. - Added automatic serialization of interpreted class instances defining
toJson()injsonEncode(...)andJsonEncoder. - Added full closure compatibility for
toEncodableandrevivercallbacks.
- Added
- feat: Record Supertype Bridge (
Record)- Added
RecordCorebridge indart:coreallowingrec is Recordtype checks and record inspection.
- Added
- feat: Collection View Bridge (
MapView)- Added
MapViewCollectionindart:collectionfor wrapping and delegating map operations.
- Added
- feat: Hashing Utilities (
Object.hash,Object.hashAll,Object.hashAllUnordered)- Added modern Dart hashing utilities in
dart:corefor custom object hashing and composite key creation.
- Added modern Dart hashing utilities in
- feat: Microtask Scheduling & Zones (
scheduleMicrotask&Zone)- Added
scheduleMicrotask(void Function() callback)indart:async. - Added full bridge for
Zone(Zone.current,Zone.root,zone.run(...),zone.runGuarded(...),zone.inSameErrorZone(...),zone[key]).
- Added
- feat: Enhanced CLI Tooling (
bin/d4rt.dart)- Added
--eval/-e "<code>"flag to evaluate inline Dart scripts directly from the CLI. - Added
--introspection/-i <file>and--json-introspection <file>to inspect declaration metadata via CLI.
- Added
- feat: Output Redirection & Print Interception (
onPrint)- Added
onPrint: void Function(String)?callback toD4rt(...),d4rt.execute(...),d4rt.eval(...), andd4rt.executeCompiled(...)for capturing/redirecting script output.
- Added
- feat:
dart:asyncZones & Error Boundaries (runZoned&runZonedGuarded)- Added global
runZonedandrunZonedGuardedindart:asyncstandard library.
- Added global
- feat: Introspection JSON Serialization (
toMap&toJson)- Added
toMap()andtoJson()toIntrospectionResult,DeclarationInfo,FunctionInfo,ClassInfo,EnumInfo,VariableInfo, andExtensionInfo.
- Added
- feat: Extension Type Support
- Full support for Dart extension types, representation fields, custom constructors, methods, and getters/setters.
- feat: Precompiled Scripts & AST Caching (
PrecompiledScript)- Added
d4rt.compile(source: ...)to pre-parse and validate scripts without immediate execution. - Added
d4rt.executeCompiled(script, ...)for high-performance repeated execution. - Added automatic AST caching support (
D4rt(enableAstCache: true)).
- Added
- feat: Sandbox Execution Limits & Timeout Protection
- Added
timeout: Duration?andmaxSteps: int?parameters toexecute(),eval(), andexecuteCompiled(). - Added
ExecutionTimeoutExceptionandExecutionLimitExceptionto guard against infinite loops and CPU runaway.
- Added
- feat: Interactive CLI & REPL Tool
- Added command-line executable (
bin/d4rt.dart&bin/interpreter.dart) to run Dart scripts or start an interactive REPL (dart run d4rt). - Interactive REPL features multiline statement input, environment persistence, and commands (
:help,:clear,:exit).
- Added command-line executable (
- feat: Standard Library Enhancements & Completeness
- Added
dart:developerlibrary withlog(...),debugger(...),inspect(...),postEvent(...),registerExtension(...),Timeline,TimelineTask,UserTag,Service, andServiceExtensionResponse. - Added
Expando,RuneIterator,WeakReference,Finalizer, andStopwatchindart:core. - Extended
StackTrace(StackTrace.fromString(...),StackTrace.current,StackTrace.empty) indart:core. - Added
DateTime.copyWithindart:core. - Added
BytesBuilder,Int64List,Uint64List,Int8List,Uint8ClampedList,Uint16List,Int32List,Uint32List, andFloat64Listindart:typed_data. - Added
Completer.sync()indart:async. - Added
LineSplitter.split(...)and hardenedbase64Encode/base64UrlEncodeindart:convert. - Added
SplayTreeSet,DoubleLinkedQueue,UnmodifiableMapView, andUnmodifiableSetViewindart:collection. - Added
MutableRectangleindart:math. - Hardened
Uriconstructors and methods against dynamic collection arguments. - Enhanced universal runtime type subtyping (
BridgedClass.isSubtypeOf).
- Added
- fix: Dart Web Platform Compatibility
- Fixed runtime type resolution for
intreturn types on Dart Web (#6). - Fixed property access and method calls on native JS collections like
JSArrayfromString.split()(#8).
- Fixed runtime type resolution for
0.2.2 #
- feat: Extension Type Support
- New additional features & Bug fixes
0.2.1 #
- feat: Enum Support Enhancement
- Add native-like
valuesaccess for both interpreted and bridged enums.
- Add native-like
- fix: Bridge Generator Improvements
- Fix generic collection extraction syntax (remove extra spaces/invalid tags).
- Prevent instantiation of abstract classes in generated bridges.
- Remove redundant
?? nulloperators from generated code. - Fix aggressive type inference for common parameter names like
key.
0.2.0 #
- misc:
- Update analyzer to version 10.0.2.
- Refactor deprecated fields.
- Downgrade analyzer to version to 8.4.0
- feat: Bridge Code Generation Support
- feat: Library Tracking & Deduplication - Canonical source tracking for bridge deduplication
0.1.9 #
-
feat:positionalArgs and namedArgs - Pass arguments directly to functions via execute()
- Add
positionalArgsparameter to D4rt.execute() for passing positional arguments - Add
namedArgsparameter to D4rt.execute() for passing named arguments - Support complex data types (List, Map, nested structures) as arguments
- Support function callbacks and async functions as arguments
- Add 33 comprehensive test cases covering all argument passing patterns
- Add parameter introspection methods:
positionalParameterNamesandnamedParameterNamesgetters
- Add
-
feat: Introspection API - Analyze code structure and get metadata at runtime
- Add
analyze()method to D4rt for code analysis without execution - Create IntrospectionResult with metadata about functions, classes, enums, variables, and extensions
- Extract function signatures including parameter names, types, and default values
- Extract class information: inheritance, mixins, interfaces, constructors, methods
- Extract enum values and variants
- Extract variable declarations and initializers
- Extract extension definitions and extended types
- Use AST-based analysis for accurate metadata extraction
- Add 38 comprehensive test cases covering all declaration types and complex scenarios
- Add
-
feat: eval() method - Dynamically execute code with current execution state
- Add
eval()method to D4rt for dynamic code execution - Preserve execution environment across eval calls
- Support access to previously defined variables and functions
- Support complex expressions and statements in eval
- Support async/await in eval expressions
- Add 39 comprehensive test cases covering expression evaluation and statement execution
- Add
-
fix: Environment import handling - Tolerate duplicate imports with identical values
- Allow re-importing the same symbol if the value is identical (same reference)
- Use
identical()comparison for duplicate detection - Support imports via multiple paths without conflict errors
0.1.8 #
- fix: security sandboxing with permission checks for file, process, and network operations; add platform access control
0.1.7 #
- feat: Security sandboxing system - Comprehensive permission-based security system to restrict dangerous operations
- Implement modular permission system with
FilesystemPermission,NetworkPermission,ProcessRunPermission,IsolatePermission - Block access to dangerous modules (
dart:io,dart:isolate) by default unless explicitly granted - Add
d4rt.grant(),d4rt.revoke(),d4rt.hasPermission()methods for permission management - Integrate permission checking into module loading and import directives
- Support fine-grained permissions (specific paths, commands, network hosts)
- Add comprehensive security tests to prevent malicious code execution
- Enable safe execution environment for untrusted code
- Implement modular permission system with
0.1.6 #
- fix: Nested for-in loops in async contexts now work correctly
- fix: Async nested for-in loops with await for streams works
- feat: enhance async execution state to support nested await-for loops and improve iterator management; add comprehensive tests for complex async scenarios
- feat: Compound super operators - Support for compound assignment operators on super properties (+=, -=, *=, /=, ~/=, %=, &=, |=, ^=, <<=, >>=, >>>=)
- Implement proper lookup and evaluation of super properties in compound assignments
- Support for both interpreted and bridged superclass properties
- Add 6 comprehensive test cases covering all operator types and nested inheritance
- feat: Bridged static methods as values - Bridged static methods can now be treated as first-class function values
- Support for accessing bridged static methods as callable values (e.g.,
int.parse) - Enable passing bridged static methods to higher-order functions
- Store bridged static methods in collections and variables
- Add 5 test cases for static method value usage patterns
- Support for accessing bridged static methods as callable values (e.g.,
- feat: Complex generic type checking - Enhanced runtime type checking for generic collections with type parameters
- Support
isoperator with parameterized types (List - Runtime validation of generic type constraints
- Proper handling of nested generic types and null safety
- Add 10 comprehensive test cases for various generic type checking scenarios
- Support
- feat: Complex await assignments - Advanced await expression support in various contexts
- Support await in conditional expressions (ternary operator)
- Support await in list/map literals and collection operations
- Support await in compound assignments and complex expressions
- Support await in constructor arguments and method chains
- Add 10 test cases covering complex async assignment patterns
- feat: Stream transformers - Complete implementation of StreamTransformer and stream manipulation
- Implement
StreamTransformer.fromHandlerswith handleData, handleError, handleDone - Support stream transformation with custom logic
- Implement bidirectional stream transformers
- Support stream event handling and error propagation
- Add 10 comprehensive test cases for stream transformation patterns
- Implement
- feat: Const expressions complexes - Enhanced support for const expressions in various contexts
- Support const List and Map literals with type parameters
- Support const expressions in field initializers and default parameters
- Support nested const collections and complex const expressions
- Proper compile-time evaluation of const expressions
- Add 15 test cases covering const expression usage patterns
- feat: Feature #7 - Enhanced enums with mixins - Enums can now use mixins to add functionality
- Support
enum Name with Mixinsyntax - Mixins can add methods, getters, and properties to enum values
- Support multiple mixins on a single enum
- Full integration with enum values (index, name, toString)
- Add 15 comprehensive test cases for enum-mixin combinations
- Support
- feat: Extensions statiques - Extensions can now declare static members (methods, getters, setters, fields)
- Implement static member storage in
InterpretedExtensionclass - Add static member access via
Extension.membersyntax - Support static method calls, property access, and assignments
- Add support for prefix/postfix increment/decrement operators on static extension fields
- Add 15 comprehensive test cases covering all static extension member types
- Implement static member storage in
- feat: Enhance compound super assignments for bridged classes - Full support for compound assignments on properties inherited from bridged superclasses
- Fix
visitAssignmentExpressionto handle bridged superclass getters/setters in compoundsuperassignments - Fix
InterpretedInstance.get()to properly traverse bridged superclass hierarchy at each inheritance level - Fix
InterpretedInstance.set()to properly handle bridged superclass setters at each inheritance level - Support nested inheritance chains (Interpreted → Interpreted → Bridged)
- Add 5 comprehensive test cases for bridged super compound assignments
- Fix
- Total test count: 1269 tests passing - All 8 planned features fully implemented with comprehensive test coverage
0.1.5 #
- feat: implement handling of factory constructors in InterpreterVisitor; add comprehensive tests for factory constructor behavior
- feat: enhance async execution state and interpreter visitor to support break/continue handling; add comprehensive tests for nested async loops
- feat: enhance async execution state and interpreter visitor to support async* generators; add comprehensive tests for generator behavior and control flow
0.1.4 #
- feat: add methods to find and retrieve bridged enum values in Environment and InterpreterVisitor; enhance handling of bridged enums in property access and binary expressions
- feat: enhance documentation across multiple files; add examples and clarify class functionalities in D4rt interpreter
0.1.3 #
- Implement complete
latevariable support with lazy initialization and proper error handling - Add comprehensive late variable test coverage (33 test cases) including static fields, instance fields, final constraints, and error conditions
- Add LateVariable class with proper uninitialized access detection and assignment validation
- Enhance interpreter visitor to handle late variables in all contexts (local, static, instance)
- Fix nullable variable handling in interpreted class instances
- Add ComparableCore bridge to core standard library for better type comparison support
- Update documentation and project description for better clarity
0.1.2+1 #
- update project description in pubspec.yaml
- docs: minor updates to documentation in README.md
0.1.2 #
- Implement complete Isolate API with Capability, IsolateSpawnException, Isolate, SendPort, ReceivePort, RawReceivePort, RemoteError, and TransferableTypedData classes
- Add comprehensive isolate communication and message passing support
- Enhance async capabilities with Timer functionality and improved error handling
- Add UnawaitedAsync and TimeoutExceptionAsync classes for better async error management
- Implement additional HTTP methods and error handling in HttpClientIo
- Add toString method to DirectoryIo for better debugging
- Enhance FileSystemEntity with parentOf method and FileStat improvements
- Add FileSystemEvent static getters and methods
- Implement RawSocket and additional Socket classes for network programming
- Enhance Stream and Socket classes with additional utility methods
- Add IOSink, ProcessIo, and StringSink classes for improved I/O operations
- Implement Comparable interface for better type comparison support
- Add comprehensive test coverage for isolate, socket, and I/O functionality
- Update core typed data classes (Uint8List, Int16List, Float32List) with enhanced functionality
- Add list extension utilities for better collection manipulation
0.1.1 #
- Implement await for-in loop support for streams in interpreter
- Enhance pattern matching with support for rest elements in lists and maps
- Add support for await expressions in function and constructor arguments
- BREAKING CHANGE: BridgedClassDefinition has been removed and replaced with BridgedClass
0.1.0 #
- Added runtime checks for generic type constraints.
- Added support for compound bitwise assignment operators (&=, |=, etc.).
- Introduced Int16List and Float32List in typed_data.
0.0.9 #
- full support (generic classes/functions, type constraints, runtime validation)
- use BridgedClassDefinition for all Stdlib
- Support adjacent string literals in interpreter
- add operators support for InterpretedClass
- more features
0.0.8 #
- expose visitor getter
- add support for bridged mixins
- enhance async execution state with nested loop support
0.0.7 #
- fix: support null safety
0.0.6 #
- Update docs
0.0.5 #
- minor fix
0.0.4 #
- Add 'import/export' directive support, support for 'show' and 'hide' combinators
- Add some dart:collection & dart:typed_data
- Support for ParenthesizedExpression property access in simpleIdentifier in async state
0.0.3 #
- Fix infinite loop when using rethrow in try catch in async state
0.0.2 #
- Support web
- Fix return nativeValue for BridgedEnumValue to BridgedInstance argument
0.0.1 #
- Initial version.