Full Code of Snapchat/Valdi for AI

main fe36c5039ac2 cached
5995 files
34.3 MB
4.3M tokens
10519 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (17,129K chars total). Download the full file to get everything.
Repository: Snapchat/Valdi
Branch: main
Commit: fe36c5039ac2
Files: 5995
Total size: 34.3 MB

Directory structure:
gitextract_meqeqabv/

├── .bazelignore
├── .bazelrc
├── .bazelversion
├── .cursorrules
├── .editorconfig
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   ├── documentation.md
│   │   └── feature_request.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   └── workflows/
│       ├── README.md
│       ├── bzl-changes.yml
│       ├── comment-test-results.yml
│       ├── pr-size-labeler.yml
│       ├── publish-npm.yml
│       ├── release-test.yml
│       ├── test-cli-linux.yml
│       └── welcome.yml
├── .gitignore
├── .prettierrc.json
├── AGENTS.md
├── BUILD.bazel
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE.md
├── MODULE.bazel
├── README.md
├── SECURITY.md
├── WORKSPACE
├── WORKSPACE.bzlmod
├── ai-skills/
│   ├── CONTRIBUTING_SKILLS.md
│   ├── registry.json
│   └── skills/
│       ├── valdi-android/
│       │   └── skill.md
│       ├── valdi-async/
│       │   ├── skill.md
│       │   └── tests/
│       │       ├── BUILD.bazel
│       │       ├── README.md
│       │       ├── src/
│       │       │   └── reference.tsx
│       │       └── tsconfig.json
│       ├── valdi-bazel/
│       │   └── skill.md
│       ├── valdi-compiler/
│       │   └── skill.md
│       ├── valdi-component-tests/
│       │   ├── skill.md
│       │   └── tests/
│       │       ├── BUILD.bazel
│       │       ├── README.md
│       │       ├── src/
│       │       │   └── ProfileCard.tsx
│       │       ├── test/
│       │       │   └── ProfileCardTest.spec.tsx
│       │       └── tsconfig.json
│       ├── valdi-cpp-runtime/
│       │   └── skill.md
│       ├── valdi-custom-view/
│       │   └── skill.md
│       ├── valdi-ios/
│       │   └── skill.md
│       ├── valdi-migrate/
│       │   ├── skill.md
│       │   └── tests/
│       │       ├── .gitignore
│       │       ├── BUILD.bazel
│       │       ├── README.md
│       │       ├── check_antipatterns.py
│       │       ├── compose_example.kt
│       │       ├── flutter_example.dart
│       │       ├── react_example.tsx
│       │       ├── src/
│       │       │   └── expected_valdi.tsx
│       │       └── tsconfig.json
│       ├── valdi-overview/
│       │   └── skill.md
│       ├── valdi-perf/
│       │   ├── skill.md
│       │   └── tests/
│       │       ├── BUILD.bazel
│       │       ├── README.md
│       │       ├── src/
│       │       │   └── reference.tsx
│       │       └── tsconfig.json
│       ├── valdi-polyglot-module/
│       │   └── skill.md
│       ├── valdi-setup/
│       │   └── skill.md
│       ├── valdi-testing/
│       │   └── skill.md
│       └── valdi-tsx/
│           ├── skill.md
│           └── tests/
│               ├── BUILD.bazel
│               ├── README.md
│               ├── src/
│               │   └── reference.tsx
│               └── tsconfig.json
├── apps/
│   ├── .prettierrc.json
│   ├── benchmark/
│   │   ├── BUILD.bazel
│   │   ├── app_assets/
│   │   │   ├── android/
│   │   │   │   └── values/
│   │   │   │       ├── colors.xml
│   │   │   │       └── themes.xml
│   │   │   └── ios/
│   │   │       └── Icons.xcassets/
│   │   │           └── AppIcon.appiconset/
│   │   │               └── Contents.json
│   │   └── src/
│   │       ├── android/
│   │       │   ├── BUILD.bazel
│   │       │   └── MyNativeModuleFactory.kt
│   │       ├── cpp/
│   │       │   ├── BUILD.bazel
│   │       │   └── CppModule.cpp
│   │       ├── ios/
│   │       │   ├── BUILD.bazel
│   │       │   └── SCMyNativeModuleFactory.m
│   │       └── valdi/
│   │           └── benchmark/
│   │               ├── BUILD.bazel
│   │               ├── src/
│   │               │   ├── BenchmarkApp.tsx
│   │               │   ├── BenchmarkSingleRunComponent.tsx
│   │               │   ├── DrawFrameBenchmark.tsx
│   │               │   ├── MarshallingTest.tsx
│   │               │   ├── MicroBenchTest.tsx
│   │               │   ├── NativeHelper.d.ts
│   │               │   ├── ProtoImportTest.tsx
│   │               │   ├── RenderTest.tsx
│   │               │   ├── complex_test.proto
│   │               │   ├── cpp.d.ts
│   │               │   ├── main.tsx
│   │               │   ├── microbench.js
│   │               │   ├── proto.protodecl
│   │               │   └── proto_noidx.protodecl
│   │               └── tsconfig.json
│   ├── cli_example/
│   │   ├── BUILD.bazel
│   │   └── index.tsx
│   ├── helloworld/
│   │   ├── .eslintrc.js
│   │   ├── BUILD.bazel
│   │   ├── app_assets/
│   │   │   ├── android/
│   │   │   │   └── values/
│   │   │   │       ├── colors.xml
│   │   │   │       └── themes.xml
│   │   │   └── ios/
│   │   │       └── Icons.xcassets/
│   │   │           └── AppIcon.appiconset/
│   │   │               └── Contents.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── android/
│   │   │   │   ├── BUILD.bazel
│   │   │   │   └── MyNativeModuleFactory.kt
│   │   │   ├── cpp/
│   │   │   │   ├── BUILD.bazel
│   │   │   │   ├── CppModule.cpp
│   │   │   │   └── DesktopMyNativeModule.cpp
│   │   │   ├── ios/
│   │   │   │   ├── BUILD.bazel
│   │   │   │   └── SCMyNativeModuleFactory.m
│   │   │   └── valdi/
│   │   │       ├── .terserrc.json
│   │   │       ├── _configs/
│   │   │       │   ├── base.tsconfig.json
│   │   │       │   └── eslint.tsconfig.json
│   │   │       ├── hello_world/
│   │   │       │   ├── BUILD.bazel
│   │   │       │   ├── src/
│   │   │       │   │   ├── CppModule.d.ts
│   │   │       │   │   ├── GettingStartedCodelab.tsx
│   │   │       │   │   ├── HelloWorldApp.tsx
│   │   │       │   │   ├── NativeModule.d.ts
│   │   │       │   │   └── index.ts
│   │   │       │   └── tsconfig.json
│   │   │       └── tsconfig.json
│   │   └── standalone_app/
│   │       ├── BUILD.bazel
│   │       ├── README.md
│   │       ├── android/
│   │       │   └── Main.kt
│   │       └── androidTest/
│   │           ├── AndroidManifest.xml
│   │           └── LaunchTest.kt
│   ├── managed_context_example/
│   │   ├── BUILD.bazel
│   │   └── ManagedContextExample.tsx
│   ├── navigation_example/
│   │   ├── BUILD.bazel
│   │   ├── NavigationExample.tsx
│   │   └── tsconfig.json
│   └── valdi_gpt/
│       ├── .eslintrc.js
│       ├── BUILD.bazel
│       ├── package.json
│       ├── src/
│       │   └── valdi/
│       │       ├── .terserrc.json
│       │       ├── _configs/
│       │       │   ├── base.tsconfig.json
│       │       │   └── eslint.tsconfig.json
│       │       ├── ai_service/
│       │       │   ├── BUILD.bazel
│       │       │   ├── src/
│       │       │   │   ├── AiService.ts
│       │       │   │   └── OpenAi.ts
│       │       │   └── tsconfig.json
│       │       ├── conversation/
│       │       │   ├── BUILD.bazel
│       │       │   ├── src/
│       │       │   │   ├── Conversation.tsx
│       │       │   │   ├── InputBar.tsx
│       │       │   │   ├── Message.tsx
│       │       │   │   └── index.ts
│       │       │   ├── test/
│       │       │   │   └── Conversation.spec.tsx
│       │       │   └── tsconfig.json
│       │       ├── tsconfig.json
│       │       └── valdi_gpt/
│       │           ├── BUILD.bazel
│       │           ├── src/
│       │           │   ├── ValdiGptApp.tsx
│       │           │   └── types/
│       │           │       ├── Long.d.ts
│       │           │       └── globals.d.ts
│       │           └── tsconfig.json
│       └── web_demo/
│           ├── README.md
│           ├── package.json
│           ├── src/
│           │   ├── App.js
│           │   ├── App.scss
│           │   ├── RegisterNativeModules.js
│           │   ├── index.html
│           │   └── index.js
│           └── webpack.config.js
├── bin/
│   ├── BUILD.bazel
│   ├── MODULE.bazel
│   ├── WORKSPACE
│   ├── compiler/
│   │   ├── linux/
│   │   │   └── valdi_compiler
│   │   └── macos/
│   │       └── valdi_compiler
│   └── pngquant/
│       ├── linux/
│       │   └── pngquant
│       └── macos/
│           └── pngquant
├── bzl/
│   ├── BUILD.bazel
│   ├── additional_dependencies.bzl
│   ├── android/
│   │   ├── BUILD.bazel
│   │   ├── collect_android_assets.bzl
│   │   ├── filter_jar.bzl
│   │   ├── package_aar.bzl
│   │   ├── platform_transition.bzl
│   │   └── zip_relative.sh
│   ├── asset_package.bzl
│   ├── client_objc_library.bzl
│   ├── common/
│   │   ├── BUILD.bazel
│   │   ├── application_names.bzl
│   │   └── nodejs_info.bzl
│   ├── conditions/
│   │   ├── BUILD.bazel
│   │   ├── custom_selects.bzl
│   │   └── selects.bzl
│   ├── constants/
│   │   └── BUILD.bazel
│   ├── dependencies.bzl
│   ├── expand_template.bzl
│   ├── ide/
│   │   └── open_source.bazelproject
│   ├── macros/
│   │   ├── BUILD.bazel
│   │   ├── MODULE.bazel
│   │   ├── WORKSPACE
│   │   └── android.bzl
│   ├── modulemap.bzl
│   ├── nested_repository.bzl
│   ├── platforms/
│   │   ├── BUILD.bazel
│   │   ├── MODULE.bazel
│   │   ├── WORKSPACE
│   │   ├── conditions/
│   │   │   └── BUILD.bazel
│   │   ├── flavors/
│   │   │   └── BUILD.bazel
│   │   ├── os/
│   │   │   └── BUILD.bazel
│   │   └── toggles/
│   │       └── BUILD.bazel
│   ├── prebuilt_tools.bzl
│   ├── runtime_flags/
│   │   └── BUILD.bazel
│   ├── toolchains/
│   │   ├── BUILD.bazel
│   │   ├── MODULE.bazel
│   │   └── WORKSPACE
│   ├── valdi/
│   │   ├── AndroidManifest.xml.tpl
│   │   ├── BUILD.bazel
│   │   ├── Empty.bundle/
│   │   │   └── Info.plist
│   │   ├── Info.plist
│   │   ├── app_templates/
│   │   │   ├── AndroidDebugAppManifest.xml.tpl
│   │   │   ├── AndroidLibManifest.xml
│   │   │   ├── AndroidReleaseAppManifest.xml.tpl
│   │   │   ├── BUILD.bazel
│   │   │   ├── Info.plist.tpl
│   │   │   ├── StartActivity.kt.tpl
│   │   │   ├── cli_main.cpp.tpl
│   │   │   ├── ios_main.m.tpl
│   │   │   └── macos_main.m.tpl
│   │   ├── common.bzl
│   │   ├── empty.c
│   │   ├── empty.js
│   │   ├── empty.kt
│   │   ├── empty.swift
│   │   ├── extract_cpp_srcs.bzl
│   │   ├── extract_objc_srcs.bzl
│   │   ├── extract_swift_srcs.bzl
│   │   ├── generate_android_manifest.bzl
│   │   ├── localizable_strings.bzl
│   │   ├── npm/
│   │   │   ├── BUILD.bazel
│   │   │   ├── README.md
│   │   │   ├── package.json
│   │   │   ├── pnpm-workspace.yaml
│   │   │   └── repositories.bzl
│   │   ├── package.json.tmpl
│   │   ├── rewrite_hdrs.bzl
│   │   ├── snap_macros/
│   │   │   ├── BUILD.bazel
│   │   │   ├── MODULE.bazel
│   │   │   ├── WORKSPACE
│   │   │   ├── internal/
│   │   │   │   └── sourcegen/
│   │   │   │       └── valdi_context_factory.bzl
│   │   │   └── library/
│   │   │       └── snap_client_ios_library.bzl
│   │   ├── source_set/
│   │   │   ├── BUILD.bazel
│   │   │   ├── source_set.bzl
│   │   │   └── utils.bzl
│   │   ├── suffixed_deps.bzl
│   │   ├── toolchains.bzl
│   │   ├── tsconfig.json
│   │   ├── valdi_android_application.bzl
│   │   ├── valdi_android_library.bzl
│   │   ├── valdi_application.bzl
│   │   ├── valdi_cli_application.bzl
│   │   ├── valdi_collapse_web_paths.bzl
│   │   ├── valdi_compiled.bzl
│   │   ├── valdi_config.yaml.tpl
│   │   ├── valdi_exported_library.bzl
│   │   ├── valdi_extract_output_rule_helper.bzl
│   │   ├── valdi_ios_application.bzl
│   │   ├── valdi_macos_application.bzl
│   │   ├── valdi_module.bzl
│   │   ├── valdi_module_android_common.bzl
│   │   ├── valdi_module_info_extractor.bzl
│   │   ├── valdi_module_native.bzl
│   │   ├── valdi_paths.bzl
│   │   ├── valdi_projectsync.bzl
│   │   ├── valdi_protodecl_to_js.bzl
│   │   ├── valdi_run_compiler.bzl
│   │   ├── valdi_static_resource.bzl
│   │   ├── valdi_test.bzl
│   │   ├── valdi_toolchain.bzl
│   │   ├── valdi_toolchain_binary.bzl
│   │   └── valdi_toolchain_type.bzl
│   ├── valdi_compiler_repos_extension.bzl
│   ├── valdi_library.bzl
│   ├── workspace_init.bzl
│   ├── workspace_postinit.bzl
│   ├── workspace_preinit.bzl
│   └── workspace_prepare.bzl
├── compiler/
│   ├── companion/
│   │   ├── .gitignore
│   │   ├── .npmrc
│   │   ├── .nvmrc
│   │   ├── .prettierignore
│   │   ├── .prettierrc.json
│   │   ├── .vscode/
│   │   │   └── settings.json
│   │   ├── BUILD.bazel
│   │   ├── GIT_HASH
│   │   ├── README.md
│   │   ├── jest.config.js
│   │   ├── package.json
│   │   ├── remotedebug-ios-webkit-adapter/
│   │   │   ├── .editorconfig
│   │   │   ├── .github/
│   │   │   │   └── workflows/
│   │   │   │       ├── auto_tags.yml
│   │   │   │       ├── build.yml
│   │   │   │       └── publish.yml
│   │   │   ├── .gitignore
│   │   │   ├── .npmignore
│   │   │   ├── .nvmrc
│   │   │   ├── BUILD.bazel
│   │   │   ├── README.md
│   │   │   ├── bin/
│   │   │   │   └── remotedebug-ios-webkit-adapter
│   │   │   ├── gulpfile.js
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   ├── adapters/
│   │   │   │   │   ├── adapter.ts
│   │   │   │   │   ├── adapterCollection.ts
│   │   │   │   │   ├── adapterInterfaces.ts
│   │   │   │   │   ├── androidAdapter.ts
│   │   │   │   │   ├── hermesAdapter.ts
│   │   │   │   │   ├── iosAdapter.ts
│   │   │   │   │   ├── testAdapter.ts
│   │   │   │   │   └── universalAdapter.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── iosSimulatorSocketFinder.ts
│   │   │   │   ├── lib/
│   │   │   │   │   ├── mock-socket.d.ts
│   │   │   │   │   └── test-targets.json
│   │   │   │   ├── logger.ts
│   │   │   │   ├── protocols/
│   │   │   │   │   ├── androidTarget.ts
│   │   │   │   │   ├── hermes/
│   │   │   │   │   │   └── hermes.ts
│   │   │   │   │   ├── ios/
│   │   │   │   │   │   ├── ios.ts
│   │   │   │   │   │   ├── ios12.ts
│   │   │   │   │   │   ├── ios8.ts
│   │   │   │   │   │   ├── ios9.ts
│   │   │   │   │   │   └── screencast.ts
│   │   │   │   │   ├── iosTarget.ts
│   │   │   │   │   ├── protocol.ts
│   │   │   │   │   └── target.ts
│   │   │   │   └── server.ts
│   │   │   ├── test/
│   │   │   │   ├── helperMocks.ts
│   │   │   │   └── protocols/
│   │   │   │       └── target.test.ts
│   │   │   ├── test.css
│   │   │   ├── tsconfig.json
│   │   │   └── tslint.json
│   │   ├── scripts/
│   │   │   ├── run.sh
│   │   │   ├── run_dev.sh
│   │   │   └── update_companion.sh
│   │   ├── src/
│   │   │   ├── AST.spec.ts
│   │   │   ├── AST.ts
│   │   │   ├── BatchMinifier.ts
│   │   │   ├── CodeInstrumentation.ts
│   │   │   ├── CompanionServiceBase.ts
│   │   │   ├── CompilerCompanion.ts
│   │   │   ├── ConsoleLogTransformer.spec.ts
│   │   │   ├── ConsoleLogTransformer.ts
│   │   │   ├── DebuggingProxy.ts
│   │   │   ├── GenerateIds.spec.ts
│   │   │   ├── GenerateIds.ts
│   │   │   ├── GeneratedFileHeader.ts
│   │   │   ├── IWorkspace.d.ts
│   │   │   ├── Identifier.ts
│   │   │   ├── JSXProcessor.spec.ts
│   │   │   ├── JSXProcessor.ts
│   │   │   ├── ObjectiveCWriter.ts
│   │   │   ├── OutputWriter.ts
│   │   │   ├── SourceMapUtils.ts
│   │   │   ├── TSUtils.spec.ts
│   │   │   ├── TSUtils.ts
│   │   │   ├── Workspace.ts
│   │   │   ├── WorkspaceStore.ts
│   │   │   ├── ZombieKiller.ts
│   │   │   ├── cache/
│   │   │   │   ├── CachingWorkspace.spec.ts
│   │   │   │   ├── CachingWorkspace.ts
│   │   │   │   ├── CachingWorkspaceFactory.ts
│   │   │   │   ├── CircularLoopTracker.spec.ts
│   │   │   │   ├── CircularLoopTracker.ts
│   │   │   │   ├── ICompilationCache.d.ts
│   │   │   │   ├── SQLiteCompilationCache.spec.ts
│   │   │   │   └── SQLiteCompilationCache.ts
│   │   │   ├── cli/
│   │   │   │   ├── generateGhostOwnershipMap.ts
│   │   │   │   └── rewriteImports.ts
│   │   │   ├── index.ts
│   │   │   ├── index_tsnode.js
│   │   │   ├── logger/
│   │   │   │   ├── ILogger.ts
│   │   │   │   ├── LoggerUtils.ts
│   │   │   │   ├── ProtocolLogger.ts
│   │   │   │   └── StreamLogger.ts
│   │   │   ├── native/
│   │   │   │   ├── CompileNativeCommand.ts
│   │   │   │   ├── IRtoString.ts
│   │   │   │   ├── NativeCodeWriter.ts
│   │   │   │   ├── NativeCompiler.spec.ts
│   │   │   │   ├── NativeCompiler.ts
│   │   │   │   ├── NativeCompilerOptions.ts
│   │   │   │   ├── NativeHelper.ts
│   │   │   │   ├── builder/
│   │   │   │   │   ├── INativeCompilerBuilder.ts
│   │   │   │   │   ├── NativeCompilerBuilder.ts
│   │   │   │   │   ├── NativeCompilerBuilderIR.ts
│   │   │   │   │   ├── VariableContext.ts
│   │   │   │   │   └── internal/
│   │   │   │   │       ├── NativeCompilerBlockBuilderContext.ts
│   │   │   │   │       └── transformers/
│   │   │   │   │           ├── NativeCompilerTransformerAutoRelease.ts
│   │   │   │   │           ├── NativeCompilerTransformerConstantFolding.ts
│   │   │   │   │           ├── NativeCompilerTransformerInsertRetainRelease.ts
│   │   │   │   │           ├── NativeCompilerTransformerMergeRelease.ts
│   │   │   │   │           ├── NativeCompilerTransformerOptimizeAssignments.ts
│   │   │   │   │           ├── NativeCompilerTransformerOptimizeLoads.ts
│   │   │   │   │           ├── NativeCompilerTransformerOptimizeVarRefs.ts
│   │   │   │   │           ├── NativeCompilerTransformerResolveBuilderStubs.ts
│   │   │   │   │           ├── NativeCompilerTransformerResolveSlots.ts
│   │   │   │   │           └── utils/
│   │   │   │   │               ├── IRVisitors.ts
│   │   │   │   │               └── JumpIndexer.ts
│   │   │   │   ├── emitter/
│   │   │   │   │   ├── CompilerNativeCEmitter.ts
│   │   │   │   │   └── INativeCompilerEmitter.ts
│   │   │   │   └── utils/
│   │   │   │       ├── AssignmentTracker.ts
│   │   │   │       ├── NameAllocator.ts
│   │   │   │       ├── NamePath.ts
│   │   │   │       ├── StringEscape.ts
│   │   │   │       └── VariableIdMap.ts
│   │   │   ├── project/
│   │   │   │   ├── FileManager.ts
│   │   │   │   ├── Project.spec.ts
│   │   │   │   ├── Project.ts
│   │   │   │   ├── SourceFileManager.ts
│   │   │   │   ├── TypeScriptHosts.ts
│   │   │   │   ├── VirtualFileSystem.spec.ts
│   │   │   │   ├── VirtualFileSystem.ts
│   │   │   │   └── tsInternals.ts
│   │   │   ├── protocol.ts
│   │   │   ├── sqlite_bindings/
│   │   │   │   ├── README.md
│   │   │   │   ├── better_sqlite3_linux_x86_64.node
│   │   │   │   └── better_sqlite3_macos_arm64.node
│   │   │   ├── strings/
│   │   │   │   ├── GenerateStringsFiles.spec.ts
│   │   │   │   ├── GenerateStringsFiles.ts
│   │   │   │   ├── exportStringsFiles.ts
│   │   │   │   ├── utils.spec.ts
│   │   │   │   └── utils.ts
│   │   │   ├── tslibs/
│   │   │   │   ├── .gitattributes
│   │   │   │   ├── GenerateTSLibs.ts
│   │   │   │   ├── TSLibsDatabase.ts
│   │   │   │   └── tslibs.json
│   │   │   ├── types/
│   │   │   │   └── IstanbulLibInstrument.d.ts
│   │   │   └── utils/
│   │   │       ├── EmitResolver.ts
│   │   │       ├── ImportPathResolver.ts
│   │   │       ├── Lazy.ts
│   │   │       ├── SerialTaskQueue.ts
│   │   │       ├── Stopwatch.ts
│   │   │       ├── StringUtils.ts
│   │   │       ├── TextParser.ts
│   │   │       ├── companionTransport.ts
│   │   │       ├── fileUtils.ts
│   │   │       ├── getArgumentValue.ts
│   │   │       ├── rethrow.ts
│   │   │       └── sha256.ts
│   │   ├── supported-locales/
│   │   │   ├── .gitignore
│   │   │   ├── .npmrc
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   └── index.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.base.json
│   │   ├── tsconfig.bazel.json
│   │   ├── tsconfig.json
│   │   ├── webpack.config.js
│   │   └── webpack.dev.config.js
│   └── compiler/
│       ├── .gitignore
│       ├── BUILD.bazel
│       ├── Compiler/
│       │   ├── .gitignore
│       │   ├── Package.resolved
│       │   ├── Package.swift
│       │   ├── Sources/
│       │   │   ├── ADBClient/
│       │   │   │   ├── ADBClient.swift
│       │   │   │   ├── ADBDeviceConnection.swift
│       │   │   │   └── DaemonServiceADBAutoConnector.swift
│       │   │   ├── Bazel/
│       │   │   │   ├── BazelPersistentWorker.swift
│       │   │   │   ├── BazelWorkerProtocol.swift
│       │   │   │   └── BundleInfo+Bazel.swift
│       │   │   ├── BundleManager.swift
│       │   │   ├── CSS/
│       │   │   │   ├── CSSModuleCompiler.swift
│       │   │   │   ├── Selector.swift
│       │   │   │   ├── StyleSheetCompiler.swift
│       │   │   │   ├── StyleSheetCompilerResult.swift
│       │   │   │   ├── StyleTree+Proto.swift
│       │   │   │   └── StyleTree.swift
│       │   │   ├── Config/
│       │   │   │   ├── CompilerConfig.swift
│       │   │   │   ├── CompilerFileInputList.swift
│       │   │   │   ├── ResolvedConfigs.swift
│       │   │   │   ├── ValdiProjectConfig.swift
│       │   │   │   └── ValdiUserConfig.swift
│       │   │   ├── Constants.swift
│       │   │   ├── Debugger/
│       │   │   │   └── AndroidDebuggingTarget.swift
│       │   │   ├── Files/
│       │   │   │   └── ValdiFilesFinder.swift
│       │   │   ├── Generation/
│       │   │   │   ├── CodeWriter.swift
│       │   │   │   ├── Cpp/
│       │   │   │   │   ├── CppCodeGenerator.swift
│       │   │   │   │   ├── CppFunctionGenerator.swift
│       │   │   │   │   ├── CppModuleGenerator.swift
│       │   │   │   │   ├── CppSchemaWriter.swift
│       │   │   │   │   ├── CppValidation.swift
│       │   │   │   │   └── PropertyNameAllocator+CPP.swift
│       │   │   │   ├── EmittedIdentifiers.swift
│       │   │   │   ├── ExportedFunctionGenerator.swift
│       │   │   │   ├── ExportedModuleGenerator.swift
│       │   │   │   ├── GeneratedTypesDiagnostics.swift
│       │   │   │   ├── Kotlin/
│       │   │   │   │   ├── JVMClass.swift
│       │   │   │   │   ├── KotlinCodeGenerator.swift
│       │   │   │   │   ├── KotlinEmittedTypeReferences.swift
│       │   │   │   │   ├── KotlinFunctionGenerator.swift
│       │   │   │   │   ├── KotlinModuleGenerator.swift
│       │   │   │   │   ├── KotlinSchemaWriter.swift
│       │   │   │   │   └── KotlinValidation.swift
│       │   │   │   ├── NativeSourceGenerator.swift
│       │   │   │   ├── ObjC/
│       │   │   │   │   ├── ObjCCodeGenerator.swift
│       │   │   │   │   ├── ObjCDependencyRepresentationGenerator.swift
│       │   │   │   │   ├── ObjCEmittedIdentifiers.swift
│       │   │   │   │   ├── ObjCEmittedTrampolineFunctions.swift
│       │   │   │   │   ├── ObjCFunctionGenerator.swift
│       │   │   │   │   ├── ObjCModuleGenerator.swift
│       │   │   │   │   ├── ObjCSchemaWriter.swift
│       │   │   │   │   └── ObjCValidation.swift
│       │   │   │   ├── SchemaWriter.swift
│       │   │   │   └── Swift/
│       │   │   │       ├── SwiftCodeGenerator.swift
│       │   │   │       ├── SwiftEmittedIdentifiers.swift
│       │   │   │       ├── SwiftFunctionGenerator.swift
│       │   │   │       ├── SwiftSchemaWriter.swift
│       │   │   │       └── SwiftValidation.swift
│       │   │   ├── Images/
│       │   │   │   ├── ImageConverter.swift
│       │   │   │   ├── ImageToolbox.swift
│       │   │   │   ├── ImageVariantResolver.swift
│       │   │   │   └── ImageVariantSpecs.swift
│       │   │   ├── Kotlin/
│       │   │   │   └── KotlinCompiler.swift
│       │   │   ├── Logs/
│       │   │   │   ├── LogsCleaner.swift
│       │   │   │   ├── LogsFileHandle.swift
│       │   │   │   ├── LogsRotator.swift
│       │   │   │   └── LogsWriter.swift
│       │   │   ├── Models/
│       │   │   │   ├── CompilationResult.swift
│       │   │   │   ├── DependencyMetadata.swift
│       │   │   │   ├── DownloadableArtifactSignatures.swift
│       │   │   │   ├── File.swift
│       │   │   │   ├── FinalFile.swift
│       │   │   │   ├── FontAsset.swift
│       │   │   │   ├── IgnoredFile.swift
│       │   │   │   ├── ImageAsset.swift
│       │   │   │   ├── ImageVariantsFilter.swift
│       │   │   │   ├── JavaScriptFile.swift
│       │   │   │   ├── NativeSource.swift
│       │   │   │   ├── ResourceResult.swift
│       │   │   │   ├── TransformedResource.swift
│       │   │   │   ├── Valdi.pb.swift
│       │   │   │   ├── ZippableItem.swift
│       │   │   │   ├── valdi-artifact-management.pb.swift
│       │   │   │   └── valdi-daemon-registry.pb.swift
│       │   │   ├── OutputDirectories.swift
│       │   │   ├── Parser/
│       │   │   │   ├── Models/
│       │   │   │   │   └── ValdiRawDocument.swift
│       │   │   │   └── ValdiDocumentParser.swift
│       │   │   ├── Pipeline/
│       │   │   │   ├── CompilationItem.swift
│       │   │   │   ├── CompilationItems.swift
│       │   │   │   ├── CompilationMode.swift
│       │   │   │   ├── CompilationPipeline.swift
│       │   │   │   ├── CompilationProcessor.swift
│       │   │   │   ├── CompilationSequence.swift
│       │   │   │   ├── DeferredWarningCollector.swift
│       │   │   │   ├── JSConstants.swift
│       │   │   │   └── ModulesFilter.swift
│       │   │   ├── Processors/
│       │   │   │   ├── ApplyTypeScriptAnnotationsProcessor.swift
│       │   │   │   ├── BundleResourcesProcessor.swift
│       │   │   │   ├── CSSModulesProcessor.swift
│       │   │   │   ├── ClientSqlExportProcessor.swift
│       │   │   │   ├── ClientSqlProcessor.swift
│       │   │   │   ├── CodeCoverageProcessor.swift
│       │   │   │   ├── CombineNativeSourcesProcessor.swift
│       │   │   │   ├── CompileDocumentsProcessor.swift
│       │   │   │   ├── CompileTypeScriptProcessor.swift
│       │   │   │   ├── DiagnosticsProcessor.swift
│       │   │   │   ├── DocumentUserScriptExtractionProcessor.swift
│       │   │   │   ├── DumpCompilationMetadataProcessor.swift
│       │   │   │   ├── DumpComponentsProcessor.swift
│       │   │   │   ├── DumpTypeScriptSymbolsProcessor.swift
│       │   │   │   ├── FilterItemsProcessor.swift
│       │   │   │   ├── FinalFilesVerificationProcessor.swift
│       │   │   │   ├── GenerateAssetCatalogProcessor.swift
│       │   │   │   ├── GenerateBuildFileProcessor.swift
│       │   │   │   ├── GenerateDependencyInjectionDataProcessor.swift
│       │   │   │   ├── GenerateGlobalMetadataProcessor.swift
│       │   │   │   ├── GenerateIdsFilesProcessor.swift
│       │   │   │   ├── GenerateModelsProcessor.swift
│       │   │   │   ├── GenerateModuleBuildFileProcessor.swift
│       │   │   │   ├── GenerateViewClassesProcessor.swift
│       │   │   │   ├── GeneratedTypesVerificationProcessor.swift
│       │   │   │   ├── HotReloadingProcessor.swift
│       │   │   │   ├── IdentifyFontAssetsProcessor.swift
│       │   │   │   ├── IdentifyImageAssetsProcessor.swift
│       │   │   │   ├── IdentifyItemsProcessor.swift
│       │   │   │   ├── ImageResourcesProcessor.swift
│       │   │   │   ├── InvalidDocumentsProcessor.swift
│       │   │   │   ├── JavaScriptPreCompiler.swift
│       │   │   │   ├── LoadDumpedClassMappingProcessor.swift
│       │   │   │   ├── MinifyJsProcessor.swift
│       │   │   │   ├── NativeCodeGenerationManager.swift
│       │   │   │   ├── ParseDocumentsProcessor.swift
│       │   │   │   ├── ParseTypeScriptAnnotationsProcessor.swift
│       │   │   │   ├── PrependWebJsProcessor.swift
│       │   │   │   ├── ProjectClassMappingManager.swift
│       │   │   │   ├── ResolveOutputPathsProcessor.swift
│       │   │   │   ├── SaveFilesProcessor.swift
│       │   │   │   ├── SourceMapProcessor.swift
│       │   │   │   ├── TranslationStringsProcessor.swift
│       │   │   │   ├── TypeScriptAnnotationsManager.swift
│       │   │   │   ├── TypeScriptCompilerManager.swift
│       │   │   │   ├── TypeScriptProcessingUtils.swift
│       │   │   │   └── UserScriptManager.swift
│       │   │   ├── Reloader/
│       │   │   │   ├── AddressPort.swift
│       │   │   │   ├── AutoRecompiler.swift
│       │   │   │   ├── DaemonService.swift
│       │   │   │   ├── DaemonServiceConnectedClient.swift
│       │   │   │   ├── DaemonServiceDefinitions.swift
│       │   │   │   ├── DaemonServiceSimulatorAutoConnector.swift
│       │   │   │   ├── DaemonServiceUSBMuxAutoConnector.swift
│       │   │   │   ├── DaemonTCPConnection.swift
│       │   │   │   ├── DaemonTCPConnectionAcceptor.swift
│       │   │   │   ├── DocumentChangeNotifier.swift
│       │   │   │   ├── FileDependenciesManager.swift
│       │   │   │   ├── NonSpammyLog.swift
│       │   │   │   ├── ReloaderDeviceWhitelist.swift
│       │   │   │   ├── ReloaderServiceAnnouncer.swift
│       │   │   │   ├── ReloaderServiceUDPAnnouncer.swift
│       │   │   │   ├── ResourceStore.swift
│       │   │   │   ├── String+Network.swift
│       │   │   │   ├── ValdiDaemonProtocolClient.swift
│       │   │   │   └── Watchman/
│       │   │   │       ├── WatchmanClient.swift
│       │   │   │       ├── WatchmanConnection.swift
│       │   │   │       └── WatchmanResponse.swift
│       │   │   ├── Sass/
│       │   │   │   ├── LibSassCompiler.swift
│       │   │   │   └── SassCompiler.swift
│       │   │   ├── StaticRes/
│       │   │   │   └── StaticResGenerator.swift
│       │   │   ├── Template/
│       │   │   │   ├── CompilationMetadata.swift
│       │   │   │   ├── KotlinViewClassGenerator.swift
│       │   │   │   ├── LanguageSpecificViewClassGenerator.swift
│       │   │   │   ├── ObjCViewClassGenerator.swift
│       │   │   │   ├── ProjectClassMapping.swift
│       │   │   │   ├── ResolvedClassMapping.swift
│       │   │   │   ├── SwiftViewClassGenerator.swift
│       │   │   │   ├── TemplateCompilerResult.swift
│       │   │   │   ├── ValdiTemplateCompiler.swift
│       │   │   │   └── ViewClassGenerator.swift
│       │   │   ├── Tests/
│       │   │   │   └── Tests.swift
│       │   │   ├── ToolboxExecutable/
│       │   │   │   └── ToolboxExecutable.swift
│       │   │   ├── TypeScript/
│       │   │   │   ├── CompanionExecutable.swift
│       │   │   │   ├── CompanionExecutableProvider.swift
│       │   │   │   ├── JSCodeInstrumentation.swift
│       │   │   │   ├── JSDocs.swift
│       │   │   │   ├── TypeScriptAnnotation.swift
│       │   │   │   ├── TypeScriptCommands.swift
│       │   │   │   ├── TypeScriptCommentedFile.swift
│       │   │   │   ├── TypeScriptCommentedSymbol.swift
│       │   │   │   ├── TypeScriptCompiler.swift
│       │   │   │   ├── TypeScriptCompilerCompanionDriver.swift
│       │   │   │   ├── TypeScriptCompilerDriver.swift
│       │   │   │   ├── TypeScriptFile.swift
│       │   │   │   ├── TypeScriptGenerator.swift
│       │   │   │   ├── TypeScriptIntermediateUtils.swift
│       │   │   │   ├── TypeScriptNativeTypeExporter.swift
│       │   │   │   ├── TypeScriptNativeTypeResolver.swift
│       │   │   │   ├── TypeScriptStringsModuleGenerator.swift
│       │   │   │   ├── TypeScriptSymbol.swift
│       │   │   │   ├── TypeScriptSymbolParser.swift
│       │   │   │   └── ValdiJSElement.swift
│       │   │   ├── USBMuxClient/
│       │   │   │   ├── USBMuxBroadcastConnection.swift
│       │   │   │   ├── USBMuxClient.swift
│       │   │   │   ├── USBMuxConnection.swift
│       │   │   │   ├── USBMuxDeviceConnection.swift
│       │   │   │   ├── USBMuxError.swift
│       │   │   │   ├── USBMuxPacket.swift
│       │   │   │   └── USBMuxTunnel.swift
│       │   │   ├── Utils/
│       │   │   │   ├── ArtifactUploader.swift
│       │   │   │   ├── AsyncTaskQueue.swift
│       │   │   │   ├── BackoffTimer.swift
│       │   │   │   ├── BatchSequence.swift
│       │   │   │   ├── BatchWorkerQueue.swift
│       │   │   │   ├── BlueSocketTCPConnection.swift
│       │   │   │   ├── CLIUtils.swift
│       │   │   │   ├── Caching/
│       │   │   │   │   ├── DiskCache.swift
│       │   │   │   │   ├── DiskCacheImpl.swift
│       │   │   │   │   └── DiskCacheProvider.swift
│       │   │   │   ├── Cancelable.swift
│       │   │   │   ├── CompilationCache.swift
│       │   │   │   ├── CompilerError.swift
│       │   │   │   ├── ComponentPath.swift
│       │   │   │   ├── ConfigValue.swift
│       │   │   │   ├── DataConvertible.swift
│       │   │   │   ├── DispatchChannelTCPConnection.swift
│       │   │   │   ├── DumpModuleInfos.swift
│       │   │   │   ├── Extensions/
│       │   │   │   │   ├── Array+ParallelMap.swift
│       │   │   │   │   ├── Array+Search.swift
│       │   │   │   │   ├── BlueSocket+Extensions.swift
│       │   │   │   │   ├── Collection+Utils.swift
│       │   │   │   │   ├── Data+HexString.swift
│       │   │   │   │   ├── Data+SHA256.swift
│       │   │   │   │   ├── Data+Serialization.swift
│       │   │   │   │   ├── Data+UnsafePointers.swift
│       │   │   │   │   ├── DispatchQueue+Promise.swift
│       │   │   │   │   ├── DispatchSemaphore+Lock.swift
│       │   │   │   │   ├── Message+orderedSerializedData.swift
│       │   │   │   │   ├── NodeAttribute+Utils.swift
│       │   │   │   │   ├── Result+FromTuple.swift
│       │   │   │   │   ├── Result+GetError.swift
│       │   │   │   │   ├── String+Concatenate.swift
│       │   │   │   │   ├── String+EnvVariables.swift
│       │   │   │   │   ├── String+FileExtensions.swift
│       │   │   │   │   ├── String+JS.swift
│       │   │   │   │   ├── String+NSRange.swift
│       │   │   │   │   ├── String+Regex.swift
│       │   │   │   │   ├── String+Stride.swift
│       │   │   │   │   ├── String+Trim.swift
│       │   │   │   │   ├── Swift+Utils.swift
│       │   │   │   │   ├── TimeInterval+Utils.swift
│       │   │   │   │   ├── URL+FileExtensions.swift
│       │   │   │   │   ├── URL+Navigation.swift
│       │   │   │   │   ├── URL+RandomFile.swift
│       │   │   │   │   └── URL+Symlink.swift
│       │   │   │   ├── FileHandleReader.swift
│       │   │   │   ├── FileHeaderCommentGenerator.swift
│       │   │   │   ├── GeneratedSourceFilename.swift
│       │   │   │   ├── InclusionConfig.swift
│       │   │   │   ├── KillOnTimeout.swift
│       │   │   │   ├── LinesIndexer.swift
│       │   │   │   ├── Logger.swift
│       │   │   │   ├── MeasureExecution.swift
│       │   │   │   ├── NetworkInterfaceAddresses.swift
│       │   │   │   ├── Parser.swift
│       │   │   │   ├── PipeHandle.swift
│       │   │   │   ├── ProcessHandle.swift
│       │   │   │   ├── Promise.swift
│       │   │   │   ├── RandomAccessCollection+SafeGet.swift
│       │   │   │   ├── Ref.swift
│       │   │   │   ├── ResolvedModuleImport.swift
│       │   │   │   ├── SafeAutorelease.swift
│       │   │   │   ├── SentryClient.swift
│       │   │   │   ├── Synchronized.swift
│       │   │   │   ├── TCPConnection.swift
│       │   │   │   ├── TCPTunnel.swift
│       │   │   │   ├── TCPTunnelConnection.swift
│       │   │   │   ├── Trie.swift
│       │   │   │   ├── TypeScriptCommands+ParserDebug.swift
│       │   │   │   ├── UnresolvedPath.swift
│       │   │   │   ├── ValdiFileManager.swift
│       │   │   │   ├── ValdiModuleBuilder.swift
│       │   │   │   ├── ValdiModuleUtils.swift
│       │   │   │   └── ZstdCompressor.swift
│       │   │   ├── ValdiCompiler.swift
│       │   │   ├── ValdiCompilerArguments.swift
│       │   │   ├── ValdiCompilerRunner.swift
│       │   │   ├── ViewModels/
│       │   │   │   ├── CppEnumGenerator.swift
│       │   │   │   ├── CppModelGenerator.swift
│       │   │   │   ├── ExportedEnumGenerator.swift
│       │   │   │   ├── KotlinEnumGenerator.swift
│       │   │   │   ├── KotlinFactoryGenerator.swift
│       │   │   │   ├── KotlinModelGenerator.swift
│       │   │   │   ├── ObjCEnumGenerator.swift
│       │   │   │   ├── ObjCModelGenerator.swift
│       │   │   │   ├── ObjCSelector.swift
│       │   │   │   ├── PropertyNameAllocator+Kotlin.swift
│       │   │   │   ├── PropertyNameAllocator+ObjC.swift
│       │   │   │   ├── PropertyNameAllocator+Swift.swift
│       │   │   │   ├── PropertyNameAllocator.swift
│       │   │   │   ├── SwiftEnumGenerator.swift
│       │   │   │   ├── SwiftModelGenerator.swift
│       │   │   │   └── ValdiModelGenerator.swift
│       │   │   └── main.swift
│       │   ├── Tests/
│       │   │   ├── CompilerTests/
│       │   │   │   ├── CompilerTests.swift
│       │   │   │   └── ValdiAnnotationTests.swift
│       │   │   └── LinuxMain.swift
│       │   └── Vendors/
│       │       ├── BlueSocket/
│       │       │   ├── Package.swift
│       │       │   └── Sources/
│       │       │       ├── Socket.swift
│       │       │       ├── SocketProtocols.swift
│       │       │       └── SocketUtils.swift
│       │       ├── Clibsass/
│       │       │   ├── Package.swift
│       │       │   ├── README.snap
│       │       │   ├── Sources/
│       │       │   │   ├── GNUmakefile.am
│       │       │   │   ├── MurmurHash2.hpp
│       │       │   │   ├── ast.cpp
│       │       │   │   ├── ast.hpp
│       │       │   │   ├── ast2c.cpp
│       │       │   │   ├── ast2c.hpp
│       │       │   │   ├── ast_def_macros.hpp
│       │       │   │   ├── ast_fwd_decl.cpp
│       │       │   │   ├── ast_fwd_decl.hpp
│       │       │   │   ├── ast_helpers.hpp
│       │       │   │   ├── ast_sel_cmp.cpp
│       │       │   │   ├── ast_sel_super.cpp
│       │       │   │   ├── ast_sel_unify.cpp
│       │       │   │   ├── ast_sel_weave.cpp
│       │       │   │   ├── ast_selectors.cpp
│       │       │   │   ├── ast_selectors.hpp
│       │       │   │   ├── ast_supports.cpp
│       │       │   │   ├── ast_supports.hpp
│       │       │   │   ├── ast_values.cpp
│       │       │   │   ├── ast_values.hpp
│       │       │   │   ├── b64/
│       │       │   │   │   ├── cencode.h
│       │       │   │   │   └── encode.h
│       │       │   │   ├── backtrace.cpp
│       │       │   │   ├── backtrace.hpp
│       │       │   │   ├── base64vlq.cpp
│       │       │   │   ├── base64vlq.hpp
│       │       │   │   ├── bind.cpp
│       │       │   │   ├── bind.hpp
│       │       │   │   ├── c2ast.cpp
│       │       │   │   ├── c2ast.hpp
│       │       │   │   ├── c99func.c
│       │       │   │   ├── cencode.c
│       │       │   │   ├── check_nesting.cpp
│       │       │   │   ├── check_nesting.hpp
│       │       │   │   ├── color_maps.cpp
│       │       │   │   ├── color_maps.hpp
│       │       │   │   ├── constants.cpp
│       │       │   │   ├── constants.hpp
│       │       │   │   ├── context.cpp
│       │       │   │   ├── context.hpp
│       │       │   │   ├── cssize.cpp
│       │       │   │   ├── cssize.hpp
│       │       │   │   ├── dart_helpers.hpp
│       │       │   │   ├── debug.hpp
│       │       │   │   ├── debugger.hpp
│       │       │   │   ├── emitter.cpp
│       │       │   │   ├── emitter.hpp
│       │       │   │   ├── environment.cpp
│       │       │   │   ├── environment.hpp
│       │       │   │   ├── error_handling.cpp
│       │       │   │   ├── error_handling.hpp
│       │       │   │   ├── eval.cpp
│       │       │   │   ├── eval.hpp
│       │       │   │   ├── eval_selectors.cpp
│       │       │   │   ├── expand.cpp
│       │       │   │   ├── expand.hpp
│       │       │   │   ├── extender.cpp
│       │       │   │   ├── extender.hpp
│       │       │   │   ├── extension.cpp
│       │       │   │   ├── extension.hpp
│       │       │   │   ├── file.cpp
│       │       │   │   ├── file.hpp
│       │       │   │   ├── fn_colors.cpp
│       │       │   │   ├── fn_colors.hpp
│       │       │   │   ├── fn_lists.cpp
│       │       │   │   ├── fn_lists.hpp
│       │       │   │   ├── fn_maps.cpp
│       │       │   │   ├── fn_maps.hpp
│       │       │   │   ├── fn_miscs.cpp
│       │       │   │   ├── fn_miscs.hpp
│       │       │   │   ├── fn_numbers.cpp
│       │       │   │   ├── fn_numbers.hpp
│       │       │   │   ├── fn_selectors.cpp
│       │       │   │   ├── fn_selectors.hpp
│       │       │   │   ├── fn_strings.cpp
│       │       │   │   ├── fn_strings.hpp
│       │       │   │   ├── fn_utils.cpp
│       │       │   │   ├── fn_utils.hpp
│       │       │   │   ├── include/
│       │       │   │   │   ├── sass/
│       │       │   │   │   │   ├── base.h
│       │       │   │   │   │   ├── context.h
│       │       │   │   │   │   ├── functions.h
│       │       │   │   │   │   ├── values.h
│       │       │   │   │   │   ├── version.h
│       │       │   │   │   │   └── version.h.in
│       │       │   │   │   ├── sass.h
│       │       │   │   │   └── sass2scss.h
│       │       │   │   ├── inspect.cpp
│       │       │   │   ├── inspect.hpp
│       │       │   │   ├── json.cpp
│       │       │   │   ├── json.hpp
│       │       │   │   ├── kwd_arg_macros.hpp
│       │       │   │   ├── lexer.cpp
│       │       │   │   ├── lexer.hpp
│       │       │   │   ├── listize.cpp
│       │       │   │   ├── listize.hpp
│       │       │   │   ├── mapping.hpp
│       │       │   │   ├── memory/
│       │       │   │   │   ├── allocator.cpp
│       │       │   │   │   ├── allocator.hpp
│       │       │   │   │   ├── config.hpp
│       │       │   │   │   ├── memory_pool.hpp
│       │       │   │   │   ├── shared_ptr.cpp
│       │       │   │   │   └── shared_ptr.hpp
│       │       │   │   ├── memory.hpp
│       │       │   │   ├── operation.hpp
│       │       │   │   ├── operators.cpp
│       │       │   │   ├── operators.hpp
│       │       │   │   ├── ordered_map.hpp
│       │       │   │   ├── output.cpp
│       │       │   │   ├── output.hpp
│       │       │   │   ├── parser.cpp
│       │       │   │   ├── parser.hpp
│       │       │   │   ├── parser_selectors.cpp
│       │       │   │   ├── permutate.hpp
│       │       │   │   ├── plugins.cpp
│       │       │   │   ├── plugins.hpp
│       │       │   │   ├── position.cpp
│       │       │   │   ├── position.hpp
│       │       │   │   ├── prelexer.cpp
│       │       │   │   ├── prelexer.hpp
│       │       │   │   ├── remove_placeholders.cpp
│       │       │   │   ├── remove_placeholders.hpp
│       │       │   │   ├── sass.cpp
│       │       │   │   ├── sass.hpp
│       │       │   │   ├── sass2scss.cpp
│       │       │   │   ├── sass_context.cpp
│       │       │   │   ├── sass_context.hpp
│       │       │   │   ├── sass_functions.cpp
│       │       │   │   ├── sass_functions.hpp
│       │       │   │   ├── sass_values.cpp
│       │       │   │   ├── sass_values.hpp
│       │       │   │   ├── settings.hpp
│       │       │   │   ├── source.cpp
│       │       │   │   ├── source.hpp
│       │       │   │   ├── source_data.hpp
│       │       │   │   ├── source_map.cpp
│       │       │   │   ├── source_map.hpp
│       │       │   │   ├── stylesheet.cpp
│       │       │   │   ├── stylesheet.hpp
│       │       │   │   ├── support/
│       │       │   │   │   └── libsass.pc.in
│       │       │   │   ├── to_value.cpp
│       │       │   │   ├── to_value.hpp
│       │       │   │   ├── units.cpp
│       │       │   │   ├── units.hpp
│       │       │   │   ├── utf8/
│       │       │   │   │   ├── checked.h
│       │       │   │   │   ├── core.h
│       │       │   │   │   └── unchecked.h
│       │       │   │   ├── utf8.h
│       │       │   │   ├── utf8_string.cpp
│       │       │   │   ├── utf8_string.hpp
│       │       │   │   ├── util.cpp
│       │       │   │   ├── util.hpp
│       │       │   │   ├── util_string.cpp
│       │       │   │   ├── util_string.hpp
│       │       │   │   ├── values.cpp
│       │       │   │   └── values.hpp
│       │       │   └── VERSION.txt
│       │       ├── SwiftCSSParser/
│       │       │   ├── Package.resolved
│       │       │   ├── Package.swift
│       │       │   └── Sources/
│       │       │       ├── README
│       │       │       ├── StyleElement.swift
│       │       │       └── StyleSheet.swift
│       │       ├── Yaml/
│       │       │   ├── Package.swift
│       │       │   └── Sources/
│       │       │       ├── YAMLOperators.swift
│       │       │       ├── YAMLParser.swift
│       │       │       ├── YAMLRegex.swift
│       │       │       ├── YAMLResult.swift
│       │       │       ├── YAMLTokenizer.swift
│       │       │       └── Yaml.swift
│       │       ├── Zstd/
│       │       │   ├── Package.swift
│       │       │   └── Sources/
│       │       │       ├── bitstream.h
│       │       │       ├── compiler.h
│       │       │       ├── cpu.h
│       │       │       ├── debug.c
│       │       │       ├── debug.h
│       │       │       ├── entropy_common.c
│       │       │       ├── error_private.c
│       │       │       ├── error_private.h
│       │       │       ├── fse.h
│       │       │       ├── fse_compress.c
│       │       │       ├── fse_decompress.c
│       │       │       ├── hist.c
│       │       │       ├── hist.h
│       │       │       ├── huf.h
│       │       │       ├── huf_compress.c
│       │       │       ├── huf_decompress.c
│       │       │       ├── include/
│       │       │       │   └── zstd.h
│       │       │       ├── mem.h
│       │       │       ├── pool.c
│       │       │       ├── pool.h
│       │       │       ├── threading.c
│       │       │       ├── threading.h
│       │       │       ├── xxhash.c
│       │       │       ├── xxhash.h
│       │       │       ├── zstd_common.c
│       │       │       ├── zstd_compress.c
│       │       │       ├── zstd_compress_internal.h
│       │       │       ├── zstd_compress_literals.c
│       │       │       ├── zstd_compress_literals.h
│       │       │       ├── zstd_compress_sequences.c
│       │       │       ├── zstd_compress_sequences.h
│       │       │       ├── zstd_cwksp.h
│       │       │       ├── zstd_ddict.c
│       │       │       ├── zstd_ddict.h
│       │       │       ├── zstd_decompress.c
│       │       │       ├── zstd_decompress_block.c
│       │       │       ├── zstd_decompress_block.h
│       │       │       ├── zstd_decompress_internal.h
│       │       │       ├── zstd_double_fast.c
│       │       │       ├── zstd_double_fast.h
│       │       │       ├── zstd_errors.h
│       │       │       ├── zstd_fast.c
│       │       │       ├── zstd_fast.h
│       │       │       ├── zstd_internal.h
│       │       │       ├── zstd_lazy.c
│       │       │       ├── zstd_lazy.h
│       │       │       ├── zstd_ldm.c
│       │       │       ├── zstd_ldm.h
│       │       │       ├── zstd_opt.c
│       │       │       ├── zstd_opt.h
│       │       │       ├── zstdmt_compress.c
│       │       │       └── zstdmt_compress.h
│       │       └── katana-parser/
│       │           ├── Package.swift
│       │           ├── README
│       │           └── Sources/
│       │               ├── foundation.c
│       │               ├── include/
│       │               │   ├── foundation.h
│       │               │   ├── katana.h
│       │               │   ├── katana.lex.h
│       │               │   ├── katana.tab.h
│       │               │   ├── parser.h
│       │               │   ├── selector.h
│       │               │   └── tokenizer.h
│       │               ├── katana.lex.c
│       │               ├── katana.tab.c
│       │               ├── parser.c
│       │               ├── selector.c
│       │               └── tokenizer.c
│       ├── README.md
│       ├── generate_proto.py
│       ├── generate_proto.sh
│       ├── scripts/
│       │   ├── README_local_compiler.md
│       │   ├── entitlements.plist
│       │   ├── update_compiler.sh
│       │   └── use_local_compiler.sh
│       ├── valdi-artifact-management.proto
│       ├── valdi-daemon-registry.proto
│       └── valdi.proto
├── docs/
│   ├── DEV_SETUP.md
│   ├── INSTALL.md
│   ├── README.md
│   ├── TROUBLESHOOTING.md
│   ├── api/
│   │   ├── api-quick-reference.md
│   │   ├── api-reference-elements.md
│   │   └── api-style-attributes.md
│   ├── codelabs/
│   │   ├── advanced_ui/
│   │   │   ├── 1-setup.md
│   │   │   ├── 2-section_list.md
│   │   │   └── 3-flexbox.md
│   │   ├── getting_started/
│   │   │   ├── 1-introduction.md
│   │   │   ├── 2-start_coding.md
│   │   │   ├── 3-declarative_rendering.md
│   │   │   ├── 3-setup_code_tools.md
│   │   │   ├── 4-control_flow_loops.md
│   │   │   ├── 5-component_state.md
│   │   │   ├── 6-component_lifecycle.md
│   │   │   ├── 7-component_events.md
│   │   │   └── 8-unittest.md
│   │   ├── how_to_get_help.md
│   │   ├── integration_with_native/
│   │   │   ├── 1-introduction.md
│   │   │   ├── 2-setup_ui.md
│   │   │   ├── 3-context_view_model.md
│   │   │   ├── 4-get_friends.md
│   │   │   ├── 5-get_ready_for_testing.md
│   │   │   ├── 6-native_build_module.md
│   │   │   ├── android/
│   │   │   │   ├── 1-android_setup_for_development.md
│   │   │   │   ├── 2-android_hook_up_module.md
│   │   │   │   ├── 3-android_hook_up_snapchatter_service.md
│   │   │   │   ├── 4-android_recommendFriendsCallback.md
│   │   │   │   └── 5-android_testing.md
│   │   │   ├── ios/
│   │   │   │   ├── 1-ios_setup_for_development.md
│   │   │   │   ├── 2-ios_hook_up_module.md
│   │   │   │   ├── 3-ios_hook_up_snapchatter_service.md
│   │   │   │   ├── 4-ios_recommendfriendscallback.md
│   │   │   │   └── 5-ios_testing.md
│   │   │   └── ios_swift/
│   │   │       ├── 1-ios_setup_for_development.md
│   │   │       ├── 2-ios_hook_up_module.md
│   │   │       ├── 3-ios_hook_up_snapchatter_service.md
│   │   │       └── 4-ios_recommendfriendscallback.md
│   │   └── shared_business_logic/
│   │       ├── 1-introduction.md
│   │       ├── 2-setup_module.md
│   │       ├── 3-business_logic.md
│   │       ├── 4-native_annotations.md
│   │       ├── android/
│   │       │   ├── 1-android_setup_for_development.md
│   │       │   └── 2-android_hook_up_module.md
│   │       └── ios/
│   │           ├── 1-ios_setup_for_development.md
│   │           └── 2-ios_hook_up_module.md
│   ├── docs/
│   │   ├── advanced-animations.md
│   │   ├── advanced-element-references.md
│   │   ├── advanced-full-stack.md
│   │   ├── advanced-images.md
│   │   ├── advanced-localization.md
│   │   ├── advanced-native-references.md
│   │   ├── advanced-protobuf.md
│   │   ├── advanced-provider.md
│   │   ├── advanced-worker-service.md
│   │   ├── ai-tooling.md
│   │   ├── choosing-valdi.md
│   │   ├── client-libraries-rxjs.md
│   │   ├── command-line-references.md
│   │   ├── control-flow.md
│   │   ├── core-component.md
│   │   ├── core-events.md
│   │   ├── core-flexbox.md
│   │   ├── core-images.md
│   │   ├── core-module.md
│   │   ├── core-scrolls.md
│   │   ├── core-slots.md
│   │   ├── core-states.md
│   │   ├── core-styling.md
│   │   ├── core-text.md
│   │   ├── core-touches.md
│   │   ├── core-video.md
│   │   ├── core-views.md
│   │   ├── export-model-vs-export-proxy-marshalling.md
│   │   ├── faq.md
│   │   ├── glossary.md
│   │   ├── help-support.md
│   │   ├── help-troubleshooting.md
│   │   ├── internals-api-design.md
│   │   ├── internals-compiler.md
│   │   ├── internals-native-integration.md
│   │   ├── internals-renderer.md
│   │   ├── internals-runtime.md
│   │   ├── migrate-from-compose.md
│   │   ├── migrate-from-flutter.md
│   │   ├── native-annotations.md
│   │   ├── native-bindings.md
│   │   ├── native-collectionview.md
│   │   ├── native-context.md
│   │   ├── native-customviews.md
│   │   ├── native-polyglot.md
│   │   ├── native-types.md
│   │   ├── native-view-model.md
│   │   ├── navigation.md
│   │   ├── on-render.md
│   │   ├── performance-memory-leaks.md
│   │   ├── performance-optimization.md
│   │   ├── performance-tracing.md
│   │   ├── performance-view-recycling.md
│   │   ├── start-about.md
│   │   ├── start-code-lab.md
│   │   ├── start-from-react.md
│   │   ├── start-install.md
│   │   ├── start-introduction.md
│   │   ├── stdlib-coreutils.md
│   │   ├── stdlib-filesystem.md
│   │   ├── stdlib-http.md
│   │   ├── stdlib-persistence.md
│   │   ├── third-party-dependencies.md
│   │   ├── workflow-appstore-release.md
│   │   ├── workflow-bazel.md
│   │   ├── workflow-cli-application.md
│   │   ├── workflow-disk.md
│   │   ├── workflow-external-build-system.md
│   │   ├── workflow-hermes-debugger.md
│   │   ├── workflow-inspector.md
│   │   ├── workflow-style-guide.md
│   │   └── workflow-testing.md
│   └── setup/
│       ├── linux_setup.md
│       └── macos_setup.md
├── fossa-deps.yml
├── libs/
│   ├── dummy/
│   │   ├── BUILD.bazel
│   │   ├── src/
│   │   │   ├── dummy/
│   │   │   │   └── main.cpp
│   │   │   └── manifest/
│   │   │       └── AndroidManifest.xml
│   │   └── test/
│   │       └── Test.cpp
│   ├── image_toolbox/
│   │   ├── BUILD.bazel
│   │   ├── README.md
│   │   └── src/
│   │       ├── image_toolbox/
│   │       │   ├── ImageToolbox.cpp
│   │       │   ├── ImageToolbox.hpp
│   │       │   ├── SVGRenderer.cpp
│   │       │   └── SVGRenderer.hpp
│   │       └── image_toolbox_c/
│   │           ├── image_toolbox.cpp
│   │           └── image_toolbox.h
│   └── utils/
│       ├── BUILD.bazel
│       └── src/
│           ├── utils/
│           │   ├── NoDestructor.hpp
│           │   ├── ObjCppPtrWrapper.hpp
│           │   ├── base/
│           │   │   ├── Function.hpp
│           │   │   └── NonCopyable.hpp
│           │   ├── crypto/
│           │   │   ├── AesEncryptor.cpp
│           │   │   ├── AesEncryptor.hpp
│           │   │   ├── CryptoHelpers.cpp
│           │   │   └── CryptoHelpers.hpp
│           │   ├── debugging/
│           │   │   ├── Assert.cpp
│           │   │   ├── Assert.hpp
│           │   │   ├── DjinniPrologue.hpp
│           │   │   ├── Trace.cpp
│           │   │   ├── Trace.hpp
│           │   │   └── detail/
│           │   │       ├── AssertInternals.cpp
│           │   │       └── AssertInternals.hpp
│           │   ├── encoding/
│           │   │   ├── Base64Utils.cpp
│           │   │   └── Base64Utils.hpp
│           │   ├── logging/
│           │   │   ├── Log.hpp
│           │   │   ├── Logger.cpp
│           │   │   └── Logger.hpp
│           │   ├── platform/
│           │   │   ├── BuildOptions.hpp
│           │   │   ├── BuildOptionsDefault.hpp
│           │   │   ├── BuildOptionsGenerated.hpp.in
│           │   │   ├── JNITypeStubs.hpp
│           │   │   ├── JvmOnLoad.cpp
│           │   │   ├── JvmOnLoad.hpp
│           │   │   ├── JvmUtils.cpp
│           │   │   ├── JvmUtils.hpp
│           │   │   └── TargetPlatform.hpp
│           │   └── time/
│           │       ├── BoottimeClock.cpp
│           │       ├── BoottimeClock.hpp
│           │       ├── Duration.hpp
│           │       ├── StopWatch.hpp
│           │       ├── UptimeClock.cpp
│           │       └── UptimeClock.hpp
│           └── utils_oss/
│               └── utils_oss.cpp
├── modules/
│   ├── .terserrc.json
│   ├── BUILD.bazel
│   ├── _configs/
│   │   ├── base.tsconfig.json
│   │   └── eslint.tsconfig.json
│   ├── hello_world/
│   │   ├── BUILD.bazel
│   │   ├── module.yaml
│   │   ├── src/
│   │   │   ├── HelloWorldApp.tsx
│   │   │   └── index.ts
│   │   └── tsconfig.json
│   ├── tsconfig.json
│   └── types/
│       ├── Long.d.ts
│       └── globals.d.ts
├── npm_modules/
│   ├── cli/
│   │   ├── .bazelignore
│   │   ├── .bootstrap/
│   │   │   ├── apps/
│   │   │   │   ├── cli_application/
│   │   │   │   │   ├── BUILD.bazel.template
│   │   │   │   │   └── modules/
│   │   │   │   │       └── {{MODULE_NAME}}/
│   │   │   │   │           ├── BUILD.bazel.template
│   │   │   │   │           └── src/
│   │   │   │   │               └── index.ts
│   │   │   │   └── ui_application/
│   │   │   │       ├── .eslint.rc
│   │   │   │       ├── BUILD.bazel.template
│   │   │   │       ├── modules/
│   │   │   │       │   └── {{MODULE_NAME}}/
│   │   │   │       │       ├── BUILD.bazel.template
│   │   │   │       │       └── src/
│   │   │   │       │           └── App.tsx
│   │   │   │       └── package.json
│   │   │   └── modules/
│   │   │       ├── polyglot_bridge_module/
│   │   │       │   ├── BUILD.bazel.template
│   │   │       │   ├── android/
│   │   │       │   │   └── CalculatorModuleFactory.kt.template
│   │   │       │   ├── ios/
│   │   │       │   │   └── SCCCalculatorModuleFactory.m.template
│   │   │       │   ├── src/
│   │   │       │   │   └── Calculator.d.ts
│   │   │       │   └── web/
│   │   │       │       ├── Calculator.ts
│   │   │       │       └── tsconfig.json
│   │   │       ├── polyglot_view_module/
│   │   │       │   ├── BUILD.bazel.template
│   │   │       │   ├── android/
│   │   │       │   │   ├── PolyglotNativeView.kt.template
│   │   │       │   │   └── PolyglotNativeViewAttributesBinder.kt.template
│   │   │       │   ├── ios/
│   │   │       │   │   ├── SCPolyglotView.h
│   │   │       │   │   └── SCPolyglotView.m
│   │   │       │   ├── macos/
│   │   │       │   │   ├── SCPolyglotView.h
│   │   │       │   │   └── SCPolyglotView.m
│   │   │       │   ├── src/
│   │   │       │   │   └── PolyglotCustomView.tsx.template
│   │   │       │   └── web/
│   │   │       │       ├── PolyglotWeb.ts.template
│   │   │       │       └── tsconfig.json
│   │   │       └── ui_component/
│   │   │           ├── BUILD.bazel.template
│   │   │           └── src/
│   │   │               └── NewModuleComponent.tsx
│   │   ├── .config/
│   │   │   └── copyconfig.json
│   │   ├── .editorconfig
│   │   ├── .eslintignore
│   │   ├── .eslintrc.js
│   │   ├── .github/
│   │   │   └── README.md
│   │   ├── .gitignore
│   │   ├── .metadata/
│   │   │   ├── .bazelrc.template
│   │   │   ├── .bazelversion.template
│   │   │   ├── .editorconfig.template
│   │   │   ├── .eslintrc.js.template
│   │   │   ├── .gitignore.template
│   │   │   ├── .prettierrc.json.template
│   │   │   ├── .watchmanconfig.template
│   │   │   ├── AGENTS.md.template
│   │   │   ├── README.md.template
│   │   │   ├── WORKSPACE.template
│   │   │   ├── config.yaml.template
│   │   │   ├── package.json.template
│   │   │   ├── skill-reference.tsx.template
│   │   │   ├── skill-tests-BUILD.bazel.template
│   │   │   ├── skill-tests-README.md.template
│   │   │   └── skill.md.template
│   │   ├── .prettierignore
│   │   ├── .prettierrc.json
│   │   ├── LINUX_COMPATIBILITY.md
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── prettier.config.js
│   │   ├── scripts/
│   │   │   ├── bundle-skills.js
│   │   │   ├── sync-agents-md.sh
│   │   │   └── update-agents-templates.ts
│   │   ├── spec/
│   │   │   └── support/
│   │   │       └── jasmine.json
│   │   ├── src/
│   │   │   ├── commands/
│   │   │   │   ├── bootstrap.ts
│   │   │   │   ├── build.ts
│   │   │   │   ├── devSetup.ts
│   │   │   │   ├── doctor.ts
│   │   │   │   ├── export.ts
│   │   │   │   ├── hotreload.ts
│   │   │   │   ├── install.ts
│   │   │   │   ├── lint.ts
│   │   │   │   ├── lint_commands/
│   │   │   │   │   ├── lintCheck.ts
│   │   │   │   │   └── lintFormat.ts
│   │   │   │   ├── log.ts
│   │   │   │   ├── newModule.ts
│   │   │   │   ├── package.ts
│   │   │   │   ├── projectsync.ts
│   │   │   │   ├── skills.ts
│   │   │   │   ├── skills_commands/
│   │   │   │   │   ├── create.ts
│   │   │   │   │   ├── install.ts
│   │   │   │   │   ├── list.ts
│   │   │   │   │   ├── remove.ts
│   │   │   │   │   └── update.ts
│   │   │   │   └── test.ts
│   │   │   ├── core/
│   │   │   │   ├── constants.ts
│   │   │   │   └── errors.ts
│   │   │   ├── index.ts
│   │   │   ├── setup/
│   │   │   │   ├── DevSetupHelper.ts
│   │   │   │   ├── linuxSetup.ts
│   │   │   │   ├── macOSSetup.ts
│   │   │   │   ├── setupEntryPoint.ts
│   │   │   │   └── versions.ts
│   │   │   └── utils/
│   │   │       ├── ArgumentsResolver.ts
│   │   │       ├── BazelClient.ts
│   │   │       ├── Digraph.ts
│   │   │       ├── LoadingIndicator.ts
│   │   │       ├── applicationUtils.ts
│   │   │       ├── buildInfo.ts
│   │   │       ├── byString.ts
│   │   │       ├── cliUtils.ts
│   │   │       ├── copyBootstrapFiles.ts
│   │   │       ├── deviceUtils.ts
│   │   │       ├── errorUtils.ts
│   │   │       ├── fileUtils.ts
│   │   │       ├── githubUtils.ts
│   │   │       ├── jsonUtils.ts
│   │   │       ├── lintUtils.ts
│   │   │       ├── linuxDistro.spec.ts
│   │   │       ├── linuxDistro.ts
│   │   │       ├── logUtils.ts
│   │   │       ├── pathUtils.ts
│   │   │       ├── skillsAdapters.ts
│   │   │       ├── skillsRegistry.ts
│   │   │       ├── stringUtils.spec.ts
│   │   │       ├── stringUtils.ts
│   │   │       ├── tempDir.ts
│   │   │       └── zipUtils.ts
│   │   ├── test/
│   │   │   ├── ValdiSmokeTest.ts
│   │   │   └── helpers/
│   │   │       ├── AsyncHelpers.ts
│   │   │       ├── CommandHelpers.ts
│   │   │       ├── ProjectHelpers.ts
│   │   │       ├── StreamHelpers.ts
│   │   │       └── TypeScriptClient.ts
│   │   ├── tsconfig.dist.json
│   │   └── tsconfig.json
│   └── eslint-plugin-valdi/
│       ├── .gitignore
│       ├── package.json
│       ├── src/
│       │   ├── index.ts
│       │   └── rules/
│       │       ├── assign-timer-id.ts
│       │       ├── attributed-text-no-array-assignment.ts
│       │       ├── jsx-no-lambda.ts
│       │       ├── mutate-state-without-set-state.ts
│       │       ├── no-declare-test-without-describe.ts
│       │       ├── no-implicit-index-import.ts
│       │       ├── no-import-from-test-outside-test-dir.ts
│       │       ├── no-react-patterns.ts
│       │       └── only-const-enum.ts
│       ├── tests/
│       │   └── mocha-setup.mjs
│       └── tsconfig.json
├── package.json
├── scripts/
│   ├── config_setup.sh
│   ├── dev_setup.sh
│   ├── linux_deps_setup.sh
│   ├── linux_dev_setup.sh
│   ├── mac_deps_setup.sh
│   ├── macos_dev_setup.sh
│   ├── npm_setup.sh
│   ├── premerge_check.sh
│   ├── verify_not_rosetta.sh
│   └── vscode/
│       ├── install_extensions.sh
│       ├── valdi-debug.vsix
│       └── valdi-vivaldi.vsix
├── snap_drawing/
│   ├── BUILD.bazel
│   ├── README.md
│   ├── scripts/
│   │   └── run_benchmark.sh
│   ├── src/
│   │   ├── benchmark/
│   │   │   └── main.cpp
│   │   ├── demo/
│   │   │   ├── SnapDrawingDemo.mm
│   │   │   ├── SnapDrawingVideoEncoder.h
│   │   │   └── SnapDrawingVideoEncoder.mm
│   │   └── snap_drawing/
│   │       ├── android/
│   │       │   ├── AndroidFrameScheduler.cpp
│   │       │   └── AndroidFrameScheduler.hpp
│   │       ├── apple/
│   │       │   ├── CoreGraphicsUtils.cpp
│   │       │   ├── CoreGraphicsUtils.hpp
│   │       │   ├── Drawing/
│   │       │   │   ├── BaseDisplayLinkFrameScheduler.cpp
│   │       │   │   ├── BaseDisplayLinkFrameScheduler.hpp
│   │       │   │   ├── CADisplayLinkFrameScheduler.h
│   │       │   │   ├── CADisplayLinkFrameScheduler.mm
│   │       │   │   ├── CVDisplayLinkFrameScheduler.cpp
│   │       │   │   └── CVDisplayLinkFrameScheduler.hpp
│   │       │   ├── MetalGraphicsContext.mm
│   │       │   ├── MetalSurfacePresenterManager.h
│   │       │   └── MetalSurfacePresenterManager.mm
│   │       └── cpp/
│   │           ├── Animations/
│   │           │   ├── Animation.cpp
│   │           │   ├── Animation.hpp
│   │           │   ├── InterpolationFunction.cpp
│   │           │   ├── InterpolationFunction.hpp
│   │           │   ├── SpringAnimation.cpp
│   │           │   ├── SpringAnimation.hpp
│   │           │   ├── SpringForce.cpp
│   │           │   ├── SpringForce.hpp
│   │           │   ├── ValueInterpolators.cpp
│   │           │   ├── ValueInterpolators.hpp
│   │           │   ├── ViscousFluidInterpolator.cpp
│   │           │   ├── ViscousFluidInterpolator.hpp
│   │           │   └── bezier.hpp
│   │           ├── Drawing/
│   │           │   ├── BlendMode.cpp
│   │           │   ├── BlendMode.hpp
│   │           │   ├── BoxShadow.cpp
│   │           │   ├── BoxShadow.hpp
│   │           │   ├── Composition/
│   │           │   │   ├── CompositionState.cpp
│   │           │   │   ├── CompositionState.hpp
│   │           │   │   ├── Compositor.cpp
│   │           │   │   ├── Compositor.hpp
│   │           │   │   ├── CompositorPlane.cpp
│   │           │   │   ├── CompositorPlane.hpp
│   │           │   │   ├── CompositorPlaneList.cpp
│   │           │   │   ├── CompositorPlaneList.hpp
│   │           │   │   ├── ResolvedPlane.cpp
│   │           │   │   └── ResolvedPlane.hpp
│   │           │   ├── DisplayList/
│   │           │   │   ├── CleanUpDisplayListVisitor.cpp
│   │           │   │   ├── CleanUpDisplayListVisitor.hpp
│   │           │   │   ├── DebugJSONDisplayListVisitor.cpp
│   │           │   │   ├── DebugJSONDisplayListVisitor.hpp
│   │           │   │   ├── DisplayList.cpp
│   │           │   │   ├── DisplayList.hpp
│   │           │   │   ├── DisplayListOperations.cpp
│   │           │   │   ├── DisplayListOperations.hpp
│   │           │   │   ├── DrawDisplayListVisitor.cpp
│   │           │   │   └── DrawDisplayListVisitor.hpp
│   │           │   ├── DrawLooper.cpp
│   │           │   ├── DrawLooper.hpp
│   │           │   ├── DrawLooperEntry.cpp
│   │           │   ├── DrawLooperEntry.hpp
│   │           │   ├── DrawOperation.cpp
│   │           │   ├── DrawOperation.hpp
│   │           │   ├── DrawingContext.cpp
│   │           │   ├── DrawingContext.hpp
│   │           │   ├── GraphicsContext/
│   │           │   │   ├── ANativeWindowGraphicsContext.cpp
│   │           │   │   ├── ANativeWindowGraphicsContext.hpp
│   │           │   │   ├── BitmapGraphicsContext.cpp
│   │           │   │   ├── BitmapGraphicsContext.hpp
│   │           │   │   ├── EGLUtils.cpp
│   │           │   │   ├── EGLUtils.hpp
│   │           │   │   ├── GLGraphicsContext.cpp
│   │           │   │   ├── GLGraphicsContext.hpp
│   │           │   │   ├── GrGraphicsContext.cpp
│   │           │   │   ├── GrGraphicsContext.hpp
│   │           │   │   ├── GraphicsContext.cpp
│   │           │   │   ├── GraphicsContext.hpp
│   │           │   │   ├── IShaderCache.hpp
│   │           │   │   ├── MetalGraphicsContext.cpp
│   │           │   │   └── MetalGraphicsContext.hpp
│   │           │   ├── IFrameScheduler.hpp
│   │           │   ├── LayerContent.cpp
│   │           │   ├── LayerContent.hpp
│   │           │   ├── LinearGradient.cpp
│   │           │   ├── LinearGradient.hpp
│   │           │   ├── Mask/
│   │           │   │   ├── CompositeMask.cpp
│   │           │   │   ├── CompositeMask.hpp
│   │           │   │   ├── IMask.hpp
│   │           │   │   ├── PaintMask.cpp
│   │           │   │   └── PaintMask.hpp
│   │           │   ├── MaskFilter.cpp
│   │           │   ├── MaskFilter.hpp
│   │           │   ├── Paint.cpp
│   │           │   ├── Paint.hpp
│   │           │   ├── RadialGradient.cpp
│   │           │   ├── RadialGradient.hpp
│   │           │   ├── Raster/
│   │           │   │   ├── BitmapCache.cpp
│   │           │   │   ├── BitmapCache.hpp
│   │           │   │   ├── RasterContext.cpp
│   │           │   │   ├── RasterContext.hpp
│   │           │   │   ├── RasterDamageResolver.cpp
│   │           │   │   └── RasterDamageResolver.hpp
│   │           │   ├── Shader.cpp
│   │           │   ├── Shader.hpp
│   │           │   └── Surface/
│   │           │       ├── DrawableSurface.cpp
│   │           │       ├── DrawableSurface.hpp
│   │           │       ├── DrawableSurfaceCanvas.cpp
│   │           │       ├── DrawableSurfaceCanvas.hpp
│   │           │       ├── ExternalSurface.cpp
│   │           │       ├── ExternalSurface.hpp
│   │           │       ├── ExternalSurfacePresenterState.cpp
│   │           │       ├── ExternalSurfacePresenterState.hpp
│   │           │       ├── Surface.cpp
│   │           │       ├── Surface.hpp
│   │           │       ├── SurfacePresenter.cpp
│   │           │       ├── SurfacePresenter.hpp
│   │           │       ├── SurfacePresenterList.cpp
│   │           │       ├── SurfacePresenterList.hpp
│   │           │       ├── SurfacePresenterManager.cpp
│   │           │       └── SurfacePresenterManager.hpp
│   │           ├── Events/
│   │           │   ├── Event.cpp
│   │           │   ├── Event.hpp
│   │           │   ├── EventCallback.hpp
│   │           │   ├── EventId.hpp
│   │           │   ├── EventQueue.cpp
│   │           │   └── EventQueue.hpp
│   │           ├── Layers/
│   │           │   ├── AnimatedImageLayer.cpp
│   │           │   ├── AnimatedImageLayer.hpp
│   │           │   ├── ButtonLayer.cpp
│   │           │   ├── ButtonLayer.hpp
│   │           │   ├── ExternalLayer.cpp
│   │           │   ├── ExternalLayer.hpp
│   │           │   ├── FlexboxLayer.cpp
│   │           │   ├── FlexboxLayer.hpp
│   │           │   ├── ImageLayer.cpp
│   │           │   ├── ImageLayer.hpp
│   │           │   ├── Interfaces/
│   │           │   │   ├── ILayer.hpp
│   │           │   │   ├── ILayerRoot.hpp
│   │           │   │   └── ILoadedAssetLayer.hpp
│   │           │   ├── Layer.cpp
│   │           │   ├── Layer.hpp
│   │           │   ├── LayerRoot.cpp
│   │           │   ├── LayerRoot.hpp
│   │           │   ├── Mask/
│   │           │   │   ├── GradientMaskLayer.cpp
│   │           │   │   ├── GradientMaskLayer.hpp
│   │           │   │   ├── IMaskLayer.hpp
│   │           │   │   ├── PaintMaskLayer.cpp
│   │           │   │   ├── PaintMaskLayer.hpp
│   │           │   │   ├── ScrollLayerFadingEdgesMaskLayer.cpp
│   │           │   │   └── ScrollLayerFadingEdgesMaskLayer.hpp
│   │           │   ├── Scroll/
│   │           │   │   ├── AndroidScroller.cpp
│   │           │   │   ├── AndroidScroller.hpp
│   │           │   │   ├── BaseScrollLayerAnimation.cpp
│   │           │   │   ├── BaseScrollLayerAnimation.hpp
│   │           │   │   ├── IOSScroller.cpp
│   │           │   │   ├── IOSScroller.hpp
│   │           │   │   ├── IScroller.hpp
│   │           │   │   ├── SplineScrollPhysics.cpp
│   │           │   │   ├── SplineScrollPhysics.hpp
│   │           │   │   ├── SpringFlingScrollLayerAnimation.cpp
│   │           │   │   ├── SpringFlingScrollLayerAnimation.hpp
│   │           │   │   ├── SpringScrollPhysics.cpp
│   │           │   │   └── SpringScrollPhysics.hpp
│   │           │   ├── ScrollLayer.cpp
│   │           │   ├── ScrollLayer.hpp
│   │           │   ├── ShapeLayer.cpp
│   │           │   ├── ShapeLayer.hpp
│   │           │   ├── SpinnerLayer.cpp
│   │           │   ├── SpinnerLayer.hpp
│   │           │   ├── TextLayer.cpp
│   │           │   ├── TextLayer.hpp
│   │           │   ├── VideoLayer.cpp
│   │           │   └── VideoLayer.hpp
│   │           ├── Resources.cpp
│   │           ├── Resources.hpp
│   │           ├── Text/
│   │           │   ├── AttributedText.cpp
│   │           │   ├── AttributedText.hpp
│   │           │   ├── Character.hpp
│   │           │   ├── CharactersIterator.hpp
│   │           │   ├── Font.cpp
│   │           │   ├── Font.hpp
│   │           │   ├── FontFamily.cpp
│   │           │   ├── FontFamily.hpp
│   │           │   ├── FontFamilyWithLoadableTypefaces.cpp
│   │           │   ├── FontFamilyWithLoadableTypefaces.hpp
│   │           │   ├── FontFamilyWithStyleSet.cpp
│   │           │   ├── FontFamilyWithStyleSet.hpp
│   │           │   ├── FontManager.cpp
│   │           │   ├── FontManager.hpp
│   │           │   ├── FontMetrics.hpp
│   │           │   ├── FontStyle.cpp
│   │           │   ├── FontStyle.hpp
│   │           │   ├── Harfbuzz.cpp
│   │           │   ├── Harfbuzz.hpp
│   │           │   ├── IFontManager.cpp
│   │           │   ├── IFontManager.hpp
│   │           │   ├── LoadableTypeface.cpp
│   │           │   ├── LoadableTypeface.hpp
│   │           │   ├── SkFontMgrSingleton.cpp
│   │           │   ├── SkFontMgrSingleton.hpp
│   │           │   ├── TextLayout.cpp
│   │           │   ├── TextLayout.hpp
│   │           │   ├── TextLayoutBuilder.cpp
│   │           │   ├── TextLayoutBuilder.hpp
│   │           │   ├── TextShaper.cpp
│   │           │   ├── TextShaper.hpp
│   │           │   ├── TextShaperCache.cpp
│   │           │   ├── TextShaperCache.hpp
│   │           │   ├── TextShaperHarfbuzz.cpp
│   │           │   ├── TextShaperHarfbuzz.hpp
│   │           │   ├── Typeface.cpp
│   │           │   ├── Typeface.hpp
│   │           │   ├── TypefaceRegistry.cpp
│   │           │   ├── TypefaceRegistry.hpp
│   │           │   ├── Unicode.cpp
│   │           │   ├── Unicode.hpp
│   │           │   ├── WordCachingTextShaper.cpp
│   │           │   └── WordCachingTextShaper.hpp
│   │           ├── Touches/
│   │           │   ├── AttributedTextOnTapGestureRecognizer.cpp
│   │           │   ├── AttributedTextOnTapGestureRecognizer.hpp
│   │           │   ├── DoubleTapGestureRecognizer.cpp
│   │           │   ├── DoubleTapGestureRecognizer.hpp
│   │           │   ├── DragGestureRecognizer.cpp
│   │           │   ├── DragGestureRecognizer.hpp
│   │           │   ├── GestureRecognizer.cpp
│   │           │   ├── GestureRecognizer.hpp
│   │           │   ├── GesturesConfiguration.cpp
│   │           │   ├── GesturesConfiguration.hpp
│   │           │   ├── LongPressGestureRecognizer.cpp
│   │           │   ├── LongPressGestureRecognizer.hpp
│   │           │   ├── MoveGestureRecognizer.cpp
│   │           │   ├── MoveGestureRecognizer.hpp
│   │           │   ├── PinchGestureRecognizer.cpp
│   │           │   ├── PinchGestureRecognizer.hpp
│   │           │   ├── RotateGestureRecognizer.cpp
│   │           │   ├── RotateGestureRecognizer.hpp
│   │           │   ├── ScrollGestureRecognizer.cpp
│   │           │   ├── ScrollGestureRecognizer.hpp
│   │           │   ├── SingleTapGestureRecognizer.cpp
│   │           │   ├── SingleTapGestureRecognizer.hpp
│   │           │   ├── TapGestureRecognizer.cpp
│   │           │   ├── TapGestureRecognizer.hpp
│   │           │   ├── TouchDispatcher.cpp
│   │           │   ├── TouchDispatcher.hpp
│   │           │   ├── TouchEvent.cpp
│   │           │   ├── TouchEvent.hpp
│   │           │   ├── TouchGestureRecognizer.cpp
│   │           │   ├── TouchGestureRecognizer.hpp
│   │           │   ├── WheelGestureRecognizer.cpp
│   │           │   └── WheelGestureRecognizer.hpp
│   │           └── Utils/
│   │               ├── Aliases.hpp
│   │               ├── AnimatedImage.cpp
│   │               ├── AnimatedImage.hpp
│   │               ├── Bitmap.cpp
│   │               ├── Bitmap.hpp
│   │               ├── BitmapFactory.cpp
│   │               ├── BitmapFactory.hpp
│   │               ├── BitmapUtils.cpp
│   │               ├── BitmapUtils.hpp
│   │               ├── BorderRadius.cpp
│   │               ├── BorderRadius.hpp
│   │               ├── BoundingBoxHierarchy.cpp
│   │               ├── BoundingBoxHierarchy.hpp
│   │               ├── BytesUtils.cpp
│   │               ├── BytesUtils.hpp
│   │               ├── Color.cpp
│   │               ├── Color.hpp
│   │               ├── Duration.hpp
│   │               ├── Geometry.cpp
│   │               ├── Geometry.hpp
│   │               ├── GradientWrapper.cpp
│   │               ├── GradientWrapper.hpp
│   │               ├── Image.cpp
│   │               ├── Image.hpp
│   │               ├── ImageQueue.cpp
│   │               ├── ImageQueue.hpp
│   │               ├── JSONUtils.cpp
│   │               ├── JSONUtils.hpp
│   │               ├── LazyPath.cpp
│   │               ├── LazyPath.hpp
│   │               ├── LottieAnimatedImage.cpp
│   │               ├── LottieAnimatedImage.hpp
│   │               ├── Matrix.cpp
│   │               ├── Matrix.hpp
│   │               ├── Path.cpp
│   │               ├── Path.hpp
│   │               ├── PathInterpolator.cpp
│   │               ├── PathInterpolator.hpp
│   │               ├── SafeContainer.cpp
│   │               ├── SafeContainer.hpp
│   │               ├── Scalar.cpp
│   │               ├── Scalar.hpp
│   │               ├── SkCodecAnimatedImage.cpp
│   │               ├── SkCodecAnimatedImage.hpp
│   │               ├── SkiaBridge.cpp
│   │               ├── SkiaBridge.hpp
│   │               ├── TimePoint.hpp
│   │               ├── UTFUtils.cpp
│   │               ├── UTFUtils.hpp
│   │               ├── VelocityTracker.cpp
│   │               └── VelocityTracker.hpp
│   ├── test/
│   │   ├── src/
│   │   │   ├── Compositor_Tests.cpp
│   │   │   ├── DisplayList_Tests.cpp
│   │   │   ├── DoubleTapGestureRecognizer_tests.cpp
│   │   │   ├── DragGestureRecognizer_tests.cpp
│   │   │   ├── DrawLooper_Tests.cpp
│   │   │   ├── FlexboxLayer_tests.cpp
│   │   │   ├── ImageBitmap_tests.cpp
│   │   │   ├── ImageQueue_tests.cpp
│   │   │   ├── Interpolator_Tests.cpp
│   │   │   ├── Layer_tests.cpp
│   │   │   ├── LongPressGestureRecognizer_tests.cpp
│   │   │   ├── LottieLayer_tests.cpp
│   │   │   ├── PinchGestureRecognizer_tests.cpp
│   │   │   ├── RasterContext_tests.cpp
│   │   │   ├── RasterDamageResolver_tests.cpp
│   │   │   ├── RotateGestureRecognizer_tests.cpp
│   │   │   ├── ScrollLayer_test.cpp
│   │   │   ├── SingleTapGestureRecognizer_tests.cpp
│   │   │   ├── TextLayout_Tests.cpp
│   │   │   ├── TextShaperCache_tests.cpp
│   │   │   ├── TouchDispatcher_tests.cpp
│   │   │   ├── TouchGestureRecognizer_tests.cpp
│   │   │   ├── VideoLayer_tests.cpp
│   │   │   ├── WheelGestureRecognizer_tests.cpp
│   │   │   └── WordCachingTextShaper_tests.cpp
│   │   └── utils/
│   │       ├── DisplayListBuilder.cpp
│   │       ├── DisplayListBuilder.hpp
│   │       ├── TestBitmap.cpp
│   │       ├── TestBitmap.hpp
│   │       ├── TestDataUtils.cpp
│   │       ├── TestDataUtils.hpp
│   │       ├── TestGestureUtils.cpp
│   │       └── TestGestureUtils.hpp
│   └── testdata/
│       └── lottie_loading.json
├── src/
│   ├── BUILD.bazel
│   ├── platform-projects/
│   │   └── android/
│   │       ├── android_exports.lst
│   │       ├── build_id_note_symbols.ld
│   │       ├── client/
│   │       │   ├── .gitignore
│   │       │   ├── proguard-rules.pro
│   │       │   └── src/
│   │       │       └── main/
│   │       │           ├── AndroidManifest.xml
│   │       │           └── res/
│   │       │               └── values/
│   │       │                   └── strings.xml
│   │       └── dummy/
│   │           ├── .gitignore
│   │           ├── prepare_compressed_library.sh
│   │           ├── proguard-rules.pro
│   │           └── src/
│   │               └── main/
│   │                   ├── AndroidManifest.xml
│   │                   └── res/
│   │                       └── values/
│   │                           └── strings.xml
│   └── valdi_modules/
│       ├── .prettierrc.json
│       └── src/
│           ├── cpp/
│           │   └── valdi_http/
│           │       ├── BUILD.bazel
│           │       ├── HTTPRequestManagerModuleFactory.cpp
│           │       └── HTTPRequestManagerModuleFactory.hpp
│           └── valdi/
│               ├── _configs/
│               │   ├── BUILD.bazel
│               │   ├── base.tsconfig.json
│               │   └── eslint.tsconfig.json
│               ├── bridge_observables/
│               │   ├── BUILD.bazel
│               │   ├── README.md
│               │   ├── module.yaml
│               │   ├── src/
│               │   │   ├── types/
│               │   │   │   ├── BridgeError.d.ts
│               │   │   │   ├── BridgeObservable.ts
│               │   │   │   ├── BridgeObserver.d.ts
│               │   │   │   ├── BridgeObserverEvent.d.ts
│               │   │   │   └── BridgeSubject.d.ts
│               │   │   └── utils/
│               │   │       ├── convertBridgeObservableToObservable.ts
│               │   │       ├── convertBridgeObserverToObserver.ts
│               │   │       ├── convertBridgeSubjectToObservable.ts
│               │   │       ├── convertBridgeSubjectToObserver.ts
│               │   │       ├── convertBridgeSubjectToSubject.ts
│               │   │       ├── convertObservableToBridgeObservable.ts
│               │   │       ├── convertObserverToBridgeObserver.ts
│               │   │       ├── convertSubjectToBridgeSubject.ts
│               │   │       ├── converter.ts
│               │   │       └── optional/
│               │   │           ├── convertOptionalBridgeObservableToObservable.ts
│               │   │           └── convertOptionalBridgeSubjectToObservable.ts
│               │   └── tsconfig.json
│               ├── coreutils/
│               │   ├── BUILD.bazel
│               │   ├── README.md
│               │   ├── module.yaml
│               │   ├── src/
│               │   │   ├── ArrayUtils.ts
│               │   │   ├── Base64.ts
│               │   │   ├── LRUCache.ts
│               │   │   ├── Range.ts
│               │   │   ├── RuntimeBase.d.ts
│               │   │   ├── SerialTaskQueue.ts
│               │   │   ├── StringMap.d.ts
│               │   │   ├── StringSet.d.ts
│               │   │   ├── Uint8ArrayUtils.ts
│               │   │   ├── dummy.ts
│               │   │   ├── md5.ts
│               │   │   ├── unicode/
│               │   │   │   ├── TextCoding.ts
│               │   │   │   ├── UnicodeNative.d.ts
│               │   │   │   └── UnicodeString.ts
│               │   │   ├── url.ts
│               │   │   └── uuidUtils.ts
│               │   ├── test/
│               │   │   ├── Base64.spec.ts
│               │   │   ├── LRUCache.spec.ts
│               │   │   ├── TextCoding.spec.ts
│               │   │   ├── UnicodeString.spec.ts
│               │   │   ├── md5.spec.ts
│               │   │   ├── urls.spec.ts
│               │   │   └── uuidUtils.spec.ts
│               │   ├── tsconfig.json
│               │   └── web/
│               │       ├── UnicodeNative.ts
│               │       └── tsconfig.json
│               ├── drawing/
│               │   ├── BUILD.bazel
│               │   ├── module.yaml
│               │   ├── src/
│               │   │   ├── AttributedTextNative.d.ts
│               │   │   ├── BitmapFactory.ts
│               │   │   ├── BitmapNative.d.ts
│               │   │   ├── Drawing.ts
│               │   │   ├── DrawingModuleProvider.d.ts
│               │   │   ├── FontManager.ts
│               │   │   ├── FontManagerNative.d.ts
│               │   │   ├── IBitmap.d.ts
│               │   │   ├── IManagedContext.d.ts
│               │   │   ├── INativeBitmap.d.ts
│               │   │   ├── ManagedContextAssetTracker.ts
│               │   │   ├── ManagedContextFactory.ts
│               │   │   └── ManagedContextNative.d.ts
│               │   ├── test/
│               │   │   ├── ManagedContextAssetTracker.spec.ts
│               │   │   └── ManagedContextFactory.spec.tsx
│               │   ├── tsconfig.json
│               │   └── web/
│               │       ├── BitmapNative.ts
│               │       ├── DrawingModuleProvider.ts
│               │       ├── FontManagerNative.ts
│               │       ├── ManagedContextNative.ts
│               │       └── tsconfig.json
│               ├── file_system/
│               │   ├── BUILD.bazel
│               │   ├── README.md
│               │   ├── module.yaml
│               │   ├── src/
│               │   │   ├── FileSystem.ts
│               │   │   └── FileSystemModule.d.ts
│               │   ├── test/
│               │   │   ├── FileSystem.spec.ts
│               │   │   └── test_file.txt
│               │   ├── tsconfig.json
│               │   └── web/
│               │       ├── FileSystem.ts
│               │       └── tsconfig.json
│               ├── foundation/
│               │   ├── BUILD.bazel
│               │   ├── README.md
│               │   ├── module.yaml
│               │   ├── src/
│               │   │   ├── Announcer.ts
│               │   │   ├── CachedFunctionCall.ts
│               │   │   ├── Debounce.ts
│               │   │   ├── DebounceBatch.ts
│               │   │   ├── DebounceReorder.ts
│               │   │   ├── DeferredPromise.ts
│               │   │   ├── Error.d.ts
│               │   │   ├── ICancelable.d.ts
│               │   │   ├── IDisposable.d.ts
│               │   │   ├── KeyedFunctionCache.ts
│               │   │   ├── Lazy.ts
│               │   │   ├── Long.ts
│               │   │   ├── NativeViewUtils.ts
│               │   │   ├── Provider.ts
│               │   │   ├── Subscribable.ts
│               │   │   ├── Subscription.d.ts
│               │   │   ├── Timer.ts
│               │   │   ├── UnreachableError.ts
│               │   │   ├── array.ts
│               │   │   ├── deepClone.ts
│               │   │   ├── emoji.ts
│               │   │   ├── equality.ts
│               │   │   ├── foundation.ts
│               │   │   ├── function.ts
│               │   │   ├── functional/
│               │   │   │   ├── README.md
│               │   │   │   ├── cacheResolved.ts
│               │   │   │   ├── mapArguments.ts
│               │   │   │   ├── mapResult.ts
│               │   │   │   └── transformProperties.ts
│               │   │   ├── impl/
│               │   │   │   ├── CallbackCancelable.ts
│               │   │   │   ├── CallbackDisposable.ts
│               │   │   │   └── CancelableGroup.ts
│               │   │   ├── isDefined.ts
│               │   │   ├── isUndefined.ts
│               │   │   ├── makePropertiesOpaque.ts
│               │   │   ├── map.ts
│               │   │   ├── number.ts
│               │   │   ├── object.ts
│               │   │   ├── required.ts
│               │   │   ├── runWith.ts
│               │   │   ├── set.ts
│               │   │   ├── shuffle.ts
│               │   │   ├── staticImplements.ts
│               │   │   ├── string.ts
│               │   │   ├── time.ts
│               │   │   ├── trace.ts
│               │   │   ├── unicode.ts
│               │   │   └── uuid.ts
│               │   ├── test/
│               │   │   ├── DeferredPromise.spec.ts
│               │   │   ├── KeyedFunctionCache.spec.ts
│               │   │   ├── deepClone.spec.ts
│               │   │   ├── functional/
│               │   │   │   ├── cacheResolved.spec.ts
│               │   │   │   ├── mapArguments.spec.ts
│               │   │   │   ├── mapResult.spec.ts
│               │   │   │   └── transformProperties.spec.ts
│               │   │   ├── isDefinedTest.ts
│               │   │   ├── multiInsertTest.ts
│               │   │   ├── required.spec.ts
│               │   │   ├── runWith.spec.ts
│               │   │   ├── stringTest.ts
│               │   │   └── util/
│               │   │       ├── ExplorerVirtualNode.ts
│               │   │       ├── ReproducibleGenerator.ts
│               │   │       ├── componentGetChildren.ts
│               │   │       ├── componentGetElements.ts
│               │   │       ├── componentGetKey.ts
│               │   │       ├── componentGetVirtualNode.ts
│               │   │       ├── componentGlobFind.ts
│               │   │       ├── componentKeyFind.ts
│               │   │       ├── componentTreeDump.ts
│               │   │       ├── componentTypeFind.ts
│               │   │       ├── consoleColor.ts
│               │   │       ├── elementGlobFind.ts
│               │   │       ├── elementKeyFind.ts
│               │   │       ├── elementTreeDump.ts
│               │   │       ├── elementTypeFind.ts
│               │   │       ├── findNodeWithKey.ts
│               │   │       ├── getAttributeFromNode.ts
│               │   │       ├── getIsUnderNode.ts
│               │   │       ├── globToRegex.ts
│               │   │       ├── isRenderedElement.ts
│               │   │       ├── lib/
│               │   │       │   └── faker.js
│               │   │       ├── mockFlushable.ts
│               │   │       ├── mockFlushableWithData.ts
│               │   │       ├── mockFlushableWithDataAndError.ts
│               │   │       ├── mockObject.ts
│               │   │       ├── mockObjectWithSpy.ts
│               │   │       ├── tapNodeWithKey.ts
│               │   │       ├── typeInTextFieldWithKey.ts
│               │   │       ├── untilNextRenderComplete.ts
│               │   │       ├── untilRenderComplete.ts
│               │   │       ├── virtualNodeGetKey.ts
│               │   │       ├── virtualNodeTreeDump.ts
│               │   │       ├── waitFor.ts
│               │   │       └── waitForNodeWithKey.ts
│               │   └── tsconfig.json
│               ├── jasmine/
│               │   ├── BUILD.bazel
│               │   ├── README.md
│               │   ├── module.yaml
│               │   ├── package.json
│               │   ├── src/
│               │   │   ├── boot.js
│               │   │   ├── console_reporter.js
│               │   │   ├── jasmine-reporters/
│               │   │   │   └── junit_reporter.js
│               │   │   ├── jasmine.d.ts
│               │   │   ├── jasmine.js
│               │   │   └── origin_boot.js
│               │   └── tsconfig.json
│               ├── persistence/
│               │   ├── BUILD.bazel
│               │   ├── module.yaml
│               │   ├── src/
│               │   │   ├── PersistentStore.ts
│               │   │   └── PersistentStoreNative.d.ts
│               │   ├── test/
│               │   │   └── PersistentStoreTest.ts
│               │   ├── tsconfig.json
│               │   └── web/
│               │       ├── PersistentStoreNative.ts
│               │       └── tsconfig.json
│               ├── source_map/
│               │   ├── BUILD.bazel
│               │   ├── module.yaml
│               │   ├── src/
│               │   │   ├── ISourceMap.d.ts
│               │   │   ├── SourceMap.ts
│               │   │   ├── StackSymbolicator.ts
│               │   │   └── VLQ.ts
│               │   ├── test/
│               │   │   ├── SourceMap.spec.ts
│               │   │   └── SourceMapExample.ts
│               │   └── tsconfig.json
│               ├── tsconfig.json
│               ├── types/
│               │   ├── BUILD.bazel
│               │   ├── Long.d.ts
│               │   └── globals.d.ts
│               ├── valdi_core/
│               │   ├── BUILD.bazel
│               │   ├── README.md
│               │   ├── module.yaml
│               │   ├── package.json
│               │   ├── src/
│               │   │   ├── AnimationOptions.ts
│               │   │   ├── Any.d.ts
│               │   │   ├── AnyRenderFunction.d.ts
│               │   │   ├── Application.ts
│               │   │   ├── ApplicationBridge.d.ts
│               │   │   ├── Asset.ts
│               │   │   ├── AssetCatalog.ts
│               │   │   ├── BugReporter.ts
│               │   │   ├── BuildType.ts
│               │   │   ├── CSSModule.ts
│               │   │   ├── CancelablePromise.ts
│               │   │   ├── CancellableAnimation.d.ts
│               │   │   ├── CancellableAnimationPromise.ts
│               │   │   ├── CapturedNode.ts
│               │   │   ├── CompilerIntrinsics.ts
│               │   │   ├── Component.ts
│               │   │   ├── ComponentKey.d.ts
│               │   │   ├── ComponentPath.ts
│               │   │   ├── ComponentPrototype.ts
│               │   │   ├── ComponentRef.ts
│               │   │   ├── Console.ts
│               │   │   ├── ConsoleRepresentable.d.ts
│               │   │   ├── Device.ts
│               │   │   ├── DeviceBridge.d.ts
│               │   │   ├── ElementModifier.tsx
│               │   │   ├── ElementRef.ts
│               │   │   ├── EntryPointComponent.tsx
│               │   │   ├── EntryPointRenderFunction.d.ts
│               │   │   ├── EntryPointViewModel.d.ts
│               │   │   ├── FunctionComponent.tsx
│               │   │   ├── GeometricPath.ts
│               │   │   ├── Geometry.d.ts
│               │   │   ├── IComponent.d.ts
│               │   │   ├── IComponentRenderObserver.d.ts
│               │   │   ├── IEntryPointComponent.d.ts
│               │   │   ├── IModuleLoader.d.ts
│               │   │   ├── IRenderedElement.d.ts
│               │   │   ├── IRenderedElementApplier.d.ts
│               │   │   ├── IRenderedVirtualNode.d.ts
│               │   │   ├── IRenderedVirtualNodeData.ts
│               │   │   ├── IRenderer.ts
│               │   │   ├── IRendererDelegate.d.ts
│               │   │   ├── IRendererEventListener.ts
│               │   │   ├── IRootComponentsManager.ts
│               │   │   ├── IRootElementObserver.d.ts
│               │   │   ├── IRuntimeIssueObserver.d.ts
│               │   │   ├── Init.js
│               │   │   ├── JSX.ts
│               │   │   ├── JSXBootstrap.ts
│               │   │   ├── JSXRendererDelegate.ts
│               │   │   ├── Lazy.tsx
│               │   │   ├── LocalizableStrings.ts
│               │   │   ├── Long.js
│               │   │   ├── ModuleLoader.ts
│               │   │   ├── ModuleLoaderGlobal.ts
│               │   │   ├── NativeReferences.ts
│               │   │   ├── NodePrototype.ts
│               │   │   ├── PostInit.ts
│               │   │   ├── Promise.js
│               │   │   ├── PromisePolyfill.ts
│               │   │   ├── RenderRequest.d.ts
│               │   │   ├── Renderer.ts
│               │   │   ├── RendererFactory.d.ts
│               │   │   ├── RootComponentsManager.ts
│               │   │   ├── SchedulingPageComponent.ts
│               │   │   ├── SetTimeout.ts
│               │   │   ├── StringCache.ts
│               │   │   ├── Strings.d.ts
│               │   │   ├── Style.ts
│               │   │   ├── SymbolicatedError.d.ts
│               │   │   ├── Symbolicator.ts
│               │   │   ├── SystemFont.ts
│               │   │   ├── TsnHelper.ts
│               │   │   ├── TypeConverter.d.ts
│               │   │   ├── UncaughtErrorHandler.ts
│               │   │   ├── Valdi.ts
│               │   │   ├── ValdiRuntime.d.ts
│               │   │   ├── WithLazyPromise.tsx
│               │   │   ├── debugging/
│               │   │   │   ├── CustomMessageHandler.d.ts
│               │   │   │   ├── DaemonClientManager.ts
│               │   │   │   ├── DaemonClientManagerResolver.ts
│               │   │   │   ├── DaemonClientRequests.d.ts
│               │   │   │   ├── DebugConsole.tsx
│               │   │   │   ├── DebugConsoleButton.tsx
│               │   │   │   ├── DebugMessage.d.ts
│               │   │   │   ├── DefaultErrorBoundary.tsx
│               │   │   │   ├── ErrorComponent.tsx
│               │   │   │   ├── ErrorViewModel.d.ts
│               │   │   │   ├── Messages.ts
│               │   │   │   ├── RendererEventRecorder.ts
│               │   │   │   ├── RuntimeIssueDisplayer.tsx
│               │   │   │   ├── Styles.ts
│               │   │   │   └── VirtualNodePathDisplayer.tsx
│               │   │   ├── localization/
│               │   │   │   ├── ExternalUnparsedLocalizableStringResolver.ts
│               │   │   │   ├── IUnparsedLocalizableStringResolver.d.ts
│               │   │   │   ├── InlineUnparsedLocalizableStringResolver.ts
│               │   │   │   ├── Locale.ts
│               │   │   │   ├── LocaleResolver.ts
│               │   │   │   ├── LocalizableString.ts
│               │   │   │   └── LocalizableStringsModule.ts
│               │   │   ├── provider/
│               │   │   │   ├── GlobalProviderSource.ts
│               │   │   │   ├── IProviderSource.d.ts
│               │   │   │   ├── ProviderComponent.d.ts
│               │   │   │   ├── ProviderKey.ts
│               │   │   │   ├── ProviderSource.ts
│               │   │   │   ├── WithGlobalProviderSource.tsx
│               │   │   │   ├── createProvider.tsx
│               │   │   │   ├── resolveProviderSource.ts
│               │   │   │   ├── resolveProviderValue.ts
│               │   │   │   └── withProviders.tsx
│               │   │   ├── slot/
│               │   │   │   ├── DetachedSlot.ts
│               │   │   │   └── DetachedSlotRenderer.tsx
│               │   │   ├── tslib.d.ts
│               │   │   ├── tslib.js
│               │   │   ├── utility_types/
│               │   │   │   └── MergeType.d.ts
│               │   │   └── utils/
│               │   │       ├── AttributedTextBuilder.ts
│               │   │       ├── Buffer.ts
│               │   │       ├── Callback.ts
│               │   │       ├── CallbackInternal.ts
│               │   │       ├── ClassNames.ts
│               │   │       ├── CompilerError.ts
│               │   │       ├── ComponentUtils.ts
│               │   │       ├── EditTextUtils.ts
│               │   │       ├── ErrorUtils.ts
│               │   │       ├── FunctionUtils.ts
│               │   │       ├── GeometricPathBuilder.ts
│               │   │       ├── IdentifyableObject.ts
│               │   │       ├── ImageFilter.ts
│               │   │       ├── KeepAliveCallback.ts
│               │   │       ├── LazyPromise.ts
│               │   │       ├── NumberUtils.ts
│               │   │       ├── OnIdle.ts
│               │   │       ├── Optional.ts
│               │   │       ├── PartialUtils.ts
│               │   │       ├── PromiseUtils.ts
│               │   │       ├── PropertyList.ts
│               │   │       ├── PropertyListTest.ts
│               │   │       ├── RenderedElementUtils.ts
│               │   │       ├── RenderedVirtualNodeUtils.ts
│               │   │       ├── RendererError.ts
│               │   │       ├── Stopwatch.ts
│               │   │       ├── StringUtils.ts
│               │   │       ├── TestUtils.ts
│               │   │       ├── TimeUtils.ts
│               │   │       ├── Trace.ts
│               │   │       ├── UuidUtils.ts
│               │   │       ├── When.ts
│               │   │       └── WithRequired.ts
│               │   ├── tsconfig.json
│               │   └── web/
│               │       ├── ApplicationBridge.ts
│               │       ├── DeviceBridge.ts
│               │       ├── Strings.ts
│               │       └── tsconfig.json
│               ├── valdi_http/
│               │   ├── BUILD.bazel
│               │   ├── module.yaml
│               │   ├── src/
│               │   │   ├── HTTPClient.ts
│               │   │   ├── HTTPTypes.d.ts
│               │   │   ├── IHTTPClient.d.ts
│               │   │   └── NativeHTTPClient.d.ts
│               │   ├── tsconfig.json
│               │   └── web/
│               │       ├── WebHTTPClient.ts
│               │       └── tsconfig.json
│               ├── valdi_image_generator/
│               │   ├── BUILD.bazel
│               │   ├── module.yaml
│               │   └── src/
│               │       ├── ImageGenerator.ts
│               │       └── main.ts
│               ├── valdi_navigation/
│               │   ├── BUILD.bazel
│               │   ├── module.yaml
│               │   ├── src/
│               │   │   ├── INavigator.ts
│               │   │   ├── NavigationComponent.ts
│               │   │   ├── NavigationController.ts
│               │   │   ├── NavigationPage.ts
│               │   │   ├── NavigationPageComponent.ts
│               │   │   ├── NavigationRoot.tsx
│               │   │   └── NavigationView.tsx
│               │   └── tsconfig.json
│               ├── valdi_protobuf/
│               │   ├── BUILD.bazel
│               │   ├── module.yaml
│               │   ├── package.json
│               │   ├── proto/
│               │   │   ├── test.proto
│               │   │   ├── test2.proto
│               │   │   ├── test3.proto
│               │   │   └── test4.proto
│               │   ├── scripts/
│               │   │   └── generate_test_protos.py
│               │   ├── src/
│               │   │   ├── Arena.ts
│               │   │   ├── Descriptor.ts
│               │   │   ├── FieldFactory.ts
│               │   │   ├── Message.ts
│               │   │   ├── ProtobufBuilder.ts
│               │   │   ├── ValdiProtobuf.d.ts
│               │   │   ├── ValdiProtobufModule.ts
│               │   │   ├── types.d.ts
│               │   │   └── utils/
│               │   │       └── misc.ts
│               │   ├── test/
│               │   │   ├── Test.spec.ts
│               │   │   ├── proto.d.ts
│               │   │   ├── proto.js
│               │   │   ├── proto.protodecl
│               │   │   └── proto_config.yaml
│               │   ├── tsconfig.json
│               │   └── web/
│               │       ├── Message.ts
│               │       ├── ValdiProtobuf.ts
│               │       ├── headless/
│               │       │   ├── DescriptorDatabase.ts
│               │       │   ├── FullyQualifiedName.ts
│               │       │   ├── HeadlessValdiProtobufModule.ts
│               │       │   ├── NamespaceGenerator.ts
│               │       │   └── descriptor.ts
│               │       ├── test/
│               │       │   ├── DescriptorDatabase.spec.ts
│               │       │   ├── DescriptorDatabaseTestUtils.ts
│               │       │   ├── NamespaceGenerator.spec.ts
│               │       │   ├── README.md
│               │       │   ├── extract_types.py
│               │       │   ├── proto-types.d.ts
│               │       │   ├── run_tests.js
│               │       │   └── run_tests.sh
│               │       └── tsconfig.json
│               ├── valdi_rxjs/
│               │   ├── BUILD.bazel
│               │   ├── README.md
│               │   ├── module.yaml
│               │   ├── package.json
│               │   ├── src/
│               │   │   ├── AnyCatcher.ts
│               │   │   ├── AsyncSubject.ts
│               │   │   ├── BehaviorSubject.ts
│               │   │   ├── Notification.ts
│               │   │   ├── NotificationFactories.ts
│               │   │   ├── Observable.ts
│               │   │   ├── Operator.ts
│               │   │   ├── ReplaySubject.ts
│               │   │   ├── Scheduler.ts
│               │   │   ├── Subject.ts
│               │   │   ├── Subscriber.ts
│               │   │   ├── Subscription.ts
│               │   │   ├── config.ts
│               │   │   ├── firstValueFrom.ts
│               │   │   ├── firstValueWhere.ts
│               │   │   ├── index.ts
│               │   │   ├── lastValueFrom.ts
│               │   │   ├── observable/
│               │   │   │   ├── ConnectableObservable.ts
│               │   │   │   ├── bindCallback.ts
│               │   │   │   ├── bindCallbackInternals.ts
│               │   │   │   ├── combineLatest.ts
│               │   │   │   ├── concat.ts
│               │   │   │   ├── connectable.ts
│               │   │   │   ├── defer.ts
│               │   │   │   ├── empty.ts
│               │   │   │   ├── forkJoin.ts
│               │   │   │   ├── from.ts
│               │   │   │   ├── fromEvent.ts
│               │   │   │   ├── fromEventPattern.ts
│               │   │   │   ├── fromSubscribable.ts
│               │   │   │   ├── generate.ts
│               │   │   │   ├── iif.ts
│               │   │   │   ├── innerFrom.ts
│               │   │   │   ├── interval.ts
│               │   │   │   ├── merge.ts
│               │   │   │   ├── never.ts
│               │   │   │   ├── of.ts
│               │   │   │   ├── onErrorResumeNext.ts
│               │   │   │   ├── pairs.ts
│               │   │   │   ├── partition.ts
│               │   │   │   ├── race.ts
│               │   │   │   ├── range.ts
│               │   │   │   ├── throwError.ts
│               │   │   │   ├── timer.ts
│               │   │   │   ├── using.ts
│               │   │   │   └── zip.ts
│               │   │   ├── operators/
│               │   │   │   ├── OperatorSubscriber.ts
│               │   │   │   ├── audit.ts
│               │   │   │   ├── auditTime.ts
│               │   │   │   ├── buffer.ts
│               │   │   │   ├── bufferCount.ts
│               │   │   │   ├── bufferTime.ts
│               │   │   │   ├── bufferToggle.ts
│               │   │   │   ├── bufferWhen.ts
│               │   │   │   ├── catchError.ts
│               │   │   │   ├── combineAll.ts
│               │   │   │   ├── combineLatest.ts
│               │   │   │   ├── combineLatestAll.ts
│               │   │   │   ├── combineLatestWith.ts
│               │   │   │   ├── concat.ts
│               │   │   │   ├── concatAll.ts
│               │   │   │   ├── concatMap.ts
│               │   │   │   ├── concatMapTo.ts
│               │   │   │   ├── concatWith.ts
│               │   │   │   ├── connect.ts
│               │   │   │   ├── count.ts
│               │   │   │   ├── debounce.ts
│               │   │   │   ├── debounceTime.ts
│               │   │   │   ├── defaultIfEmpty.ts
│               │   │   │   ├── delay.ts
│               │   │   │   ├── delayWhen.ts
│               │   │   │   ├── dematerialize.ts
│               │   │   │   ├── distinct.ts
│               │   │   │   ├── distinctUntilChanged.ts
│               │   │   │   ├── distinctUntilKeyChanged.ts
│               │   │   │   ├── elementAt.ts
│               │   │   │   ├── endWith.ts
│               │   │   │   ├── every.ts
│               │   │   │   ├── exhaust.ts
│               │   │   │   ├── exhaustAll.ts
│               │   │   │   ├── exhaustMap.ts
│               │   │   │   ├── expand.ts
│               │   │   │   ├── filter.ts
│               │   │   │   ├── finalize.ts
│               │   │   │   ├── find.ts
│               │   │   │   ├── findIndex.ts
│               │   │   │   ├── first.ts
│               │   │   │   ├── flatMap.ts
│               │   │   │   ├── groupBy.ts
│               │   │   │   ├── ignoreElements.ts
│               │   │   │   ├── isEmpty.ts
│               │   │   │   ├── joinAllInternals.ts
│               │   │   │   ├── last.ts
│               │   │   │   ├── map.ts
│               │   │   │   ├── mapTo.ts
│               │   │   │   ├── materialize.ts
│               │   │   │   ├── max.ts
│               │   │   │   ├── merge.ts
│               │   │   │   ├── mergeAll.ts
│               │   │   │   ├── mergeInternals.ts
│               │   │   │   ├── mergeMap.ts
│               │   │   │   ├── mergeMapTo.ts
│               │   │   │   ├── mergeScan.ts
│               │   │   │   ├── mergeWith.ts
│               │   │   │   ├── min.ts
│               │   │   │   ├── multicast.ts
│               │   │   │   ├── observeOn.ts
│               │   │   │   ├── onErrorResumeNext.ts
│               │   │   │   ├── pairwise.ts
│               │   │   │   ├── partition.ts
│               │   │   │   ├── pluck.ts
│               │   │   │   ├── publish.ts
│               │   │   │   ├── publishBehavior.ts
│               │   │   │   ├── publishLast.ts
│               │   │   │   ├── publishReplay.ts
│               │   │   │   ├── race.ts
│               │   │   │   ├── raceWith.ts
│               │   │   │   ├── reduce.ts
│               │   │   │   ├── refCount.ts
│               │   │   │   ├── repeat.ts
│               │   │   │   ├── repeatWhen.ts
│               │   │   │   ├── retry.ts
│               │   │   │   ├── retryWhen.ts
│               │   │   │   ├── sample.ts
│               │   │   │   ├── sampleTime.ts
│               │   │   │   ├── scan.ts
│               │   │   │   ├── scanInternals.ts
│               │   │   │   ├── sequenceEqual.ts
│               │   │   │   ├── share.ts
│               │   │   │   ├── shareReplay.ts
│               │   │   │   ├── single.ts
│               │   │   │   ├── skip.ts
│               │   │   │   ├── skipLast.ts
│               │   │   │   ├── skipUntil.ts
│               │   │   │   ├── skipWhile.ts
│               │   │   │   ├── startWith.ts
│               │   │   │   ├── subscribeOn.ts
│               │   │   │   ├── switchAll.ts
│               │   │   │   ├── switchMap.ts
│               │   │   │   ├── switchMapTo.ts
│               │   │   │   ├── switchScan.ts
│               │   │   │   ├── take.ts
│               │   │   │   ├── takeLast.ts
│               │   │   │   ├── takeUntil.ts
│               │   │   │   ├── takeWhile.ts
│               │   │   │   ├── tap.ts
│               │   │   │   ├── throttle.ts
│               │   │   │   ├── throttleTime.ts
│               │   │   │   ├── throwIfEmpty.ts
│               │   │   │   ├── timeInterval.ts
│               │   │   │   ├── timeout.ts
│               │   │   │   ├── timeoutWith.ts
│               │   │   │   ├── timestamp.ts
│               │   │   │   ├── toArray.ts
│               │   │   │   ├── window.ts
│               │   │   │   ├── windowCount.ts
│               │   │   │   ├── windowTime.ts
│               │   │   │   ├── windowToggle.ts
│               │   │   │   ├── windowWhen.ts
│               │   │   │   ├── withLatestFrom.ts
│               │   │   │   ├── zip.ts
│               │   │   │   ├── zipAll.ts
│               │   │   │   └── zipWith.ts
│               │   │   ├── scheduled/
│               │   │   │   ├── scheduleArray.ts
│               │   │   │   ├── scheduleAsyncIterable.ts
│               │   │   │   ├── scheduleIterable.ts
│               │   │   │   ├── scheduleObservable.ts
│               │   │   │   ├── schedulePromise.ts
│               │   │   │   ├── scheduleReadableStreamLike.ts
│               │   │   │   └── scheduled.ts
│               │   │   ├── scheduler/
│               │   │   │   ├── Action.ts
│               │   │   │   ├── AnimationFrameAction.ts
│               │   │   │   ├── AnimationFrameScheduler.ts
│               │   │   │   ├── AsapAction.ts
│               │   │   │   ├── AsapScheduler.ts
│               │   │   │   ├── AsyncAction.ts
│               │   │   │   ├── AsyncScheduler.ts
│               │   │   │   ├── QueueAction.ts
│               │   │   │   ├── QueueScheduler.ts
│               │   │   │   ├── VirtualTimeScheduler.ts
│               │   │   │   ├── animationFrame.ts
│               │   │   │   ├── animationFrameProvider.ts
│               │   │   │   ├── asap.ts
│               │   │   │   ├── async.ts
│               │   │   │   ├── dateTimestampProvider.ts
│               │   │   │   ├── immediateProvider.ts
│               │   │   │   ├── intervalProvider.ts
│               │   │   │   ├── performanceTimestampProvider.ts
│               │   │   │   ├── queue.ts
│               │   │   │   └── timeoutProvider.ts
│               │   │   ├── symbol/
│               │   │   │   ├── iterator.ts
│               │   │   │   └── observable.ts
│               │   │   ├── testing/
│               │   │   │   ├── ColdObservable.ts
│               │   │   │   ├── HotObservable.ts
│               │   │   │   ├── SubscriptionLog.ts
│               │   │   │   ├── SubscriptionLoggable.ts
│               │   │   │   ├── TestMessage.ts
│               │   │   │   └── TestScheduler.ts
│               │   │   ├── types.ts
│               │   │   └── util/
│               │   │       ├── ArgumentOutOfRangeError.ts
│               │   │       ├── EmptyError.ts
│               │   │       ├── Immediate.ts
│               │   │       ├── NotFoundError.ts
│               │   │       ├── ObjectUnsubscribedError.ts
│               │   │       ├── SequenceError.ts
│               │   │       ├── UnsubscriptionError.ts
│               │   │       ├── applyMixins.ts
│               │   │       ├── args.ts
│               │   │       ├── argsArgArrayOrObject.ts
│               │   │       ├── argsOrArgArray.ts
│               │   │       ├── arrRemove.ts
│               │   │       ├── createErrorClass.ts
│               │   │       ├── createObject.ts
│               │   │       ├── errorContext.ts
│               │   │       ├── executeSchedule.ts
│               │   │       ├── identity.ts
│               │   │       ├── isArrayLike.ts
│               │   │       ├── isAsyncIterable.ts
│               │   │       ├── isDate.ts
│               │   │       ├── isFunction.ts
│               │   │       ├── isInteropObservable.ts
│               │   │       ├── isIterable.ts
│               │   │       ├── isObservable.ts
│               │   │       ├── isPromise.ts
│               │   │       ├── isReadableStreamLike.ts
│               │   │       ├── isScheduler.ts
│               │   │       ├── lift.ts
│               │   │       ├── mapOneOrManyArgs.ts
│               │   │       ├── noop.ts
│               │   │       ├── not.ts
│               │   │       ├── pipe.ts
│               │   │       ├── reportUnhandledError.ts
│               │   │       ├── subscribeToArray.ts
│               │   │       ├── throwUnobservableError.ts
│               │   │       └── workarounds.ts
│               │   └── tsconfig.json
│               ├── valdi_standalone/
│               │   ├── BUILD.bazel
│               │   ├── module.yaml
│               │   ├── src/
│               │   │   ├── ArgumentsParser.ts
│               │   │   ├── CodeCoverage.ts
│               │   │   ├── FailedTestRetryReporter.ts
│               │   │   ├── IstanbulIibCoverage.ts
│               │   │   ├── JasmineBootstrap.ts
│               │   │   ├── NativeModules.ts
│               │   │   ├── TestsRunner.ts
│               │   │   └── ValdiStandalone.ts
│               │   └── tsconfig.json
│               ├── valdi_test/
│               │   ├── BUILD.bazel
│               │   ├── README.md
│               │   ├── module.yaml
│               │   ├── src/
│               │   │   ├── FunctionTest.ts
│               │   │   ├── IntegrationTests.tsx
│               │   │   └── MarshallingTests.ts
│               │   ├── strings/
│               │   │   ├── strings-en.json
│               │   │   └── strings-fr-FR.json
│               │   ├── test/
│               │   │   ├── AssetCatalog.spec.ts
│               │   │   ├── AttributedTextBuilder.spec.ts
│               │   │   ├── BenchmarkUtils.ts
│               │   │   ├── Component.spec.ts
│               │   │   ├── ComponentTestExample.tsx
│               │   │   ├── DetachedSlot.spec.tsx
│               │   │   ├── ElementForViewClass.d.ts
│               │   │   ├── IRenderedElementViewClass.ts
│               │   │   ├── JSXTest.spec.tsx
│               │   │   ├── JSXTestUtils.tsx
│               │   │   ├── Locale.spec.ts
│               │   │   ├── LocaleResolver.spec.ts
│               │   │   ├── LocalizableStrings.spec.ts
│               │   │   ├── Localization.spec.ts
│               │   │   ├── Long.spec.ts
│               │   │   ├── MicroBenchmarks.ts
│               │   │   ├── ModuleLoader.spec.ts
│               │   │   ├── Provider.spec.tsx
│               │   │   ├── Renderer.spec.ts
│               │   │   ├── RendererEventRecorder.spec.ts
│               │   │   ├── RendererTestDelegate.ts
│               │   │   └── Style.spec.ts
│               │   └── tsconfig.json
│               ├── valdi_tsx/
│               │   ├── BUILD.bazel
│               │   ├── README.md
│               │   ├── module.yaml
│               │   ├── src/
│               │   │   ├── Accessibility.d.ts
│               │   │   ├── Asset.d.ts
│               │   │   ├── AttributedText.d.ts
│               │   │   ├── AttributedTextInlineImageAttachment.d.ts
│               │   │   ├── GeometricPath.d.ts
│               │   │   ├── Geometry.d.ts
│               │   │   ├── GestureEvents.d.ts
│               │   │   ├── IComponentBase.d.ts
│               │   │   ├── IFontProvider.d.ts
│               │   │   ├── IRenderedComponentHolder.d.ts
│               │   │   ├── IRenderedElementBase.d.ts
│               │   │   ├── IRenderedElementHolder.d.ts
│               │   │   ├── IScrollPerfLoggerBridge.d.ts
│               │   │   ├── IStyle.d.ts
│               │   │   ├── ImageFilter.d.ts
│               │   │   ├── JSX.ts
│               │   │   ├── NativeNode.d.ts
│               │   │   ├── NativeTemplateElements.d.ts
│               │   │   ├── NativeView.d.ts
│               │   │   ├── PropertyList.d.ts
│               │   │   └── ViewFactory.d.ts
│               │   ├── tsconfig.json
│               │   ├── types/
│               │   │   ├── Long.d.ts
│               │   │   └── globals.d.ts
│               │   └── web/
│               │       ├── JSX.stub.d.ts
│               │       ├── JSX.ts
│               │       └── tsconfig.json
│               ├── valdi_web/
│               │   ├── BUILD.bazel
│               │   ├── README.md
│               │   ├── src/
│               │   │   ├── ValdiWeb.ts
│               │   │   └── WebTest.tsx
│               │   ├── strings/
│               │   │   ├── strings-ar.json
│               │   │   ├── strings-bn-BD.json
│               │   │   ├── strings-bn-IN.json
│               │   │   ├── strings-da-DK.json
│               │   │   ├── strings-de-DE.json
│               │   │   ├── strings-el-GR.json
│               │   │   ├── strings-en-GB.json
│               │   │   ├── strings-en.json
│               │   │   ├── strings-es-AR.json
│               │   │   ├── strings-es-ES.json
│               │   │   ├── strings-es-MX.json
│               │   │   ├── strings-es.json
│               │   │   ├── strings-fi-FI.json
│               │   │   ├── strings-fil-PH.json
│               │   │   ├── strings-fr-FR.json
│               │   │   ├── strings-gu-IN.json
│               │   │   ├── strings-hi-IN.json
│               │   │   ├── strings-id-ID.json
│               │   │   ├── strings-it-IT.json
│               │   │   ├── strings-ja-JP.json
│               │   │   ├── strings-kn-IN.json
│               │   │   ├── strings-ko-KR.json
│               │   │   ├── strings-ml-IN.json
│               │   │   ├── strings-mr-IN.json
│               │   │   ├── strings-ms-MY.json
│               │   │   ├── strings-nb-NO.json
│               │   │   ├── strings-nl-NL.json
│               │   │   ├── strings-pa.json
│               │   │   ├── strings-pl-PL.json
│               │   │   ├── strings-pt-BR.json
│               │   │   ├── strings-pt-PT.json
│               │   │   ├── strings-ro-RO.json
│               │   │   ├── strings-ru-RU.json
│               │   │   ├── strings-sv-SE.json
│               │   │   ├── strings-ta-IN.json
│               │   │   ├── strings-te-IN.json
│               │   │   ├── strings-th-TH.json
│               │   │   ├── strings-tr-TR.json
│               │   │   ├── strings-ur-PK.json
│               │   │   ├── strings-vi-VN.json
│               │   │   ├── strings-zh-Hans.json
│               │   │   └── strings-zh-Hant.json
│               │   └── tsconfig.json
│               ├── web_renderer/
│               │   ├── BUILD.bazel
│               │   ├── src/
│               │   │   ├── HTMLRenderer.ts
│               │   │   ├── ValdiWebRenderer.ts
│               │   │   ├── ValdiWebRendererDelegate.ts
│               │   │   ├── ValdiWebRuntime.ts
│               │   │   ├── WebPolyglotRegistry.ts
│               │   │   ├── WebPolyglotRuntime.ts
│               │   │   ├── WebPolyglotRuntimeNative.d.ts
│               │   │   ├── WebPolyglotTypes.d.ts
│               │   │   ├── WebViewClassRegistry.ts
│               │   │   ├── styles/
│               │   │   │   ├── ValdiWebStyles.ts
│               │   │   │   ├── handleMarginPadding.ts
│               │   │   │   ├── isNumber.ts
│               │   │   │   ├── requiresUnitlessNumber.ts
│               │   │   │   └── touchAreaExtension.ts
│               │   │   ├── utils/
│               │   │   │   └── parseAttributedText.ts
│               │   │   └── views/
│               │   │       ├── WebValdiCustomView.ts
│               │   │       ├── WebValdiImage.ts
│               │   │       ├── WebValdiLabel.ts
│               │   │       ├── WebValdiLayout.ts
│               │   │       ├── WebValdiScroll.ts
│               │   │       ├── WebValdiShape.ts
│               │   │       ├── WebValdiSpinner.ts
│               │   │       ├── WebValdiTextField.ts
│               │   │       ├── WebValdiTextView.ts
│               │   │       ├── WebValdiVideo.ts
│               │   │       └── WebValdiView.ts
│               │   ├── test/
│               │   │   └── WebValdiImage.spec.ts
│               │   └── tsconfig.json
│               └── worker/
│                   ├── BUILD.bazel
│                   ├── README.md
│                   ├── module.yaml
│                   ├── src/
│                   │   ├── IWorkerService.d.ts
│                   │   ├── ServiceCallback.d.ts
│                   │   ├── Worker.ts
│                   │   ├── WorkerService.ts
│                   │   ├── WorkerServiceEntryPoint.ts
│                   │   ├── WorkerServiceExecutor.ts
│                   │   ├── internal/
│                   │   │   ├── ManagedWorker.ts
│                   │   │   └── ManagedWorkerService.ts
│                   │   └── utils/
│                   │       └── WorkerServiceBridgeUtils.ts
│                   ├── test/
│                   │   ├── CalculatorService.ts
│                   │   ├── WorkerService.spec.ts
│                   │   └── WorkerTest.ts
│                   ├── test_workers/
│                   │   ├── EchoWorker.ts
│                   │   ├── README.md
│                   │   └── TestWorker.ts
│                   └── tsconfig.json
├── third-party/
│   ├── backward/
│   │   ├── BUILD.bazel
│   │   └── backward.BUILD
│   ├── bazel_features/
│   │   ├── BUILD.bazel
│   │   └── fix_bazel_version.patch
│   ├── boost/
│   │   ├── BUILD.bazel
│   │   ├── WORKSPACE
│   │   ├── asio-ssl.cpp
│   │   ├── asio.cpp
│   │   ├── boost.BUILD
│   │   └── patches/
│   │       ├── BUILD.bazel
│   │       ├── asio.patch
│   │       ├── global_asio_initializers.patch
│   │       ├── interprocess_emscripten.patch
│   │       └── remove_invalid_file_1_78.patch
│   ├── build_bazel_rules_android/
│   │   └── patches/
│   │       ├── BUILD.bazel
│   │       ├── rules_android_android_rules.patch
│   │       ├── rules_android_rules_aar_import.patch
│   │       ├── rules_android_rules_android_local_test.patch
│   │       └── rules_android_rules_attrs.patch
│   ├── djinni-support-lib/
│   │   ├── BUILD.bazel
│   │   ├── README.snap
│   │   └── src/
│   │       ├── .gitignore
│   │       └── djinni/
│   │           ├── cpp/
│   │           │   ├── DataRef.cpp
│   │           │   ├── DataRef.hpp
│   │           │   ├── DataRef_c_translator.cpp
│   │           │   ├── DataRef_c_translator.hpp
│   │           │   ├── DataView.hpp
│   │           │   ├── DataView_c_translator.cpp
│   │           │   ├── DataView_c_translator.hpp
│   │           │   ├── Future.hpp
│   │           │   ├── Future_c.cpp
│   │           │   ├── Future_c.h
│   │           │   ├── Future_c_translator.cpp
│   │           │   ├── Future_c_translator.hpp
│   │           │   ├── Outcome_c.cpp
│   │           │   ├── Outcome_c.h
│   │           │   ├── Outcome_c_translator.hpp
│   │           │   ├── Provider.hpp
│   │           │   ├── Provider_c.cpp
│   │           │   ├── Provider_c.h
│   │           │   ├── Provider_c_translator.hpp
│   │           │   ├── SharedFuture.hpp
│   │           │   ├── djinni_c.cpp
│   │           │   ├── djinni_c.h
│   │           │   ├── djinni_c_ref.hpp
│   │           │   ├── djinni_c_translators.cpp
│   │           │   ├── djinni_c_translators.hpp
│   │           │   ├── djinni_c_types.cpp
│   │           │   ├── djinni_c_types.hpp
│   │           │   ├── expected.hpp
│   │           │   └── tl_expected.hpp
│   │           ├── dataref.yaml
│   │           ├── dataview.yaml
│   │           ├── djinni_common.hpp
│   │           ├── future.yaml
│   │           ├── java/
│   │           │   └── com/
│   │           │       ├── dropbox/
│   │           │       │   └── djinni/
│   │           │       │       └── NativeLibLoader.java
│   │           │       └── snapchat/
│   │           │           └── djinni/
│   │           │               ├── DataRefHelper.java
│   │           │               ├── Future.java
│   │           │               ├── NativeFutureHandler.java
│   │           │               ├── NativeObjectManager.java
│   │           │               ├── NativeProviderHandler.java
│   │           │               ├── Outcome.java
│   │           │               ├── Promise.java
│   │           │               ├── Provider.java
│   │           │               └── SharedState.java
│   │           ├── jni/
│   │           │   ├── DataRef_jni.cpp
│   │           │   ├── DataRef_jni.hpp
│   │           │   ├── DataView_jni.hpp
│   │           │   ├── Future_jni.cpp
│   │           │   ├── Future_jni.hpp
│   │           │   ├── Marshal.hpp
│   │           │   ├── Outcome_jni.hpp
│   │           │   ├── Provider_jni.cpp
│   │           │   ├── Provider_jni.hpp
│   │           │   ├── djinni_main.cpp
│   │           │   ├── djinni_support.cpp
│   │           │   └── djinni_support.hpp
│   │           ├── objc/
│   │           │   ├── DJFuture.h
│   │           │   ├── DJFuture.mm
│   │           │   ├── DJICppWrapperCache+Private.h
│   │           │   ├── DJIError.h
│   │           │   ├── DJIError.mm
│   │           │   ├── DJIMarshal+Private.h
│   │           │   ├── DJIObjcWrapperCache+Private.h
│   │           │   ├── DJIProxyCaches.mm
│   │           │   ├── DJOutcome.h
│   │           │   ├── DJOutcome.mm
│   │           │   ├── DJProvider.h
│   │           │   ├── DJProvider.mm
│   │           │   ├── DataRef_objc.hpp
│   │           │   ├── DataRef_objc.mm
│   │           │   ├── DataView_objc.hpp
│   │           │   ├── Future_objc.hpp
│   │           │   ├── Outcome_objc.hpp
│   │           │   └── Provider_objc.hpp
│   │           ├── outcome.yaml
│   │           ├── provider.yaml
│   │           ├── proxy_cache_impl.hpp
│   │           ├── proxy_cache_interface.hpp
│   │           ├── swift/
│   │           │   ├── DJData.swift
│   │           │   ├── DJFuture.swift
│   │           │   ├── DJMarshal.swift
│   │           │   ├── DJOutcome.swift
│   │           │   ├── DJProtobuf.swift
│   │           │   ├── DJProvider.swift
│   │           │   └── DjinniSupport.swift
│   │           ├── swiftxx/
│   │           │   ├── Data_swift.cpp
│   │           │   ├── Data_swift.hpp
│   │           │   ├── Future_swift.cpp
│   │           │   ├── Future_swift.hpp
│   │           │   ├── Outcome_swift.hpp
│   │           │   ├── Provider_swift.cpp
│   │           │   ├── Provider_swift.hpp
│   │           │   ├── djinni_support.cpp
│   │           │   └── djinni_support.hpp
│   │           ├── ts/
│   │           │   ├── DjinniModule.ts
│   │           │   ├── Outcome.ts
│   │           │   └── Provider.ts
│   │           ├── valdi/
│   │           │   ├── DataRef_valdi.cpp
│   │           │   ├── DataRef_valdi.hpp
│   │           │   ├── DataView_valdi.hpp
│   │           │   ├── Future_valdi.hpp
│   │           │   ├── Outcome_valdi.hpp
│   │           │   ├── Provider_valdi.hpp
│   │           │   ├── djinni_valdi.cpp
│   │           │   └── djinni_valdi.hpp
│   │           ├── valdi-ts/
│   │           │   ├── module.yaml
│   │           │   ├── src/
│   │           │   │   ├── Djinni.ts
│   │           │   │   ├── Outcome.ts
│   │           │   │   ├── ProtoSupport.ts
│   │           │   │   └── Provider.ts
│   │           │   └── tsconfig.json
│   │           └── wasm/
│   │               ├── DataRef_wasm.cpp
│   │               ├── DataRef_wasm.hpp
│   │               ├── DataView_wasm.hpp
│   │               ├── Future_wasm.hpp
│   │               ├── Outcome_wasm.hpp
│   │               ├── Provider_wasm.hpp
│   │               ├── djinni_wasm.cpp
│   │               └── djinni_wasm.hpp
│   ├── fmt/
│   │   ├── BUILD.bazel
│   │   └── fmt.BUILD
│   ├── harfbuzz/
│   │   ├── BUILD.bazel
│   │   └── harfbuzz.BUILD
│   ├── hermes/
│   │   ├── BUILD.bazel
│   │   ├── cmake_configure.bzl
│   │   ├── hermes.BUILD
│   │   └── prepared_include/
│   │       ├── android-arm64-v8a/
│   │       │   └── llvh/
│   │       │       └── Config/
│   │       │           └── config.h
│   │       ├── android-armeabi-v7a/
│   │       │   └── llvh/
│   │       │       └── Config/
│   │       │           └── config.h
│   │       ├── android-x86_64/
│   │       │   └── llvh/
│   │       │       └── Config/
│   │       │           └── config.h
│   │       ├── apple/
│   │       │   └── llvh/
│   │       │       └── Config/
│   │       │           └── config.h
│   │       ├── hermes/
│   │       │   └── InternalBytecode/
│   │       │       └── InternalBytecode.inc
│   │       ├── linux/
│   │       │   └── llvh/
│   │       │       └── Config/
│   │       │           └── config.h
│   │       └── llvh/
│   │           └── IR/
│   │               └── Attributes.inc
│   ├── icu/
│   │   ├── BUILD.bazel
│   │   └── icu.BUILD
│   ├── jscore/
│   │   ├── BUILD.bazel
│   │   └── include/
│   │       └── JavaScriptCore/
│   │           ├── APICallbackFunction.h
│   │           ├── APICast.h
│   │           ├── APIUtils.h
│   │           ├── JSAPIWrapperObject.h
│   │           ├── JSBase.h
│   │           ├── JSBasePrivate.h
│   │           ├── JSCTestRunnerUtils.h
│   │           ├── JSCallbackConstructor.h
│   │           ├── JSCallbackFunction.h
│   │           ├── JSCallbackObject.h
│   │           ├── JSCallbackObjectFunctions.h
│   │           ├── JSClassRef.h
│   │           ├── JSContext.h
│   │           ├── JSContextInternal.h
│   │           ├── JSContextPrivate.h
│   │           ├── JSContextRef.h
│   │           ├── JSContextRefInspectorSupport.h
│   │           ├── JSContextRefInternal.h
│   │           ├── JSContextRefPrivate.h
│   │           ├── JSExport.h
│   │           ├── JSHeapFinalizerPrivate.h
│   │           ├── JSManagedValue.h
│   │           ├── JSManagedValueInternal.h
│   │           ├── JSMarkingConstraintPrivate.h
│   │           ├── JSObjectRef.h
│   │           ├── JSObjectRefPrivate.h
│   │           ├── JSRemoteInspector.h
│   │           ├── JSRetainPtr.h
│   │           ├── JSScriptRefPrivate.h
│   │           ├── JSStringRef.h
│   │           ├── JSStringRefBSTR.h
│   │           ├── JSStringRefCF.h
│   │           ├── JSStringRefPrivate.h
│   │           ├── JSTypedArray.h
│   │           ├── JSValue.h
│   │           ├── JSValueInternal.h
│   │           ├── JSValueRef.h
│   │           ├── JSVirtualMachine.h
│   │           ├── JSVirtualMachineInternal.h
│   │           ├── JSVirtualMachinePrivate.h
│   │           ├── JSWeakObjectMapRefInternal.h
│   │           ├── JSWeakObjectMapRefPrivate.h
│   │           ├── JSWeakPrivate.h
│   │           ├── JSWeakValue.h
│   │           ├── JSWrapperMap.h
│   │           ├── JavaScript.h
│   │           ├── JavaScriptCore.h
│   │           ├── ObjCCallbackFunction.h
│   │           ├── ObjcRuntimeExtras.h
│   │           ├── OpaqueJSString.h
│   │           └── WebKitAvailability.h
│   ├── jsoncpp/
│   │   ├── BUILD.bazel
│   │   └── jsoncpp.BUILD
│   ├── libjpeg_turbo/
│   │   ├── BUILD.bazel
│   │   ├── include_fix.patch
│   │   └── warning_fix.patch
│   ├── libpng/
│   │   ├── BUILD.bazel
│   │   └── fix_armv7.patch
│   ├── ocmock/
│   │   ├── BUILD
│   │   ├── OCMock.build
│   │   └── README.snap
│   ├── phmap/
│   │   ├── BUILD.bazel
│   │   └── phmap.BUILD
│   ├── protobuf_cpp/
│   │   └── BUILD.bazel
│   ├── quickjs/
│   │   ├── BUILD.bazel
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── VERSION
│   │   ├── include/
│   │   │   └── quickjs/
│   │   │       ├── libbf.h
│   │   │       ├── libregexp.h
│   │   │       ├── libunicode.h
│   │   │       └── quickjs.h
│   │   └── src/
│   │       └── quickjs/
│   │           ├── cutils.c
│   │           ├── cutils.h
│   │           ├── libbf.c
│   │           ├── libregexp-opcode.h
│   │           ├── libregexp.c
│   │           ├── libunicode-table.h
│   │           ├── libunicode.c
│   │           ├── list.h
│   │           ├── quickjs-atom.h
│   │           ├── quickjs-opcode.h
│   │           └── quickjs.c
│   ├── resvg/
│   │   ├── BUILD.bazel
│   │   ├── README.md
│   │   ├── resvg.BUILD
│   │   └── resvg_libs/
│   │       ├── BUILD.bazel
│   │       ├── MODULE.bazel
│   │       ├── WORKSPACE
│   │       └── libs/
│   │           ├── Linux/
│   │           │   └── x86_64/
│   │           │       └── lib/
│   │           │           └── libresvg.a
│   │           └── Macos/
│   │               ├── armv8/
│   │               │   └── lib/
│   │               │       └── libresvg.a
│   │               └── x86_64/
│   │                   └── lib/
│   │                       └── libresvg.a
│   ├── rules_android_ndk/
│   │   └── patches/
│   │       ├── BUILD.bazel
│   │       └── expose_bins.patch
│   ├── rules_hdrs/
│   │   ├── BUILD.bazel
│   │   ├── MODULE.bazel
│   │   ├── WORKSPACE
│   │   ├── hmap/
│   │   │   ├── BUILD.bazel
│   │   │   ├── hmap.bzl
│   │   │   ├── hmap.c
│   │   │   ├── hmap.h
│   │   │   ├── hmapbuild.c
│   │   │   ├── hmapdump.c
│   │   │   ├── hmaptest.c
│   │   │   ├── lines.c
│   │   │   ├── lines.h
│   │   │   └── uthash.h
│   │   └── umbrella_header/
│   │       ├── BUILD.bazel
│   │       └── umbrella_header.bzl
│   ├── rules_kotlin/
│   │   ├── BUILD.bazel
│   │   └── fix_manifest_custom_package.patch
│   ├── rules_swift/
│   │   └── patches/
│   │       ├── BUILD.bazel
│   │       └── rules_swift.patch
│   ├── skia_user_config/
│   │   ├── BUILD.bazel
│   │   ├── MODULE.bazel
│   │   ├── SkUserConfig.h
│   │   ├── WORKSPACE
│   │   ├── copts.bzl
│   │   └── linkopts.bzl
│   ├── test262/
│   │   ├── BUILD.bazel
│   │   ├── scripts/
│   │   │   ├── BUILD.bazel
│   │   │   └── zip.sh
│   │   └── test262.BUILD
│   ├── v8/
│   │   ├── BUILD.bazel
│   │   ├── README.md
│   │   ├── README.snap
│   │   ├── include/
│   │   │   └── v8/
│   │   │       ├── cppgc/
│   │   │       │   ├── allocation.h
│   │   │       │   ├── common.h
│   │   │       │   ├── cross-thread-persistent.h
│   │   │       │   ├── custom-space.h
│   │   │       │   ├── default-platform.h
│   │   │       │   ├── ephemeron-pair.h
│   │   │       │   ├── explicit-management.h
│   │   │       │   ├── garbage-collected.h
│   │   │       │   ├── heap-consistency.h
│   │   │       │   ├── heap-handle.h
│   │   │       │   ├── heap-state.h
│   │   │       │   ├── heap-statistics.h
│   │   │       │   ├── heap.h
│   │   │       │   ├── internal/
│   │   │       │   │   ├── api-constants.h
│   │   │       │   │   ├── atomic-entry-flag.h
│   │   │       │   │   ├── base-page-handle.h
│   │   │       │   │   ├── caged-heap-local-data.h
│   │   │       │   │   ├── caged-heap.h
│   │   │       │   │   ├── compiler-specific.h
│   │   │       │   │   ├── finalizer-trait.h
│   │   │       │   │   ├── gc-info.h
│   │   │       │   │   ├── logging.h
│   │   │       │   │   ├── member-storage.h
│   │   │       │   │   ├── name-trait.h
│   │   │       │   │   ├── persistent-node.h
│   │   │       │   │   ├── pointer-policies.h
│   │   │       │   │   └── write-barrier.h
│   │   │       │   ├── liveness-broker.h
│   │   │       │   ├── macros.h
│   │   │       │   ├── member.h
│   │   │       │   ├── name-provider.h
│   │   │       │   ├── object-size-trait.h
│   │   │       │   ├── persistent.h
│   │   │       │   ├── platform.h
│   │   │       │   ├── prefinalizer.h
│   │   │       │   ├── process-heap-statistics.h
│   │   │       │   ├── sentinel-pointer.h
│   │   │       │   ├── source-location.h
│   │   │       │   ├── testing.h
│   │   │       │   ├── trace-trait.h
│   │   │       │   ├── type-traits.h
│   │   │       │   └── visitor.h
│   │   │       ├── libplatform/
│   │   │       │   ├── libplatform-export.h
│   │   │       │   ├── libplatform.h
│   │   │       │   └── v8-tracing.h
│   │   │       ├── v8-array-buffer.h
│   │   │       ├── v8-callbacks.h
│   │   │       ├── v8-container.h
│   │   │       ├── v8-context.h
│   │   │       ├── v8-cppgc.h
│   │   │       ├── v8-data.h
│   │   │       ├── v8-date.h
│   │   │       ├── v8-debug.h
│   │   │       ├── v8-embedder-heap.h
│   │   │       ├── v8-embedder-state-scope.h
│   │   │       ├── v8-exception.h
│   │   │       ├── v8-extension.h
│   │   │       ├── v8-external.h
│   │   │       ├── v8-fast-api-calls.h
│   │   │       ├── v8-forward.h
│   │   │       ├── v8-function-callback.h
│   │   │       ├── v8-function.h
│   │   │       ├── v8-handle-base.h
│   │   │       ├── v8-initialization.h
│   │   │       ├── v8-inspector-protocol.h
│   │   │       ├── v8-inspector.h
│   │   │       ├── v8-internal.h
│   │   │       ├── v8-isolate.h
│   │   │       ├── v8-json.h
│   │   │       ├── v8-local-handle.h
│   │   │       ├── v8-locker.h
│   │   │       ├── v8-maybe.h
│   │   │       ├── v8-memory-span.h
│   │   │       ├── v8-message.h
│   │   │       ├── v8-metrics.h
│   │   │       ├── v8-microtask-queue.h
│   │   │       ├── v8-microtask.h
│   │   │       ├── v8-object.h
│   │   │       ├── v8-persistent-handle.h
│   │   │       ├── v8-platform.h
│   │   │       ├── v8-primitive-object.h
│   │   │       ├── v8-primitive.h
│   │   │       ├── v8-profiler.h
│   │   │       ├── v8-promise.h
│   │   │       ├── v8-proxy.h
│   │   │       ├── v8-regexp.h
│   │   │       ├── v8-script.h
│   │   │       ├── v8-snapshot.h
│   │   │       ├── v8-source-location.h
│   │   │       ├── v8-statistics.h
│   │   │       ├── v8-template.h
│   │   │       ├── v8-traced-handle.h
│   │   │       ├── v8-typed-array.h
│   │   │       ├── v8-unwinder-state.h
│   │   │       ├── v8-unwinder.h
│   │   │       ├── v8-util.h
│   │   │       ├── v8-value-serializer-version.h
│   │   │       ├── v8-value-serializer.h
│   │   │       ├── v8-value.h
│   │   │       ├── v8-version-string.h
│   │   │       ├── v8-version.h
│   │   │       ├── v8-wasm-trap-handler-posix.h
│   │   │       ├── v8-wasm-trap-handler-win.h
│   │   │       ├── v8-wasm.h
│   │   │       ├── v8-weak-callback-info.h
│   │   │       ├── v8.h
│   │   │       └── v8config.h
│   │   └── v8.bzl
│   ├── websocketpp/
│   │   ├── BUILD.bazel
│   │   ├── patches/
│   │   │   ├── BUILD.bazel
│   │   │   └── fix_ios_lrt.patch
│   │   └── websocketpp.BUILD
│   ├── xxhash/
│   │   ├── BUILD.bazel
│   │   └── xxhash.BUILD
│   ├── yoga/
│   │   ├── BUILD.bazel
│   │   ├── README.snap
│   │   └── src/
│   │       ├── android/
│   │       │   ├── Dummy.cpp
│   │       │   ├── include/
│   │       │   │   ├── fb/
│   │       │   │   │   └── Doxyfile
│   │       │   │   ├── fbjni/
│   │       │   │   │   ├── ByteBuffer.h
│   │       │   │   │   ├── Context.h
│   │       │   │   │   ├── File.h
│   │       │   │   │   ├── JThread.h
│   │       │   │   │   ├── NativeRunnable.h
│   │       │   │   │   ├── ReadableByteChannel.h
│   │       │   │   │   ├── detail/
│   │       │   │   │   │   ├── Boxed.h
│   │       │   │   │   │   ├── Common.h
│   │       │   │   │   │   ├── CoreClasses-inl.h
│   │       │   │   │   │   ├── CoreClasses.h
│   │       │   │   │   │   ├── Environment.h
│   │       │   │   │   │   ├── Exceptions.h
│   │       │   │   │   │   ├── Hybrid.h
│   │       │   │   │   │   ├── Iterator-inl.h
│   │       │   │   │   │   ├── Iterator.h
│   │       │   │   │   │   ├── JWeakReference.h
│   │       │   │   │   │   ├── Log.h
│   │       │   │   │   │   ├── Meta-forward.h
│   │       │   │   │   │   ├── Meta-inl.h
│   │       │   │   │   │   ├── Meta.h
│   │       │   │   │   │   ├── MetaConvert.h
│   │       │   │   │   │   ├── ReferenceAllocators-inl.h
│   │       │   │   │   │   ├── ReferenceAllocators.h
│   │       │   │   │   │   ├── References-forward.h
│   │       │   │   │   │   ├── References-inl.h
│   │       │   │   │   │   ├── References.h
│   │       │   │   │   │   ├── Registration-inl.h
│   │       │   │   │   │   ├── Registration.h
│   │       │   │   │   │   ├── TypeTraits.h
│   │       │   │   │   │   └── utf8.h
│   │       │   │   │   └── fbjni.h
│   │       │   │   └── lyra/
│   │       │   │       ├── lyra.h
│   │       │   │       └── lyra_exceptions.h
│   │       │   ├── jni/
│   │       │   │   ├── ByteBuffer.cpp
│   │       │   │   ├── ReadableByteChannel.cpp
│   │       │   │   ├── detail/
│   │       │   │   │   ├── Environment.cpp
│   │       │   │   │   ├── Exceptions.cpp
│   │       │   │   │   ├── Hybrid.cpp
│   │       │   │   │   ├── References.cpp
│   │       │   │   │   └── utf8.cpp
│   │       │   │   └── fbjni.cpp
│   │       │   └── lyra/
│   │       │       ├── cxa_throw.cpp
│   │       │       ├── lyra.cpp
│   │       │       ├── lyra_breakpad.cpp
│   │       │       └── lyra_exceptions.cpp
│   │       ├── ios/
│   │       │   └── yoga/
│   │       │       ├── UIView+Yoga.h
│   │       │       ├── UIView+Yoga.m
│   │       │       ├── YGLayout+Private.h
│   │       │       ├── YGLayout.h
│   │       │       └── YGLayout.m
│   │       ├── java/
│   │       │   └── com/
│   │       │       └── facebook/
│   │       │           └── yoga/
│   │       │               ├── YogaAlign.java
│   │       │               ├── YogaBaselineFunction.java
│   │       │               ├── YogaConfig.java
│   │       │               ├── YogaConstants.java
│   │       │               ├── YogaDimension.java
│   │       │               ├── YogaDirection.java
│   │       │               ├── YogaDisplay.java
│   │       │               ├── YogaEdge.java
│   │       │               ├── YogaExperimentalFeature.java
│   │       │               ├── YogaFlexDirection.java
│   │       │               ├── YogaJustify.java
│   │       │               ├── YogaLogLevel.java
│   │       │               ├── YogaLogger.java
│   │       │               ├── YogaMeasureFunction.java
│   │       │               ├── YogaMeasureMode.java
│   │       │               ├── YogaMeasureOutput.java
│   │       │               ├── YogaNode.java
│   │       │               ├── YogaNodeCloneFunction.java
│   │       │               ├── YogaNodeType.java
│   │       │               ├── YogaOverflow.java
│   │       │               ├── YogaPositionType.java
│   │       │               ├── YogaPrintOptions.java
│   │       │               ├── YogaUnit.java
│   │       │               ├── YogaValue.java
│   │       │               └── YogaWrap.java
│   │       └── yoga/
│   │           ├── Bitfield.h
│   │           ├── CompactValue.h
│   │           ├── Utils.cpp
│   │           ├── Utils.h
│   │           ├── YGConfig.cpp
│   │           ├── YGConfig.h
│   │           ├── YGEnums.cpp
│   │           ├── YGEnums.h
│   │           ├── YGFloatOptional.h
│   │           ├── YGLayout.cpp
│   │           ├── YGLayout.hpp
│   │           ├── YGMacros.h
│   │           ├── YGNode.cpp
│   │           ├── YGNode.h
│   │           ├── YGNodePrint.cpp
│   │           ├── YGNodePrint.h
│   │           ├── YGStyle.cpp
│   │           ├── YGStyle.h
│   │           ├── YGValue.cpp
│   │           ├── YGValue.h
│   │           ├── Yoga-internal.h
│   │           ├── Yoga.cpp
│   │           ├── Yoga.h
│   │           ├── event/
│   │           │   ├── event.cpp
│   │           │   └── event.h
│   │           ├── internal/
│   │           │   ├── experiments-inl.h
│   │           │   ├── experiments.cpp
│   │           │   └── experiments.h
│   │           ├── log.cpp
│   │           └── log.h
│   ├── zlib/
│   │   ├── BUILD.bazel
│   │   └── zlib.BUILD
│   ├── zlib_chromium/
│   │   ├── BUILD.bazel
│   │   ├── patches/
│   │   │   ├── BUILD.bazel
│   │   │   └── apple.patch
│   │   └── zlib_chromium.BUILD
│   ├── zlib_skia/
│   │   ├── BUILD.bazel
│   │   └── android_ios_x86_64.patch
│   ├── zoo/
│   │   ├── BUILD.bazel
│   │   └── zoo.BUILD
│   └── zstd/
│       ├── BUILD.bazel
│       └── zstd.BUILD
├── tools/
│   ├── ci/
│   │   ├── bazel_build.sh
│   │   ├── bootstrap_app.sh
│   │   ├── build_core_targets.sh
│   │   ├── install_cli.sh
│   │   ├── release_test.sh
│   │   ├── run_tests.sh
│   │   ├── test_exported_lib.sh
│   │   └── test_workflow_locally.sh
│   └── zstd/
│       ├── BUILD.bazel
│       ├── Dockerfile
│       ├── bin/
│       │   ├── linux/
│       │   │   └── zstd
│       │   └── macos/
│       │       └── zstd
│       ├── build_zstd_linux.sh
│       ├── build_zstd_macos.sh
│       ├── build_zstd_within_environment.sh
│       ├── rebuild_all.sh
│       └── zstdw
├── tsn/
│   ├── .gitignore
│   ├── BUILD.bazel
│   ├── README.md
│   ├── examples/
│   │   ├── BUILD.bazel
│   │   ├── microbench/
│   │   │   ├── README.md
│   │   │   └── microbench.js
│   │   ├── nbody/
│   │   │   └── nbody_example.ts
│   │   ├── richards/
│   │   │   └── richards.js
│   │   ├── stackoverflow_test/
│   │   │   └── stackoverflow.ts
│   │   └── tsconfig.json
│   ├── main/
│   │   └── main.cpp
│   ├── rtl/
│   │   ├── BUILD.bazel
│   │   ├── rtl/
│   │   │   └── tsn.ts
│   │   └── tsconfig.json
│   ├── scripts/
│   │   ├── bazel/
│   │   │   ├── test262_preprocess_test.sh
│   │   │   └── test262_run_test.sh
│   │   ├── compile.sh
│   │   ├── compile_single.sh
│   │   ├── ignored_test262.txt
│   │   └── refresh.sh
│   ├── src/
│   │   ├── test262/
│   │   │   ├── preprocessor/
│   │   │   │   └── main.cpp
│   │   │   ├── runner/
│   │   │   │   ├── TestReporter.cpp
│   │   │   │   ├── TestReporter.hpp
│   │   │   │   └── main.cpp
│   │   │   ├── shared/
│   │   │   │   ├── Test262Helpers.hpp
│   │   │   │   ├── Test262Serialization.cpp
│   │   │   │   └── Test262Serialization.hpp
│   │   │   └── skip_list.json
│   │   └── tsn/
│   │       ├── tsn.cpp
│   │       └── tsn.h
│   ├── tests/
│   │   ├── BUILD.bazel
│   │   ├── tsconfig.json
│   │   ├── tsn_integration_tests/
│   │   │   ├── arith_binary_operators.ts
│   │   │   ├── arith_unary_operators.ts
│   │   │   ├── arith_unary_operators_pros.ts
│   │   │   ├── async_generator.ts
│   │   │   ├── await.ts
│   │   │   ├── backtrace.ts
│   │   │   ├── binary_operators.ts
│   │   │   ├── bitwise_operators.ts
│   │   │   ├── capturing_closures.ts
│   │   │   ├── classes.ts
│   │   │   ├── classes_method_from_value.ts
│   │   │   ├── classes_properties.ts
│   │   │   ├── classes_properties_from_value.ts
│   │   │   ├── destructuring.ts
│   │   │   ├── element_access.ts
│   │   │   ├── enums.ts
│   │   │   ├── exception.ts
│   │   │   ├── exports.ts
│   │   │   ├── for_in.ts
│   │   │   ├── for_of.ts
│   │   │   ├── function_as_classes.ts
│   │   │   ├── generator.ts
│   │   │   ├── if_statements.ts
│   │   │   ├── imports.ts
│   │   │   ├── js_bridge.ts
│   │   │   ├── logical_operators.ts
│   │   │   ├── loops.ts
│   │   │   ├── memory_management.ts
│   │   │   ├── mutable_capturing_closures.ts
│   │   │   ├── null_coalescing.ts
│   │   │   ├── object_properties.ts
│   │   │   ├── optional_operator.ts
│   │   │   ├── spread_literals.ts
│   │   │   ├── string_template.ts
│   │   │   ├── switch_stmt.ts
│   │   │   ├── ternary_operators.ts
│   │   │   ├── try_catch_finally.ts
│   │   │   └── variables.ts
│   │   └── tsn_test_helpers/
│   │       ├── bootstrap.ts
│   │       ├── epilogue.ts
│   │       └── globals.d.ts
│   └── tsn.bzl
├── valdi/
│   ├── .gitignore
│   ├── BUILD.bazel
│   ├── README.md
│   ├── bzl_project/
│   │   └── BUILD.bazel
│   ├── compiler/
│   │   └── toolbox/
│   │       ├── BUILD.bazel
│   │       └── src/
│   │           └── valdi/
│   │               ├── compiler_toolbox/
│   │               │   ├── CompilerToolbox.cpp
│   │               │   ├── CompilerToolbox.hpp
│   │               │   ├── RewriteHeader.cpp
│   │               │   └── RewriteHeader.hpp
│   │               ├── main/
│   │               │   └── main.cpp
│   │               └── stamp/
│   │                   ├── Stamp.cpp
│   │                   └── Stamp.hpp
│   ├── fuzz/
│   │   ├── BUILD.bazel
│   │   ├── build.sh
│   │   └── src/
│   │       └── valdi/
│   │           └── runtime/
│   │               └── Resources/
│   │                   └── ValdiModuleArchive_fuzz_test.cpp
│   ├── generated-src/
│   │   ├── cpp/
│   │   │   └── valdi/
│   │   │       ├── Keychain.hpp
│   │   │       └── RuntimeMessageHandler.hpp
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── snapchat/
│   │   │           └── client/
│   │   │               └── valdi/
│   │   │                   ├── Keychain.java
│   │   │                   └── RuntimeMessageHandler.java
│   │   ├── jni/
│   │   │   └── valdi/
│   │   │       ├── NativeKeychain.cpp
│   │   │       ├── NativeKeychain.hpp
│   │   │       ├── NativeRuntimeMessageHandler.cpp
│   │   │       └── NativeRuntimeMessageHandler.hpp
│   │   ├── objc/
│   │   │   └── valdi/
│   │   │       ├── SCNValdiKeychain+Private.h
│   │   │       ├── SCNValdiKeychain+Private.mm
│   │   │       ├── SCNValdiKeychain.h
│   │   │       ├── SCNValdiRuntimeMessageHandler+Private.h
│   │   │       ├── SCNValdiRuntimeMessageHandler+Private.mm
│   │   │       └── SCNValdiRuntimeMessageHandler.h
│   │   └── yaml/
│   │       ├── Keychain.yaml
│   │       └── RuntimeMessageHandler.yaml
│   ├── protogen-lite/
│   │   └── valdi/
│   │       ├── valdi.pb.cc
│   │       └── valdi.pb.h
│   ├── res/
│   │   └── xml/
│   │       ├── valdi_date_picker.xml
│   │       ├── valdi_number_picker.xml
│   │       ├── valdi_scroll_view_kitkat.xml
│   │       └── valdi_time_picker.xml
│   ├── scripts/
│   │   ├── bazel_utils.py
│   │   ├── clang_tidy.sh
│   │   ├── emoji/
│   │   │   ├── .gitignore
│   │   │   ├── .prettierrc.json
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   └── emoji_gen/
│   │   │   │       └── index.ts
│   │   │   └── tsconfig.json
│   │   ├── run_debugger_test.sh
│   │   └── update_extensions.sh
│   ├── src/
│   │   ├── android_support/
│   │   │   └── java/
│   │   │       └── com/
│   │   │           └── snap/
│   │   │               └── valdi/
│   │   │                   └── support/
│   │   │                       ├── AppBootstrapActivity.kt
│   │   │                       ├── AppBootstrapper.kt
│   │   │                       ├── DefaultNavigator.kt
│   │   │                       ├── NavigationView.kt
│   │   │                       ├── ScrollBridgeLoggerFactoryModule.kt
│   │   │                       ├── SupportFonts.kt
│   │   │                       ├── SupportModules.kt
│   │   │                       └── SupportValdiViewLoaderManager.kt
│   │   ├── bindings/
│   │   │   ├── include/
│   │   │   │   └── valdi/
│   │   │   │       └── bindings/
│   │   │   │           ├── ViewTranslator_jni.hpp
│   │   │   │           └── ViewTranslator_objc.hpp
│   │   │   └── view.yaml
│   │   ├── java/
│   │   │   ├── AndroidManifest.xml
│   │   │   ├── com/
│   │   │   │   ├── snap/
│   │   │   │   │   └── valdi/
│   │   │   │   │       ├── AsyncValdiViewLoader.kt
│   │   │   │   │       ├── BuildOptions.kt
│   │   │   │   │       ├── CppViewFactory.kt
│   │   │   │   │       ├── DebugMessagePresenter.kt
│   │   │   │   │       ├── DeferredViewFactory.kt
│   │   │   │   │       ├── ExceptionReporter.kt
│   │   │   │   │       ├── IBitmap.kt
│   │   │   │   │       ├── IValdiRuntime.kt
│   │   │   │   │       ├── InflationCompletion.kt
│   │   │   │   │       ├── LazyViewFactory.kt
│   │   │   │   │       ├── MainThreadBatchDispatcher.kt
│   │   │   │   │       ├── NoOpValdiViewLoader.kt
│   │   │   │   │       ├── PreloadingMode.kt
│   │   │   │   │       ├── RenderBackend.kt
│   │   │   │   │       ├── ScopedValdiViewLoader.kt
│   │   │   │   │       ├── ValdiContextConfiguration.kt
│   │   │   │   │       ├── ValdiRuntime.kt
│   │   │   │   │       ├── ValdiTweaks.kt
│   │   │   │   │       ├── ValdiViewLoaderManager.kt
│   │   │   │   │       ├── ViewFactory.kt
│   │   │   │   │       ├── ViewFactoryPrivate.kt
│   │   │   │   │       ├── ViewRef.kt
│   │   │   │   │       ├── actions/
│   │   │   │   │       │   ├── JSCaller.kt
│   │   │   │   │       │   ├── ValdiAction.java
│   │   │   │   │       │   ├── ValdiActionHandlerHolder.kt
│   │   │   │   │       │   ├── ValdiActions.kt
│   │   │   │   │       │   ├── ValdiNativeAction.kt
│   │   │   │   │       │   └── ValdiRunnableAction.kt
│   │   │   │   │       ├── attributes/
│   │   │   │   │       │   ├── AttributeHandlerDelegate.kt
│   │   │   │   │       │   ├── AttributePreprocessor.kt
│   │   │   │   │       │   ├── AttributesBinder.kt
│   │   │   │   │       │   ├── AttributesBindingContext.kt
│   │   │   │   │       │   ├── AttributesBindingContextNative.kt
│   │   │   │   │       │   ├── MeasureDelegate.kt
│   │   │   │   │       │   ├── MeasuredSize.kt
│   │   │   │   │       │   ├── RegisterAttributesBinder.kt
│   │   │   │   │       │   ├── ViewLayoutAttributes.kt
│   │   │   │   │       │   ├── ViewLayoutAttributesCpp.kt
│   │   │   │   │       │   ├── conversions/
│   │   │   │   │       │   │   └── ColorConversions.kt
│   │   │   │   │       │   └── impl/
│   │   │   │   │       │       ├── AnimatedImageViewAttributesBinder.kt
│   │   │   │   │       │       ├── EditTextAttributesBinder.kt
│   │   │   │   │       │       ├── EditTextMultilineAttributesBinder.kt
│   │   │   │   │       │       ├── ScrollViewAttributesBinder.kt
│   │   │   │   │       │       ├── ShapeViewAttributesBinder.kt
│   │   │   │   │       │       ├── TextViewAttributesBinder.kt
│   │   │   │   │       │       ├── ValdiDatePickerAttributesBinder.kt
│   │   │   │   │       │       ├── ValdiImageViewAttributesBinder.kt
│   │   │   │   │       │       ├── ValdiIndexPickerAttributesBinder.kt
│   │   │   │   │       │       ├── ValdiRootViewAttributesBinder.kt
│   │   │   │   │       │       ├── ValdiTextViewAttributesBinder.kt
│   │   │   │   │       │       ├── ValdiTextViewBackgroundEffectsLayoutManager.kt
│   │   │   │   │       │       ├── ValdiTimePickerAttributesBinder.kt
│   │   │   │   │       │       ├── ValdiVideoViewAttributesBinder.kt
│   │   │   │   │       │       ├── ViewAttributesBinder.kt
│   │   │   │   │       │       ├── ViewGroupAttributesBinder.kt
│   │   │   │   │       │       ├── animations/
│   │   │   │   │       │       │   ├── AnimationType.kt
│   │   │   │   │       │       │   ├── ColorAnimator.kt
│   │   │   │   │       │       │   ├── TextAnimator.kt
│   │   │   │   │       │       │   ├── ValdiAnimator.kt
│   │   │   │   │       │       │   ├── ValdiAnimatorBase.kt
│   │   │   │   │       │       │   ├── ValdiAnimatorFactory.kt
│   │   │   │   │       │       │   ├── ValdiInterpolatingAnimator.kt
│   │   │   │   │       │       │   ├── ValdiInterpolatingValueAnimator.kt
│   │   │   │   │       │       │   ├── ValdiSpringAnimator.kt
│   │   │   │   │       │       │   ├── ValdiSpringValueAnimator.kt
│   │   │   │   │       │       │   ├── ValdiValueAnimator.kt
│   │   │   │   │       │       │   ├── ValdiValueAnimatorConfig.kt
│   │   │   │   │       │       │   ├── ViewAnimator.kt
│   │   │   │   │       │       │   └── transition/
│   │   │   │   │       │       │       └── ValdiTransitionInfo.kt
│   │   │   │   │       │       ├── fonts/
│   │   │   │   │       │       │   ├── DefaultFonts.kt
│   │   │   │   │       │       │   ├── DefaultTypefaceResLoader.kt
│   │   │   │   │       │       │   ├── FontDataProvider.kt
│   │   │   │   │       │       │   ├── FontDescriptor.kt
│   │   │   │   │       │       │   ├── FontLoader.kt
│   │   │   │   │       │       │   ├── FontManager.kt
│   │   │   │   │       │       │   ├── MissingFontsTracker.kt
│   │   │   │   │       │       │   └── TypefaceResLoader.kt
│   │   │   │   │       │       ├── gestures/
│   │   │   │   │       │       │   ├── DoubleTapContext.kt
│   │   │   │   │       │       │   ├── DragContext.kt
│   │   │   │   │       │       │   ├── GestureAttributes.kt
│   │   │   │   │       │       │   ├── GestureAttributesUtils.kt
│   │   │   │   │       │       │   ├── HitTestUtils.kt
│   │   │   │   │       │       │   ├── LongPressContext.kt
│   │   │   │   │       │       │   ├── PinchContext.kt
│   │   │   │   │       │       │   ├── PointerUtils.kt
│   │   │   │   │       │       │   ├── PredicateUtils.kt
│   │   │   │   │       │       │   ├── RotateContext.kt
│   │   │   │   │       │       │   ├── RotationTracker.kt
│   │   │   │   │       │       │   ├── TapContext.kt
│   │   │   │   │       │       │   └── TouchContext.kt
│   │   │   │   │       │       ├── gradients/
│   │   │   │   │       │       │   └── ValdiGradient.kt
│   │   │   │   │       │       └── richtext/
│   │   │   │   │       │           ├── AttributedText.kt
│   │   │   │   │       │           ├── AttributedTextCpp.kt
│   │   │   │   │       │           ├── FontAttributes.kt
│   │   │   │   │       │           ├── ImageAttachmentSpan.kt
│   │   │   │   │       │           ├── OnLayoutSpan.kt
│   │   │   │   │       │           ├── OnTapSpan.kt
│   │   │   │   │       │           ├── OutlineReplacementSpan.kt
│   │   │   │   │       │           ├── OutlineSpan.kt
│   │   │   │   │       │           ├── RichTextConverter.kt
│   │   │   │   │       │           ├── TextAlignment.kt
│   │   │   │   │       │           ├── TextDecoration.kt
│   │   │   │   │       │           ├── TextSizeSpan.kt
│   │   │   │   │       │           └── TextViewHelper.kt
│   │   │   │   │       ├── bundle/
│   │   │   │   │       │   ├── AssetImageLoaderCompletion.kt
│   │   │   │   │       │   ├── AssetVideoLoaderCompletion.kt
│   │   │   │   │       │   ├── AssetsManager.kt
│   │   │   │   │       │   ├── IValdiCustomModuleProvider.kt
│   │   │   │   │       │   ├── LocalAssetLoader.kt
│   │   │   │   │       │   └── ResourceResolver.kt
│   │   │   │   │       ├── callable/
│   │   │   │   │       │   ├── BridgeFunctionImpls.kt
│   │   │   │   │       │   ├── ValdiBridgeFunction.kt
│   │   │   │   │       │   ├── ValdiFunction.kt
│   │   │   │   │       │   ├── ValdiFunctionActionAdapter.kt
│   │   │   │   │       │   ├── ValdiFunctionNative.kt
│   │   │   │   │       │   ├── ValdiFunctionTrampoline.kt
│   │   │   │   │       │   └── ValdiFunctionUtils.kt
│   │   │   │   │       ├── context/
│   │   │   │   │       │   ├── AndroidRootViewHandler.kt
│   │   │   │   │       │   ├── ContextManager.kt
│   │   │   │   │       │   ├── IRootViewHandler.kt
│   │   │   │   │       │   ├── IValdiContext.kt
│   │   │   │   │       │   ├── LazyValdiContext.kt
│   │   │   │   │       │   ├── RootViewHandlerBase.kt
│   │   │   │   │       │   ├── SnapDrawingRootViewHandler.kt
│   │   │   │   │       │   ├── ValdiContext.kt
│   │   │   │   │       │   ├── ValdiContextId.kt
│   │   │   │   │       │   └── ValdiViewOwner.kt
│   │   │   │   │       ├── drawables/
│   │   │   │   │       │   ├── BoxShadowRenderer.kt
│   │   │   │   │       │   ├── BoxShadowRendererImpl.kt
│   │   │   │   │       │   ├── BoxShadowRendererPool.kt
│   │   │   │   │       │   ├── DeferredBoxShadowRenderer.kt
│   │   │   │   │       │   ├── ValdiBitmapDrawable.kt
│   │   │   │   │       │   ├── ValdiGradientDrawable.kt
│   │   │   │   │       │   ├── ValdiImageDrawable.kt
│   │   │   │   │       │   └── utils/
│   │   │   │   │       │       ├── BlurUtils.kt
│   │   │   │   │       │       ├── BorderRadii.kt
│   │   │   │   │       │       ├── DrawableInfoProvider.kt
│   │   │   │   │       │       ├── FixedDrawableInfoProvider.kt
│   │   │   │   │       │       ├── MaskPathRenderer.kt
│   │   │   │   │       │       └── ValdiGradientDrawablePool.kt
│   │   │   │   │       ├── exceptions/
│   │   │   │   │       │   ├── AttributeError.kt
│   │   │   │   │       │   ├── ExceptionHandler.kt
│   │   │   │   │       │   ├── ExceptionUtils.kt
│   │   │   │   │       │   ├── GlobalExceptionHandler.kt
│   │   │   │   │       │   ├── MarshallerException.kt
│   │   │   │   │       │   ├── ValdiException.kt
│   │   │   │   │       │   └── ValdiFatalException.kt
│   │   │   │   │       ├── extensions/
│   │   │   │   │       │   └── ViewUtils.kt
│   │   │   │   │       ├── imageloading/
│   │   │   │   │       │   ├── DefaultValImageLoader.kt
│   │   │   │   │       │   └── ValdiImageLoaderPostprocessor.kt
│   │   │   │   │       ├── jsmodules/
│   │   │   │   │       │   ├── JSThreadDispatcher.kt
│   │   │   │   │       │   ├── ValdiJSRuntime.kt
│   │   │   │   │       │   ├── ValdiJSRuntimeImpl.kt
│   │   │   │   │       │   ├── ValdiJSWorker.kt
│   │   │   │   │       │   ├── ValdiScopedJSRuntime.kt
│   │   │   │   │       │   └── ValdiStringsModule.kt
│   │   │   │   │       ├── keyboard/
│   │   │   │   │       │   └── KeyboardManager.kt
│   │   │   │   │       ├── logger/
│   │   │   │   │       │   ├── DefaultLogger.kt
│   │   │   │   │       │   ├── LogLevel.kt
│   │   │   │   │       │   └── Logger.kt
│   │   │   │   │       ├── modules/
│   │   │   │   │       │   ├── DrawingModuleFontImpl.kt
│   │   │   │   │       │   ├── DrawingModuleImpl.kt
│   │   │   │   │       │   ├── ModuleFactoryRegistry.kt
│   │   │   │   │       │   ├── RegisterValdiModule.kt
│   │   │   │   │       │   ├── ValdiApplicationModule.kt
│   │   │   │   │       │   ├── ValdiBridgeModule.kt
│   │   │   │   │       │   ├── ValdiBridgeObserver.kt
│   │   │   │   │       │   ├── ValdiDateFormattingModule.kt
│   │   │   │   │       │   ├── ValdiDeviceModule.kt
│   │   │   │   │       │   ├── ValdiGeneratedModuleFactory.kt
│   │   │   │   │       │   ├── ValdiNativeModules.kt
│   │   │   │   │       │   ├── ValdiNumberFormattingModule.kt
│   │   │   │   │       │   └── drawing/
│   │   │   │   │       │       ├── DrawingModule.kt
│   │   │   │   │       │       ├── Font.kt
│   │   │   │   │       │       ├── FontSpecs.kt
│   │   │   │   │       │       ├── FontStyle.kt
│   │   │   │   │       │       ├── FontWeight.kt
│   │   │   │   │       │       └── Size.kt
│   │   │   │   │       ├── nativebridge/
│   │   │   │   │       │   ├── ContextNative.kt
│   │   │   │   │       │   ├── MainThreadDispatcher.java
│   │   │   │   │       │   ├── ReflectionViewFactory.kt
│   │   │   │   │       │   ├── RuntimeNative.kt
│   │   │   │   │       │   ├── ValdiViewManager.kt
│   │   │   │   │       │   ├── ValdiViewManagerOperations.kt
│   │   │   │   │       │   └── ValdiViewManagerOperationsManager.kt
│   │   │   │   │       ├── navigation/
│   │   │   │   │       │   ├── INavigator.kt
│   │   │   │   │       │   ├── INavigatorPageConfig.kt
│   │   │   │   │       │   └── INavigatorPageVisibility.kt
│   │   │   │   │       ├── network/
│   │   │   │   │       │   ├── CompositeRequestManager.kt
│   │   │   │   │       │   ├── DefaultHTTPRequestManager.kt
│   │   │   │   │       │   └── HTTPRequestTask.kt
│   │   │   │   │       ├── nodes/
│   │   │   │   │       │   ├── IValdiViewNode.kt
│   │   │   │   │       │   ├── ValdiViewNode.kt
│   │   │   │   │       │   └── ValdiViewNodeRef.kt
│   │   │   │   │       ├── preload/
│   │   │   │   │       │   └── ValdiPreloader.kt
│   │   │   │   │       ├── promise/
│   │   │   │   │       │   ├── CancelableResolvablePromise.kt
│   │   │   │   │       │   ├── CppPromise.kt
│   │   │   │   │       │   ├── CppPromiseCallback.kt
│   │   │   │   │       │   ├── Promise.kt
│   │   │   │   │       │   ├── PromiseCallback.kt
│   │   │   │   │       │   ├── PromiseUtils.kt
│   │   │   │   │       │   ├── RejectedPromise.kt
│   │   │   │   │       │   ├── ResolvablePromise.kt
│   │   │   │   │       │   └── ResolvedPromise.kt
│   │   │   │   │       ├── schema/
│   │   │   │   │       │   ├── ValdiClass.kt
│   │   │   │   │       │   ├── ValdiClassConstructor.kt
│   │   │   │   │       │   ├── ValdiClassDelegateManager.kt
│   │   │   │   │       │   ├── ValdiEnum.kt
│   │   │   │   │       │   ├── ValdiEnumType.kt
│   │   │   │   │       │   ├── ValdiField.kt
│   │   │   │   │       │   ├── ValdiFunctionClass.kt
│   │   │   │   │       │   ├── ValdiInterface.kt
│   │   │   │   │       │   ├── ValdiMarshallableObjectDescriptor.kt
│   │   │   │   │       │   ├── ValdiMethod.kt
│   │   │   │   │       │   ├── ValdiOptionalMethod.kt
│   │   │   │   │       │   ├── ValdiUntypedClass.kt
│   │   │   │   │       │   ├── ValdiValueMarshallerRegistry.kt
│   │   │   │   │       │   ├── ValdiValueMarshallerRegistryCpp.kt
│   │   │   │   │       │   └── ValdiValueMarshallerRegistryJava.kt
│   │   │   │   │       ├── snapdrawing/
│   │   │   │   │       │   ├── AnimatedImage.kt
│   │   │   │   │       │   ├── PathUtils.kt
│   │   │   │   │       │   ├── SnapDrawingChoreographerFrameScheduler.kt
│   │   │   │   │       │   ├── SnapDrawingFontManager.kt
│   │   │   │   │       │   ├── SnapDrawingFrameScheduler.kt
│   │   │   │   │       │   ├── SnapDrawingOptions.kt
│   │   │   │   │       │   ├── SnapDrawingRenderMode.kt
│   │   │   │   │       │   ├── SnapDrawingRootHandle.kt
│   │   │   │   │       │   ├── SnapDrawingRuntime.kt
│   │   │   │   │       │   ├── SnapDrawingRuntimeCPP.kt
│   │   │   │   │       │   ├── SnapDrawingSurfacePresenter.kt
│   │   │   │   │       │   ├── SnapDrawingSurfacePresenterListener.kt
│   │   │   │   │       │   ├── SnapDrawingSurfaceViewZOrder.kt
│   │   │   │   │       │   ├── SnapDrawingThreadedFrameScheduler.kt
│   │   │   │   │       │   ├── SurfacePresenterFactory.kt
│   │   │   │   │       │   └── SurfacePresenterManager.kt
│   │   │   │   │       ├── store/
│   │   │   │   │       │   ├── Encryptor.kt
│   │   │   │   │       │   └── KeychainUtils.kt
│   │   │   │   │       ├── utils/
│   │   │   │   │       │   ├── AttributeSetXmlHelper.kt
│   │   │   │   │       │   ├── AutoDisposable.kt
│   │   │   │   │       │   ├── BitmapHandler.kt
│   │   │   │   │       │   ├── BitmapPool.kt
│   │   │   │   │       │   ├── BridgeCallUtils.kt
│   │   │   │   │       │   ├── CanvasClipper.kt
│   │   │   │   │       │   ├── CollectionUtils.kt
│   │   │   │   │       │   ├── ColorType.kt
│   │   │   │   │       │   ├── CoordinateResolver.kt
│   │   │   │   │       │   ├── CppNativeHandlePair.kt
│   │   │   │   │       │   ├── DelegatedLoader.kt
│   │   │   │   │       │   ├── Disposable.kt
│   │   │   │   │       │   ├── DisposableCallback.kt
│   │   │   │   │       │   ├── DisposableLoadCompletion.kt
│   │   │   │   │       │   ├── DisposablePrivate.kt
│   │   │   │   │       │   ├── DisposableRunnable.kt
│   │   │   │   │       │   ├── DisposableUtils.kt
│   │   │   │   │       │   ├── EmptyAttributeSet.kt
│   │   │   │   │       │   ├── EventTime.kt
│   │   │   │   │       │   ├── ExecutorsUtil.kt
│   │   │   │   │       │   ├── GeometricPath.kt
│   │   │   │   │       │   ├── IAsyncWorkScheduler.kt
│   │   │   │   │       │   ├── IScheduler.kt
│   │   │   │   │       │   ├── InternedString.kt
│   │   │   │   │       │   ├── InternedStringCPP.kt
│   │   │   │   │       │   ├── InternedStringJava.kt
│   │   │   │   │       │   ├── JSConversions.kt
│   │   │   │   │       │   ├── JavaScriptCapturedStacktrace.kt
│   │   │   │   │       │   ├── JavaScriptMemoryStatistics.kt
│   │   │   │   │       │   ├── JavaScriptThreadStatus.kt
│   │   │   │   │       │   ├── LoadCompletion.kt
│   │   │   │   │       │   ├── LoaderDelegate.kt
│   │   │   │   │       │   ├── LoggerUtils.kt
│   │   │   │   │       │   ├── MainThreadUtils.kt
│   │   │   │   │       │   ├── NativeHandlesManager.kt
│   │   │   │   │       │   ├── NativeRef.kt
│   │   │   │   │       │   ├── PathInterpolator.kt
│   │   │   │   │       │   ├── QoSClass.kt
│   │   │   │   │       │   ├── Ref.kt
│   │   │   │   │       │   ├── SingleRunnable.kt
│   │   │   │   │       │   ├── ThrottlerAsyncWorkerScheduler.kt
│   │   │   │   │       │   ├── Trace.kt
│   │   │   │   │       │   ├── TypedRef.kt
│   │   │   │   │       │   ├── ValdiActionUtils.kt
│   │   │   │   │       │   ├── ValdiAssetLoadOptions.kt
│   │   │   │   │       │   ├── ValdiAssetLoader.kt
│   │   │   │   │       │   ├── ValdiEnumUtils.kt
│   │   │   │   │       │   ├── ValdiImage.kt
│   │   │   │   │       │   ├── ValdiImageContent.kt
│   │   │   │   │       │   ├── ValdiImageFactory.kt
│   │   │   │   │       │   ├── ValdiImageLoadCompletion.kt
│   │   │   │   │       │   ├── ValdiImageLoader.kt
│   │   │   │   │       │   ├── ValdiImageWithBitmap.kt
│   │   │   │   │       │   ├── ValdiImageWithContent.kt
│   │   │   │   │       │   ├── ValdiImageWithDeferredContent.kt
│   │   │   │   │       │   ├── ValdiJNI.kt
│   │   │   │   │       │   ├── ValdiLeakTracker.kt
│   │   │   │   │       │   ├── ValdiMarshallable.kt
│   │   │   │   │       │   ├── ValdiMarshallableObject.kt
│   │   │   │   │       │   ├── ValdiMarshaller.kt
│   │   │   │   │       │   ├── ValdiMarshallerCPP.kt
│   │   │   │   │       │   ├── ValdiMarshallerJava.kt
│   │   │   │   │       │   ├── ValdiObjects.kt
│   │   │   │   │       │   ├── ValdiRawImageResourceLoader.kt
│   │   │   │   │       │   ├── ValdiTextDirectionHeuristic.kt
│   │   │   │   │       │   ├── ValdiThread.kt
│   │   │   │   │       │   ├── ValdiVideoLoader.kt
│   │   │   │   │       │   ├── ValdiVideoPlayer.kt
│   │   │   │   │       │   ├── ValdiVideoPlayerCreatedCompletion.kt
│   │   │   │   │       │   ├── ViewRefSupport.kt
│   │   │   │   │       │   └── executors/
│   │   │   │   │       │       └── ExecutorFactory.kt
│   │   │   │   │       ├── viewmodel/
│   │   │   │   │       │   └── ValdiViewModel.kt
│   │   │   │   │       ├── views/
│   │   │   │   │       │   ├── AnimatedImageView.kt
│   │   │   │   │       │   ├── CustomChildViewAppender.kt
│   │   │   │   │       │   ├── EdgeEffectWrapper.kt
│   │   │   │   │       │   ├── ExtendedFadingEdgeRenderer.kt
│   │   │   │   │       │   ├── IScrollPerfLoggerBridge.kt
│   │   │   │   │       │   ├── ShapeView.kt
│   │   │   │   │       │   ├── TextViewUtils.kt
│   │   │   │   │       │   ├── ValdiAccessibilityDelegate.kt
│   │   │   │   │       │   ├── ValdiAccessibilityDelegateHierarchy.kt
│   │   │   │   │       │   ├── ValdiAssetReceiver.kt
│   │   │   │   │       │   ├── ValdiClippableView.kt
│   │   │   │   │       │   ├── ValdiDatePicker.kt
│   │   │   │   │       │   ├── ValdiEditText.kt
│   │   │   │   │       │   ├── ValdiEditTextMultiline.kt
│   │   │   │   │       │   ├── ValdiForegroundHolder.kt
│   │   │   │   │       │   ├── ValdiGeneratedRootView.kt
│   │   │   │   │       │   ├── ValdiImageView.kt
│   │   │   │   │       │   ├── ValdiIndexPicker.kt
│   │   │   │   │       │   ├── ValdiMeasurer.kt
│   │   │   │   │       │   ├── ValdiRecyclableView.kt
│   │   │   │   │       │   ├── ValdiRootView.kt
│   │   │   │   │       │   ├── ValdiScrollUtil.kt
│   │   │   │   │       │   ├── ValdiScrollView.kt
│   │   │   │   │       │   ├── ValdiScrollableView.kt
│   │   │   │   │       │   ├── ValdiTextHolder.kt
│   │   │   │   │       │   ├── ValdiTextView.kt
│   │   │   │   │       │   ├── ValdiTimePicker.kt
│   │   │   │   │       │   ├── ValdiTouchTarget.kt
│   │   │   │   │       │   ├── ValdiVideoView.kt
│   │   │   │   │       │   ├── ValdiView.kt
│   │   │   │   │       │   ├── snapdrawing/
│   │   │   │   │       │   │   ├── SnapDrawingContainerView.kt
│   │   │   │   │       │   │   ├── SnapDrawingEmbeddedView.kt
│   │   │   │   │       │   │   ├── SnapDrawingSurfaceView.kt
│   │   │   │   │       │   │   └── SnapDrawingTextureView.kt
│   │   │   │   │       │   └── touches/
│   │   │   │   │       │       ├── AndroidDetectorGestureRecognizer.kt
│   │   │   │   │       │       ├── AttributedTextTapGestureRecognizer.kt
│   │   │   │   │       │       ├── DisallowInterceptTouchEventMode.kt
│   │   │   │   │       │       ├── DoubleTapGestureRecognizer.kt
│   │   │   │   │       │       ├── DragGestureRecognizer.kt
│   │   │   │   │       │       ├── GestureRecognizers.kt
│   │   │   │   │       │       ├── GesturesState.kt
│   │   │   │   │       │       ├── LongPressGestureRecognizer.kt
│   │   │   │   │       │       ├── PinchGestureDetector.kt
│   │   │   │   │       │       ├── PinchGestureRecognizer.kt
│   │   │   │   │       │       ├── PinchGestureRecognizerV2.kt
│   │   │   │   │       │       ├── RotateGestureRecognizer.kt
│   │   │   │   │       │       ├── RotateGestureRecognizerV2.kt
│   │   │   │   │       │       ├── RotationGestureDetector.kt
│   │   │   │   │       │       ├── ScrollViewDragGestureRecognizer.kt
│   │   │   │   │       │       ├── TapGestureRecognizer.kt
│   │   │   │   │       │       ├── TouchDispatcher.kt
│   │   │   │   │       │       ├── TouchDispatcherImpl.kt
│   │   │   │   │       │       ├── TouchDispatcherNewExperience.kt
│   │   │   │   │       │       ├── TouchGestureRecognizer.kt
│   │   │   │   │       │       ├── ValdiGesturePointer.kt
│   │   │   │   │       │       ├── ValdiGestureRecognizer.kt
│   │   │   │   │       │       └── backbutton/
│   │   │   │   │       │           └── BackButtonListener.kt
│   │   │   │   │       └── workarounds/
│   │   │   │   │           └── AndroidDeviceWorkarounds.kt
│   │   │   │   └── snapchat/
│   │   │   │       └── client/
│   │   │   │           └── valdi/
│   │   │   │               ├── NativeBridge.java
│   │   │   │               ├── UndefinedValue.java
│   │   │   │               └── utils/
│   │   │   │                   ├── CppObjectWrapper.kt
│   │   │   │                   └── ValdiCPPAction.java
│   │   │   ├── generate_interface.sh
│   │   │   └── proguard-rules.pro
│   │   ├── java_plugin/
│   │   │   └── processor/
│   │   │       └── ValdiAnnotationProcessor.kt
│   │   └── valdi/
│   │       ├── .clang-tidy
│   │       ├── android/
│   │       │   ├── AccessibilityBridge.cpp
│   │       │   ├── AccessibilityBridge.hpp
│   │       │   ├── AndroidAssetLoader.cpp
│   │       │   ├── AndroidAssetLoader.hpp
│   │       │   ├── AndroidBitmap.cpp
│   │       │   ├── AndroidBitmap.hpp
│   │       │   ├── AndroidBitmapFactory.cpp
│   │       │   ├── AndroidBitmapFactory.hpp
│   │       │   ├── AndroidDispatchQueue.cpp
│   │       │   ├── AndroidDispatchQueue.hpp
│   │       │   ├── AndroidKeychain.cpp
│   │       │   ├── AndroidKeychain.hpp
│   │       │   ├── AndroidManifest.xml
│   │       │   ├── AndroidValueMarshallerRegistry.cpp
│   │       │   ├── AndroidValueMarshallerRegistry.hpp
│   │       │   ├── AndroidViewFactory.cpp
│   │       │   ├── AndroidViewFactory.hpp
│   │       │   ├── AndroidViewHolder.cpp
│   │       │   ├── AndroidViewHolder.hpp
│   │       │   ├── AndroidViewTransaction.cpp
│   │       │   ├── AndroidViewTransaction.hpp
│   │       │   ├── AnimatedImageJNI.hpp
│   │       │   ├── AttributedTextJNI.hpp
│   │       │   ├── AttributesBindingContextWrapper.cpp
│   │       │   ├── AttributesBindingContextWrapper.hpp
│   │       │   ├── AttributesJNI.hpp
│   │       │   ├── CppPromiseCallbackJNI.hpp
│   │       │   ├── CppPromiseJNI.hpp
│   │       │   ├── DeferredViewOperations.cpp
│   │       │   ├── DeferredViewOperations.hpp
│   │       │   ├── FunctionTrampolineJNI.hpp
│   │       │   ├── InternedStringCPP.hpp
│   │       │   ├── JavaClassDelegate.cpp
│   │       │   ├── JavaClassDelegate.hpp
│   │       │   ├── JavaEnumClassDelegate.cpp
│   │       │   ├── JavaEnumClassDelegate.hpp
│   │       │   ├── JavaFunctionClassDelegate.cpp
│   │       │   ├── JavaFunctionClassDelegate.hpp
│   │       │   ├── JavaInterfaceClassDelegate.cpp
│   │       │   ├── JavaInterfaceClassDelegate.hpp
│   │       │   ├── JavaMethodClassDelegate.cpp
│   │       │   ├── JavaMethodClassDelegate.hpp
│   │       │   ├── JavaObjectClassDelegate.cpp
│   │       │   ├── JavaObjectClassDelegate.hpp
│   │       │   ├── JavaUntypedClassDelegate.cpp
│   │       │   ├── JavaUntypedClassDelegate.hpp
│   │       │   ├── JavaValueDelegate.cpp
│   │       │   ├── JavaValueDelegate.hpp
│   │       │   ├── Logger.cpp
│   │       │   ├── Logger.hpp
│   │       │   ├── MainThreadDispatcher.cpp
│   │       │   ├── MainThreadDispatcher.hpp
│   │       │   ├── MarshallerJNI.cpp
│   │       │   ├── ModuleFactoryRegistryJNI.hpp
│   │       │   ├── NativeBridge.cpp
│   │       │   ├── NativeBridge.hpp
│   │       │   ├── RegisterJNI.cpp
│   │       │   ├── ResourceLoader.cpp
│   │       │   ├── ResourceLoader.hpp
│   │       │   ├── RuntimeListener.cpp
│   │       │   ├── RuntimeListener.hpp
│   │       │   ├── RuntimeManagerWrapper.cpp
│   │       │   ├── RuntimeManagerWrapper.hpp
│   │       │   ├── RuntimeWrapper.cpp
│   │       │   ├── RuntimeWrapper.hpp
│   │       │   ├── ValdiFunctionNative.hpp
│   │       │   ├── ValdiMarshallableObjectDescriptorJavaClass.cpp
│   │       │   ├── ValdiMarshallableObjectDescriptorJavaClass.hpp
│   │       │   ├── ValueMarshallerRegistryCppJNI.hpp
│   │       │   ├── ViewManager.cpp
│   │       │   ├── ViewManager.hpp
│   │       │   ├── dummy.cpp
│   │       │   └── snap_drawing/
│   │       │       ├── AndroidScrollConstantsResolver.cpp
│   │       │       ├── AndroidScrollConstantsResolver.hpp
│   │       │       ├── AndroidSnapDrawingRuntime.cpp
│   │       │       ├── AndroidSnapDrawingRuntime.hpp
│   │       │       ├── AndroidSnapDrawingUtils.cpp
│   │       │       ├── AndroidSnapDrawingUtils.hpp
│   │       │       ├── AndroidSurfacePresenterManager.cpp
│   │       │       ├── AndroidSurfacePresenterManager.hpp
│   │       │       ├── SnapDrawingLayerRootHost.cpp
│   │       │       └── SnapDrawingLayerRootHost.hpp
│   │       ├── cli_runner/
│   │       │   ├── CLIRunner.cpp
│   │       │   └── CLIRunner.hpp
│   │       ├── hermes/
│   │       │   ├── Hermes.hpp
│   │       │   ├── HermesBytecodeCache.cpp
│   │       │   ├── HermesBytecodeCache.hpp
│   │       │   ├── HermesDebuggerConnection.cpp
│   │       │   ├── HermesDebuggerConnection.hpp
│   │       │   ├── HermesDebuggerRegistry.cpp
│   │       │   ├── HermesDebuggerRegistry.hpp
│   │       │   ├── HermesDebuggerServer.cpp
│   │       │   ├── HermesDebuggerServer.hpp
│   │       │   ├── HermesJavaScriptCompiler.cpp
│   │       │   ├── HermesJavaScriptCompiler.hpp
│   │       │   ├── HermesJavaScriptContext.cpp
│   │       │   ├── HermesJavaScriptContext.hpp
│   │       │   ├── HermesJavaScriptContextFactory.cpp
│   │       │   ├── HermesJavaScriptContextFactory.hpp
│   │       │   ├── HermesUtils.cpp
│   │       │   ├── HermesUtils.hpp
│   │       │   └── WebSocketServer/
│   │       │       ├── IWebSocketConnection.hpp
│   │       │       ├── IWebSocketServer.hpp
│   │       │       ├── WebSocketPP.hpp
│   │       │       ├── WebSocketServer.cpp
│   │       │       ├── WebSocketServer.hpp
│   │       │       ├── WebSocketServerConnectionImpl.cpp
│   │       │       ├── WebSocketServerConnectionImpl.hpp
│   │       │       ├── WebSocketServerImpl.cpp
│   │       │       └── WebSocketServerImpl.hpp
│   │       ├── ios/
│   │       │   ├── Action/
│   │       │   │   ├── SCValdiJSAction.h
│   │       │   │   └── SCValdiJSAction.mm
│   │       │   ├── Animations/
│   │       │   │   ├── SCValdiAnimator.h
│   │       │   │   ├── SCValdiAnimator.m
│   │       │   │   ├── SCValdiLayerAnimation.h
│   │       │   │   └── SCValdiLayerAnimation.m
│   │       │   ├── Bootstrap/
│   │       │   │   ├── SCValdiAppMain.h
│   │       │   │   ├── SCValdiAppMain.m
│   │       │   │   ├── SCValdiBootstrappingAppDelegate.h
│   │       │   │   └── SCValdiBootstrappingAppDelegate.m
│   │       │   ├── CPPBindings/
│   │       │   │   ├── SCValdiLoggerBridge.h
│   │       │   │   ├── SCValdiLoggerBridge.mm
│   │       │   │   ├── SCValdiMainThreadDispatcher.h
│   │       │   │   ├── SCValdiMainThreadDispatcher.mm
│   │       │   │   ├── SCValdiRuntimeListener.h
│   │       │   │   ├── SCValdiRuntimeListener.mm
│   │       │   │   ├── SCValdiViewManager.h
│   │       │   │   ├── SCValdiViewManager.mm
│   │       │   │   ├── SCValdiViewTransaction.h
│   │       │   │   ├── SCValdiViewTransaction.mm
│   │       │   │   ├── UIViewHolder.h
│   │       │   │   └── UIViewHolder.mm
│   │       │   ├── Categories/
│   │       │   │   ├── UIButton+Valdi.h
│   │       │   │   ├── UIButton+Valdi.m
│   │       │   │   ├── UIControl+Valdi.h
│   │       │   │   ├── UIControl+Valdi.m
│   │       │   │   ├── UISwitch+Valdi.h
│   │       │   │   ├── UISwitch+Valdi.m
│   │       │   │   ├── UIView+Valdi.h
│   │       │   │   ├── UIView+Valdi.m
│   │       │   │   ├── UIVisualEffectView+Valdi.h
│   │       │   │   └── UIVisualEffectView+Valdi.m
│   │       │   ├── Gestures/
│   │       │   │   ├── SCValdiGestureRecognizers.h
│   │       │   │   └── SCValdiGestureRecognizers.mm
│   │       │   ├── Info.plist
│   │       │   ├── NativeModules/
│   │       │   │   ├── Drawing/
│   │       │   │   │   ├── SCValdiDrawingModuleFactory.h
│   │       │   │   │   └── SCValdiDrawingModuleFactory.m
│   │       │   │   ├── SCValdiApplicationModule.h
│   │       │   │   ├── SCValdiApplicationModule.m
│   │       │   │   ├── SCValdiBridgeModuleUtils.h
│   │       │   │   ├── SCValdiBridgeModuleUtils.m
│   │       │   │   ├── SCValdiDeviceModule.h
│   │       │   │   └── SCValdiDeviceModule.m
│   │       │   ├── Resources/
│   │       │   │   ├── SCValdiResourceLoader.h
│   │       │   │   └── SCValdiResourceLoader.mm
│   │       │   ├── SCValdiAssetLoader.h
│   │       │   ├── SCValdiAssetLoader.mm
│   │       │   ├── SCValdiAttributesBinder.h
│   │       │   ├── SCValdiAttributesBinder.mm
│   │       │   ├── SCValdiAutoDestroyingContext.h
│   │       │   ├── SCValdiAutoDestroyingContext.m
│   │       │   ├── SCValdiContext+CPP.h
│   │       │   ├── SCValdiContext.h
│   │       │   ├── SCValdiContext.mm
│   │       │   ├── SCValdiDefaultHTTPRequestManager.h
│   │       │   ├── SCValdiDefaultHTTPRequestManager.m
│   │       │   ├── SCValdiDefaultImageLoader.h
│   │       │   ├── SCValdiDefaultImageLoader.m
│   │       │   ├── SCValdiDisposable.h
│   │       │   ├── SCValdiJSRuntimeImpl.h
│   │       │   ├── SCValdiJSRuntimeImpl.m
│   │       │   ├── SCValdiJSWorker.h
│   │       │   ├── SCValdiJSWorker.mm
│   │       │   ├── SCValdiJsConvertible.h
│   │       │   ├── SCValdiKeychainStore.h
│   │       │   ├── SCValdiKeychainStore.m
│   │       │   ├── SCValdiRuntime+Private.h
│   │       │   ├── SCValdiRuntime.h
│   │       │   ├── SCValdiRuntime.mm
│   │       │   ├── SCValdiRuntimeManager.h
│   │       │   ├── SCValdiRuntimeManager.mm
│   │       │   ├── SCValdiUserDefaultsStore.h
│   │       │   ├── SCValdiUserDefaultsStore.m
│   │       │   ├── SCValdiViewModel.h
│   │       │   ├── SCValdiViewNode+CPP.h
│   │       │   ├── SCValdiViewNode.h
│   │       │   ├── SCValdiViewNode.mm
│   │       │   ├── SnapDrawing/
│   │       │   │   ├── AnimatedImage/
│   │       │   │   │   ├── SCSnapDrawingAnimatedImage+CPP.h
│   │       │   │   │   ├── SCSnapDrawingAnimatedImage.h
│   │       │   │   │   ├── SCSnapDrawingAnimatedImage.mm
│   │       │   │   │   ├── SCSnapDrawingAnimatedImageView.h
│   │       │   │   │   └── SCSnapDrawingAnimatedImageView.mm
│   │       │   │   ├── SCSnapDrawingUIView+CPP.h
│   │       │   │   ├── SCSnapDrawingUIView.h
│   │       │   │   ├── SCSnapDrawingUIView.mm
│   │       │   │   ├── SCValdiSnapDrawingRuntime.h
│   │       │   │   ├── SCValdiSnapDrawingRuntime.mm
│   │       │   │   ├── SCValdiSnapDrawingSurfacePresenterManager.h
│   │       │   │   ├── SCValdiSnapDrawingSurfacePresenterManager.mm
│   │       │   │   ├── SCValdiSurfacePresenterView.h
│   │       │   │   └── SCValdiSurfacePresenterView.m
│   │       │   ├── Text/
│   │       │   │   ├── NSAttributedString+Valdi.h
│   │       │   │   ├── NSAttributedString+Valdi.m
│   │       │   │   ├── SCValdiAttributedText.h
│   │       │   │   ├── SCValdiAttributedText.mm
│   │       │   │   ├── SCValdiAttributedTextHelper.h
│   │       │   │   ├── SCValdiAttributedTextHelper.m
│   │       │   │   ├── SCValdiFont.h
│   │       │   │   ├── SCValdiFont.m
│   │       │   │   ├── SCValdiFontAttributes.h
│   │       │   │   ├── SCValdiFontAttributes.m
│   │       │   │   ├── SCValdiFontManager.h
│   │       │   │   ├── SCValdiFontManager.m
│   │       │   │   ├── SCValdiImageAttachmentInfo.h
│   │       │   │   ├── SCValdiImageAttachmentInfo.m
│   │       │   │   ├── SCValdiOnLayoutAttribute.h
│   │       │   │   ├── SCValdiOnLayoutAttribute.m
│   │       │   │   ├── SCValdiOnTapAttribute.h
│   │       │   │   ├── SCValdiOnTapAttribute.m
│   │       │   │   ├── SCValdiTextLayout.h
│   │       │   │   └── SCValdiTextLayout.m
│   │       │   ├── Utils/
│   │       │   │   ├── ContextUtils.h
│   │       │   │   ├── ContextUtils.mm
│   │       │   │   ├── GradientUtils.h
│   │       │   │   ├── GradientUtils.m
│   │       │   │   ├── SCValdiCapturedJSStacktrace.h
│   │       │   │   ├── SCValdiCapturedJSStacktrace.m
│   │       │   │   ├── SCValdiImageFilter.h
│   │       │   │   ├── SCValdiImageFilter.mm
│   │       │   │   ├── SCValdiViewFactoryImpl.h
│   │       │   │   └── SCValdiViewFactoryImpl.mm
│   │       │   ├── Valdi.h
│   │       │   └── Views/
│   │       │       ├── SCValdiActivityIndicatorView.h
│   │       │       ├── SCValdiActivityIndicatorView.m
│   │       │       ├── SCValdiAnimatedContentView.h
│   │       │       ├── SCValdiAnimatedContentView.mm
│   │       │       ├── SCValdiBlurView.h
│   │       │       ├── SCValdiBlurView.m
│   │       │       ├── SCValdiDatePicker.h
│   │       │       ├── SCValdiDatePicker.m
│   │       │       ├── SCValdiDatePickerUtils.h
│   │       │       ├── SCValdiDatePickerUtils.m
│   │       │       ├── SCValdiDateTimePicker.h
│   │       │       ├── SCValdiDateTimePicker.m
│   │       │       ├── SCValdiIScrollPerfLoggerBridgeFactory.h
│   │       │       ├── SCValdiIndexPicker.h
│   │       │       ├── SCValdiIndexPicker.m
│   │       │       ├── SCValdiLabel.h
│   │       │       ├── SCValdiLabel.m
│   │       │       ├── SCValdiShapeView.h
│   │       │       ├── SCValdiShapeView.m
│   │       │       ├── SCValdiTextField.h
│   │       │       ├── SCValdiTextField.m
│   │       │       ├── SCValdiTextView.h
│   │       │       ├── SCValdiTextView.m
│   │       │       ├── SCValdiTextViewEffectsLayoutManager.h
│   │       │       ├── SCValdiTextViewEffectsLayoutManager.m
│   │       │       ├── SCValdiTimePicker.h
│   │       │       └── SCValdiTimePicker.m
│   │       ├── jni/
│   │       │   ├── JavaThread.cpp
│   │       │   └── JavaThread.hpp
│   │       ├── jsbridge/
│   │       │   ├── JavaScriptBridge.cpp
│   │       │   └── JavaScriptBridge.hpp
│   │       ├── jscore/
│   │       │   ├── JSCoreCustomClasses.cpp
│   │       │   ├── JSCoreCustomClasses.hpp
│   │       │   ├── JSCoreDebuggerProxy.cpp
│   │       │   ├── JSCoreDebuggerProxy.hpp
│   │       │   ├── JSCoreUtils.cpp
│   │       │   ├── JSCoreUtils.hpp
│   │       │   ├── JavaScriptCoreContext.cpp
│   │       │   ├── JavaScriptCoreContext.hpp
│   │       │   ├── JavaScriptCoreContextFactory.cpp
│   │       │   └── JavaScriptCoreContextFactory.hpp
│   │       ├── macos/
│   │       │   ├── Bootstrap/
│   │       │   │   ├── SCValdiAppMain.h
│   │       │   │   ├── SCValdiAppMain.m
│   │       │   │   ├── SCValdiBootstrappingAppDelegate.m
│   │       │   │   └── SCValdiBootstrappingNSAppDelegate.h
│   │       │   ├── MacOSSnapDrawingRuntime.h
│   │       │   ├── MacOSSnapDrawingRuntime.mm
│   │       │   ├── SCDirectoryUtils.h
│   │       │   ├── SCDirectoryUtils.mm
│   │       │   ├── SCValdiCursorUpdater.h
│   │       │   ├── SCValdiCursorUpdater.m
│   │       │   ├── SCValdiDefaultHTTPRequestManager.h
│   │       │   ├── SCValdiDefaultHTTPRequestManager.mm
│   │       │   ├── SCValdiMacOSAttributesBinder.h
│   │       │   ├── SCValdiMacOSAttributesBinder.mm
│   │       │   ├── SCValdiMacOSFunction.h
│   │       │   ├── SCValdiMacOSFunction.mm
│   │       │   ├── SCValdiMacOSStringsBridgeModule.h
│   │       │   ├── SCValdiMacOSStringsBridgeModule.mm
│   │       │   ├── SCValdiMacOSSurfacePresenterManager.h
│   │       │   ├── SCValdiMacOSSurfacePresenterManager.mm
│   │       │   ├── SCValdiMacOSViewManager.h
│   │       │   ├── SCValdiMacOSViewManager.mm
│   │       │   ├── SCValdiObjCUtils.h
│   │       │   ├── SCValdiObjCUtils.mm
│   │       │   ├── SCValdiRuntime.h
│   │       │   ├── SCValdiRuntime.mm
│   │       │   ├── SCValdiSnapDrawingNSView.h
│   │       │   ├── SCValdiSnapDrawingNSView.mm
│   │       │   └── Views/
│   │       │       ├── SCValdiMacOSTextField.h
│   │       │       ├── SCValdiMacOSTextField.m
│   │       │       ├── SCValdiSurfacePresenterView.h
│   │       │       └── SCValdiSurfacePresenterView.m
│   │       ├── quickjs/
│   │       │   ├── QuickJSJavaScriptContext.cpp
│   │       │   ├── QuickJSJavaScriptContext.hpp
│   │       │   ├── QuickJSJavaScriptContextFactory.cpp
│   │       │   ├── QuickJSJavaScriptContextFactory.hpp
│   │       │   ├── QuickJSUtils.cpp
│   │       │   └── QuickJSUtils.hpp
│   │       ├── runtime/
│   │       │   ├── Attributes/
│   │       │   │   ├── AccessibilityAttributes.cpp
│   │       │   │   ├── AccessibilityAttributes.hpp
│   │       │   │   ├── Animator.cpp
│   │       │   │   ├── Animator.hpp
│   │       │   │   ├── AssetAttributes.cpp
│   │       │   │   ├── AssetAttributes.hpp
│   │       │   │   ├── AttributeHandler.cpp
│   │       │   │   ├── AttributeHandler.hpp
│   │       │   │   ├── AttributeHandlerDelegate.cpp
│   │       │   │   ├── AttributeHandlerDelegate.hpp
│   │       │   │   ├── AttributeHandlerDelegateWithCallable.cpp
│   │       │   │   ├── AttributeHandlerDelegateWithCallable.hpp
│   │       │   │   ├── AttributeId.hpp
│   │       │   │   ├── AttributeIds.cpp
│   │       │   │   ├── AttributeIds.hpp
│   │       │   │   ├── AttributeOwner.cpp
│   │       │   │   ├── AttributeOwner.hpp
│   │       │   │   ├── AttributePostprocessor.cpp
│   │       │   │   ├── AttributePostprocessor.hpp
│   │       │   │   ├── AttributePreprocessor.cpp
│   │       │   │   ├── AttributePreprocessor.hpp
│   │       │   │   ├── AttributeValue.cpp
│   │       │   │   ├── AttributeValue.hpp
│   │       │   │   ├── AttributesApplier.cpp
│   │       │   │   ├── AttributesApplier.hpp
│   │       │   │   ├── AttributesBinderHelper.cpp
│   │       │   │   ├── AttributesBinderHelper.hpp
│   │       │   │   ├── AttributesBindingContext.cpp
│   │       │   │   ├── AttributesBindingContext.hpp
│   │       │   │   ├── AttributesBindingContextImpl.cpp
│   │       │   │   ├── AttributesBindingContextImpl.hpp
│   │       │   │   ├── AttributesManager.cpp
│   │       │   │   ├── AttributesManager.hpp
│   │       │   │   ├── BorderRadius.cpp
│   │       │   │   ├── BorderRadius.hpp
│   │       │   │   ├── BoundAttributes.cpp
│   │       │   │   ├── BoundAttributes.hpp
│   │       │   │   ├── CompositeAttribute.cpp
│   │       │   │   ├── CompositeAttribute.hpp
│   │       │   │   ├── CompositeAttributeUtils.cpp
│   │       │   │   ├── CompositeAttributeUtils.hpp
│   │       │   │   ├── DefaultAttributeProcessors.cpp
│   │       │   │   ├── DefaultAttributeProcessors.hpp
│   │       │   │   ├── DefaultAttributes.cpp
│   │       │   │   ├── DefaultAttributes.hpp
│   │       │   │   ├── NoOpDefaultAttributeHandler.cpp
│   │       │   │   ├── NoOpDefaultAttributeHandler.hpp
│   │       │   │   ├── PreprocessorCache.cpp
│   │       │   │   ├── PreprocessorCache.hpp
│   │       │   │   ├── PreprocessorCacheKey.cpp
│   │       │   │   ├── PreprocessorCacheKey.hpp
│   │       │   │   ├── ScrollAttributes.cpp
│   │       │   │   ├── ScrollAttributes.hpp
│   │       │   │   ├── TextAttributeValueParser.cpp
│   │       │   │   ├── TextAttributeValueParser.hpp
│   │       │   │   ├── ValueConverters.cpp
│   │       │   │   ├── ValueConverters.hpp
│   │       │   │   ├── ViewNodeAttribute.cpp
│   │       │   │   ├── ViewNodeAttribute.hpp
│   │       │   │   ├── ViewNodeAttributesApplier.cpp
│   │       │   │   ├── ViewNodeAttributesApplier.hpp
│   │       │   │   └── Yoga/
│   │       │   │       ├── YGEdgesAttributeHandlerDelegate.cpp
│   │       │   │       ├── YGEdgesAttributeHandlerDelegate.hpp
│   │       │   │       ├── YGEnumAttributeHandlerDelegate.cpp
│   │       │   │       ├── YGEnumAttributeHandlerDelegate.hpp
│   │       │   │       ├── YGFloatOptionalAttributeHandlerDelegate.cpp
│   │       │   │       ├── YGFloatOptionalAttributeHandlerDelegate.hpp
│   │       │   │       ├── YGValueAttributeHandlerDelegate.cpp
│   │       │   │       ├── YGValueAttributeHandlerDelegate.hpp
│   │       │   │       ├── Yoga.cpp
│   │       │   │       ├── Yoga.hpp
│   │       │   │       ├── YogaAttributeHandlerDelegate.cpp
│   │       │   │       ├── YogaAttributeHandlerDelegate.hpp
│   │       │   │       ├── YogaAttributes.cpp
│   │       │   │       ├── YogaAttributes.hpp
│   │       │   │       ├── YogaGetterSetterAttributeHandlerDelegate.cpp
│   │       │   │       └── YogaGetterSetterAttributeHandlerDelegate.hpp
│   │       │   ├── CSS/
│   │       │   │   ├── CSSAttributes.cpp
│   │       │   │   ├── CSSAttributes.hpp
│   │       │   │   ├── CSSAttributesManager.cpp
│   │       │   │   ├── CSSAttributesManager.hpp
│   │       │   │   ├── CSSDocument.cpp
│   │       │   │   ├── CSSDocument.hpp
│   │       │   │   ├── CSSNode.cpp
│   │       │   │   ├── CSSNode.hpp
│   │       │   │   ├── CSSNodeParentResolver.hpp
│   │       │   │   ├── StyleAttributesCache.cpp
│   │       │   │   └── StyleAttributesCache.hpp
│   │       │   ├── Context/
│   │       │   │   ├── AttributionResolver.cpp
│   │       │   │   ├── AttributionResolver.hpp
│   │       │   │   ├── Context.cpp
│   │       │   │   ├── Context.hpp
│   │       │   │   ├── ContextAttachedValdiObject.cpp
│   │       │   │   ├── ContextAttachedValdiObject.hpp
│   │       │   │   ├── ContextAutoDestroy.cpp
│   │       │   │   ├── ContextAutoDestroy.hpp
│   │       │   │   ├── ContextComponentRenderer.cpp
│   │       │   │   ├── ContextComponentRenderer.hpp
│   │       │   │   ├── ContextEntry.cpp
│   │       │   │   ├── ContextEntry.hpp
│   │       │   │   ├── ContextHandler.cpp
│   │       │   │   ├── ContextHandler.hpp
│   │       │   │   ├── ContextManager.cpp
│   │       │   │   ├── ContextManager.hpp
│   │       │   │   ├── IViewNodeAssetHandler.hpp
│   │       │   │   ├── IViewNodesAssetTracker.hpp
│   │       │   │   ├── RawViewNodeId.hpp
│   │       │   │   ├── RenderingBackendType.cpp
│   │       │   │   ├── RenderingBackendType.hpp
│   │       │   │   ├── ViewManagerContext.cpp
│   │       │   │   ├── ViewManagerContext.hpp
│   │       │   │   ├── ViewNode.cpp
│   │       │   │   ├── ViewNode.hpp
│   │       │   │   ├── ViewNodeAccessibility.cpp
│   │       │   │   ├── ViewNodeAccessibility.hpp
│   │       │   │   ├── ViewNodeAccessibilityState.cpp
│   │       │   │   ├── ViewNodeAccessibilityState.hpp
│   │       │   │   ├── ViewNodeAssetHandler.cpp
│   │       │   │   ├── ViewNodeAssetHandler.hpp
│   │       │   │   ├── ViewNodeChildrenIndexer.cpp
│   │       │   │   ├── ViewNodeChildrenIndexer.hpp
│   │       │   │   ├── ViewNodePath.cpp
│   │       │   │   ├── ViewNodePath.hpp
│   │       │   │   ├── ViewNodeScrollState.cpp
│   │       │   │   ├── ViewNodeScrollState.hpp
│   │       │   │   ├── ViewNodeTree.cpp
│   │       │   │   ├── ViewNodeTree.hpp
│   │       │   │   ├── ViewNodeTreeManager.cpp
│   │       │   │   ├── ViewNodeTreeManager.hpp
│   │       │   │   ├── ViewNodeViewStats.cpp
│   │       │   │   ├── ViewNodeViewStats.hpp
│   │       │   │   ├── ViewNodesFrameObserver.cpp
│   │       │   │   ├── ViewNodesFrameObserver.hpp
│   │       │   │   ├── ViewNodesVisibilityObserver.cpp
│   │       │   │   └── ViewNodesVisibilityObserver.hpp
│   │       │   ├── Debugger/
│   │       │   │   ├── BoostAsioUtils.cpp
│   │       │   │   ├── BoostAsioUtils.hpp
│   │       │   │   ├── DaemonClient.cpp
│   │       │   │   ├── DaemonClient.hpp
│   │       │   │   ├── DebuggerService.cpp
│   │       │   │   ├── DebuggerService.hpp
│   │       │   │   ├── IDaemonClient.hpp
│   │       │   │   ├── IDebuggerServiceListener.hpp
│   │       │   │   ├── ITCPConnection.hpp
│   │       │   │   ├── ITCPServer.hpp
│   │       │   │   ├── TCPClient.cpp
│   │       │   │   ├── TCPClient.hpp
│   │       │   │   ├── TCPConnectionImpl.cpp
│   │       │   │   ├── TCPConnectionImpl.hpp
│   │       │   │   ├── TCPServer.cpp
│   │       │   │   ├── TCPServer.hpp
│   │       │   │   ├── TCPServerConnectionImpl.cpp
│   │       │   │   ├── TCPServerConnectionImpl.hpp
│   │       │   │   ├── TCPServerImpl.cpp
│   │       │   │   └── TCPServerImpl.hpp
│   │       │   ├── ErrorCodes.hpp
│   │       │   ├── IRuntimeListener.hpp
│   │       │   ├── Interfaces/
│   │       │   │   ├── IDiskCache.hpp
│   │       │   │   ├── IJavaScriptBridge.hpp
│   │       │   │   ├── IJavaScriptContext.cpp
│   │       │   │   ├── IJavaScriptContext.hpp
│   │       │   │   ├── IRemoteDownloader.hpp
│   │       │   │   ├── IResourceLoader.hpp
│   │       │   │   ├── ITweakValueProvider.hpp
│   │       │   │   ├── IViewManager.hpp
│   │       │   │   └── IViewTransaction.hpp
│   │       │   ├── JavaScript/
│   │       │   │   ├── JSFunctionExportMode.hpp
│   │       │   │   ├── JSFunctionWithCallable.cpp
│   │       │   │   ├── JSFunctionWithCallable.hpp
│   │       │   │   ├── JSFunctionWithMethod.cpp
│   │       │   │   ├── JSFunctionWithMethod.hpp
│   │       │   │   ├── JSFunctionWithValueFunction.cpp
│   │       │   │   ├── JSFunctionWithValueFunction.hpp
│   │       │   │   ├── JSPromise.cpp
│   │       │   │   ├── JSPromise.hpp
│   │       │   │   ├── JSPropertyNameIndex.cpp
│   │       │   │   ├── JSPropertyNameIndex.hpp
│   │       │   │   ├── JSValueRefHolder.cpp
│   │       │   │   ├── JSValueRefHolder.hpp
│   │       │   │   ├── JavaScriptANRDetector.cpp
│   │       │   │   ├── JavaScriptANRDetector.hpp
│   │       │   │   ├── JavaScriptAssetLoadObserver.cpp
│   │       │   │   ├── JavaScriptAssetLoadObserver.hpp
│   │       │   │   ├── JavaScriptBridgedObjectLeakTracker.cpp
│   │       │   │   ├── JavaScriptBridgedObjectLeakTracker.hpp
│   │       │   │   ├── JavaScriptCapturedStacktrace.cpp
│   │       │   │   ├── JavaScriptCapturedStacktrace.hpp
│   │       │   │   ├── JavaScriptCircularRefChecker.hpp
│   │       │   │   ├── JavaScriptComponentContextHandler.cpp
│   │       │   │   ├── JavaScriptComponentContextHandler.hpp
│   │       │   │   ├── JavaScriptContextEntryPoint.cpp
│   │       │   │   ├── JavaScriptContextEntryPoint.hpp
│   │       │   │   ├── JavaScriptErrorStackTrace.cpp
│   │       │   │   ├── JavaScriptErrorStackTrace.hpp
│   │       │   │   ├── JavaScriptFunctionCallContext.cpp
│   │       │   │   ├── JavaScriptFunctionCallContext.hpp
│   │       │   │   ├── JavaScriptHeapDumpBuilder.cpp
│   │       │   │   ├── JavaScriptHeapDumpBuilder.hpp
│   │       │   │   ├── JavaScriptLong.cpp
│   │       │   │   ├── JavaScriptLong.hpp
│   │       │   │   ├── JavaScriptModuleContainer.cpp
│   │       │   │   ├── JavaScriptModuleContainer.hpp
│   │       │   │   ├── JavaScriptRuntime.cpp
│   │       │   │   ├── JavaScriptRuntime.hpp
│   │       │   │   ├── JavaScriptRuntimeDeserializers.cpp
│   │       │   │   ├── JavaScriptRuntimeDeserializers.hpp
│   │       │   │   ├── JavaScriptStringCache.cpp
│   │       │   │   ├── JavaScriptStringCache.hpp
│   │       │   │   ├── JavaScriptTaskScheduler.cpp
│   │       │   │   ├── JavaScriptTaskScheduler.hpp
│   │       │   │   ├── JavaScriptTypes.cpp
│   │       │   │   ├── JavaScriptTypes.hpp
│   │       │   │   ├── JavaScriptUtils.cpp
│   │       │   │   ├── JavaScriptUtils.hpp
│   │       │   │   ├── JavaScriptValueDelegate.cpp
│   │       │   │   ├── JavaScriptValueDelegate.hpp
│   │       │   │   ├── JavaScriptValueMarshaller.cpp
│   │       │   │   ├── JavaScriptValueMarshaller.hpp
│   │       │   │   ├── JavaScriptWorker.cpp
│   │       │   │   ├── JavaScriptWorker.hpp
│   │       │   │   ├── Modules/
│   │       │   │   │   ├── AttributedTextNativeModuleFactory.cpp
│   │       │   │   │   ├── AttributedTextNativeModuleFactory.hpp
│   │       │   │   │   ├── FileSystemFactory.cpp
│   │       │   │   │   ├── FileSystemFactory.hpp
│   │       │   │   │   ├── JavaScriptModuleFactory.hpp
│   │       │   │   │   ├── JavaScriptModuleFactoryBridge.cpp
│   │       │   │   │   ├── JavaScriptModuleFactoryBridge.hpp
│   │       │   │   │   ├── PersistentStore.cpp
│   │       │   │   │   ├── PersistentStore.hpp
│   │       │   │   │   ├── PersistentStoreModuleFactory.cpp
│   │       │   │   │   ├── PersistentStoreModuleFactory.hpp
│   │       │   │   │   ├── ProtobufArena.cpp
│   │       │   │   │   ├── ProtobufArena.hpp
│   │       │   │   │   ├── ProtobufMessageFactory.cpp
│   │       │   │   │   ├── ProtobufMessageFactory.hpp
│   │       │   │   │   ├── ProtobufModule.cpp
│   │       │   │   │   ├── ProtobufModule.hpp
│   │       │   │   │   ├── ProtobufModuleFactory.cpp
│   │       │   │   │   ├── ProtobufModuleFactory.hpp
│   │       │   │   │   ├── TCPSocketModuleFactory.cpp
│   │       │   │   │   ├── TCPSocketModuleFactory.hpp
│   │       │   │   │   ├── UnicodeModuleFactory.cpp
│   │       │   │   │   └── UnicodeModuleFactory.hpp
│   │       │   │   ├── ValueFunctionWithJSValue.cpp
│   │       │   │   ├── ValueFunctionWithJSValue.hpp
│   │       │   │   ├── WrappedJSValueRef.cpp
│   │       │   │   └── WrappedJSValueRef.hpp
│   │       │   ├── Metrics/
│   │       │   │   ├── Metrics.cpp
│   │       │   │   └── Metrics.hpp
│   │       │   ├── Rendering/
│   │       │   │   ├── AnimationOptions.cpp
│   │       │   │   ├── AnimationOptions.hpp
│   │       │   │   ├── RenderRequest.cpp
│   │       │   │   ├── RenderRequest.hpp
│   │       │   │   ├── RenderRequestEntries.cpp
│   │       │   │   ├── RenderRequestEntries.hpp
│   │       │   │   ├── ViewNodeRenderer.cpp
│   │       │   │   └── ViewNodeR

================================================
FILE CONTENTS
================================================

================================================
FILE: .bazelignore
================================================
.git
.github
compiler/compiler/Compiler/.build
npm_modules
node_modules
bzl/valdi/npm/node_modules
compiler/companion/node_modules
compiler/companion/remotedebug-ios-webkit-adapter/node_modules

# Ignore bazel output and symlink directory. Required by bazel-diff.
bazel-bin
bazel-client
bazel-out
bazel-testlogs


================================================
FILE: .bazelrc
================================================
try-import %workspace%/.bazelrc.internal

# No bzlmod yet
common --noenable_bzlmod
common --enable_workspace

common --bes_instance_name=client
common --enable_platform_specific_config

# Disable workers for repo fetching to prevent OOM
common --experimental_worker_for_repo_fetching=off

# android configuration
# Expose AndroidResourceInfo provider to Kotlin rules
common --experimental_google_legacy_api=true
common --experimental_enable_android_migration_apis=true
common --incompatible_java_common_parameters=false

# Flags for compilation
common --define enable_web=true

build --tool_java_language_version=11
build --java_language_version=11

## Disable sandboxing for macs, both laptops and in CI; the performance hit is much too high.
build:macos --spawn_strategy=local
build:linux --sandbox_writable_path=/var/tmp

# common cc configuration
build --cxxopt=-std=c++20
build --cxxopt=-Wno-ambiguous-reversed-operator
build --cxxopt=-Wno-gcc-compat
build --cxxopt=-Wno-nullability-extension
build --cxxopt=-D_LIBCPP_ENABLE_CXX20_REMOVED_TYPE_TRAITS
build --host_cxxopt=-std=c++20
build --host_cxxopt=-Wno-nullability-extension

## we need to disable this due to a bug in bazel
## see https://github.com/bazelbuild/bazel/issues/12381
build --incompatible_use_specific_tool_files=false
build --incompatible_enable_cc_toolchain_resolution

# iOS and Apple cc changes and hacks
## For Objective-C source files
build --per_file_copt=.*\.mm\$@-std=c++20
build --host_per_file_copt=.*\.mm\$@-std=c++20
build --ios_minimum_os=12.0

## TODO: (dchapp) this is currently needed otherwise -O0 and -DDEBUG=1 get passed to compilations of .mm/.m for production flavor builds
build --experimental_objc_fastbuild_options=""
## HACK inject this in the default toolchain which is only used on macos until we switch to bazel_toolchains
build:macos --copt=-fvisibility=hidden

# java configuration
## Disable some java checks for now, djinni generates code that errors out
build --javacopt=-XepDisableAllChecks
build --java_runtime_version=remotejdk_11
build --tool_java_runtime_version=remotejdk_17

build --flag_alias=snap_flavor=@snap_platforms//flavors:snap_flavor
build --snap_flavor=client_development

build --android_crosstool_top=@androidndk//:toolchain
build --define=android_dexmerger_tool=d8_dexmerger
build --define=android_incremental_dexing_tool=d8_dexbuilder
build --define=android_standalone_dexing_tool=d8_compat_dx
build --incremental_dexing

# Disable 3rd party libs warnings
build --per_file_copt=external/com_github_grpc_grpc/.*\$@-Wno-everything
build --per_file_copt=external/snap_protobuf/.*\$@-Wno-everything
build --per_file_copt=external/boringssl/.*\$@-Wno-everything
build --per_file_copt=external/com_github_google_flatbuffers/.*\$@-Wno-everything

# Enable persistent worker for Valdi compilation
build --strategy=ValdiCompile=worker

## Disable sandboxing for macs, both laptops and in CI; the performance hit is much too high.
build:macos --spawn_strategy=local
build:linux --sandbox_writable_path=/var/tmp

# Disable disk cache to save disk space
# https://docs.google.com/document/d/1N8W_M83n9jhMi7pgUhXuEuxypb3dmlHBu_CG_eXipXI/edit?usp=sharing
build --disk_cache=""

# common build configuration
build --experimental_generate_json_trace_profile
# enable grpc log
build --remote_grpc_log=/tmp/snap_client_grpc.log
build --experimental_reuse_sandbox_directories

# Default JS engine
build --flag_alias=valdi_js_engine=@valdi//bzl/valdi:js_engine
build --valdi_js_engine=hermes

# Valdi Open Source Flags
build --define=open_source_build=true

common --@aspect_rules_ts//ts:skipLibCheck=always


================================================
FILE: .bazelversion
================================================
7.2.1

================================================
FILE: .cursorrules
================================================
# Valdi Open Source - Cursor Rules

## ⚠️ Open Source Project

This is an open source project. Never commit secrets, API keys, or proprietary information.

## 🚨 CRITICAL: This is NOT React!

Valdi uses TSX/JSX syntax but is **fundamentally different from React**. 

**Common AI mistakes:**
- ❌ Suggesting `useState`, `useEffect`, `useContext` (don't exist!)
- ❌ Functional components (don't exist!)
- ❌ `this.props` (should be `this.viewModel`)
- ❌ `markNeedsRender()`, `onMount()`, `onUpdate()` (wrong names/don't exist!)

**Correct Valdi:**
- ✅ `class MyComponent extends StatefulComponent`
- ✅ `state = {}` + `this.setState()`
- ✅ `this.viewModel` for props
- ✅ `onCreate()`, `onViewModelUpdate()`, `onDestroy()` lifecycle

## 📁 Context-Specific Rules

Cursor automatically loads additional rules based on where you're working:

| Working In | See |
|-----------|-----|
| TypeScript/TSX components | `.cursor/rules/typescript-tsx.md` |
| Swift compiler | `.cursor/rules/compiler.md` |
| C++ runtime | `.cursor/rules/cpp-runtime.md` |
| Android (Kotlin) | `.cursor/rules/android.md` |
| iOS (Objective-C) | `.cursor/rules/ios.md` |
| Bazel files | `.cursor/rules/bazel.md` |
| Tests | `.cursor/rules/testing.md` |

**→ Check `.cursor/rules/README.md` for the full list**

## Quick Commands

```bash
bazel build //...          # Build everything
bazel test //...           # Run all tests
valdi install ios          # Build & install iOS app
valdi hotreload            # Start hot reload
```

## More Information

- **Comprehensive guide**: `/AGENTS.md` (621 lines)
- **AI tooling**: `/docs/docs/ai-tooling.md`
- **Support**: `/SUPPORT.md`
- **Discord**: https://discord.gg/uJyNEeYX2U


================================================
FILE: .editorconfig
================================================
root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

[*.{ts,tsx,js,jsx}]
indent_style = space
indent_size = 2

[*.{cpp,hpp,h,cc}]
indent_style = space
indent_size = 4

[*.{swift,kt,java}]
indent_style = space
indent_size = 4

[*.{yml,yaml,json}]
indent_style = space
indent_size = 2

[*.{bzl,bazel,BUILD}]
indent_style = space
indent_size = 4

[*.md]
trim_trailing_whitespace = false

[*.{mm,m}]
indent_style = space
indent_size = 4

[Makefile]
indent_style = tab


================================================
FILE: .gitattributes
================================================
third-party/** linguist-generated=true

# Git LFS for open source
bin/compiler/** filter=lfs diff=lfs merge=lfs -text
bin/clientsql/** filter=lfs diff=lfs merge=lfs -text
bin/compiler_companion/** filter=lfs diff=lfs merge=lfs -text
bin/valdi_standalone filter=lfs diff=lfs merge=lfs -text
bin/pngquant/** filter=lfs diff=lfs merge=lfs -text
third-party/skia/libs/** filter=lfs diff=lfs merge=lfs -text
third-party/jscore/libs/** filter=lfs diff=lfs merge=lfs -text
third-party/v8/libs/** filter=lfs diff=lfs merge=lfs -text
third-party/resvg/resvg_libs/libs/** filter=lfs diff=lfs merge=lfs -text

# Ensure incompatible files are not tracked for git-lfs
third-party/skia/libs/.gitattributes !filter !diff !merge text


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''

---

**Describe the bug**
A clear and concise description of what the bug is.

**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error

**Expected behavior**
A clear and concise description of what you expected to happen.

**Screenshots**
If applicable, add screenshots to help explain your problem.

**Development platform (please complete the following information):**
 - OS: [e.g. iOS]
 - Valdi version [e.g. beta-0.0.1, main]

**Target platform (please complete the following information):**
 - Device: [e.g. iPhone6]
 - OS: [e.g. iOS8.1]
 - Version [e.g. 22]

**Additional context**
Add any other context about the problem here.

================================================
FILE: .github/ISSUE_TEMPLATE/documentation.md
================================================
---
name: Documentation Improvement
about: Suggest improvements to documentation
title: '[DOCS] '
labels: documentation
assignees: ''

---

**What documentation needs improvement?**
<!-- Specify the file, section, or topic that needs improvement -->

**What's unclear or missing?**
<!-- Describe what's confusing, incomplete, or missing -->

**Suggested changes:**
<!-- If you have specific suggestions for how to improve the documentation, please share them here -->

**Additional context:**
<!-- Add any other context, screenshots, or examples that would help -->


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: enhancement
assignees: ''

---

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.

**Additional context**
Add any other context or screenshots about the feature request here.

================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
## Description
<!-- Provide a clear and concise description of your changes -->

## Type of Change
- [ ] Bug fix (non-breaking change that fixes an issue)
- [ ] Documentation improvement
- [ ] Performance optimization
- [ ] Test improvement
- [ ] Other (please describe)

## Testing
- [ ] Tests pass locally (`bazel test //...`)
- [ ] Added/updated tests for changes (if applicable)
- [ ] Tested on multiple platforms (iOS/Android/Web/macOS as applicable)
- [ ] Manual testing performed (describe below)

### Testing Details
<!-- Describe the testing you performed -->

## Checklist
- [ ] Code follows project style guidelines
- [ ] Documentation updated (if needed)
- [ ] No breaking changes (or documented in description)
- [ ] Commit messages follow [conventional format](../CONTRIBUTING.md#commit-messages)
- [ ] No secrets, API keys, or internal URLs included

## Related Issues
<!-- Link related issues using: Closes #(issue), Fixes #(issue), Relates to #(issue) -->

## Additional Context
<!-- Add any other context, screenshots, or information that would help reviewers -->


================================================
FILE: .github/workflows/README.md
================================================
# GitHub Workflows

## Testing workflows locally

You can run GitHub Actions locally in two ways.

### 1. Run the script directly (recommended when a job is script-based)

Many workflows just run a script. Run that script on your machine with the same env (Node, Java, Bazel, etc.):

| Workflow / job | Local command (from repo root) |
|----------------|----------------------------------|
| **Release Test** | `./tools/ci/release_test.sh` |
| **Bazel smoke test** | `./tools/ci/bootstrap_app.sh` (set `OPEN_SOURCE_DIR=$(pwd)`, `PROJECT_ROOT=/tmp/valdi_app`) |

No Docker required; same as CI except for runner OS (e.g. macOS for iOS build).

### 2. Use [act](https://github.com/nektos/act) to run the workflow in Docker

[act](https://github.com/nektos/act) runs GitHub Actions locally using Docker images for the runner environment.

**Install (macOS):** `brew install act`

**List workflows and jobs:**
```bash
act -l
```

**Run a specific workflow (e.g. Release Test):**
```bash
act release-test -j release-test
```

**Run a specific workflow by event (e.g. push):**
```bash
act push -W .github/workflows/release-test.yml -j release-test
```

**Limitations:**

- **macOS runner**: `act` runs jobs in Linux containers by default. The Release Test and Bazel smoke jobs use `runs-on: macos-latest` (for Xcode / iOS build). To run those as in CI you either:
  - Run the script directly on your Mac (see above), or
  - Use `act` with a macOS image if your act version supports it (experimental).
- **Secrets**: Use `act -s NPM_TOKEN=...` (or a `.secrets` file) for workflows that need secrets; they are not pulled from GitHub.
- **Services / caches**: Some actions (e.g. `actions/cache`, `actions/checkout`) work in act; others may differ from GitHub.

For the **Release Test** workflow, running `./tools/ci/release_test.sh` on a Mac is the closest to CI and usually the easiest.

---

## Release Test (Public GitHub)

The `release-test.yml` workflow verifies that the **bleeding edge (main branch)** of the public GitHub Valdi and Valdi_Widgets repos can be bootstrapped, built, and tested. Run it before cutting a release to answer: "if we cut a release now, will things fail?"

### What it does

1. Builds the Valdi CLI from source in this repo
2. Bootstraps a new app **without** a local Valdi path (uses `--valdiVersion=main --valdiWidgetsVersion=main`, i.e. bleeding edge from `https://github.com/Snapchat/Valdi` and `Valdi_Widgets`)
3. Builds the iOS app and runs the module test

### When it runs

- **Manual**: Actions → "Release Test (Public GitHub)" → Run workflow
- **On release**: When a GitHub release is published
- **On version tags**: Push `v*` or `beta-*` (e.g. `v1.0.1`, `beta-0.0.2`)
- **On PR**: When bootstrap/release-test files change (`npm_modules/cli` bootstrap, `tools/ci/release_test.sh`, or this workflow)

### Running locally

From the repo root (open_source):

```bash
./tools/ci/release_test.sh
```

Requires Node, Java 17, Bazel (or Bazelisk), and watchman. On macOS, the script builds the iOS app; set `SKIP_BUILD=1` to only run bootstrap + unit test. The script uses bleeding edge (main) by default; the workflow does the same.

---

## NPM Package Publishing

The `publish-npm.yml` workflow automatically publishes npm packages to the public npm registry when their `package.json` files are updated.

### Packages

This workflow handles publishing for:
- **@snap/valdi** (`npm_modules/cli/`) - CLI tools for Valdi development (available as `valdi` command)
- **@snap/eslint-plugin-valdi** (`npm_modules/eslint-plugin-valdi/`) - ESLint rules for Valdi

### Trigger Conditions

The workflow runs when:
1. Changes are pushed to `main` or `master` branch
2. The changes include modifications to `npm_modules/*/package.json`
3. Manual trigger via workflow_dispatch

### How It Works

1. **Detect Changes**: Determines which package.json files were modified
2. **Test CLI (before publish only)**: For `@snap/valdi`, two jobs run first. Both must succeed before publish:
   - **test-cli** (Ubuntu): install, build, smoke tests (`valdi --version`, `--help`, `bootstrap --help`, `doctor --help`).
   - **test-cli-build** (macOS): full release test — bootstrap an app from bleeding edge (main), build the iOS app, run the module test (`./tools/ci/release_test.sh`). Ensures the CLI can bootstrap and build before we publish.
3. **Build & Publish**: For each changed package:
   - Checks out the code
   - Sets up Node.js 20
   - Installs dependencies with `npm ci`
   - Builds the package with `npm run build`
   - Publishes to npm registry with `npm publish --access public`

### Setup Requirements

#### NPM Token

You must configure an `NPM_TOKEN` secret in your GitHub repository:

1. **Create an NPM Access Token**:
   - Log in to [npmjs.com](https://www.npmjs.com/)
   - Go to Account Settings → Access Tokens
   - Click "Generate New Token" → "Classic Token"
   - Select "Automation" type
   - Copy the generated token

2. **Add Secret to GitHub**:
   - Go to your GitHub repository
   - Navigate to Settings → Secrets and variables → Actions
   - Click "New repository secret"
   - Name: `NPM_TOKEN`
   - Value: Paste your npm access token
   - Click "Add secret"

#### Package Publishing Permissions

Ensure the npm account associated with the token has:
- Publishing rights for the `@snap` organization (for both `@snap/valdi` and `@snap/eslint-plugin-valdi`)

### Usage

To publish a new version of a package:

1. Update the version in the package's `package.json`:
   ```bash
   cd npm_modules/cli  # or eslint-plugin-valdi
   npm version patch   # or minor, major
   ```

2. Commit and push the changes:
   ```bash
   git add package.json
   git commit -m "Bump @snap/valdi version to X.Y.Z"
   git push origin main
   ```

3. The workflow will automatically:
   - Detect the package.json change
   - Build the package
   - Publish it to npm

### Manual Trigger

You can also manually trigger the workflow:
1. Go to Actions tab in GitHub
2. Select "Publish NPM Packages" workflow
3. Click "Run workflow"
4. Select the branch and click "Run workflow"

Note: Manual triggers will attempt to publish all packages, so ensure versions have been updated to avoid npm publish errors.

### Troubleshooting

- **401 Unauthorized**: Check that the `NPM_TOKEN` secret is correctly configured
- **403 Forbidden**: Ensure the npm account has publishing permissions for the package
- **Version already exists**: Update the version number in package.json before publishing
- **Build failures**: Check that the package builds successfully locally before pushing

---

## PR Size Labeler

The `pr-size-labeler.yml` workflow labels pull requests by change size (XS, S, M, L, XL) and optionally posts a size comment.

### Required repo labels

For the workflow to apply labels, create these labels in the repo (Settings → Labels):

- `size/XS` (e.g. &lt;10 lines)
- `size/S` (e.g. &lt;50)
- `size/M` (e.g. &lt;250)
- `size/L` (e.g. &lt;1000)
- `size/XL` (1000+)

If the labels do not exist, the workflow will log a message and continue (it no longer fails with 422).

---

## Bazel Config & CI Tests

The `bzl-changes.yml` workflow runs on pushes to `main` and on PRs when Bazel/config/CI files change. It has two main jobs:

- **Valdi Smoke Tests** (macOS): checkout, install CLI, run `./tools/ci/bootstrap_app.sh`.
- **Validate Bazel Build** (Ubuntu): checkout, Android SDK + Bazel setup, install Valdi CLI, then `./tools/ci/test_exported_lib.sh` and `./tools/ci/bazel_build.sh`.

### Troubleshooting Validate Bazel Build failures

- **CLI install step**: The job runs `npm run cli:install` in `npm_modules/cli`, which runs `npm ci && npm link`. `npm ci` requires a committed `package-lock.json` in that directory. If the lock file is missing, the step fails; consider committing a lock file or having the workflow use `npm install` for that job.
- **Test exported library**: `test_exported_lib.sh` runs `valdi export android ...` for the helloworld app (and on macOS only `valdi export ios ...`, then verifies the XCFramework layout). Failures can be due to Bazel/Android SDK/NDK setup or the export target not building.
- **Build core targets**: `bazel_build.sh` runs `build_core_targets.sh`, `run_tests.sh`, `install_cli.sh`, and `bootstrap_app.sh`. It also switches to Java 8 on Linux; ensure the runner’s Java/SDK setup matches what the script expects.

Check the failed run’s logs in the Actions tab to see which step failed and the exact error.

**"No space left on device"**: The Ubuntu runner has limited disk. The workflow runs a **Free disk space** step right after checkout (removing .NET, GHC, CodeQL, pre-installed Android, Docker images, apt cache) so there is room for the Android SDK, NDK, and Bazel build. If you still hit out-of-disk errors, consider reducing what gets built or cached, or splitting the job.



================================================
FILE: .github/workflows/bzl-changes.yml
================================================
name: Bazel Config & CI Tools Tests

on:
  pull_request:
    paths:
      - '**/*.bzl'
      - '**/BUILD.bazel'
      - '**/BUILD'
      - 'MODULE.bazel'
      - 'WORKSPACE'
      - 'tools/ci/**'
      - 'npm_modules/cli/test/**'
      - '.github/workflows/bzl-changes.yml'
  push:
    branches:
      - main
    paths:
      - '**/*.bzl'
      - '**/BUILD.bazel'
      - '**/BUILD'
      - 'MODULE.bazel'
      - 'WORKSPACE'
      - 'tools/ci/**'
      - 'npm_modules/cli/test/**'
      - '.github/workflows/bzl-changes.yml'

jobs:
  smoke-test:
    name: Valdi Smoke Tests
    runs-on: macos-latest
    
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          lfs: true
      
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '22'
      
      - name: Setup Java 17
        uses: actions/setup-java@v4
        with:
          distribution: 'zulu'
          java-version: '17'
      
      - name: Install Bazel and watchman
        run: |
          brew install bazelisk watchman
          bazel --version
          watchman --version
      
      - name: Install Valdi CLI
        run: |
          cd npm_modules/cli
          npm install
          npm run cli:install
      
      - name: Run smoke tests
        run: ./tools/ci/bootstrap_app.sh
        env:
          OPEN_SOURCE_DIR: ${{ github.workspace }}
          PROJECT_ROOT: /tmp/valdi_app
      
      - name: Upload test results
        if: failure()
        uses: actions/upload-artifact@v4
        with:
          name: test-results-macos
          path: |
            /tmp/valdi_app/*.log
            /tmp/valdi_app/config.yaml
            /tmp/valdi_app/WORKSPACE
            /tmp/valdi_app/.bazelrc
          retention-days: 5

  # Note: Linux CLI distribution tests moved to dedicated workflow:
  # .github/workflows/test-cli-linux.yml
  # This avoids duplication and provides better test organization.

  validate-bazel:
    name: Validate Bazel Build
    runs-on: ubuntu-latest
    
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          lfs: true
      
      - name: Free disk space
        run: |
          # Free space before heavy installs to avoid "No space left on device" during build
          sudo rm -rf /usr/share/dotnet
          sudo rm -rf /opt/ghc
          sudo rm -rf /opt/hostedtoolcache/CodeQL
          sudo rm -rf /usr/local/share/boost
          sudo rm -rf /opt/pip
          sudo apt-get clean
          df -h
      
      - name: Mount Bazel cache
        uses: actions/cache@v4
        with:
          path: |
            ~/.cache/bazel
            ~/.cache/bazelisk
          # Include run_id to make key unique (enables incremental caching)
          # restore-keys will find the most recent cache with matching config
          key: bazel-${{ runner.os }}-${{ hashFiles('WORKSPACE', 'MODULE.bazel', '**/*.bzl') }}-${{ github.run_id }}
          restore-keys: |
            bazel-${{ runner.os }}-${{ hashFiles('WORKSPACE', 'MODULE.bazel', '**/*.bzl') }}-
            bazel-${{ runner.os }}-
      
      - name: Setup Java 17
        uses: actions/setup-java@v4
        with:
          distribution: 'zulu'
          java-version: '17'
      
      - name: Setup Android SDK
        run: |
          # Install to a writable path (android-actions/setup-android@v3 uses /usr/local/lib/android which fails with EACCES on hosted runners)
          export ANDROID_HOME=$HOME/Android/Sdk
          mkdir -p "$ANDROID_HOME/cmdline-tools"
          curl -sS -o /tmp/cmdline-tools.zip "https://dl.google.com/android/repository/commandlinetools-linux-12266719_latest.zip"
          unzip -q -o /tmp/cmdline-tools.zip -d "$ANDROID_HOME/cmdline-tools"
          mv "$ANDROID_HOME/cmdline-tools/cmdline-tools" "$ANDROID_HOME/cmdline-tools/latest"
          rm /tmp/cmdline-tools.zip
          echo "ANDROID_HOME=$ANDROID_HOME" >> $GITHUB_ENV
          echo "ANDROID_SDK_ROOT=$ANDROID_HOME" >> $GITHUB_ENV
          echo "$ANDROID_HOME/cmdline-tools/latest/bin" >> $GITHUB_PATH
      
      - name: Install Android SDK components and set NDK path
        run: |
          # Install required SDK components
          yes | sdkmanager --licenses || true
          sdkmanager "platforms;android-36"
          sdkmanager "build-tools;34.0.0"
          sdkmanager "ndk;23.0.7599858"
          echo "ANDROID_NDK_HOME=$ANDROID_HOME/ndk/23.0.7599858" >> $GITHUB_ENV
      
      - name: Setup Bazel
        run: |
          wget https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64
          chmod +x bazelisk-linux-amd64
          sudo mv bazelisk-linux-amd64 /usr/local/bin/bazel
          sudo ln -s /usr/local/bin/bazel /usr/local/bin/bzl
          bazel --version
      
      - name: Configure Bazel cache
        run: |
          # Use same paths as actions/cache so build outputs are saved and restored between runs
          echo "build --disk_cache=$HOME/.cache/bazel/disk" >> .bazelrc.local
          echo "build --repository_cache=$HOME/.cache/bazel/repo" >> .bazelrc.local
          echo "Bazel cache configured (disk + repo); actions/cache will persist both"
      
      - name: Install system dependencies
        run: |
          sudo apt-get update -y
          # Core dependencies (matching valdi dev_setup for Linux)
          sudo apt-get install -y \
            libboost-all-dev \
            git-lfs \
            libfontconfig1-dev \
            zlib1g-dev
          
          # Install libtinfo5 for LLVM/Clang toolchain (Ubuntu 24.04+ doesn't have it in apt)
          if ! sudo apt-get install -y libtinfo5 2>/dev/null; then
            echo "libtinfo5 not available in apt, downloading from Ubuntu 22.04 archive..."
            wget http://archive.ubuntu.com/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
            sudo apt install -y ./libtinfo5_6.3-2ubuntu0.1_amd64.deb
            rm libtinfo5_6.3-2ubuntu0.1_amd64.deb
          fi
          
          # Initialize git-lfs
          git lfs install
      
      - name: Setup environment and install Valdi CLI
        run: |
          # Setup npm global directory
          mkdir -p ~/.npm-global/lib
          npm config set prefix '~/.npm-global'
          npm install -g npm@8
          export PATH=~/.npm-global/bin:$PATH
          
          # Install Valdi CLI
          cd npm_modules/cli
          npm run cli:install
          valdi --help
        
      - name: Test exported library
        run: ./tools/ci/test_exported_lib.sh
      
      - name: Build core targets and run tests
        run: ./tools/ci/bazel_build.sh
  
  comment-results:
    name: Comment Test Results
    needs: [smoke-test, validate-bazel]
    if: always()
    uses: ./.github/workflows/comment-test-results.yml
    permissions:
      pull-requests: write
    with:
      workflow_name: "Bazel & CI Test Results"
      success_message: "**All Bazel configuration and CI tests passed!** ✨\n\nThe build system and core tooling are working correctly."
      additional_info: "🚀 _Bazel remote cache is now enabled - future builds will be faster!_"


================================================
FILE: .github/workflows/comment-test-results.yml
================================================
name: Comment Test Results

on:
  workflow_call:
    inputs:
      workflow_name:
        description: 'Name of the calling workflow for the comment header'
        required: true
        type: string
      success_message:
        description: 'Message to show when all tests pass'
        required: false
        type: string
        default: '**All tests passed!** ✨'
      failure_message:
        description: 'Message to show when tests fail'
        required: false
        type: string
        default: '**Some tests failed.** Please check the workflow logs for details.'
      additional_info:
        description: 'Optional additional information to include in the comment'
        required: false
        type: string
        default: ''

permissions:
  pull-requests: write

jobs:
  comment:
    name: Post Results Comment
    runs-on: ubuntu-latest
    if: github.event_name == 'pull_request'
    
    steps:
      - name: Auto-detect jobs and comment on PR
        uses: actions/github-script@v7
        with:
          script: |
            // Fetch all jobs for this workflow run
            const jobs = await github.rest.actions.listJobsForWorkflowRun({
              owner: context.repo.owner,
              repo: context.repo.repo,
              run_id: context.runId,
            });
            
            // Build results table (exclude this comment job itself)
            let tableRows = [];
            let allPassed = true;
            
            for (const job of jobs.data.jobs) {
              // Skip the comment job itself
              if (job.name === 'Post Results Comment' || job.name === 'Comment Test Results') {
                continue;
              }
              
              const icon = job.conclusion === 'success' ? '✅' : '❌';
              tableRows.push(`| ${job.name} | ${icon} ${job.conclusion} |`);
              
              if (job.conclusion !== 'success') {
                allPassed = false;
              }
            }
            
            const emoji = allPassed ? '🎉' : '⚠️';
            const message = allPassed 
              ? `${{ inputs.success_message }}`
              : `${{ inputs.failure_message }}`;
            
            const additionalInfo = `${{ inputs.additional_info }}`;
            
            const body = `## ${emoji} ${{ inputs.workflow_name }}
            
            | Test Suite | Result |
            |------------|--------|
            ${tableRows.join('\n')}
            
            ${message}
            
            ${additionalInfo ? additionalInfo + '\n\n' : ''}
            <sub>Workflow: [${context.workflow}](${context.payload.repository.html_url}/actions/runs/${context.runId})</sub>`;
            
            github.rest.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: body
            });


================================================
FILE: .github/workflows/pr-size-labeler.yml
================================================
name: PR Size Labeler

on:
  pull_request:
    types: [opened, reopened, synchronize]

permissions:
  contents: read
  pull-requests: write

jobs:
  size-label:
    name: Label PR by Size
    runs-on: ubuntu-latest
    
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
      
      - name: Calculate PR size and apply label
        uses: actions/github-script@v7
        with:
          script: |
            if (context.eventName !== 'pull_request' || !context.payload.pull_request) {
              console.log('Skipping: not a pull_request event or no pull_request in payload');
              return;
            }
            const pr = context.payload.pull_request;
            const repo = { owner: context.repo.owner, repo: context.repo.repo };

            // GITHUB_TOKEN is read-only for PRs from forks; skip so the job still succeeds
            const isFork = pr.head.repo && (pr.head.repo.full_name !== `${repo.owner}/${repo.repo}`);
            if (isFork) {
              console.log('Skipping: PR is from a fork. Labels cannot be applied (token has read-only access).');
              return;
            }
            
            // Get ALL files changed in the PR (handles pagination automatically)
            const files = await github.paginate(github.rest.pulls.listFiles, {
              ...repo,
              pull_number: pr.number,
            });
            
            console.log(`Found ${files.length} changed files`);
            
            // Calculate total lines changed (additions + deletions)
            let totalChanges = 0;
            for (const file of files) {
              totalChanges += file.additions + file.deletions;
            }
            
            // Determine size category
            let sizeLabel;
            if (totalChanges < 10) {
              sizeLabel = 'size/XS';
            } else if (totalChanges < 50) {
              sizeLabel = 'size/S';
            } else if (totalChanges < 250) {
              sizeLabel = 'size/M';
            } else if (totalChanges < 1000) {
              sizeLabel = 'size/L';
            } else {
              sizeLabel = 'size/XL';
            }
            
            console.log(`Total changes: ${totalChanges} lines`);
            console.log(`Size label: ${sizeLabel}`);
            
            // Get existing labels
            const existingLabels = pr.labels.map(label => label.name);
            
            // Remove old size labels (ignore 404 — label may already be gone)
            const sizeLabels = ['size/XS', 'size/S', 'size/M', 'size/L', 'size/XL'];
            const labelsToRemove = existingLabels.filter(label => 
              sizeLabels.includes(label) && label !== sizeLabel
            );
            
            for (const label of labelsToRemove) {
              try {
                await github.rest.issues.removeLabel({
                  ...repo,
                  issue_number: pr.number,
                  name: label,
                });
                console.log(`Removed label: ${label}`);
              } catch (err) {
                if (err.status === 404) {
                  console.log(`Label ${label} not on PR (already removed or race), skipping`);
                } else {
                  throw err;
                }
              }
            }
            
            // Add new size label if not already present
            if (!existingLabels.includes(sizeLabel)) {
              try {
                await github.rest.issues.addLabels({
                  ...repo,
                  issue_number: pr.number,
                  labels: [sizeLabel],
                });
                console.log(`Added label: ${sizeLabel}`);
              } catch (err) {
                if (err.status === 403 || err.status === 404) {
                  console.log(`Could not add label (${err.status}): ${err.message}`);
                } else if (err.status === 422) {
                  console.log(`Could not add label (422): label "${sizeLabel}" may not exist in repo. Create labels size/XS, size/S, size/M, size/L, size/XL in repo settings.`);
                } else {
                  throw err;
                }
              }
            }
            
            // Add a comment with size breakdown (only on first run)
            if (context.payload.action === 'opened') {
              const filesList = files
                .sort((a, b) => (b.additions + b.deletions) - (a.additions + a.deletions))
                .slice(0, 10)
                .map(f => `- \`${f.filename}\`: +${f.additions} -${f.deletions}`)
                .join('\n');
              const moreFiles = files.length > 10 ? '\n\n_...and ' + (files.length - 10) + ' more files_' : '';
              const comment = '## 📊 PR Size: **' + sizeLabel + '**\n\n'
                + '**Total changes:** ' + totalChanges + ' lines (' + files.length + ' files)\n\n'
                + '**Top files changed:**\n' + filesList + moreFiles
                + '\n\n<sub>Size calculated as additions + deletions. Labels: XS (<10), S (<50), M (<250), L (<1000), XL (1000+)</sub>';
              
              try {
                await github.rest.issues.createComment({
                  ...repo,
                  issue_number: pr.number,
                  body: comment,
                });
              } catch (err) {
                if (err.status === 403 || err.status === 404 || err.status === 422) {
                  console.log(`Could not create comment (${err.status}): ${err.message}`);
                } else {
                  throw err;
                }
              }
            }


================================================
FILE: .github/workflows/publish-npm.yml
================================================
name: Publish NPM Packages

on:
  push:
    branches:
      - main
      - master
    paths:
      - 'npm_modules/*/package.json'
  workflow_dispatch:

jobs:
  detect-changes:
    runs-on: ubuntu-latest
    outputs:
      cli: ${{ steps.filter.outputs.cli }}
      eslint-plugin: ${{ steps.filter.outputs.eslint-plugin }}
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          fetch-depth: 2

      - name: Check which packages changed
        id: filter
        run: |
          if git diff HEAD^ HEAD --name-only | grep -q "npm_modules/cli/package.json"; then
            echo "cli=true" >> $GITHUB_OUTPUT
          else
            echo "cli=false" >> $GITHUB_OUTPUT
          fi
          
          if git diff HEAD^ HEAD --name-only | grep -q "npm_modules/eslint-plugin-valdi/package.json"; then
            echo "eslint-plugin=true" >> $GITHUB_OUTPUT
          else
            echo "eslint-plugin=false" >> $GITHUB_OUTPUT
          fi

  test-cli:
    name: Test CLI before publish
    needs: detect-changes
    if: needs.detect-changes.outputs.cli == 'true'
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: npm_modules/cli
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: Install dependencies
        run: npm ci

      - name: Build package
        run: npm run build

      - name: Smoke tests (CLI runs)
        run: |
          node dist/index.js --version
          node dist/index.js --help
          node dist/index.js bootstrap --help
          node dist/index.js doctor --help

  test-cli-build:
    name: Build bootstrapped app (release test)
    needs: detect-changes
    if: needs.detect-changes.outputs.cli == 'true'
    runs-on: macos-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          lfs: true

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '22'

      - name: Setup Java 17
        uses: actions/setup-java@v4
        with:
          distribution: 'zulu'
          java-version: '17'

      - name: Install Bazel and watchman
        run: |
          brew install bazelisk watchman
          bazel --version
          watchman --version

      - name: Run release test (bootstrap from main, build iOS, test)
        run: ./tools/ci/release_test.sh

  publish-cli:
    needs: [detect-changes, test-cli, test-cli-build]
    if: needs.detect-changes.outputs.cli == 'true'
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: npm_modules/cli
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          registry-url: 'https://registry.npmjs.org'

      - name: Install dependencies
        run: npm ci

      - name: Build package
        run: npm run build

      - name: Publish @snap/valdi to npm
        run: npm publish --access public
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

  publish-eslint-plugin:
    needs: detect-changes
    if: needs.detect-changes.outputs.eslint-plugin == 'true'
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: npm_modules/eslint-plugin-valdi
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          registry-url: 'https://registry.npmjs.org'

      - name: Install dependencies
        run: npm ci

      - name: Build package
        run: npm run build

      - name: Publish @snap/eslint-plugin-valdi to npm
        run: npm publish --access public
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}



================================================
FILE: .github/workflows/release-test.yml
================================================
# Run before cutting a release: bootstrap an app from bleeding edge (main) of
# the public GitHub Valdi/Valdi_Widgets, build and test. Ensures "if we cut a
# release now, things won't fail."
name: Release Test (Public GitHub)

on:
  workflow_dispatch:
  release:
    types: [published]
  push:
    tags:
      - 'v*'
      - 'beta-*'
  pull_request:
    paths:
      - 'npm_modules/cli/src/commands/bootstrap.ts'
      - 'npm_modules/cli/src/utils/githubUtils.ts'
      - 'tools/ci/release_test.sh'
      - '.github/workflows/release-test.yml'

jobs:
  release-test:
    name: Bootstrap from main (bleeding edge), build & test
    runs-on: macos-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          lfs: true

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '22'

      - name: Setup Java 17
        uses: actions/setup-java@v4
        with:
          distribution: 'zulu'
          java-version: '17'

      - name: Install Bazel and watchman
        run: |
          brew install bazelisk watchman
          bazel --version
          watchman --version

      - name: Run release test
        run: ./tools/ci/release_test.sh

      - name: Upload artifacts on failure
        if: failure()
        uses: actions/upload-artifact@v4
        with:
          name: release-test-failure
          path: |
            /tmp/valdi_release_test/WORKSPACE
            /tmp/valdi_release_test/.bazelrc
            /tmp/valdi_release_test/BUILD.bazel
          retention-days: 7


================================================
FILE: .github/workflows/test-cli-linux.yml
================================================
name: Test CLI on Linux Distributions

on:
  pull_request:
    paths:
      - 'npm_modules/cli/src/**'
      - 'npm_modules/cli/test/**'
      - 'npm_modules/cli/package.json'
      - '.github/workflows/test-cli-linux.yml'
  push:
    branches:
      - main
    paths:
      - 'npm_modules/cli/src/**'
      - 'npm_modules/cli/test/**'
      - 'npm_modules/cli/package.json'
      - '.github/workflows/test-cli-linux.yml'
  workflow_dispatch:

jobs:
  test-distribution-detection:
    name: Test on ${{ matrix.distro }}
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        distro:
          - ubuntu-22.04
          - ubuntu-24.04
          - fedora-39
          - fedora-40
        include:
          - distro: ubuntu-22.04
            container: ubuntu:22.04
            expected_type: debian
            expected_pm: apt
            expected_name_pattern: Ubuntu
          - distro: ubuntu-24.04
            container: ubuntu:24.04
            expected_type: debian
            expected_pm: apt
            expected_name_pattern: Ubuntu
          - distro: fedora-39
            container: fedora:39
            expected_type: redhat
            expected_pm: dnf
            expected_name_pattern: Fedora
          - distro: fedora-40
            container: fedora:40
            expected_type: redhat
            expected_pm: dnf
            expected_name_pattern: Fedora
    
    container:
      image: ${{ matrix.container }}
    
    steps:
      - name: Install git (required for checkout)
        run: |
          if command -v apt-get &> /dev/null; then
            apt-get update -qq && apt-get install -y -qq git curl ca-certificates
          elif command -v dnf &> /dev/null; then
            dnf install -y -q git curl ca-certificates
          elif command -v yum &> /dev/null; then
            yum install -y -q git curl ca-certificates
          fi
      
      - name: Checkout code
        uses: actions/checkout@v4
      
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '22'
      
      - name: Build Valdi CLI
        run: |
          cd npm_modules/cli
          npm ci
          npm run build
      
      - name: Test distribution detection
        run: |
          echo "============================================================"
          echo "Testing Linux Distribution Detection"
          echo "============================================================"
          echo ""
          echo "Expected:"
          echo "  Distribution type: ${{ matrix.expected_type }}"
          echo "  Package manager:   ${{ matrix.expected_pm }}"
          echo "  Distribution name: ${{ matrix.expected_name_pattern }}"
          echo ""
          
          node -e "
            const distro = require('./npm_modules/cli/dist/utils/linuxDistro');
            
            console.log('Testing distribution detection...');
            const detected = distro.detectLinuxDistro();
            
            console.log('');
            console.log('✓ Detected distribution:', detected.name);
            console.log('  Type:', detected.type);
            console.log('  Version:', detected.version || 'N/A');
            console.log('  Package Manager:', detected.packageManager.name);
            console.log('  Install Command:', detected.packageManager.installCommand);
            console.log('  Requires Sudo:', detected.packageManager.requiresSudo);
            
            // Verify detection matches expected
            const expectedType = '${{ matrix.expected_type }}';
            const expectedPm = '${{ matrix.expected_pm }}';
            const expectedNamePattern = '${{ matrix.expected_name_pattern }}';
            
            if (detected.type !== expectedType) {
              throw new Error(\`Expected type '\${expectedType}', got '\${detected.type}'\`);
            }
            console.log('✓ Distribution type correct');
            
            if (detected.packageManager.name !== expectedPm) {
              throw new Error(\`Expected package manager '\${expectedPm}', got '\${detected.packageManager.name}'\`);
            }
            console.log('✓ Package manager correct');
            
            if (!detected.name.includes(expectedNamePattern)) {
              throw new Error(\`Expected name to contain '\${expectedNamePattern}', got '\${detected.name}'\`);
            }
            console.log('✓ Distribution name correct');
            
            console.log('');
            console.log('All distribution detection checks passed! ✓');
          "
      
      - name: Test package mappings
        run: |
          echo ""
          echo "============================================================"
          echo "Testing Package Name Mappings"
          echo "============================================================"
          echo ""
          
          node -e "
            const distro = require('./npm_modules/cli/dist/utils/linuxDistro');
            const detected = distro.detectLinuxDistro();
            const mappings = distro.getCommonPackageMappings();
            
            console.log('Package mappings loaded:', Object.keys(mappings).length, 'packages');
            console.log('');
            
            // Test all common packages have correct mappings
            const testPackages = [
              'git',
              'git-lfs',
              'npm',
              'openjdk-17',
              'watchman',
              'adb',
              'fontconfig',
              'zlib'
            ];
            
            for (const pkg of testPackages) {
              const mapping = mappings[pkg];
              if (!mapping) {
                throw new Error(\`Missing mapping for \${pkg}\`);
              }
              
              const packageName = distro.getPackageName(mapping, detected);
              console.log(\`  \${pkg.padEnd(15)} -> \${packageName}\`);
              
              if (!packageName || packageName === '') {
                throw new Error(\`Empty package name for \${pkg}\`);
              }
            }
            
            console.log('');
            console.log('All package mappings validated! ✓');
          "
      
      - name: Test install command generation
        run: |
          echo ""
          echo "============================================================"
          echo "Testing Install Command Generation"
          echo "============================================================"
          echo ""
          
          node -e "
            const distro = require('./npm_modules/cli/dist/utils/linuxDistro');
            const detected = distro.detectLinuxDistro();
            const expectedPm = '${{ matrix.expected_pm }}';
            
            // Test single package
            const singleCmd = distro.buildInstallCommand(['git'], detected);
            console.log('Single package:');
            console.log('  ' + singleCmd);
            
            if (!singleCmd.includes(expectedPm)) {
              throw new Error(\`Command should use \${expectedPm}\`);
            }
            if (!singleCmd.includes('git')) {
              throw new Error('Command should include git package');
            }
            console.log('  ✓ Correct');
            console.log('');
            
            // Test multiple packages
            const multiCmd = distro.buildInstallCommand(['git', 'npm', 'watchman'], detected);
            console.log('Multiple packages:');
            console.log('  ' + multiCmd);
            
            if (!multiCmd.includes(expectedPm)) {
              throw new Error(\`Command should use \${expectedPm}\`);
            }
            if (!multiCmd.includes('git') || !multiCmd.includes('npm') || !multiCmd.includes('watchman')) {
              throw new Error('Command should include all packages');
            }
            console.log('  ✓ Correct');
            console.log('');
            
            // Test distribution-specific Java package
            const mappings = distro.getCommonPackageMappings();
            const javaPackage = distro.getPackageName(mappings['openjdk-17'], detected);
            const javaCmd = distro.buildInstallCommand([javaPackage], detected);
            console.log('Java package (distribution-specific):');
            console.log('  Package: ' + javaPackage);
            console.log('  Command: ' + javaCmd);
            console.log('  ✓ Correct');
            console.log('');
            
            console.log('All install command generation tests passed! ✓');
          "
      
      - name: Test git-lfs setup detection
        run: |
          echo ""
          echo "============================================================"
          echo "Testing Git-LFS Repository Setup Detection"
          echo "============================================================"
          echo ""
          
          node -e "
            const distro = require('./npm_modules/cli/dist/utils/linuxDistro');
            const detected = distro.detectLinuxDistro();
            
            const needsSetup = distro.needsGitLfsRepoSetup(detected);
            const setupCmd = distro.getGitLfsRepoSetupCommand(detected);
            
            console.log('Distribution:', detected.name);
            console.log('Needs git-lfs repo setup:', needsSetup);
            console.log('Setup command:', setupCmd || 'N/A (uses standard repos)');
            console.log('');
            
            // Verify logic is consistent
            if (needsSetup && !setupCmd) {
              throw new Error('If setup is needed, command should be provided');
            }
            
            // Verify Debian/Ubuntu needs packagecloud setup
            if (detected.type === 'debian' && !needsSetup) {
              throw new Error('Debian/Ubuntu should need git-lfs repo setup');
            }
            
            // Verify setup command format
            if (setupCmd) {
              if (!setupCmd.includes('packagecloud.io')) {
                throw new Error('Setup command should use packagecloud.io');
              }
              
              if (detected.type === 'debian' && !setupCmd.includes('script.deb.sh')) {
                throw new Error('Debian setup should use .deb script');
              }
              
              if (detected.type === 'redhat' && !setupCmd.includes('script.rpm.sh')) {
                throw new Error('RedHat setup should use .rpm script');
              }
            }
            
            console.log('Git-LFS setup detection validated! ✓');
          "
      
      - name: Install CLI and test valdi doctor
        run: |
          echo ""
          echo "============================================================"
          echo "Testing 'valdi doctor' Command"
          echo "============================================================"
          echo ""
          
          cd npm_modules/cli
          npm link
          
          # Run valdi doctor and capture output
          # Note: valdi doctor will report missing dependencies (expected in CI)
          # We're testing that it runs without crashing and generates correct commands
          echo "Running valdi doctor..."
          set +e  # Don't exit on error
          valdi doctor --verbose > /tmp/doctor_output.txt 2>&1
          DOCTOR_EXIT_CODE=$?
          set -e  # Re-enable exit on error
          
          # Show the output
          cat /tmp/doctor_output.txt
          
          # Verify doctor ran and generated distribution-specific commands
          echo ""
          echo "Verifying distribution-specific fix commands..."
          
          # Check that doctor output contains distribution-appropriate package manager
          if grep -q "sudo dnf install\|sudo yum install" /tmp/doctor_output.txt; then
            echo "✓ Contains dnf/yum commands (correct for Fedora/RHEL)"
          elif grep -q "sudo apt-get install\|sudo apt install" /tmp/doctor_output.txt; then
            echo "✓ Contains apt commands (correct for Debian/Ubuntu)"
          else
            echo "✗ No distribution-specific install commands found"
            exit 1
          fi
          
          echo ""
          echo "✓ valdi doctor executed successfully with distribution detection"
      
      - name: Test doctor fix commands
        run: |
          echo ""
          echo "============================================================"
          echo "Testing Doctor Fix Command Generation"
          echo "============================================================"
          echo ""
          
          node -e "
            const fs = require('fs');
            const distro = require('./npm_modules/cli/dist/utils/linuxDistro');
            const detected = distro.detectLinuxDistro();
            
            console.log('Distribution:', detected.name, '(' + detected.type + ')');
            console.log('');
            
            // The doctor command should be using our distribution detection
            const doctorCode = fs.readFileSync('./npm_modules/cli/dist/commands/doctor.js', 'utf8');
            
            // Verify the doctor has the required methods
            if (!doctorCode.includes('getJavaInstallCommand')) {
              throw new Error('Doctor command missing getJavaInstallCommand method');
            }
            if (!doctorCode.includes('getFixCommandForDependency')) {
              throw new Error('Doctor command missing getFixCommandForDependency method');
            }
            if (!doctorCode.includes('detectLinuxDistro')) {
              throw new Error('Doctor command not using distribution detection');
            }
            
            console.log('✓ Doctor command uses distribution detection');
            console.log('✓ Doctor command has fix command methods');
            console.log('');
            console.log('Doctor fix commands validated! ✓');
          "
      
      - name: Summary
        if: success()
        run: |
          echo ""
          echo "============================================================"
          echo "✓ ALL TESTS PASSED FOR ${{ matrix.distro }}"
          echo "============================================================"
          echo ""
          echo "Distribution detection:     ✓"
          echo "Package mappings:           ✓"
          echo "Install command generation: ✓"
          echo "Git-LFS setup detection:    ✓"
          echo "valdi doctor integration:   ✓"
          echo "Doctor fix commands:        ✓"
          echo ""

  test-unit-tests:
    name: Run Unit Tests
    runs-on: ubuntu-latest
    
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '22'
      
      - name: Install dependencies
        run: |
          cd npm_modules/cli
          npm ci
      
      - name: Build
        run: |
          cd npm_modules/cli
          npm run build
      
      - name: Run linuxDistro unit tests
        run: |
          cd npm_modules/cli
          # Run Jasmine tests for linuxDistro
          npx jasmine dist/utils/linuxDistro.spec.js
      
      - name: Verify no linter errors in modified files
        run: |
          cd npm_modules/cli
          # Only lint the files we actually modified for Linux compatibility
          npx eslint \
            src/utils/linuxDistro.ts \
            src/utils/linuxDistro.spec.ts \
            src/setup/linuxSetup.ts \
            src/commands/doctor.ts


================================================
FILE: .github/workflows/welcome.yml
================================================
name: Welcome

on:
  pull_request_target:
    types: [opened]
  issues:
    types: [opened]

jobs:
  welcome:
    runs-on: ubuntu-latest
    permissions:
      issues: write
      pull-requests: write
    steps:
      - uses: actions/first-interaction@v1
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}
          issue-message: |
            👋 Thanks for opening your first issue! 
            
            A maintainer will review your issue and respond as soon as possible. 
            
            In the meantime, please make sure you've provided all the necessary information in the issue template.
            
            If you have questions while waiting, feel free to join our [Discord community](https://discord.gg/uJyNEeYX2U).
          pr-message: |
            🎉 Thanks for your first contribution to Valdi!
            
            A maintainer will review your PR soon. Here are a few things to check while you wait:
            
            - ✅ All tests pass (`bazel test //...`)
            - ✅ Your changes follow our [coding standards](../CONTRIBUTING.md)
            - ✅ You've added tests for your changes (if applicable)
            - ✅ You've updated documentation (if needed)
            
            Join our [Discord community](https://discord.gg/uJyNEeYX2U) if you have questions!


================================================
FILE: .gitignore
================================================
*.DS_Store

/bazel-*

**/archive-url

scripts/valdi-swift-toolchain

# Binaries
scripts/mirroring/bin
.nlo-venv
**deploy_manifest.txt

================================================
FILE: .prettierrc.json
================================================
{
  "printWidth": 120,
  "singleQuote": true,
  "jsxSingleQuote": true,
  "arrowParens": "avoid",
  "trailingComma": "all"
}


================================================
FILE: AGENTS.md
================================================
# AGENTS.md - Guide for AI Coding Assistants

This document provides context and guidelines for AI coding assistants working with the Valdi codebase.

## Overview

Valdi is a cross-platform UI framework that compiles declarative TypeScript components to native views on iOS, Android, and macOS. Write your UI once, and it runs natively on multiple platforms without web views or JavaScript bridges.

Valdi has been used in production at Snap for 8 years and is now available as open source under the MIT license.

### How Valdi Works

The Valdi compiler takes TypeScript source files (using TSX/JSX syntax) and compiles them into `.valdimodule` files. These compiled modules are read by the Valdi runtime on each platform to render native views. **This is not TypeScript rendered in a WebView** - Valdi generates true native UI components.

## 🚨 AI Anti-Hallucination: This is NOT React!

**CRITICAL**: Valdi uses TSX/JSX syntax but **is fundamentally different from React**. The most common AI error is suggesting React patterns that do not exist in Valdi.

### ❌ FORBIDDEN React Patterns (Do NOT use these)

These React APIs **DO NOT EXIST** in Valdi and will cause compilation errors:

```typescript
// ❌ WRONG - useState does not exist in Valdi
const [count, setCount] = useState(0);

// ❌ WRONG - useEffect does not exist in Valdi  
useEffect(() => { ... }, []);

// ❌ WRONG - useContext does not exist in Valdi
const value = useContext(MyContext);

// ❌ WRONG - useMemo, useCallback, useRef do not exist
const memoized = useMemo(() => ..., []);
const callback = useCallback(() => ..., []);
const ref = useRef(null);

// ❌ WRONG - React.Component does not exist
class MyComponent extends React.Component { ... }

// ❌ WRONG - Functional components do not exist
function MyComponent(props) { return <view />; }
const MyComponent = () => <view />;
```

### ⚠️ COMMON AI MISTAKES (Even advanced models make these errors!)

**These patterns DO NOT EXIST in Valdi** but are commonly suggested by AI models:

```typescript
// ❌ WRONG - markNeedsRender() does NOT exist
class MyComponent extends Component {
  count = 0;
  handleClick() {
    this.count++;
    this.markNeedsRender(); // ERROR: This method doesn't exist!
  }
}

// ❌ WRONG - scheduleRender() exists but is DEPRECATED
class MyComponent extends Component {
  count = 0;
  handleClick() {
    this.count++;
    this.scheduleRender(); // DEPRECATED: Use StatefulComponent with setState() instead
  }
}

// ❌ WRONG - onMount/onUpdate/onUnmount do NOT exist (React-like names)
class MyComponent extends Component {
  onMount() { }        // Should be: onCreate()
  onUpdate() { }       // Should be: onViewModelUpdate(previousViewModel)
  onUnmount() { }      // Should be: onDestroy()
}

// ❌ WRONG - this.props does NOT exist
class MyComponent extends Component {
  onRender() {
    <label value={this.props.title} />; // Should be: this.viewModel.title
  }
}

// ❌ WRONG - this.context.get() does NOT exist
class MyComponent extends Component {
  onRender() {
    const service = this.context.get(MyService); // This API doesn't exist!
  }
}

// ❌ WRONG - Returning JSX from onRender()
class MyComponent extends Component {
  onRender() {
    return <view />; // onRender() returns void, not JSX!
  }
}
```

**Why these errors happen**: AI models are heavily trained on React code, and Valdi's TSX syntax triggers incorrect React pattern suggestions. Always verify against actual Valdi APIs.

### ✅ CORRECT Valdi Patterns (Use these instead)

Valdi uses a **class-based component model** with explicit lifecycle methods:

```typescript
// ✅ CORRECT - Stateful Valdi component pattern
import { StatefulComponent } from 'valdi_core/src/Component';

class MyComponent extends StatefulComponent<ViewModel, State> {
  // State management via StatefulComponent
  state = { count: 0 };
  
  // Lifecycle: Called when component is first created
  onCreate() {
    console.log('Component created');
  }
  
  // Lifecycle: Called when viewModel changes
  onViewModelUpdate(previousViewModel: ViewModel) {
    console.log('ViewModel changed');
  }
  
  // Lifecycle: Called before component is removed
  onDestroy() {
    console.log('Component destroying');
  }
  
  // Required: Render method returns void (not JSX!)
  onRender() {
    // Note: onRender returns VOID, not JSX
    // JSX is written as a statement, not returned
    <view>
      <label value={`Count: ${this.state.count}`} />
      <button 
        title="Increment"
        onPress={() => {
          this.setState({ count: this.state.count + 1 }); // setState triggers re-render
        }}
      />
    </view>;
  }
}

// For components without state, use Component
import { Component } from 'valdi_core/src/Component';

class SimpleComponent extends Component<ViewModel> {
  onRender() {
    <label value={this.viewModel.title} />;
  }
}
```

### Key Valdi Concepts

1. **State Management**: Use `StatefulComponent` with `setState()`, not `useState`
2. **Props Access**: Use `this.viewModel`, not `this.props`
3. **Re-rendering**: `setState()` automatically triggers re-render
4. **Lifecycle Methods**: `onCreate()`, `onViewModelUpdate()`, `onDestroy()`
5. **Dependency Injection**: Use `createProviderComponent()` + `withProviders()` HOC pattern
6. **Return Type**: `onRender()` returns `void`, not JSX (JSX is written as a statement)
7. **Component Definition**: Always use `class` extending `Component` or `StatefulComponent`, never functions

### State Management with StatefulComponent

```typescript
// ✅ CORRECT - Use StatefulComponent with setState()
class Counter extends StatefulComponent<ViewModel, State> {
  state = { count: 0 };
  
  handleClick = () => {
    this.setState({ count: this.state.count + 1 }); // Automatically triggers re-render
  };
  
  onRender() {
    <button title={`Count: ${this.state.count}`} onPress={this.handleClick} />;
  }
}

// ❌ WRONG - Using markNeedsRender() doesn't exist
handleClick() {
  this.count++;
  this.markNeedsRender(); // ERROR: markNeedsRender is not a function!
}
```

### Provider Pattern (Not useContext)

```typescript
// ✅ CORRECT - Valdi provider pattern
import { createProviderComponentWithKeyName } from 'valdi_core/src/provider/createProvider';
import { withProviders } from 'valdi_core/src/provider/withProviders';
import { ProvidersValuesViewModel } from 'valdi_core/src/provider/withProviders';
import { Component } from 'valdi_core/src/Component';

// Step 1: Define service
class MyService {
  getData() { return 'data'; }
}

// Step 2: Create provider component
const MyServiceProvider = createProviderComponentWithKeyName<MyService>('MyServiceProvider');

// Step 3: Provide value in parent
class ParentComponent extends Component {
  private service = new MyService();
  
  onRender() {
    <MyServiceProvider value={this.service}>
      <ChildComponentWithProvider />
    </MyServiceProvider>;
  }
}

// Step 4: Consume in child - extend viewModel from ProvidersValuesViewModel
interface ChildViewModel extends ProvidersValuesViewModel<[MyService]> {
  // other props if needed
}

class ChildComponent extends Component<ChildViewModel> {
  onRender() {
    // Access provider via viewModel.providersValues
    const [myService] = this.viewModel.providersValues;
    const data = myService.getData();
    
    <label value={data} />;
  }
}

// Step 5: Wrap component with provider HOC
const ChildComponentWithProvider = withProviders(MyServiceProvider)(ChildComponent);
```

## Key Technologies

- **Valdi**: TypeScript-based declarative UI framework that compiles to native code
- **TSX/JSX**: React-like syntax for declarative UI (but this is **NOT React** - Valdi compiles to native)
- **Bazel**: Primary build system for reproducible builds
- **TypeScript/JavaScript**: Application and UI layer
- **C++**: Cross-platform runtime and layout engine
- **Swift**: Compiler implementation
- **Kotlin/Java**: Android runtime
- **Objective-C/C++**: iOS runtime
- **Flexbox**: Layout system with automatic RTL support

## Directory Structure

### `/apps/`
Example applications demonstrating Valdi features:
- `helloworld/` - Basic getting started example
- `valdi_gpt/` - More complex demo application
- `benchmark/` - Performance testing app
- `*_example/` - Various feature demonstrations (navigation, managed context, etc.)

### `/compiler/`
The Valdi compiler and companion tools:
- `compiler/` - Swift-based main compiler that transforms TypeScript to native code
- `companion/` - TypeScript-based companion tools for the build process

### `/valdi/`, `/valdi_core/`, `/valdi_protobuf/`
Core Valdi runtime implementations:
- Platform-specific implementations (iOS, Android, macOS)
- Cross-platform C++ core with layout engine
- Protobuf integration for efficient serialization
- Generated code from Djinni interfaces for cross-language bindings

### `/src/valdi_modules/`
Core Valdi TypeScript modules and standard library:
- `valdi_core/` - Core component and runtime APIs (Component, Provider, etc.)
- `valdi_protobuf/` - Protobuf serialization support
- `valdi_http/` - HTTP client module (promise-based network requests)
- `valdi_navigation/` - Navigation utilities
- `valdi_rxjs/` - RxJS integration for reactive programming
- `persistence/` - Key-value storage with encryption and TTL support
- `drawing/` - Managed context for graphics and drawing operations
- `file_system/` - Low-level file I/O operations
- `valdi_web/`, `web_renderer/` - Web runtime implementations
- `foundation/`, `coreutils/` - Common utilities (arrays, Base64, LRU cache, UUID, etc.)
- `worker/` - Worker service support for background JavaScript execution
- Other standard library modules

### `/npm_modules/`
Node.js packages:
- `cli/` - Command-line interface for Valdi development (`valdi` command)
- `eslint-plugin-valdi/` - ESLint rules for Valdi code

### `/bzl/`
Bazel build rules and macros for the Valdi build system

### `/docs/`
Comprehensive documentation:
- Codelabs for learning
- API documentation
- Setup and installation guides

### `/third-party/`
External dependencies and their Bazel build configurations

## Important Conventions

### Build System

1. **Bazel is the primary build system** - Use `bazel build`, `bazel test`, etc.
   - Note: `bzl` is an alias for `bazel` - both commands work interchangeably
   - The CLI looks for `bazel`, `bzl`, or `bazelisk` executables
2. **MODULE.bazel and WORKSPACE** - Bazel module system is in use
3. **Cross-platform builds** - Code must work on iOS, Android, Linux, and macOS
4. **Platform transitions** - Build rules handle platform-specific compilation automatically

### Code Style

1. **C++**: Follow the project's C++ style conventions
2. **TypeScript**: Use ESLint with Valdi-specific rules
3. **Swift**: Follow Swift conventions for compiler code
4. **Kotlin**: Follow Kotlin conventions for Android runtime
5. **Indentation**: Always match existing file conventions

### Testing

1. Test files are typically in `test/` subdirectories
2. Run tests with `bazel test //path/to:target`
3. All changes should include appropriate tests
4. Use the built-in Valdi testing framework for component tests

### Generated Code

1. **Djinni interfaces** - Some code is generated from `.djinni` files for cross-language bindings
2. **Don't modify generated code** - Change the source `.djinni` file instead
3. Generated files are typically in `generated-src/` directories

## Common Tasks

### Building the Compiler

```bash
# Build the compiler
bazel build //compiler/compiler:valdi-compiler

# After building, move the binary to bin/ directory for use by the toolchain
# The exact path depends on your platform (macos/linux and architecture)
# Example for macOS ARM64:
cp bazel-bin/compiler/compiler/valdi-compiler bin/compiler/macos/arm64/
```

Note: Pre-built compiler binaries are checked in to `/bin/compiler/` for convenience, but you can build and use your own version during development.

### Running Tests

```bash
# Run all tests
bazel test //...

# Run specific test
bazel test //valdi/test:some_test
```

### Installing and Using the CLI

```bash
cd npm_modules/cli

# Install the valdi command-line tool globally
npm run cli:install

# After installation, use the CLI
valdi --help
```

### Creating New Examples

Use existing apps in `/apps/` as templates. Each app needs:
- `BUILD.bazel` file defining build targets
- `package.json` for npm dependencies
- Entry point file (typically `.tsx` for TypeScript JSX)
- Source files in `src/` directory

## Important Files to Review

- `/README.md` - Main project documentation
- `/docs/INSTALL.md` - Installation and setup instructions
- `/docs/DEV_SETUP.md` - Developer environment setup
- `/CONTRIBUTING.md` - Contribution guidelines
- `/CODE_OF_CONDUCT.md` - Community standards
- `/LICENSE.md` - MIT License information

## Toolchain Locations

Pre-built binaries are stored in `/bin/`:
- Compiler binaries for Linux/macOS
- SQLite compiler for data persistence
- Other build tools

## Platform-Specific Notes

### iOS
- Uses Objective-C++ bridge layer for TypeScript-native communication
- Metal for GPU-accelerated rendering
- See `/valdi/src/ios/` for platform implementations

### Android
- Kotlin/Java implementations
- Uses Android NDK for C++ integration
- See `/valdi/src/android/` for platform implementations

### Web
- TypeScript runtime for web targets
- See `/src/valdi_modules/src/valdi/web_renderer/` for web implementation

### Desktop (macOS)
- Native macOS implementation
- See `/valdi/src/valdi/macos/` for desktop implementations

## Development Workflow

1. **Setup environment** - Follow `/docs/DEV_SETUP.md`
2. **Make changes** in appropriate directory
3. **Build locally** with Bazel
4. **Run tests** to verify changes
5. **Run linters** with appropriate tools
6. **Test on multiple platforms** - Changes may affect iOS, Android, and web
7. **Update documentation** if adding features

## Common Patterns

### Component Development

Valdi components follow a class-based pattern with lifecycle methods:

```typescript
import { Component } from 'valdi_core/src/Component';

class MyComponent extends Component {
  // Required: Render the component's UI
  onRender() {
    <view>
      <label value="Hello" />
    </view>;
  }
  
  // Optional lifecycle methods:
  // onCreate() - Called when component is first created
  // onDestroy() - Called before component is removed
  // onViewModelUpdate(previousViewModel) - Called when viewModel updates
}
```

**Key Valdi Concepts:**
- Components use TSX/JSX syntax (similar to React but compiles to native)
- State management via component properties
- Event handlers for user interactions
- Flexbox layout system for positioning

### Native Polyglot Modules

For performance-critical code, write native implementations with TypeScript bindings:
- Define interfaces in TypeScript
- Specify polyglot modules in build files (BUILD.bazel)
- Implement in C++, Swift, Kotlin, or Objective-C
- Compiler generates type-safe bindings

### Worker Services

For background processing:
- Create worker services that run in separate JavaScript contexts
- Communicate via message passing
- See `/docs/docs/advanced-worker-service.md`

### Component Context & Native Integration

Pass data and services between native code and Valdi:
- **Component Context**: Pass native data to Valdi components when instantiating them
- **Native Annotations**: Use TypeScript comments to export components to native platforms
- **Example**: `@Component` and `@ExportModel` annotations define how components are exposed
- See `/docs/docs/native-annotations.md` and `/docs/docs/native-context.md`

### Provider Pattern

Dependency injection for Valdi components:
- Use `Provider` to pass services and data down the component tree
- Similar to React Context but Valdi-specific
- Enables loose coupling and testability
- See `/docs/docs/advanced-provider.md`

### Localization

String management for multi-language support:
- String resources defined in JSON files
- Automatic locale switching based on device settings
- See `/docs/docs/advanced-localization.md`

## Common Pitfalls

1. **Don't skip cross-platform testing** - Changes affect multiple platforms
2. **Don't modify generated code** - Change the source instead
3. **Don't ignore Bazel cache** - Use `bazel clean` sparingly
4. **Don't hardcode platform assumptions** - Use appropriate abstractions
5. **Performance matters** - Valdi is a UI framework where rendering performance is critical

## Architecture Overview

### Compilation Pipeline

1. **TypeScript source** → Valdi compiler (Swift)
2. **Compiler output** → Platform-specific code generation
3. **Native builds** → iOS/Android/macOS apps
4. **Runtime** → C++ layout engine + platform-specific renderers

### Hot Reload System

- Valdi includes instant hot reload during development
- Changes to TypeScript components are reflected in milliseconds
- No need to recompile native code for UI changes
- Use `valdi hotreload` command

### Performance Features

- **View recycling** - Global view pooling reuses native views
- **Viewport-aware rendering** - Only visible views are inflated
- **Independent component rendering** - Components update without parent re-renders
- **Optimized layout** - C++ layout engine with minimal marshalling

## Key Points for AI Assistants

1. **Cross-platform compatibility is critical** - Test implications across iOS, Android, and web
2. **Bazel is non-negotiable** - Don't suggest alternative build systems
3. **Generated code exists** - Some files are auto-generated from Djinni interfaces
4. **Performance is paramount** - This is a production UI framework used at scale
5. **Follow existing patterns** - This is a mature codebase with established conventions
6. **TypeScript is compiled** - Unlike React Native, this doesn't run JavaScript at runtime
7. **Native integration is deep** - Direct access to platform APIs via polyglot modules

## Quick Reference Commands

### For App Development

```bash
# Install Valdi CLI (first time)
cd npm_modules/cli && npm run cli:install

# Setup development environment
valdi dev_setup

# Bootstrap a new project
mkdir my_project && cd my_project
valdi bootstrap

# Install dependencies and build
valdi install ios    # or android

# Start hot reload
valdi hotreload
```

### For Platform Development (Contributing to Valdi)

```bash
# Setup development environment (first time)
scripts/dev_setup.sh

# Build everything
bazel build //...

# Run all tests
bazel test //...

# Build and run example app
cd apps/helloworld
valdi install ios    # or android
```

## Testing Framework

Valdi includes a built-in testing framework:
- Component-level unit tests
- Mock services and dependencies
- See `/docs/docs/workflow-testing.md`

```typescript
import { TestRunner } from 'valdi_core/src/TestRunner';

TestRunner.test('component renders correctly', () => {
  const component = new MyComponent();
  // Test assertions
});
```

## Debugging

- **VSCode integration** - Full debugging support with breakpoints
- **Hermes debugger** - For JavaScript debugging
- **Native debugging** - Xcode/Android Studio for platform-specific issues
- See `/docs/docs/workflow-hermes-debugger.md`

## Related Documentation

For more details on specific topics, see the `/docs/` directory:
- Architecture overview
- API reference
- Codelabs for hands-on learning
- Advanced features (animations, gestures, protobuf)
- Native bindings and custom views

## AI Skills (Context for AI Agents)

The Valdi CLI ships context files ("skills") that give AI agents accurate knowledge about Valdi APIs, patterns, and conventions. Install them once to reduce hallucinations:

```bash
npm install -g @snap/valdi
valdi skills install          # installs all skills for detected AI agents
# or install by category:
valdi skills install --category=client     # module development skills
valdi skills install --category=framework  # framework internals skills
```

Skills are bundled inside the npm package — no network access required after install.

## Contributing

This is an open-source project. When contributing:
1. Follow the style guides
2. Include tests for new features
3. Update documentation
4. Ensure cross-platform compatibility
5. See `CONTRIBUTING.md` for full guidelines

## Community & Support

- **Discord**: Join the [Valdi Discord community](https://discord.gg/uJyNEeYX2U) for support and discussions
- **Documentation**: Comprehensive docs in `/docs/` directory
- **Examples**: Working examples in `/apps/` directory
- **Issues**: Report bugs and request features via GitHub issues
- **Discussions**: Ask questions and share ideas in GitHub Discussions

---

*This document is intended for AI coding assistants to quickly understand the structure and conventions of the Valdi codebase. For human developers, please refer to the main README.md and comprehensive documentation in `/docs/`.*


================================================
FILE: BUILD.bazel
================================================
load("@aspect_rules_js//npm:defs.bzl", "npm_link_package")

# tsc demands that these be defined in the root of the workspace
npm_link_package(
    name = "valdi_tsx_link",
    src = "@valdi//src/valdi_modules/src/valdi/valdi_tsx:valdi_tsx_dts",
    visibility = ["//visibility:public"],
)

npm_link_package(
    name = "valdi_core_link",
    src = "@valdi//src/valdi_modules/src/valdi/valdi_core:valdi_core_dts",
    visibility = ["//visibility:public"],
)


================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Code of Conduct

## Our Pledge

We as members, contributors, and leaders of the Valdi community pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

## Our Standards

Examples of behavior that contributes to a positive environment for our community include:

- Demonstrating empathy and kindness toward other people
- Being respectful of differing opinions, viewpoints, and experiences
- Giving and gracefully accepting constructive feedback
- Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
- Focusing on what is best not just for us as individuals, but for the overall community

Examples of unacceptable behavior include:

- The use of sexualized language or imagery, and sexual attention or advances of any kind
- Trolling, insulting or derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others’ private information, such as a physical or email address, without their explicit permission
- Other conduct which could reasonably be considered inappropriate in a professional setting

## Our Enforcement Responsibilities

Valdi community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

Valdi community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

## Scope

This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official email address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at opensource@snap.com. All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the reporter of any incident.

## Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

### 1. Correction

Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

### 2. Warning

Community Impact: A violation through a single incident or series of actions.

Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

### 3. Temporary Ban

Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

### 4. Permanent Ban

Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

Consequence: A permanent ban from any sort of public interaction within the community.

## Attribution

This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.

For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. 


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to Valdi

Thank you for your interest in Valdi. We welcome community contributions and appreciate your time and effort in helping improve the project. Before getting started, please take a moment to review these guidelines.

## 1. [Code of Conduct](./CODE_OF_CONDUCT.md)

We want this project to be a welcoming space for everyone. By contributing, you agree to follow our [Code of Conduct](./CODE_OF_CONDUCT.md) and help keep the community respectful and inclusive.

## 2. How to Contribute

We welcome contributions in various forms, including:

- Bug fixes
- Documentation improvements
- Tests and performance optimizations

If you would like to add new features, please reach out to the Valdi team on [Discord](https://discord.gg/uJyNEeYX2U) to discuss. 

To contribute, follow these steps:

- **Fork** the repository and create a new branch.
- **Make your changes**, ensuring they align with our coding standards (§4 below).
- **Run tests** to ensure your changes do not break existing functionality.
- **Submit a pull request (PR)** with a clear description of the changes.
- A maintainer will review your PR, suggest any necessary changes, and merge it once approved.

### Commit Messages

Use clear and descriptive commit messages. Follow the conventional commit format when possible:

feat: Add new authentication method  
fix: Resolve issue with session timeout  
docs: Update README with new installation steps  

## 3.  Legal Terms

By submitting a contribution, you represent and warrant that:

- It is your original work, or you have sufficient rights to submit it.
- You grant the Valdi maintainers and users the right to use, modify, and distribute it under the MIT license (see LICENSE file); and
- To the extent your contribution is covered by patents, you grant a perpetual, worldwide, non-exclusive, royalty-free, irrevocable license to the Valdi maintainers and users to make, use, sell, offer for sale, import, and otherwise transfer your contribution as part of the project.

We do not require a Contributor License Agreement (CLA). However, by contributing, you agree to license your submission under terms compatible with the MIT License and to grant the patent rights described above. If your contribution includes third-party code, you are responsible for ensuring it is MIT-compatible and properly attributed.

Where permitted by law, you waive any moral rights in your contribution (e.g., the right to object to modifications). If such rights cannot be waived, you agree not to assert them in a way that interferes with the project’s use of your contribution.

## 4.  Coding Standards

To maintain a consistent codebase, please follow these guidelines:

- Use the existing coding style and conventions.
- Ensure all code changes are well-documented.
- Write tests for new features and bug fixes.
- Avoid introducing unnecessary dependencies.

## 5.  Reporting Issues

If you find a bug or have a feature request, please open an issue and provide as much detail as possible:

- Steps to reproduce, including operating system, and Valdi version
- Expected and actual behavior
- Suspected cause (if any)

## 6.  Recognition

We use the All Contributors specification to recognize community members. If your contribution is merged, you will be added to the project's list of contributors. This includes contributions of all kinds—code, documentation, design, testing, and more.


================================================
FILE: LICENSE.md
================================================
Copyright © 2025 Snap Inc.

Valdi is made available under the MIT License.

**MIT License**

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

**Third-Party Software**

Valdi includes or interacts with third-party software. A detailed report of the third-party software used, including their respective licenses, can be found at the following link.

https://portal.fossa.com/p/snap/release/2857/23669

We aim to maintain transparency and compliance with all third-party license requirements. If you spot an issue or believe attribution is missing, please reach out to us at opensource@snap.com.


================================================
FILE: MODULE.bazel
================================================
module(name = "valdi", version = "0.1")

http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

bazel_dep(name = "toolchains_llvm", version = "1.3.0")
bazel_dep(name = "apple_support", version = "1.21.0", repo_name = "build_bazel_apple_support")

bazel_dep(name = "protobuf", version = "27.0", repo_name = "protobuf_cpp")
single_version_override(
    module_name = "protobuf",
    version = "27.0",
)
bazel_dep(name = "rules_pkg", version = "0.9.1")
single_version_override(
    module_name = "rules_pkg",
    version = "0.9.1",
)
bazel_dep(name = "rules_proto", version = "6.0.2")
bazel_dep(name = "rules_python", version = "1.4.1")

bazel_dep(name = "rules_cc", version = "0.0.17")
bazel_dep(name = "googletest", version = "1.13.0", repo_name = "gtest")
single_version_override(
    module_name = "zlib",
    version = "1.3.2",
)

bazel_dep(name = "bazel_skylib", version = "1.2.0")
bazel_dep(name = "rules_java", version = "7.4.0")

bazel_dep(name = "rules_android", version = "0.5.1")
bazel_dep(name = "rules_android_ndk", version = "0.1.3")
single_version_override(module_name = "rules_android_ndk", patches = [
    "@valdi//third-party/rules_android_ndk/patches:expose_bins.patch",
])

remote_android_extensions = use_extension(
    "@rules_android//bzlmod_extensions:android_extensions.bzl",
    "remote_android_tools_extensions",
)
use_repo(remote_android_extensions, "android_gmaven_r8", "android_tools")

android_sdk_repository_extension = use_extension("@rules_android//rules/android_sdk_repository:rule.bzl", "android_sdk_repository_extension")
android_sdk_repository_extension.configure(
    api_level = 36,
    build_tools_version = "34.0.0",
)
use_repo(android_sdk_repository_extension, "androidsdk")

register_toolchains(
    "@rules_android//toolchains/android:all",
    "@rules_android//toolchains/android_sdk:all",
)
register_toolchains("@androidsdk//:sdk-toolchain", "@androidsdk//:all")

android_ndk_repository_extension = use_extension("@rules_android_ndk//:extension.bzl", "android_ndk_repository_extension")
use_repo(android_ndk_repository_extension, "androidndk")

register_toolchains("@androidndk//:all")

bazel_dep(name = "rules_kotlin", version = "1.9.0")
single_version_override(
    module_name = "rules_kotlin",
    patches = ["@valdi//third-party/rules_kotlin:fix_manifest_custom_package.patch"],
)
bazel_dep(name = "rules_jvm_external", version = "6.2")

bazel_dep(name = "rules_xcodeproj", version = "3.2.0")

bazel_dep(name = "rules_swift", version = "3.1.2", repo_name = "build_bazel_rules_swift")
single_version_override(
    module_name = "rules_swift",
    patches = ["@valdi//third-party/rules_swift/patches:rules_swift.patch"],
    patch_strip = 1,
)

bazel_dep(name = "rules_apple", version = "4.0.0", repo_name = "build_bazel_rules_apple")
single_version_override(
    module_name = "rules_apple",
    version = "4.0.0",
)

bazel_dep(name = "bazel_features", version = "1.10.0")

bazel_dep(name = "platforms", version = "0.0.11")

bazel_dep(name = "aspect_rules_js", version = "2.0.0")
bazel_dep(name = "aspect_bazel_lib", version = "2.14.0")

bazel_dep(name = "aspect_rules_ts", version = "3.7.0")

rules_ts_ext = use_extension("@aspect_rules_ts//ts:extensions.bzl", "ext")
rules_ts_ext.deps(ts_version = "5.3.3")
use_repo(rules_ts_ext, "npm_typescript")

http_archive(
    name = "zoo",
    url = "https://github.com/thecppzoo/zoo/archive/33b868300145773d8c433b6b3d6643eba6334f7d.zip",
    build_file = "@valdi//third-party/zoo:zoo.BUILD",
    integrity = "sha256-9GIWp7GyVdZn24mvsMGtzhDD2N+W5L5AO3o2tYHtnVk=",
    strip_prefix = "zoo-33b868300145773d8c433b6b3d6643eba6334f7d",
)

http_archive(
    name = "hermes",
    url = "https://github.com/facebook/hermes/archive/880b1645b5dca974f4329dc4108692d301abee0d.zip",
    integrity = "sha256-+GQiTtN6H8TQz/+YkVz73dHeYAZ86/9hAUwTlkISx48=",
    strip_prefix = "hermes-880b1645b5dca974f4329dc4108692d301abee0d",
    build_file = "@valdi//third-party/hermes:hermes.BUILD",
)

bazel_dep(name = "boringssl", version = "0.20250415.0")

# TODO(simon): See if we can use upstream
http_archive(
    name = "boost",
    build_file = "@valdi//third-party/boost:boost.BUILD",
    patches = [
        "@valdi//third-party/boost/patches:asio.patch",
        "@valdi//third-party/boost/patches:global_asio_initializers.patch",
        "@valdi//third-party/boost/patches:interprocess_emscripten.patch",
        "@valdi//third-party/boost/patches:remove_invalid_file_1_78.patch",
    ],
    strip_prefix = "boost_1_78_0",
    integrity = "sha256-hoHxddS9smxSIiZleT7vCEkNd1hSkzD5jTsp3Qc1vMw=",
    url = "https://archives.boost.io/release/1.78.0/source/boost_1_78_0.tar.bz2",
)

http_archive(
    name = "phmap",
    build_file = "@valdi//third-party/phmap:phmap.BUILD",
    strip_prefix = "parallel-hashmap-1.3.12",
    integrity = "sha256-DMIDFEMhkkz7/MQB9C2CBMDdJOJ2DHocCRuqFtl3fAg=",
    url = "https://github.com/greg7mdp/parallel-hashmap/archive/refs/tags/v1.3.12.tar.gz",
)

http_archive(
    name = "fmt",
    build_file = "@valdi//third-party/fmt:fmt.BUILD",
    integrity = "sha256-XZjFBNAgX5EuIkSezep3a3jOC7CWknM0+AeB5yAITJ8=",
    strip_prefix = "fmt-7.1.3",
    url = "https://github.com/fmtlib/fmt/releases/download/7.1.3/fmt-7.1.3.zip",
)

bazel_dep(name = "android_macros")
local_path_override(
    module_name = "android_macros",
    path = "bzl/macros",
)

bazel_dep(name = "snap_macros")
local_path_override(
    module_name = "snap_macros",
    path = "bzl/valdi/snap_macros",
)

bazel_dep(name = "snap_client_toolchains")
local_path_override(
    module_name = "snap_client_toolchains",
    path = "bzl/toolchains",
)

bazel_dep(name = "snap_platforms")
local_path_override(
    module_name = "snap_platforms",
    path = "bzl/platforms",
)

bazel_dep(name = "skia_user_config")
local_path_override(
    module_name = "skia_user_config",
    path = "third-party/skia_user_config",
)

bazel_dep(name = "rules_hdrs")
local_path_override(
    module_name = "rules_hdrs",
    path = "third-party/rules_hdrs",
)

bazel_dep(name = "valdi_toolchain")
local_path_override(
    module_name = "valdi_toolchain",
    path = "bin",
)

bazel_dep(name = "resvg_libs")
local_path_override(
    module_name = "resvg_libs",
    path = "third-party/resvg/resvg_libs",
)

bazel_dep(name = "jsoncpp", version = "1.9.6")

http_archive(
    name = "harfbuzz",
    strip_prefix = "harfbuzz-12.2.0",
    build_file = "@valdi//third-party/harfbuzz:harfbuzz.BUILD",
    integrity = "sha256-7LYDqkJqiyRmVxhme9pkqEwVBNt0VO5Mrb02Lupk5UU=",
    urls = ["https://github.com/harfbuzz/harfbuzz/releases/download/12.2.0/harfbuzz-12.2.0.tar.xz"],
)

bazel_dep(name = "backward-cpp", version = "1.6")

bazel_dep(name = "xxhash", version = "0.8.3")

http_archive(
    name = "zlib_chromium",
    url = "https://github.com/simonis/zlib-chromium/archive/93867c6db67801f74c2d0840a271c7aa7fd6716c.zip",
    build_file = "@valdi//third-party/zlib_chromium:zlib_chromium.BUILD",
    integrity = "sha256-aybDRpEOnvUrCW8/wTFSuduz5Rk+YxYGdCUZYVY5G9g=",
    strip_prefix = "zlib-chromium-93867c6db67801f74c2d0840a271c7aa7fd6716c",
    patch_args = ["-p1"],
    patches = [
        "@valdi//third-party/zlib_chromium/patches:apple.patch",
    ],
)

bazel_dep(name = "zstd", version = "1.5.7")

http_archive(
    name = "icu",
    build_file = "@valdi//third-party/icu:icu.BUILD",
    url = "https://github.com/unicode-org/icu/releases/download/release-68-1/icu4c-68_1-src.tgz",
    strip_prefix = "icu",
    integrity = "sha256-qfLj2LRDS45Th4tDCL0ebuUcnHBC4rGjdqvvtvuyny0=",
)

bazel_dep(name = "websocketpp", version = "0.8.2.bcr.3")
single_version_override(
    module_name = "websocketpp",
    patches = ["@valdi//third-party/websocketpp/patches:fix_ios_lrt.patch"],
    patch_strip = 1,
)

http_archive(
    name = "test262",
    url = "https://github.com/tc39/test262/archive/refs/heads/main.zip",
    build_file = "@valdi//third-party/test262:test262.BUILD",
    strip_prefix = "test262-main",
    integrity = "sha256-Lv/ZdXIV5f0n11oFTKBq22r0aLGF6HsDp36B1afgVDo=",
)

http_archive(
    name = "resvg",
    url = "https://github.com/RazrFalcon/resvg/archive/a739aef5d01360ec238c886bc50674f31458df00.zip",
    build_file = "@valdi//third-party/resvg:resvg.BUILD",
    strip_prefix = "resvg-a739aef5d01360ec238c886bc50674f31458df00",
    integrity = "sha256-kohUhIYyFoaeIHLBhYwq6g7+h34r3i9/IIQoWyJAmSE=",
)

bazel_dep(name = "rules_license", version = "1.0.0")

bazel_dep(name = "rules_fuzzing", version = "0.5.2")

SKIA_URL = "https://github.com/google/skia/archive/8d5c6efb04514a31f09a2e865940f99cdf60ce21.zip"
SKIA_STRIP_PREFIX = "skia-8d5c6efb04514a31f09a2e865940f99cdf60ce21"
SKIA_INTEGRITY = "sha256-piM7FfzT3xekYxvwEDlejJ8Zj+zaxa3oIKpDsx1y6eQ="

http_archive(
    name = "skia",
    url = SKIA_URL,
    strip_prefix = SKIA_STRIP_PREFIX,
    integrity = SKIA_INTEGRITY,
)

http_archive(
    name = "libjpeg_turbo",
    build_file = "@skia//bazel/external/libjpeg_turbo:BUILD.bazel",
    url = "https://chromium.googlesource.com/chromium/deps/libjpeg_turbo/+archive/e14cbfaa85529d47f9f55b0f104a579c1061f9ad.tar.gz",
    patches = [
        "@valdi//third-party/libjpeg_turbo:warning_fix.patch",
        "@valdi//third-party/libjpeg_turbo:include_fix.patch",
    ],
)

http_archive(
    name = "libpng",
    build_file = "@skia//bazel/external/libpng:BUILD.bazel",
    url = "https://skia.googlesource.com/third_party/libpng.git/+archive/ed217e3e601d8e462f7fd1e04bed43ac42212429.tar.gz",
    patch_args = ["-p1"],
    patches = [
        "@valdi//third-party/libpng:fix_armv7.patch",
    ],
)

http_archive(
    name = "libwebp",
    build_file = "@skia//bazel/external/libwebp:BUILD.bazel",
    url = "https://github.com/webmproject/libwebp/archive/845d5476a866141ba35ac133f856fa62f0b7445f.tar.gz",
    strip_prefix = "libwebp-845d5476a866141ba35ac133f856fa62f0b7445f",
)

http_archive(
    name = "zlib_skia",
    build_file = "@skia//bazel/external/zlib_skia:BUILD.bazel",
    url = "https://chromium.googlesource.com/chromium/src/third_party/zlib/+archive/646b7f569718921d7d4b5b8e22572ff6c76f2596.tar.gz",
    patch_args = ["-p1"],
    patches = [
        "@valdi//third-party/zlib_skia:android_ios_x86_64.patch",
    ],
)

http_archive(
    name = "freetype",
    build_file = "@skia//bazel/external/freetype:BUILD.bazel",
    url = "https://github.com/freetype/freetype/archive/5d4e649f740c675426fbe4cdaffc53ee2a4cb954.tar.gz",
    strip_prefix = "freetype-5d4e649f740c675426fbe4cdaffc53ee2a4cb954",
)

http_archive(
    name = "expat",
    build_file = "@skia//bazel/external/expat:BUILD.bazel",
    url = "https://github.com/libexpat/libexpat/archive/624da0f593bb8d7e146b9f42b06d8e6c80d032a3.tar.gz",
    strip_prefix = "libexpat-624da0f593bb8d7e146b9f42b06d8e6c80d032a3",
)

npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm")
npm.npm_translate_lock(
    name = "valdi_npm",
    pnpm_lock = "//bzl/valdi/npm:pnpm-lock.yaml",
    lifecycle_hooks = {
        "better-sqlite3@9.6.0": [],
        "remotedebug-ios-webkit-adapter@0.4.2": [],
    },
    link_workspace = "valdi",
)
use_repo(npm, "valdi_npm")

maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven")

maven.install(
    name = "android_mvn",
    artifacts = [
        "androidx.annotation:annotation:1.1.0",
        "androidx.appcompat:appcompat:1.2.0",
        "androidx.appcompat:appcompat-resources:1.2.0",
        "androidx.collection:collection:1.1.0",
        "androidx.constraintlayout:constraintlayout:2.1.4",
        "androidx.customview:customview:1.1.0",
        "androidx.dynamicanimation:dynamicanimation:1.0.0",
        "androidx.fragment:fragment:1.1.0",
        "androidx.interpolator:interpolator:1.0.0",
        "androidx.lifecycle:lifecycle-common:2.2.0",
        "androidx.lifecycle:lifecycle-process:2.2.0",
        "androidx.lifecycle:lifecycle-viewmodel:2.2.0",
        "androidx.recyclerview:recyclerview:1.2.1",
        "androidx.test:core:1.5.0",
        "androidx.test.ext:junit:1.1.3",
        "androidx.test:monitor:1.5.0",
        "androidx.test:runner:1.5.0",
        "com.google.android.material:material:1.2.0",
        "com.google.code.findbugs:jsr305:3.0.2",
        "com.google.code.gson:gson:2.8.6",
        "com.google.protobuf.nano:protobuf-javanano:3.1.0",
        "com.jakewharton.timber:timber:4.7.1",
        "com.squareup.leakcanary:leakcanary-android:2.10",
        "com.squareup.okhttp3:okhttp:4.9.0",
        "com.squareup.okio:okio:2.10.0",
        "io.reactivex.rxjava3:rxandroid:3.0.0",
        "io.reactivex.rxjava3:rxjava:3.1.0",
        "io.reactivex.rxjava3:rxkotlin:3.0.0",
        "javax.inject:javax.inject:1",
        "junit:junit:4.13.2",
        "org.junit.jupiter:junit-jupiter-api:5.9.3",
        "org.junit.jupiter:junit-jupiter-engine:5.9.3",
        "org.junit.jupiter:junit-jupiter-params:5.9.3",
        "org.junit.platform:junit-platform-console:1.9.2",
        "org.junit.platform:junit-platform-launcher:1.9.2",
        "org.junit.platform:junit-platform-reporting:1.9.2",
        "org.junit.vintage:junit-vintage-engine:5.9.3",
        "org.robolectric:android-all:10-robolectric-5803371",
        "org.robolectric:annotations:4.10.3",
        "org.robolectric:robolectric:4.10.3",
    ],
    repositories = [
        "https://repo1.maven.org/maven2",
        "https://maven.google.com",
    ],
    aar_import_bzl_label = "@rules_android//rules:rules.bzl",
    use_starlark_android_rules = True,
    version_conflict_policy = "pinned",
)

use_repo(maven, "android_mvn")

http_archive(
    name = "expat_config",
    url = SKIA_URL,
    strip_prefix = "{}/third_party/expat/include".format(SKIA_STRIP_PREFIX),
    integrity = SKIA_INTEGRITY,
)

http_archive(
    name = "freetype_config",
    url = SKIA_URL,
    strip_prefix = "{}/third_party/freetype2/include".format(SKIA_STRIP_PREFIX),
    integrity = SKIA_INTEGRITY,
)

http_archive(
    name = "ocmock",
    build_file = "@valdi//third-party/ocmock:OCMock.build",
    integrity = "sha256-PC3Gc8g0GKYhPmOmQ9lmw/eQaTtOhXjg309oriiuP+o=",
    strip_prefix = "ocmock-3.9.4",
    url = "https://github.com/erikdoe/ocmock/archive/refs/tags/v3.9.4.tar.gz",
)

register_toolchains("@valdi//bzl/valdi:valdi_toolchain")

# C++ toolchains: register both Apple CC and LLVM for standalone bzlmod builds.
# Apple CC toolchains (from @local_config_apple_cc_toolchains) are registered first so they
# win on macOS/iOS/tvOS targets — they declare target_compatible_with including
# @build_bazel_apple_support//constraints:apple and support the "objc-compile" action needed by
# objc_library. LLVM is registered second: on Linux, Apple CC toolchains require exec=macOS so
# they never match, and LLVM's linux toolchain is selected instead (providing C++ stdlib headers).
apple_cc_configure = use_extension("@build_bazel_apple_support//crosstool:setup.bzl", "apple_cc_configure_extension")
use_repo(apple_cc_configure, "local_config_apple_cc_toolchains", "local_config_apple_cc")
register_toolchains("@local_config_apple_cc_toolchains//:all")

llvm = use_extension("@toolchains_llvm//toolchain/extensions:llvm.bzl", "llvm")
llvm.toolchain(name = "llvm_toolchain", llvm_version = "16.0.0")
use_repo(llvm, "llvm_toolchain")
register_toolchains("@llvm_toolchain//:all")


================================================
FILE: README.md
================================================
# Valdi

[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](./LICENSE.md)
[![Platforms](https://img.shields.io/badge/platform-iOS%20%7C%20Android%20%7C%20macOS-lightgrey)](./docs/INSTALL.md)
[![Status](https://img.shields.io/badge/status-beta-yellow)]()
[![Discord](https://img.shields.io/discord/1285677307163574322?color=7289da&label=Discord&logo=discord&logoColor=white)](https://discord.gg/uJyNEeYX2U)
[![TypeScript](https://img.shields.io/badge/TypeScript-5.x-blue?logo=typescript)](https://www.typescriptlang.org/)
[![Documentation](https://img.shields.io/badge/docs-available-brightgreen)](./docs/README.md)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](./CONTRIBUTING.md)

> [!NOTE]
> **Beta Status:** Valdi has been widely used in Snap's production apps for the last 8 years. We're calling this a beta because our tools and documentation need more battle testing in the open source world. Valdi will exit beta when we're happy with the developer experience.

**Valdi is a cross-platform UI framework that delivers native performance without sacrificing developer velocity.** Write your UI once in declarative TypeScript, and it compiles directly to native views on iOS, Android, and macOS—no web views, no JavaScript bridges. 

## Quick Example

A basic Valdi component:

```tsx
import { Component } from 'valdi_core/src/Component';

class HelloWorld extends Component {
  onRender() {
    const message = 'Hello World! 👻';
    <view backgroundColor='#FFFC00' padding={30}>
      <label color='black' value={message} />
    </view>;
  }
}
```

<p align="center">
  <img src="./docs/docs/assets/start-about/IMG_1445.jpg" width="400" alt="Hello World example running on iOS" />
</p>

## Quick Start

**Prerequisites:** Xcode (macOS only) - everything else is automatic!

```bash
# Install Valdi CLI
npm install -g @snap/valdi

# One-command setup (installs all dependencies)
valdi dev_setup

# Create your first project
mkdir my_project && cd my_project
valdi bootstrap
valdi install ios  # or android
```

> [!TIP]
> **Editor Extensions:** For the best development experience, install the [Valdi VSCode/Cursor extensions](./docs/INSTALL.md#vscodecursor-setup-optional-but-recommended) for syntax highlighting, debugging, and device logs during hot reload.

## Quick Links

- [Getting Started Guide](./docs/INSTALL.md)
- [Documentation](./docs/README.md)
- [Codelabs](./docs/docs/start-code-lab.md)
- [API Reference](./docs/api/api-quick-reference.md)
- [Frequently Asked Questions](./docs/docs/faq.md)
- [Component Library](https://github.com/Snapchat/Valdi_Widgets)

## Why Choose Valdi?

Valdi is a cross-platform UI framework designed to solve the fundamental problem of cross-platform development: velocity vs. runtime performance. For 8 years, it has powered a large portion of Snap's production apps.

### True Native Performance

Unlike frameworks that rely on web views or JavaScript bridges, Valdi compiles declaratively rendered TypeScript components into platform-native views. Valdi also includes several other performance advantages:

- **[Automatic view recycling](./docs/docs/performance-view-recycling.md)** - Global view pooling system reuses native views across all screens, dramatically reducing inflation latency
- **Optimized component rendering** - Components re-render independently without triggering parent re-renders, enabling fast incremental updates
- **Optimized layout engine** - C++ layout engine runs on the main thread with minimal marshalling overhead
- **Viewport-aware rendering** - Only visible views are inflated, making infinite scrolling performant by default

Learn more in our [Performance Optimization Guide](./docs/docs/performance-optimization.md).

### Developer Experience Built for Speed

Valdi eliminates the traditional compile-test-debug cycle that slows native development:

- **Instant hot reload** - See changes in milliseconds on iOS, Android, or desktop without recompiling
- **[Full VSCode debugging](./docs/docs/workflow-hermes-debugger.md)** - Set breakpoints, inspect variables, profile performance, and capture heap dumps directly in VSCode
- **Familiar syntax** - TSX components with TypeScript for type safety

### Flexible Adoption Model

Valdi integrates easily into existing apps - start small and scale as needed:

- **[Embed Valdi in native](./docs/docs/native-bindings.md)** - Drop Valdi components into existing UIKit or Android view hierarchies
- **[Embed native in Valdi](./docs/docs/native-customviews.md)** - Use platform-specific views within Valdi layouts via `<custom-view>`
- **[Polyglot modules](./docs/docs/native-polyglot.md)** - Write performance-critical code in C++, Swift, Kotlin, or Objective-C with type-safe bindings to TypeScript
- **[Full-stack architecture](./docs/docs/advanced-full-stack.md)** - Build entire features in Valdi with worker threads for background processing, eliminating platform-specific bridge code

### Deep Native Integration

Valdi generates type-safe bindings between TypeScript and native platforms:

- **[Automatic code generation](./docs/docs/native-annotations.md)** - TypeScript interfaces compile to Kotlin, Objective-C, and Swift bindings
- **[Native API access](./docs/docs/native-polyglot.md)** - Direct access to platform APIs and third-party native libraries through polyglot modules
- **Bidirectional communication** - Pass complex data structures and callbacks between TypeScript and native code safely
- **[Native protobuf support](./docs/docs/advanced-protobuf.md)** - Seamless integration with protobuf for efficient data serialization

### Proven at Scale

- Powers critical features in production Snap apps.
- Supports [advanced animations](./docs/docs/advanced-animations.md), real-time rendering, and [complex gesture systems](./docs/docs/core-touches.md)

### Feature Highlights

- **[Flexbox layout system](./docs/docs/core-flexbox.md)** with automatic RTL support
- **[Worker threads](./docs/docs/advanced-worker-service.md)** for multi-threaded JavaScript execution
- **[Native animations](./docs/docs/advanced-animations.md)** for native look and feel
- **[Advanced gesture recognition](./docs/docs/core-touches.md)** with platform-native handling
- **[Built-in testing framework](./docs/docs/workflow-testing.md)** with component-level unit tests
- **[Bazel integration](./docs/docs/workflow-bazel.md)** for reproducible, incremental builds

## Need Help?

Join our [Discord](https://discord.gg/uJyNEeYX2U) for support.

## Contributing

Please follow the [contributing](./CONTRIBUTING.md) guidelines.

## License

Valdi is made available under the MIT [License](./LICENSE.md).


================================================
FILE: SECURITY.md
================================================
# Security Protocol

If you believe you've found a security vulnerability in this project, please report it to us via: [https://hackerone.com/snapchat](https://hackerone.com/snapchat)








================================================
FILE: WORKSPACE
================================================
workspace(name = "valdi")

load("//bzl:workspace_prepare.bzl", "valdi_prepare_workspace")

valdi_prepare_workspace(__workspace_dir__)

load("//bzl:workspace_preinit.bzl", "valdi_preinitialize_workspace")

valdi_preinitialize_workspace()

load("@aspect_bazel_lib//lib:repositories.bzl", "aspect_bazel_lib_dependencies", "aspect_bazel_lib_register_toolchains", "register_yq_toolchains")

register_yq_toolchains()

# Required bazel-lib dependencies

aspect_bazel_lib_dependencies()

# Required rules_shell dependencies
load("@rules_shell//shell:repositories.bzl", "rules_shell_dependencies", "rules_shell_toolchains")

rules_shell_dependencies()

rules_shell_toolchains()

# Register bazel-lib toolchains

aspect_bazel_lib_register_toolchains()

# Create the host platform repository transitively required by bazel-lib

load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
load("@platforms//host:extension.bzl", "host_platform_repo")

maybe(
    host_platform_repo,
    name = "host_platform",
)

load("//bzl:workspace_init.bzl", "platform_dependency_rule", "valdi_initialize_workspace")

# repo rule generates target_platform.bzl
platform_dependency_rule(name = "platform_check")

load("@platform_check//:target_platform.bzl", "VALDI_PLATFORM_DEPENDENCIES")

valdi_initialize_workspace(VALDI_PLATFORM_DEPENDENCIES)

load("@valdi_npm//:repositories.bzl", "npm_repositories")

npm_repositories()

load("//bzl:workspace_postinit.bzl", "valdi_post_initialize_workspace")

valdi_post_initialize_workspace()


================================================
FILE: WORKSPACE.bzlmod
================================================
android_sdk_repository(
    name = "androidsdk",
    api_level = 36,  # The API version for Android compileSdk
    build_tools_version = "34.0.0",
)

================================================
FILE: ai-skills/CONTRIBUTING_SKILLS.md
================================================
# Contributing Skills

Skills are neutral, agent-agnostic markdown files that teach AI assistants how to work with the Valdi framework. They are installed into your AI tool of choice using `valdi skills install`.

## What is a skill?

A skill is a single `skill.md` file containing focused guidance for a specific area of Valdi development. Skills are:

- **Agent-agnostic** — plain markdown with no tool-specific frontmatter or directives
- **Self-contained** — each skill covers one topic without assuming other skills are loaded
- **Code-first** — concrete examples with correct and incorrect patterns labeled clearly
- **Accurate** — verified against the actual Valdi source and documentation

## skill.md format

```markdown
# Skill Title

Brief description of what this skill covers.

## When to use

Optional section: describe the file types or scenarios where this skill applies.

## Key concepts

Prose or list explaining important ideas.

## Correct patterns

\`\`\`typescript
// ✅ Correct example
\`\`\`

## Common mistakes

\`\`\`typescript
// ❌ Wrong example
\`\`\`
```

Rules:
- Start with an H1 title
- Include code examples — skills without examples are less useful
- Label examples as `// ✅` (correct) or `// ❌` (wrong)
- No agent-specific frontmatter (no `alwaysApply`, no YAML blocks)
- No secrets, API keys, or proprietary Snap information

## Scaffolding a new skill

Run the interactive scaffold command from within the Valdi framework checkout:

```bash
valdi skills create
```

You will be prompted for a name, description, and category. The command creates `ai-skills/skills/<name>/skill.md` in the correct location and registers the entry in `ai-skills/registry.json` automatically.

## Submitting a skill to the public registry

1. Fork [github.com/Snapchat/Valdi](https://github.com/Snapchat/Valdi)
2. Run `valdi skills create` from the repo root — it creates the skill file and registers it in `registry.json` automatically
3. Fill in the `skill.md` content
4. Open a pull request — title it `[skill] Add <your-skill-name>`

## Review criteria

Pull requests adding or updating skills are reviewed for:

- **Accuracy** — does the code compile and run correctly against current Valdi?
- **Code examples** — are there concrete `✅` / `❌` examples?
- **Breadth** — does it cover the common cases a developer would encounter?
- **No hallucinations** — especially for TSX skills, ensure no React patterns are presented as valid Valdi
- **Conciseness** — focused guidance is more useful than exhaustive reference dumps


================================================
FILE: ai-skills/registry.json
================================================
{
  "version": "1.0.0",
  "skills": [
    { "name": "valdi-tsx", "description": "Valdi TSX component patterns, lifecycle, styling — NOT React", "tags": ["tsx", "components", "patterns", "styling"], "path": "skills/valdi-tsx/skill.md", "category": ["client"] },
    { "name": "valdi-bazel", "description": "Valdi Bazel build rules, valdi_module, platform builds", "tags": ["bazel", "build"], "path": "skills/valdi-bazel/skill.md", "category": ["framework", "client"] },
    { "name": "valdi-testing", "description": "Valdi unit and integration testing patterns", "tags": ["testing"], "path": "skills/valdi-testing/skill.md", "category": ["client"] },
    { "name": "valdi-ios", "description": "Valdi iOS platform integration, Swift/ObjC bridging", "tags": ["ios", "swift", "objc"], "path": "skills/valdi-ios/skill.md", "category": ["framework", "client"] },
    { "name": "valdi-android", "description": "Valdi Android platform integration, Kotlin/Java bridging", "tags": ["android", "kotlin"], "path": "skills/valdi-android/skill.md", "category": ["framework", "client"] },
    { "name": "valdi-cpp-runtime", "description": "Valdi C++ runtime internals, renderer, event system", "tags": ["cpp", "runtime"], "path": "skills/valdi-cpp-runtime/skill.md", "category": ["framework"] },
    { "name": "valdi-compiler", "description": "Valdi compiler pipeline, TSX→native compilation", "tags": ["compiler"], "path": "skills/valdi-compiler/skill.md", "category": ["framework"] },
    { "name": "valdi-polyglot-module", "description": "Valdi polyglot module system: cross-platform APIs, web polyglot entry pattern, webPolyglotViews", "tags": ["polyglot", "modules", "web"], "path": "skills/valdi-polyglot-module/skill.md", "category": ["client"] },
    { "name": "valdi-custom-view", "description": "Valdi custom native view integration", "tags": ["custom-view", "native"], "path": "skills/valdi-custom-view/skill.md", "category": ["client"] },
    { "name": "valdi-overview", "description": "Valdi framework overview and project conventions", "tags": ["overview", "conventions"], "path": "skills/valdi-overview/skill.md", "category": ["client"] },
    { "name": "valdi-async", "description": "Valdi async lifecycle safety: CancelablePromise, registerDisposable, isDestroyed guards", "tags": ["async", "lifecycle", "http"], "path": "skills/valdi-async/skill.md", "category": ["client"] },
    { "name": "valdi-perf", "description": "Valdi performance: viewModel identity stability, createReusableCallback, layout vs view, Style interning", "tags": ["performance", "rendering"], "path": "skills/valdi-perf/skill.md", "category": ["client"] },
    { "name": "valdi-component-tests", "description": "Valdi component test patterns: elementKeyFind, componentTypeFind, tapNodeWithKey, discriminated unions, arrays", "tags": ["testing", "components", "jasmine"], "path": "skills/valdi-component-tests/skill.md", "category": ["client"] },
    { "name": "valdi-setup", "description": "Valdi module setup: BUILD.bazel, valdi_module(), tsconfig, deps, ios_module_name, hot reload", "tags": ["setup", "bazel", "build"], "path": "skills/valdi-setup/skill.md", "category": ["client"] },
    { "name": "valdi-migrate", "description": "Migrate Flutter, React, or Jetpack Compose code to Valdi — component model, lifecycle, element mapping tables", "tags": ["migration", "flutter", "react", "compose"], "path": "skills/valdi-migrate/skill.md", "category": ["client"] }
  ]
}


================================================
FILE: ai-skills/skills/valdi-android/skill.md
================================================
# Android Runtime Rules

**Applies to**: Kotlin/Java files in `/valdi/src/valdi/android/` and related Android runtime code

## Overview

The Valdi Android runtime bridges TypeScript/Valdi components to native Android views. It's implemented in Kotlin and C++ (via JNI).

## Code Style

- **4-space indentation** for Kotlin/Java
- Follow Kotlin coding conventions
- Use Kotlin features (data classes, extension functions, etc.)

## Key Concepts

### View Rendering

- Valdi components map to Android Views
- View recycling for performance
- Efficient view updates

### Platform Bridge

- JNI bridge to C++ runtime
- Kotlin/Java to native code communication
- Performance-critical paths

## Common Patterns

### Bazel Android Targets

```python
android_library(
    name = "valdi_android",
    srcs = glob(["**/*.kt", "**/*.java"]),
)
```

### View Binding

- Custom view implementations
- Attribute binding for Valdi properties
- Event handling

## Testing

```bash
# Run Android runtime tests
bazel test //valdi:test_java

# Run with coverage
bazel coverage //valdi:test_java
```

Test files are in `/valdi/test/java/`

## Building

```bash
# Build Android runtime library
bazel build //valdi:valdi_android

# Test with hello world app
valdi install android
cd apps/helloworld
valdi install android
```

## Platform-Specific Notes

1. **API Level** - Be mindful of minimum API level
2. **Android NDK** - C++ integration via NDK
3. **Permissions** - Handle runtime permissions appropriately
4. **Lifecycle** - Android Activity/Fragment lifecycle

## Important

- **Performance** - View creation and updates are critical
- **Memory** - Be careful with leaks (Activity context)
- **Threading** - UI thread vs background threads
- **Compatibility** - Support multiple Android versions

## More Information

- Runtime source: `/valdi/src/valdi/android/`
- Runtime tests: `/valdi/test/java/`
- Build config: `/valdi/BUILD.bazel`
- Framework docs: `/AGENTS.md`


================================================
FILE: ai-skills/skills/valdi-async/skill.md
================================================
# Valdi Async & Lifecycle Safety

Async operations that complete after a component is destroyed will call `setState()`
on a dead component — the framework throws an error. The fix is always to cancel or
guard before the callback fires.

## HTTPClient: Store, Cancel, Repeat

`HTTPClient` methods return `CancelablePromise<HTTPResponse>`. Store it in a typed
field so you can cancel it in `onDestroy()` and before starting a new request in
`onViewModelUpdate()`.

```typescript
import { Component, StatefulComponent } from 'valdi_core/src/Component';
import { CancelablePromise } from 'valdi_core/src/CancelablePromise';
import { HTTPClient } from 'valdi_http/src/HTTPClient';
import { HTTPResponse } from 'valdi_http/src/HTTPTypes';

interface UserState {
  user: { name: string } | null;
  loading: boolean;
}

class UserProfile extends StatefulComponent<UserProfileViewModel, UserState> {
  state: UserState = { user: null, loading: true };

  private client = new HTTPClient('https://api.example.com');
  private request?: CancelablePromise<HTTPResponse>;

  onCreate(): void {
    this.fetchUser(this.viewModel.userId);
  }

  onViewModelUpdate(previous?: UserProfileViewModel): void {
    if (this.viewModel.userId !== previous?.userId) {
      this.request?.cancel?.();          // Cancel in-flight before starting new one
      this.fetchUser(this.viewModel.userId);
    }
  }

  onDestroy(): void {
    this.request?.cancel?.();            // Always clean up
  }

  private fetchUser(id: string): void {
    this.request = this.client.get(`/users/${id}`);
    this.request.then(response => {
      const user = JSON.parse(new TextDecoder().decode(response.body));
      this.setState({ user, loading: false });
    });
  }

  onRender(): void {
    if (this.state.loading) {
      <spinner />;
      return;
    }
    <label value={this.state.user?.name ?? ''} />;
  }
}
```

**Important:** `cancel` is an optional method on `CancelablePromise` — always use
`?.cancel?.()`, not `?.cancel()`.

## registerDisposable: Timers and Subscriptions

For anything that emits over time (timers, event emitters, observables), use
`registerDisposable()`. The framework calls `cancel()` on all registered disposables
in `onDestroy()` automatically — you don't need to override `onDestroy()` for these.

```typescript
class LiveClock extends Component<{}> {
  onCreate(): void {
    // ❌ Timer leaks if component is destroyed
    setInterval(() => this.tick(), 1000);

    // ✅ Automatically cancelled on destroy
    const id = setInterval(() => this.tick(), 1000);
    this.registerDisposable({ cancel: () => clearInterval(id) });
  }

  private tick = () => { /* ... */ };
}
```

Same pattern for any subscription-style API:

```typescript
onCreate(): void {
  const unsubscribe = eventEmitter.on('change', this.handleChange);
  this.registerDisposable({ cancel: unsubscribe });
}
```

## isDestroyed() Guard for Plain Promises

When using `async/await` or plain `Promise` chains that can't be cancelled, guard
`setState()` with `isDestroyed()` before calling it:

```typescript
private async loadData(): Promise<void> {
  const result = await someAsyncOperation();

  if (this.isDestroyed()) return;   // Component unmounted while awaiting

  this.setState({ data: result });
}
```

Prefer `CancelablePromise` + `registerDisposable` over this pattern where possible —
they make cancellation explicit and don't rely on the check being remembered.

## onViewModelUpdate: Cancel Before Restart

When a viewModel update requires fetching new data, always cancel the previous
request before starting a new one. Skipping this means two requests can be in flight
simultaneously and the earlier one can resolve last, overwriting newer data.

```typescript
onViewModelUpdate(previous?: MyViewModel): void {
  if (this.viewModel.query !== previous?.query) {
    this.searchRequest?.cancel?.();           // ← required
    this.searchRequest = this.client.get(`/search?q=${this.viewModel.query}`);
    this.searchRequest.then(response => {
      this.setState({ results: parse(response) });
    });
  }
}
```

## Observable Subscriptions

For RxJS or observable-based APIs, prefer `registerDisposable` for one-off subscriptions
or the `Subscription` class for managing multiple subscriptions as a group:

```typescript
import { Subscription } from 'rxjs';

class FeedComponent extends StatefulComponent<FeedViewModel, FeedState> {
  private subscription = new Subscription();

  onCreate(): void {
    // Add multiple subscriptions to the group
    this.subscription.add(
      this.viewModel.feedItems$.subscribe({ next: items => this.setState({ items }) })
    );
    this.subscription.add(
      this.viewModel.loading$.subscribe({ next: loading => this.setState({ loading }) })
    );
  }

  onDestroy(): void {
    this.subscription?.unsubscribe();   // Cancels all at once
  }
}
```

For a single subscription, `registerDisposable` is simpler:

```typescript
onCreate(): void {
  this.registerDisposable(
    this.viewModel.counter$.subscribe({ next: count => this.setState({ count }) })
  );
  // No onDestroy() override needed
}
```

### Preventing redundant re-renders with distinctUntilChanged

Subscribe with `distinctUntilChanged()` to skip emissions where the value hasn't
actually changed — avoids a `setState` call and a re-render for each identical value:

```typescript
import { distinctUntilChanged } from 'rxjs/operators';

this.subscription.add(
  this.viewModel.title$.pipe(distinctUntilChanged()).subscribe({
    next: title => this.setState({ title }),
  })
);
```

## setTimeoutInterruptible for Debounce / Race Conditions

When a delayed action must be cancelled if conditions change (e.g. search debounce,
retry delay), use `setTimeoutInterruptible` rather than a bare `setTimeout`:

```typescript
import { setTimeoutInterruptible } from 'valdi_core/src/SetTimeout';

// setTimeoutInterruptible returns a number (timer ID) — cancel with clearTimeout()
class SearchBar extends StatefulComponent<SearchViewModel, SearchState> {
  private debounceId?: number;

  onViewModelUpdate(previous?: SearchViewModel): void {
    if (this.viewModel.query !== previous?.query) {
      clearTimeout(this.debounceId);   // Cancel any pending debounce
      this.debounceId = setTimeoutInterruptible(() => {
        this.fetchResults(this.viewModel.query);
      }, 300);
    }
  }
}
```

## promiseToCancelablePromise

When you have a plain `Promise` (e.g. from a third-party library) that needs to participate in Valdi's cancellation system, wrap it with `promiseToCancelablePromise`:

```typescript
import { CancelablePromise, promiseToCancelablePromise } from 'valdi_core/src/CancelablePromise';

class MyComponent extends StatefulComponent<MyViewModel, MyState> {
  private request?: CancelablePromise<string>;

  onCreate(): void {
    const rawPromise: Promise<string> = thirdPartyApi.fetchData();
    this.request = promiseToCancelablePromise(rawPromise, () => {
      // optional cleanup on cancel
    });
    this.request.then(data => {
      if (this.isDestroyed()) return;
      this.setState({ data });
    });
  }

  onDestroy(): void {
    this.request?.cancel?.();
  }
}
```

Prefer `CancelablePromise` directly (e.g. `HTTPClient`) when available — `promiseToCancelablePromise` is the bridge for external APIs.

## Import Paths

```typescript
import { CancelablePromise, promiseToCancelablePromise } from 'valdi_core/src/CancelablePromise';
import { HTTPClient } from 'valdi_http/src/HTTPClient';
import { HTTPResponse } from 'valdi_http/src/HTTPTypes';
import { setTimeoutInterruptible } from 'valdi_core/src/SetTimeout';
import { Subscription } from 'rxjs';
import { distinctUntilChanged } from 'rxjs/operators';
```


================================================
FILE: ai-skills/skills/valdi-async/tests/BUILD.bazel
================================================
load("//bzl/valdi:valdi_module.bzl", "valdi_module")

valdi_module(
    name = "tests",
    srcs = glob([
        "src/**/*.ts",
        "src/**/*.tsx",
    ]) + [
        "tsconfig.json",
    ],
    android_output_target = "release",
    ios_module_name = "SCCValdiAsyncRef",
    ios_output_target = "release",
    visibility = ["//visibility:public"],
    deps = [
        "//src/valdi_modules/src/valdi/valdi_core",
        "//src/valdi_modules/src/valdi/valdi_http",
    ],
)


================================================
FILE: ai-skills/skills/valdi-async/tests/README.md
================================================
# valdi-async skill tests

Compile check for the async lifecycle safety patterns taught in `skill.md`.

## What's tested

`src/reference.tsx` exercises:
- `HTTPClient` + `CancelablePromise`: store in field, cancel in `onDestroy`, cancel before restart in `onViewModelUpdate`
- `registerDisposable` with `setInterval` for auto-cleanup subscriptions
- `isDestroyed()` guard for plain `Promise` / `async/await`
- `setTimeoutInterruptible` for debounce — returns `number`, cancel with `clearTimeout()`
- `promiseToCancelablePromise` wrapping a third-party `Promise`

## Compile check

```bash
cd client/src/open_source
bazel build //ai-skills/skills/valdi-async/tests:tests
```

Expected: `Build completed successfully`

## Updating

When Valdi APIs change (import paths, type signatures), update `src/reference.tsx` to match and keep it compiling. Also update `../skill.md` with any corrected patterns.


================================================
FILE: ai-skills/skills/valdi-async/tests/src/reference.tsx
================================================
// valdi-async skill reference — compile check for async lifecycle safety patterns.
// This file must compile cleanly against the Valdi TypeScript compiler.
// Run: bzl build //ai-skills/skills/valdi-async/tests:tests

import { StatefulComponent } from 'valdi_core/src/Component';
import { CancelablePromise, promiseToCancelablePromise } from 'valdi_core/src/CancelablePromise';
import { setTimeoutInterruptible } from 'valdi_core/src/SetTimeout';
import { HTTPClient } from 'valdi_http/src/HTTPClient';
import { HTTPResponse } from 'valdi_http/src/HTTPTypes';

// ─── HTTPClient: store, cancel in onDestroy, cancel before restart ────────────

interface UserProfileViewModel {
  userId: string;
}

interface UserProfileState {
  user: { name: string } | null;
  loading: boolean;
}

class UserProfile extends StatefulComponent<UserProfileViewModel, UserProfileState> {
  state: UserProfileState = { user: null, loading: true };

  private client = new HTTPClient('https://api.example.com');
  private request?: CancelablePromise<HTTPResponse>;

  onCreate(): void {
    this.fetchUser(this.viewModel.userId);
  }

  onViewModelUpdate(previous?: UserProfileViewModel): void {
    if (this.viewModel.userId !== previous?.userId) {
      this.request?.cancel?.();           // Cancel in-flight before starting new one
      this.fetchUser(this.viewModel.userId);
    }
  }

  onDestroy(): void {
    this.request?.cancel?.();             // Always clean up
  }

  private fetchUser(id: string): void {
    this.request = this.client.get(`/users/${id}`);
    this.request.then(response => {
      const user = JSON.parse(new TextDecoder().decode(response.body)) as { name: string };
      this.setState({ user, loading: false });
    });
  }

  onRender(): void {
    if (this.state.loading) {
      <spinner />;
      return;
    }
    <label value={this.state.user?.name ?? ''} />;
  }
}

// ─── registerDisposable: timers and subscriptions ────────────────────────────

interface ClockViewModel {
  format: string;
}

interface ClockState {
  ticks: number;
}

class LiveClock extends StatefulComponent<ClockViewModel, ClockState> {
  state: ClockState = { ticks: 0 };

  onCreate(): void {
    // ✅ Automatically cancelled on destroy — no onDestroy() needed
    const id = setInterval(() => this.tick(), 1000);
    this.registerDisposable({ cancel: () => clearInterval(id) });
  }

  private tick = (): void => {
    this.setState({ ticks: this.state.ticks + 1 });
  };

  onRender(): void {
    <label value={String(this.state.ticks)} />;
  }
}

// ─── isDestroyed() guard for plain Promises ──────────────────────────────────

declare function expensiveOperation(): Promise<string>;

interface DataState {
  data: string | null;
}

interface DataViewModel {
  query: string;
}

class DataLoader extends StatefulComponent<DataViewModel, DataState> {
  state: DataState = { data: null };

  onCreate(): void {
    this.loadData().catch(() => {});
  }

  private async loadData(): Promise<void> {
    const result = await expensiveOperation();

    if (this.isDestroyed()) return;   // Guard before setState

    this.setState({ data: result });
  }

  onRender(): void {
    <label value={this.state.data ?? 'Loading…'} />;
  }
}

// ─── setTimeoutInterruptible for debounce ────────────────────────────────────
// setTimeoutInterruptible returns number (timer ID) — cancel with clearTimeout

interface SearchViewModel {
  query: string;
}

interface SearchState {
  results: string[];
}

class SearchBar extends StatefulComponent<SearchViewModel, SearchState> {
  state: SearchState = { results: [] };

  private debounceId?: number;
  private searchRequest?: CancelablePromise<HTTPResponse>;
  private client = new HTTPClient('https://api.example.com');

  onViewModelUpdate(previous?: SearchViewModel): void {
    if (this.viewModel.query !== previous?.query) {
      clearTimeout(this.debounceId);    // Cancel pending debounce
      this.debounceId = setTimeoutInterruptible(() => {
        this.fetchResults(this.viewModel.query);
      }, 300);
    }
  }

  onDestroy(): void {
    this.searchRequest?.cancel?.();
  }

  private fetchResults(query: string): void {
    this.searchRequest?.cancel?.();
    this.searchRequest = this.client.get(`/search?q=${encodeURIComponent(query)}`);
    this.searchRequest.then(response => {
      const data = JSON.parse(new TextDecoder().decode(response.body)) as { results: string[] };
      this.setState({ results: data.results });
    });
  }

  onRender(): void {
    <scroll>
      {this.state.results.forEach(result => {
        <label key={result} value={result} />;
      })}
    </scroll>;
  }
}

// ─── promiseToCancelablePromise ──────────────────────────────────────────────

declare function thirdPartyFetch(url: string): Promise<string>;

interface FetchState {
  content: string | null;
}

interface FetchViewModel {
  url: string;
}

class ThirdPartyFetcher extends StatefulComponent<FetchViewModel, FetchState> {
  state: FetchState = { content: null };

  private request?: CancelablePromise<string>;

  onCreate(): void {
    const rawPromise = thirdPartyFetch(this.viewModel.url);
    this.request = promiseToCancelablePromise(rawPromise, () => {
      // optional cleanup on cancel
    });
    this.request.then(content => {
      if (this.isDestroyed()) return;
      this.setState({ content });
    });
  }

  onDestroy(): void {
    this.request?.cancel?.();
  }

  onRender(): void {
    <label value={this.state.content ?? ''} />;
  }
}

void UserProfile;
void LiveClock;
void DataLoader;
void SearchBar;
void ThirdPartyFetcher;


================================================
FILE: ai-skills/skills/valdi-async/tests/tsconfig.json
================================================
{"extends": "../../../../src/valdi_modules/src/valdi/_configs/base.tsconfig.json"}


================================================
FILE: ai-skills/skills/valdi-bazel/skill.md
================================================
# Bazel Build System Rules

**Applies to**: `BUILD.bazel`, `*.bzl` files in `/bzl/`, `WORKSPACE`, `MODULE.bazel`

## Overview

Valdi uses Bazel as its build system. Bazel provides reproducible, incremental builds across all platforms.

## Key Commands

```bash
# Build everything
bazel build //...

# Build specific target
bazel build //apps/helloworld:helloworld

# Run tests
bazel test //...

# Clean (use sparingly - cache is valuable!)
bazel clean
```

## Important Notes

1. **Use `bazel`** for all build commands
2. **The CLI wraps Bazel** - `valdi` commands use bazel under the hood
3. **Cache is important** - Don't suggest `bazel clean` unless necessary

## Build Rules

### Valdi-Specific Rules

- `/bzl/valdi/` - Valdi build rules and macros
- Custom rules for compiling .tsx to .valdimodule
- Platform-specific build transitions

### Common Targets

```python
# Valdi application
valdi_application(
    name = "my_app",
    root_component_path = "App@my_app/src/MyApp",
    title = "My App",
    version = "1.0.0",
    deps = ["//apps/my_app/src/valdi/my_app"],
)

# Valdi module
valdi_module(
    name = "my_module",
    srcs = glob(["src/**/*.ts", "src/**/*.tsx"]),
    deps = [
        "//src/valdi_modules/src/valdi/valdi_core",
    ],
)
```

## Conventions

### File Naming

- `BUILD.bazel` not `BUILD` (explicit extension)
- `.bzl` for Starlark macros and rules

### Targets

- Use descriptive target names
- One main target per BUILD file usually matches directory name

### Dependencies

- Be explicit about dependencies
- Don't rely on transitive deps implicitly
- Use visibility to control access

## Platform Builds

```bash
# Build and install iOS app
valdi install ios

# Build and install Android app
valdi install android

# Or use bazel directly with configs
bazel build //apps/helloworld:hello_world --config=ios
bazel build //apps/helloworld:hello_world --config=android
```

## Configuration

- `.bazelrc` - Build flags and configurations
- `MODULE.bazel` - Bazel module dependencies
- `WORKSPACE` - Legacy workspace configuration (being migrated to MODULE.bazel)

## Common Issues

1. **Missing dependencies** - Add to `deps` in BUILD.bazel
2. **Cache issues** - Try `bazel clean --expunge` (last resort)
3. **Platform transitions** - Use correct config flags

## Testing

```bash
# Run all tests
bazel test //...

# Run specific test
bazel test //valdi/test:renderer_test

# Run with coverage
bazel coverage //...
```

## More Information

- Bazel docs: https://bazel.build
- Valdi build rules: `/bzl/valdi/README.md`
- Framework docs: `/AGENTS.md`


================================================
FILE: ai-skills/skills/valdi-compiler/skill.md
================================================
# Valdi Compiler Rules

**Applies to**: Swift files in `/compiler/compiler/`

## Overview

The Valdi compiler consists of two parts:

1. **Compiler (Swift)**: Transforms TypeScript/TSX into `.valdimodule` files
2. **Companion (TypeScript/Node.js)**: Handles TypeScript compilation, type checking, and provides debugging support

## Key Conventions

### Code Style

- **4-space indentation** for Swift
- Follow Swift naming conventions (camelCase for methods, PascalCase for types)
- Use Swift type inference where appropriate
- Prefer `let` over `var` when possible

### Architecture

- Compiler is a multi-pass system
- AST transformation pipeline
- Type checking and validation
- Code generation for each platform

### Important Files

- `/compiler/compiler/` - Main Swift compiler implementation
- Output: `.valdimodule` files (binary format read by runtime)

## Common Patterns

### AST Traversal

```swift
// Follow existing visitor patterns
class MyASTVisitor: ASTVisitor {
    func visit(_ node: Node) -> Result {
        // Visit logic
    }
}
```

### Error Handling

```swift
// Use proper error types
enum CompilerError: Error {
    case invalidSyntax(String)
    case typeError(String)
}
```

## Testing

Tests are critical - add tests for new features and error cases. The `update_compiler.sh` script runs tests automatically.

## Build

### Using the update script (recommended):

```bash
cd compiler/compiler
./scripts/update_compiler.sh ../../bin/compiler
```

This script:
- Runs `swift test` automatically
- Builds the compiler for the correct architecture
- Copies the binary to `bin/compiler/macos/valdi_compiler` (or `linux/valdi_compiler`)
- Handles platform differences (macOS vs Linux)

### Alternative: Using Xcode

Open `compiler/compiler/Compiler/Package.swift` in Xcode, let it resolve dependencies, then build.

## Companion (TypeScript)

The companion is a TypeScript service that works alongside the Swift compiler. It handles TypeScript compilation, type checking, and provides debugging support.

### Build the companion:

```bash
cd compiler/companion
./scripts/update_companion.sh ../../bin/compiler_companion
```

This script:
- Runs `npm install`
- Runs `npm run test`
- Builds with `bazel build //compiler/companion:bundle`
- Copies output to `bin/compiler_companion`

**Note**: Once built, the companion is automatically invoked by the compiler during compilation. You don't need to run it manually - it's part of the compiler process.

## Important Notes

1. **Performance matters** - Compiler speed affects developer experience
2. **Error messages** - Make them helpful and actionable
3. **Backward compatibility** - Don't break existing .valdimodule files
4. **Cross-platform** - Consider iOS, Android, macOS targets

## More Information

- Compiler architecture: `/compiler/compiler/README.md`
- Framework docs: `/AGENTS.md`


================================================
FILE: ai-skills/skills/valdi-component-tests/skill.md
================================================
# Write Valdi Component Tests

Write unit tests for a Valdi component using standard Valdi test suite patterns.

## Steps

### 1. Read the source component

Read the component source file to understand:
- What view model properties it accepts
- Which JSX elements have `key` attributes
- What changes based on view model props vs. what's always static
- How "hidden" state is implemented (translationY, opacity, or child component prop)
- Whether the view model contains any **discriminated unions** (type/kind fields)
- Whether any props are **arrays** of items to render

### 2. Add `key` attributes to source elements (only if needed)

Add `key` attributes **only** to elements whose rendering depends on view model properties. Never add keys to static content.

Good candidates for keys:
- The outer container when `hidden` controls `translationY` or `opacity`
- An `<image>` element whose `src` comes from a view model URL prop
- An element inside a `when(condition, ...)` block (to assert presence/absence)
- A badge/overlay that toggles based on a boolean prop
- A spinner shown in a loading/saving state of a union type

Do NOT add keys to:
- Elements with hardcoded asset values (e.g., `src={SIGIcon.xSignStroke}`)
- Label elements with always-present localized strings
- Elements that are always rendered the same regardless of view model

### 3. Determine the test file path

Test files **must mirror the source file hierarchy**. For example:
- Source: `src/categories/CollectionComponent.tsx` → Test: `test/categories/CollectionComponentTest.spec.tsx`
- Source: `src/home_page/OptionPreviewView.tsx` → Test: `test/home_page/OptionPreviewViewTest.spec.tsx`
- Source: `src/MyComponent.tsx` → Test: `test/MyComponentTest.spec.tsx`

### 4. Write the test file

**Imports:**
```tsx
import { MyComponent } from 'my_module/src/MyComponent';
import { componentGetElements } from 'foundation/test/util/componentGetElements';
import { componentTypeFind } from 'foundation/test/util/componentTypeFind';
import { elementKeyFind } from 'foundation/test/util/elementKeyFind';
import { elementTypeFind } from 'foundation/test/util/elementTypeFind';
import { findNodeWithKey } from 'foundation/test/util/findNodeWithKey';
import { tapNodeWithKey } from 'foundation/test/util/tapNodeWithKey';
import 'jasmine/src/jasmine';
import { IRenderedElementViewClass } from 'valdi_test/test/IRenderedElementViewClass';
import { IComponentTestDriver, valdiIt } from 'valdi_test/test/JSXTestUtils';
import { ImageView, View } from 'valdi_tsx/src/NativeTemplateElements';
```

Only import what you actually use. `View` is needed when you call `getAttribute` on a non-image element (e.g., for `onTap`, `onVisibilityChanged`). `ImageView` is needed for `src` attribute access.

**Factory function pattern (always add explicit return type):**
```tsx
const makeViewModel = (): MyComponentViewModel => ({
  imageUrl: 'https://example.com/image.png',
  isVisible: true,
  onTap: fail.bind(null, 'onTap should not be called'),
});
```

Use `fail.bind` for callbacks in the factory default — tests that need to assert on a callback should declare their own spy and pass it explicitly, rather than relying on the factory.

**Render pattern:**
```tsx
const nodes = driver.render(() => {
  <MyComponent {...viewModel} />;
});
```

### 5. Test patterns by assertion type

#### Finding elements
```tsx
// Single-level: component renders native elements directly
elementKeyFind(componentGetElements(nodes[0].component!), 'my-key')[0]

// Cross-boundary: component renders a child component that renders the elements
const inner = componentTypeFind(nodes[0].component as MyComponent, InnerComponent)[0];
elementKeyFind(componentGetElements(inner), 'my-key')[0]

// Typed (for typed attribute access without casting):
elementKeyFind<View>(componentGetElements(nodes[0].component!), 'container')[0]
elementKeyFind<ImageView>(componentGetElements(nodes[0].component!), 'image')[0]

// By element type (e.g. find all Label elements):
// Can pass componentGetElements() result OR an IComponent directly:
const labels = elementTypeFind(componentGetElements(nodes[0].component!), IRenderedElementViewClass.Label);
const labels2 = elementTypeFind(nodes[0].component!, IRenderedElementViewClass.Label); // equivalent
expect(labels[0]?.getAttribute('value')).toBe('Expected text');
```

Use the generic type param to get typed `getAttribute()` results and avoid `@typescript-eslint/no-unsafe-call` errors — prefer this over casting the `getAttribute()` return value.

`elementTypeFind` is useful when elements don't have `key` attributes but you know their type (Label, Image, View, etc.). It returns all elements of that type in render order.

#### Hidden via `translationY`
```tsx
// hidden=false
expect(elementKeyFind<View>(componentGetElements(nodes[0].component!), 'container')[0]?.getAttribute('translationY')).toBe(0);

// hidden=true
expect(elementKeyFind<View>(componentGetElements(nodes[0].component!), 'container')[0]?.getAttribute('translationY')).toBe(850);
```

#### Hidden via `opacity` on native view
```tsx
// visible
expect(elementKeyFind<View>(componentGetElements(nodes[0].component!), 'my-view')[0]?.getAttribute('opacity')).toBe(1);

// hidden
expect(elementKeyFind<View>(componentGetElements(nodes[0].component!), 'my-view')[0]?.getAttribute('opacity')).toBe(0);
```

#### Hidden via `opacity` prop passed to a child Component (component boundary)
```tsx
import { CoreButton } from 'coreui/src/components/button/CoreButton';
const component = nodes[0].component as MyComponent;
const buttons = componentTypeFind(component, CoreButton);
expect(buttons[0].viewModel.opacity).toBe(1); // or 0
```

#### View model URL bound to image `src`
```tsx
expect(elementKeyFind<ImageView>(componentGetElements(nodes[0].component!), 'my-image')[0]?.getAttribute('src')).toBe('https://example.com/image.png');
```

#### Text from view model
```tsx
expect(elementKeyFind(componentGetElements(nodes[0].component!), 'my-label')[0]?.getAttribute('value')).toBe('Expected Text');
```

#### `when()`-conditional element (boolean presence)
```tsx
// condition=true → element exists
expect(elementKeyFind(componentGetElements(nodes[0].component!), 'my-element')[0]).toBeDefined();

// condition=false → element absent
expect(elementKeyFind(componentGetElements(nodes[0].component!), 'my-element')[0]).toBeUndefined();
```

#### `when()`-conditional Component (boolean presence via componentTypeFind)
```tsx
import { BadgeComponent } from 'my_module/src/BadgeComponent';
const component = nodes[0].component as MyComponent;

// condition=true
expect(componentTypeFind(component, BadgeComponent).length).toBe(1);

// condition=false
expect(componentTypeFind(component, BadgeComponent).length).toBe(0);
```

#### Callbacks not expected to be invoked

For callbacks that should never fire in a given test, use `fail.bind(null, '...')` instead of `jasmine.createSpy`. This causes the test to immediately fail with a clear message if the callback is accidentally triggered:

```tsx
<MyComponent
  onSelect={fail.bind(null, 'onSelect should not be called')}
  onLoad={onLoad}
/>
```

`fail.bind(null, 'message')` is a plain function call (not an inline lambda), so it satisfies `jsx-no-lambda`. It is assignable to any callback type since TypeScript allows functions with fewer parameters.

If the same fail callback is used across many tests in the file, extract it to a module-level const to avoid repetition:

```tsx
const failOnSelect = (): void => fail('onSelect should not be called');
```

#### Tap callback (use `tapNodeWithKey` — it's async, always `await` it)

`tapNodeWithKey(component, key, timeoutMs?, intervalMs?)` accepts `IComponent | IRenderedElement`.

```tsx
const onTap = jasmine.createSpy('onTap');
const nodes = driver.render(() => {
  <MyComponent onTap={onTap} />;
});
await tapNodeWithKey(nodes[0].component!, 'my-button');
expect(onTap).toHaveBeenCalled();
```

When you need to find a node without tapping it, use `findNodeWithKey`:
```tsx
import { findNodeWithKey } from 'foundation/test/util/findNodeWithKey';

const node = findNodeWithKey(nodes[0].component!, 'my-button')[0];
expect(node).toBeDefined();
```

When the callback receives arguments (e.g., an index), always assert the exact arguments with `toHaveBeenCalledWith`:
```tsx
const onSelect = jasmine.createSpy('onSelect');
// ... render and trigger ...
expect(onSelect).toHaveBeenCalledWith(1); // not just toHaveBeenCalled()
```

For callbacks invoked via a child component's view model (e.g., through `componentTypeFind`), call the view model method directly:
```tsx
const component = nodes[0].component as MyComponent;
componentTypeFind(component, ItemComponent)[1].viewModel.onTap();
expect(onSelect).toHaveBeenCalledWith(1);
```

#### `onTap` retrieved via `getAttribute` (non-tappable element pattern)
```tsx
// Use elementKeyFind<View> so getAttribute('onTap') is typed — no cast needed
const el = elementKeyFind<View>(componentGetElements(nodes[0].component!), 'my-element')[0];
el?.getAttribute('onTap')?.();
expect(onTap).toHaveBeenCalled();
```

#### `onVisibilityChanged` callback

`View.onVisibilityChanged` signature is `(isVisible: boolean, eventTime: EventTime)` where `EventTime = number`. Always pass both args when invoking:

```tsx
const el = elementKeyFind<View>(componentGetElements(nodes[0].component!), 'container')[0];
el?.getAttribute('onVisibilityChanged')?.(true, 0);
```

**Asserting the callback:** depends on how the component wires the handler:

- If the component **wraps** the viewModel callback (e.g., `onVisibilityChanged={(v) => vm.onVisibilityChanged(v)}`), `toHaveBeenCalledWith(true)` works:
  ```tsx
  expect(onVisibilityChanged).toHaveBeenCalledWith(true);
  ```

- If the component **directly assigns** the viewModel callback (e.g., `onVisibilityChanged={this.viewModel.onVisibilityChanged}`), the spy receives both args. If the spy is typed as `(isVisible: boolean) => void`, `toHaveBeenCalledWith(true, ...)` is a TypeScript error. Check the first arg via `calls`:
  ```tsx
  const spy = viewModel.onVisibilityChanged as jasmine.Spy;
  expect(spy).toHaveBeenCalled();
  expect(spy.calls.mostRecent().args[0]).toBe(true);
  ```
  If the spy is an untyped `jasmine.createSpy()`, you can use `toHaveBeenCalledWith(true, 0)` directly.

### 6. Discriminated union state testing

When a view model contains a discriminated union (e.g., `type: 'LOADING' | 'CONTENT' | 'ERROR'`), **test every branch**. For each state:
1. Assert which elements/components ARE rendered
2. Assert which elements/components from OTHER states are NOT rendered

```tsx
// LOADING state: spinner present, action button absent
valdiIt('Verify spinner is shown in loading state', async driver => {
  const nodes = driver.render(() => {
    <MyComponent button={{ type: ButtonType.LOADING }} />;
  });
  expect(elementKeyFind(componentGetElements(nodes[0].component!), 'loading-spinner')[0]).toBeDefined();
  expect(elementKeyFind(componentGetElements(nodes[0].component!), 'action-button')[0]).toBeUndefined();
});

// CONTENT state: action button present, no spinner
valdiIt('Verify action button is shown in content state', async driver => {
  const nodes = driver.render(() => {
    <MyComponent button={{ type: ButtonType.PURCHASE, price: '$9.99', onTap }} />;
  });
  expect(elementKeyFind(componentGetElements(nodes[0].component!), 'action-button')[0]).toBeDefined();
  expect(elementKeyFind(componentGetElements(nodes[0].component!), 'loading-spinner')[0]).toBeUndefined();
});
```

### 7. Array view model testing

When a component renders a list from an array prop, test three cases:
1. **Empty array** — assert 0 items render
2. **Single item** — assert 1 item renders
3. **Multiple items** — assert item count matches array length

Use `componentTypeFind(component, ItemComponent)` or `elementKeyFind` with indexed keys (e.g., `tile-0`, `tile-1`) to count rendered items.

```tsx
valdiIt('Verify no items render when array is empty', async driver => {
  const emptyOptions: OptionViewModel[] = [];
  const nodes = driver.render(() => {
    <MyComponent items={emptyOptions} />;
  });
  const component = nodes[0].component as MyComponent;
  expect(componentTypeFind(component, ItemComponent).length).toBe(0);
});

valdiIt('Verify item count matches array length', async driver => {
  const threeItems: OptionViewModel[] = [makeItem('a'), makeItem('b'), makeItem('c')];
  const nodes = driver.render(() => {
    <MyComponent items={threeItems} />;
  });
  const component = nodes[0].component as MyComponent;
  expect(componentTypeFind(component, ItemComponent).length).toBe(3);
});
```

Note: Extract array literals to local `const` variables before using in JSX (required by `@snapchat/valdi/jsx-no-lambda`).

### 8. Component boundary traversal

When a component's `onRender()` only renders child components (not native elements), `componentGetElements(component)` returns `[]`. You must get the child component first:

```tsx
import { componentGetElements } from 'foundation/test/util/componentGetElements';
import { componentTypeFind } from 'foundation/test/util/componentTypeFind';
import { elementKeyFind } from 'foundation/test/util/elementKeyFind';

const component = nodes[0].component as OuterComponent;
const inner = componentTypeFind(component, InnerComponent)[0];
const container = elementKeyFind<View>(componentGetElements(inner), 'container')[0];
expect(container?.getAttribute('translationY')).toBe(0);
```

### 9. Extract render and find helpers for readability

For larger test files, extract repeated render + find logic into helper functions. This keeps individual tests focused:

```tsx
// Extract rendering
const renderComponent = (driver: IComponentTestDriver, overrides?: Partial<MyComponentViewModel>) => {
  const vm = { ...makeViewModel(), ...overrides };
  return driver.render(() => { <MyComponent {...vm} />; })[0].component as MyComponent;
};

// Extract finding
const getImage = (component: MyComponent) =>
  elementKeyFind<ImageView>(componentGetElements(component), 'image')[0];

// Tests become clean:
valdiIt('Verify imageUrl is bound', async driver => {
  expect(getImage(renderComponent(driver))?.getAttribute('src')).toBe('https://example.com/image.png');
});
```

### 10. Lint rules to follow

- **`explicit-function-return-type`**: Always add explicit return types to factory functions: `const makeViewModel = (): MyViewModel => ({...})`
- **`jsx-no-lambda`**: Never assign inline array literals directly in JSX props. Extract to a local `const` first:
  ```tsx
  // WRONG
  <MyComponent items={[makeItem('a')]} />;

  // CORRECT
  const items: ItemViewModel[] = [makeItem('a')];
  <MyComponent items={items} />;
  ```
- **`no-unsafe-call`**: Use the generic type parameter on `elementKeyFind<T>` to get typed `getAttribute()` results rather than casting: `elementKeyFind<View>(...)` gives typed access to `onTap`, `onVisibilityChanged`, etc.
- **`import/order`**: Keep imports sorted alphabetically by path.

### 11. Key principle

**Only assert on things that change based on view model props.** Every test should have a clear "when X is Y, then Z" story. If the UI looks the same regardless of the prop, skip it.

For union types, a test that only verifies "the component renders without error" in a given state is not sufficient — assert the meaningful structural difference that state introduces.

## Example test file structure

```tsx
import { MyComponent } from 'my_module/src/MyComponent';
import { MyComponentViewModel } from 'my_module/src/MyComponentViewModel';
import { ChildComponent } from 'my_module/src/ChildComponent';
import { componentGetElements } from 'foundation/test/util/componentGetElements';
import { componentTypeFind } from 'foundation/test/util/componentTypeFind';
import { elementKeyFind } from 'foundation/test/util/elementKeyFind';
import { tapNodeWithKey } from 'foundation/test/util/tapNodeWithKey';
import 'jasmine/src/jasmine';
import { IComponentTestDriver, valdiIt } from 'valdi_test/test/JSXTestUtils';
import { ImageView, View } from 'valdi_tsx/src/NativeTemplateElements';
// elementTypeFind + IRenderedElementViewClass for finding elements by type (no key needed):
// import { elementTypeFind } from 'foundation/test/util/elementTypeFind';
// import { IRenderedElementViewClass } from 'valdi_test/test/IRenderedElementViewClass';

const makeViewModel = (): MyComponentViewModel => ({
  imageUrl: 'https://example.com/image.png',
  isVisible: true,
  onTap: fail.bind(null, 'onTap should not be called'),
});

describe('MyComponentTest', () => {
  valdiIt('Verify visible when isVisible is true', async driver => {
    const nodes = driver.render(() => {
      <MyComponent {...makeViewModel()} />;
    });
    expect(elementKeyFind<View>(componentGetElements(nodes[0].component!), 'container')[0]?.getAttribute('opacity')).toBe(1);
  });

  valdiIt('Verify hidden when isVisible is false', async driver => {
    const nodes = driver.render(() => {
      <MyComponent {...{ ...makeViewModel(), isVisible: false }} />;
    });
    expect(elementKeyFind<View>(componentGetElements(nodes[0].component!), 'container')[0]?.getAttribute('opacity')).toBe(0);
  });

  valdiIt('Verify imageUrl is bound to image src', async driver => {
    const nodes = driver.render(() => {
      <MyComponent {...makeViewModel()} />;
    });
    expect(elementKeyFind<ImageView>(componentGetElements(nodes[0].component!), 'image')[0]?.getAttribute('src')).toBe('https://example.com/image.png');
  });

  valdiIt('Verify onTap is called when tapped', async driver => {
    const onTap = jasmine.createSpy('onTap');
    const nodes = driver.render(() => {
      <MyComponent {...{ ...makeViewModel(), onTap }} />;
    });
    await tapNodeWithKey(nodes[0].component!, 'button');
    expect(onTap).toHaveBeenCalled();
  });

  valdiIt('Verify ChildComponent is present when condition is true', async driver => {
    const nodes = driver.render(() => {
      <MyComponent {...{ ...makeViewModel(), showChild: true }} />;
    });
    const component = nodes[0].component as MyComponent;
    expect(componentTypeFind(component, ChildComponent).length).toBe(1);
  });

  valdiIt('Verify ChildComponent is absent when condition is false', async driver => {
    const nodes = driver.render(() => {
      <MyComponent {...{ ...makeViewModel(), showChild: false }} />;
    });
    const component = nodes[0].component as MyComponent;
    expect(componentTypeFind(component, ChildComponent).length).toBe(0);
  });
});
```


================================================
FILE: ai-skills/skills/valdi-component-tests/tests/BUILD.bazel
================================================
load("//bzl/valdi:valdi_module.bzl", "valdi_module")

valdi_module(
    name = "tests",
    srcs = glob([
        "src/**/*.ts",
        "src/**/*.tsx",
        "test/**/*.ts",
        "test/**/*.tsx",
    ]) + [
        "tsconfig.json",
    ],
    android_output_target = "debug",
    ios_module_name = "SCCValdiCompTestRef",
    ios_output_target = "debug",
    visibility = ["//visibility:public"],
    deps = [
        "//src/valdi_modules/src/valdi/foundation",
        "//src/valdi_modules/src/valdi/jasmine",
        "//src/valdi_modules/src/valdi/valdi_core",
        "//src/valdi_modules/src/valdi/valdi_test",
        "//src/valdi_modules/src/valdi/valdi_tsx",
    ],
)


================================================
FILE: ai-skills/skills/valdi-component-tests/tests/README.md
================================================
# valdi-component-tests skill tests

Reference spec file demonstrating all test utility patterns from `skill.md`.

## Files

| File | Description |
|------|-------------|
| `src/ProfileCard.tsx` | Component under test — has an image, labels, conditional child, tap handler |
| `test/ProfileCardTest.spec.tsx` | Spec file exercising all test utilities |

## What's demonstrated

`test/ProfileCardTest.spec.tsx` exercises:
- `elementKeyFind<ImageView>` — typed `getAttribute('src')` on image element
- `elementKeyFind` — untyped string attribute access
- `elementKeyFind<View>` — typed `getAttribute('onTap')` for direct invocation
- `elementTypeFind` — find elements by type (`IRenderedElementViewClass.Label`)
- `componentTypeFind` — conditional child component presence/absence
- `tapNodeWithKey` — async tap triggering a spy callback
- `fail.bind(null, '...')` — factory function default for callbacks that must not fire
- `valdiIt` — test runner with driver

## Run tests

```bash
cd client/src/open_source
bazel test //ai-skills/skills/valdi-component-tests/tests:tests
```

Expected: all jasmine specs pass.

## Updating

When test utility APIs change, update `test/ProfileCardTest.spec.tsx` to match and keep it passing. Also update `../skill.md` with any corrected patterns.


================================================
FILE: ai-skills/skills/valdi-component-tests/tests/src/ProfileCard.tsx
================================================
// Simple component used by the component-tests skill reference spec.
// Exercises: elementKeyFind, elementTypeFind, componentTypeFind, tapNodeWithKey.

import { Component } from 'valdi_core/src/Component';

// ─── FollowBadge: child component (used for componentTypeFind) ────────────────

export interface FollowBadgeViewModel {
  label: string;
}

export class FollowBadge extends Component<FollowBadgeViewModel> {
  onRender(): void {
    <label key="badge-label" value={this.viewModel.label} />;
  }
}

// ─── ProfileCard ──────────────────────────────────────────────────────────────

export interface ProfileCardViewModel {
  avatarUrl: string;
  name: string;
  isFollowing: boolean;
  onFollowTap: () => void;
}

export class ProfileCard extends Component<ProfileCardViewModel> {
  onRender(): void {
    <view key="card-container">
      <image key="avatar" src={this.viewModel.avatarUrl} />;
      <label key="name-label" value={this.viewModel.name} />;
      {this.viewModel.isFollowing && <FollowBadge label="Following" />}
      <view key="follow-button" onTap={this.viewModel.onFollowTap}>
        <label value="Follow" />;
      </view>;
    </view>;
  }
}


================================================
FILE: ai-skills/skills/valdi-component-tests/tests/test/ProfileCardTest.spec.tsx
================================================
// valdi-component-tests skill reference — demonstrates all test utility patterns.
// Run: bzl test //ai-skills/skills/valdi-component-tests/tests:tests

import { componentGetElements } from 'foundation/test/util/componentGetElements';
import { componentTypeFind } from 'foundation/test/util/componentTypeFind';
import { elementKeyFind } from 'foundation/test/util/elementKeyFind';
import { elementTypeFind } from 'foundation/test/util/elementTypeFind';
import { tapNodeWithKey } from 'foundation/test/util/tapNodeWithKey';
import 'jasmine/src/jasmine';
import { IRenderedElementViewClass } from 'valdi_test/test/IRenderedElementViewClass';
import { valdiIt } from 'valdi_test/test/JSXTestUtils';
import { ImageView, View } from 'valdi_tsx/src/NativeTemplateElements';
import { FollowBadge, ProfileCard, ProfileCardViewModel } from '../src/ProfileCard';

// ─── Factory function with explicit return type ───────────────────────────────

const makeViewModel = (): ProfileCardViewModel => ({
  avatarUrl: 'https://example.com/avatar.png',
  name: 'Alice',
  isFollowing: false,
  onFollowTap: fail.bind(null, 'onFollowTap should not be called'),
});

// ─── Tests ───────────────────────────────────────────────────────────────────

describe('ProfileCardTest', () => {

  // elementKeyFind<ImageView>: typed access to src attribute
  valdiIt('Verify avatar src is bound from viewModel', async driver => {
    const nodes = driver.render(() => {
      <ProfileCard {...makeViewModel()} />;
    });
    expect(
      elementKeyFind<ImageView>(componentGetElements(nodes[0].component!), 'avatar')[0]
        ?.getAttribute('src'),
    ).toBe('https://example.com/avatar.png');
  });

  // elementKeyFind: untyped access to string attribute
  valdiIt('Verify name label is bound from viewModel', async driver => {
    const nodes = driver.render(() => {
      <ProfileCard {...makeViewModel()} />;
    });
    expect(
      elementKeyFind(componentGetElements(nodes[0].component!), 'name-label')[0]
        ?.getAttribute('value'),
    ).toBe('Alice');
  });

  // elementTypeFind: find all Label elements without key attributes
  valdiIt('Verify label count when not following', async driver => {
    const nodes = driver.render(() => {
      <ProfileCard {...makeViewModel()} />;
    });
    const labels = elementTypeFind(
      componentGetElements(nodes[0].component!),
      IRenderedElementViewClass.Label,
    );
    // name-label + follow button label = 2 (FollowBadge not rendered)
    expect(labels.length).toBe(2);
  });

  // componentTypeFind: conditional child component absent
  valdiIt('Verify FollowBadge is absent when isFollowing is false', async driver => {
    const nodes = driver.render(() => {
      <ProfileCard {...makeViewModel()} />;
    });
    expect(
      componentTypeFind(nodes[0].component as ProfileCard, FollowBadge).length,
    ).toBe(0);
  });

  // componentTypeFind: conditional child component present
  valdiIt('Verify FollowBadge is present when isFollowing is true', async driver => {
    const nodes = driver.render(() => {
      <ProfileCard {...{ ...makeViewModel(), isFollowing: true }} />;
    });
    expect(
      componentTypeFind(nodes[0].component as ProfileCard, FollowBadge).length,
    ).toBe(1);
  });

  // tapNodeWithKey: async tap triggers callback
  valdiIt('Verify onFollowTap fires when follow button is tapped', async driver => {
    const onFollowTap = jasmine.createSpy('onFollowTap');
    const nodes = driver.render(() => {
      <ProfileCard {...{ ...makeViewModel(), onFollowTap }} />;
    });
    await tapNodeWithKey(nodes[0].component!, 'follow-button');
    expect(onFollowTap).toHaveBeenCalled();
  });

  // elementKeyFind<View>: typed access to onTap via getAttribute
  valdiIt('Verify onTap is set on follow button', async driver => {
    const onFollowTap = jasmine.createSpy('onFollowTap');
    const nodes = driver.render(() => {
      <ProfileCard {...{ ...makeViewModel(), onFollowTap }} />;
    });
    const button = elementKeyFind<View>(
      componentGetElements(nodes[0].component!),
      'follow-button',
    )[0];
    button?.getAttribute('onTap')?.();
    expect(onFollowTap).toHaveBeenCalled();
  });

});


================================================
FILE: ai-skills/skills/valdi-component-tests/tests/tsconfig.json
================================================
{"extends": "../../../../src/valdi_modules/src/valdi/_configs/base.tsconfig.json"}


================================================
FILE: ai-skills/skills/valdi-cpp-runtime/skill.md
================================================
# C++ Runtime Rules

**Applies to**: C++ files in `/valdi/`, `/valdi_core/`, `/snap_drawing/`

## Overview

Valdi's runtime and layout engine are implemented in C++ for cross-platform performance. This code runs on iOS, Android, macOS, but not web.

**Note**: `/libs/` contains shared utility libraries (crypto, logging, image processing) used across the codebase, but not the core runtime itself.

## Code Style

- **4-space indentation**
- Follow existing C++ style in the codebase
- Use smart pointers appropriately
- Prefer const correctness

## Key Concepts

### Layout Engine

- Uses **Yoga** (Facebook's Flexbox implementation) for layout
- Cross-platform layout calculations
- Performance-critical code
- RTL (right-to-left) support built-in
- Yoga source: `/third-party/yoga/`

### Memory Management

- Be careful with memory ownership
- Use RAII patterns
- Consider platform-specific memory constraints (mobile)

### Platform Abstractions

- Code must work on iOS, Android, macOS
- Use platform-agnostic APIs where possible
- Platform-specific code goes in appropriate subdirectories

## Common Patterns

### Djinni Generated Code

- Some C++ code is generated from `.djinni` interface files
- **Don't modify generated code** - change the .djinni file instead
- Generated files typically in `generated-src/` directories

### Performance

- This is performance-critical code
- Profile before optimizing
- Consider cache locality
- Be mindful of allocations in hot paths

## Testing

```bash
# Run all C++ runtime tests
bazel test //valdi:test

# Run specific test suites
bazel test //valdi:test_runtime       # Runtime tests
bazel test //valdi:test_integration   # Integration tests
bazel test //valdi:test_snap_drawing  # Snap drawing tests
```

## Platform-Specific Notes

### iOS
- Objective-C++ bridge in `/valdi/src/valdi/ios/`
- Metal for GPU rendering
- UIKit view integration

### Android
- JNI bridge in `/valdi/src/valdi/android/`
- NDK integration
- Native view rendering

### macOS
- Platform-specific code in `/valdi/src/valdi/macos/`
- Desktop runtime support

### Build

```bash
# Build runtime for specific platform
bazel build //valdi:valdi_ios
bazel build //valdi:valdi_android
bazel build //valdi:valdi_macos
```

## Important

1. **Cross-platform first** - Code must work on all platforms
2. **Performance critical** - UI rendering and layout
3. **Memory efficiency** - Mobile devices have constraints
4. **Thread safety** - Consider concurrency

## More Information

- Runtime overview: `/valdi/README.md`
- Core bindings: `/valdi_core/README.md`
- Framework docs: `/AGENTS.md`


================================================
FILE: ai-skills/skills/valdi-custom-view/skill.md
================================================
# Custom View Rules

**Applies to**: `**/*.tsx` files using `<custom-view>` elements.

## `<custom-view>` Element

`<custom-view>` renders a platform-native view inside a Valdi component. Each platform resolves the view by class name.

```typescript
<custom-view
  androidClass="com.snap.modules.my_module.MyNativeView"
  iosClass="SCMyNativeView"
  macosClass="SCMyNativeView"
  webClass="MyWebViewClassName"
  width="100%"
  height={120}
/>
```

## Class Attributes

| Attribute | Platform | Resolution |
|-----------|----------|------------|
| `androidClass` | Android | Reflection via `ReflectionViewFactory`; needs `@RegisterAttributesBinder` |
| `iosClass` | iOS | ObjC class name; must be linked via `ios_deps` |
| `macosClass` | macOS | `NSClassFromString()`; must be linked via `macos_deps` |
| `webClass` | Web | Looked up in `WebViewClassRegistry`; registered via `webPolyglotViews` export |

## Platform Discovery

- **Android**: The view class needs a single-arg `(Context)` constructor. An `@RegisterAttributesBinder`-annotated binder is discovered from assets at runtime.
- **iOS**: The ObjC class must be an `NSView`/`UIView` subclass linked into the binary.
- **macOS**: Same as iOS but with `NSView` subclass.
- **Web**: The `webClass` name is matched against the `WebViewClassRegistry`. Register by exporting `webPolyglotViews` from a web polyglot entry file (see `web-polyglot.md` rule).

## viewFactory Pattern

Instead of resolving by class name, you can pass a `ViewFactory` object directly. This is useful when the factory is provided by a parent component or constructed dynamically:

```typescript
import { ViewFactory } from 'valdi_tsx/src/ViewFactory';

interface MyViewModel {
  viewFactory?: ViewFactory;
}

class MyComponent extends Component<MyViewModel> {
  onRender(): void {
    if (this.viewModel.viewFactory) {
      <custom-view style={styles.container} viewFactory={this.viewModel.viewFactory} />;
    }
  }
}
```

`viewFactory` and `*Class` attributes are mutually exclusive — use one or the other. `viewFactory` takes precedence when both are provided.

## Common Mistakes

- Using `<custom-view>` without checking the platform — wrap in `Device.isAndroid()` / `Device.isIOS()` etc. if not all platforms are supported
- Forgetting to link native implementations — the class name string alone isn't enough; the native code must be compiled and linked via platform `_deps` in BUILD.bazel
- Wrong package name in `androidClass` — must match the Kotlin/Java package exactly


================================================
FILE: ai-skills/skills/valdi-ios/skill.md
================================================
# iOS Runtime Rules

**Applies to**: Objective-C/C++ files in `/valdi/src/valdi/ios/` and related iOS runtime code

## Overview

The Valdi iOS runtime bridges TypeScript/Valdi components to native UIKit views. It's implemented in Objective-C, Objective-C++, and Swift.

## Code Style

- **4-space indentation** for Objective-C
- Follow Apple's Objective-C conventions
- Use modern Objective-C features (properties, blocks, etc.)

## Key Concepts

### View Rendering

- Valdi components map to UIViews
- View recycling for performance
- UIKit integration

### Platform Bridge

- Objective-C++ bridge to C++ runtime
- Memory management (ARC)
- iOS-specific APIs

## Common Patterns

### Bazel iOS Targets

```python
objc_library(
    name = "valdi_ios",
    srcs = glob(["**/*.m", "**/*.mm"]),
    hdrs = glob(["**/*.h"]),
)
```

### View Implementation

- Custom UIView subclasses
- CALayer for advanced rendering
- Metal for GPU acceleration

## Testing

```bash
# Run iOS runtime tests (Objective-C)
bazel test //valdi:valdi_ios_objc_test

# Run iOS runtime tests (Swift)
bazel test //valdi:valdi_ios_swift_test

# Run all iOS tests
bazel test //valdi:valdi_ios_objc_test //valdi:valdi_ios_swift_test
```

Test files are in `/valdi/test/ios/` and `/valdi/test/ios_swift/`

## Building

```bash
# Build iOS runtime library
bazel build //valdi:valdi_ios

# Test with hello world app
cd apps/helloworld
valdi install ios
```

## Platform-Specific Notes

1. **iOS Version** - Be mindful of minimum iOS version
2. **ARC** - Automatic Reference Counting (memory management)
3. **Auto Layout** - Valdi uses flexbox, not Auto Layout
4. **Metal** - GPU rendering for advanced graphics

## Important

- **Performance** - UIView creation and layout are critical
- **Memory** - Understand retain cycles and weak references
- **Threading** - Main thread for UI, background for heavy work
- **Lifecycle** - UIViewController lifecycle

## More Information

- Runtime source: `/valdi/src/valdi/ios/`
- Runtime tests: `/valdi/test/ios/` and `/valdi/test/ios_swift/`
- Core iOS code: `/valdi_core/src/valdi_core/ios/`
- Build config: `/valdi/BUILD.bazel`
- Framework docs: `/AGENTS.md`


================================================
FILE: ai-skills/skills/valdi-migrate/skill.md
================================================
# Valdi Migration Assistant

Guidance for migrating code from Flutter, React, or Jetpack Compose to Valdi.

## When to use

Use this skill when converting Flutter widgets, React components, or Compose `@Composable` functions to Valdi components, or when translating framework-specific patterns (hooks, widgets, Navigator, setState, remember, LaunchedEffect, Modifier, Provider, styled-components, FlatList, LazyColumn, etc.) to Valdi equivalents.

## Critical: Never suggest these patterns

```typescript
// ❌ React hooks — DO NOT EXIST in Valdi
useState / useEffect / useContext / useMemo / useCallback / useRef

// ❌ Compose APIs — DO NOT EXIST in Valdi
@Composable annotation
remember { mutableStateOf() } / remember { }
derivedStateOf / collectAsState / LaunchedEffect / DisposableEffect
Modifier chain (Modifier.padding().background().clickable())
CompositionLocalProvider / LocalXxx.current

// ❌ Functional components — DO NOT EXIST
const MyComp = () => <view />;
function MyComp(props) { return <view />; }

// ❌ Wrong naming
this.props          // → this.viewModel
onMount/onUnmount   // → onCreate/onDestroy
markNeedsRender()   // → this.setState({})
scheduleRender()    // → deprecated, use setState

// ❌ Returning JSX — onRender() returns void
onRender() { return <view />; }   // no return statement

// ❌ Inline lambdas in JSX props — causes re-renders
<view onTap={() => this.doThing()} />   // use class arrow fn

// ❌ map() in render — does not work (JSX is side-effect, not return value)
{items.map(i => <Item key={i.id} />)}   // use forEach

// ❌ JSX as a prop value
<MyComp label={<label value="hi" />} />  // use render prop () => void

// ❌ new Style() inside onRender() — style interning requires module-level init
onRender() { const s = new Style<View>({...}); ... }  // wrong
```

## Correct patterns

```typescript
import { Component, StatefulComponent } from 'valdi_core/src/Component';

// ✅ Stateless component
class MyComp extends Component<MyViewModel> {
  onRender() {
    <view>
      <label value={this.viewModel.title} />;
    </view>;
  }
}

// ✅ Stateful component
class Counter extends StatefulComponent<MyViewModel, { count: number }> {
  state = { count: 0 };

  // Class arrow function — never inline lambda in JSX
  private handleTap = () => {
    this.setState({ count: this.state.count + 1 });
  };

  onRender() {
    <view onTap={this.handleTap}>
      <label value={`Count: ${this.state.count}`} />;
    </view>;
  }
}

// ✅ Lists — forEach, not map()
onRender() {
  <scroll>
    {this.viewModel.items.forEach(item => {
      <Row key={item.id} data={item} />;
    })}
  </scroll>;
}

// ✅ Style — created at module level, not inside onRender()
const cardStyle = new Style<View>({ backgroundColor: '#fff', borderRadius: 8 });
```

## Lifecycle mapping

| Flutter | Jetpack Compose | React | Valdi |
|---------|-----------------|-------|-------|
| `initState()` | `LaunchedEffect(Unit) { }` | `componentDidMount` / `useEffect(fn, [])` | `onCreate()` |
| `dispose()` | `DisposableEffect { onDispose { } }` | `componentWillUnmount` / `useEffect(() => fn, [])` | `onDestroy()` |
| `didUpdateWidget(old)` | `LaunchedEffect(key) { }` | `componentDidUpdate(prev)` / `useEffect(fn, [dep])` | `onViewModelUpdate(previous?)` |
| `build(context)` | `@Composable fun` recomposition | `render(): JSX.Element` | `onRender(): void` |
| `setState(() {...})` | `mutableStateOf` + state write | `this.setState({...})` | `this.setState({...})` |

## Component and element mapping

| Flutter | Jetpack Compose | React | Valdi |
|---------|-----------------|-------|-------|
| `StatelessWidget` | `@Composable fun` (stateless) | Function component | `class X extends Component<VM>` |
| `StatefulWidget` + `State` | `@Composable fun` + `remember { mutableStateOf() }` | Class component + state | `class X extends StatefulComponent<VM, State>` |
| `Container` / `SizedBox` (visual) | `Box` / `Surface` | `<div>` with styles | `<view>` |
| `SizedBox` (invisible spacer) | `Spacer` | Layout-only `<div>` | `<layout>` (no native view, faster) |
| `Text` | `Text(text)` | `<span>` / `<p>` | `<label value="...">` |
| `TextField` | `TextField` / `OutlinedTextField` | `<input>` | `<textfield>` (single-line) |
| `TextFormField` | `BasicTextField` (multi) | `<textarea>` | `<textview>` (multi-line) |
| `Image.network` | `AsyncImage` (Coil) | `<img>` | `<image src={url}>` |
| `ListView` / `FlatList` | `LazyColumn` / `LazyRow` | `<FlatList>` | `<scroll>` + `forEach` |
| `SingleChildScrollView` | `Column` + `verticalScroll` | `<ScrollView>` | `<scroll>` |
| `PageView` | `HorizontalPager` | `<ViewPager>` | `<scroll pagingEnabled={true}>` |
| `CircularProgressIndicator` | `CircularProgressIndicator` | `<ActivityIndicator>` | `<spinner>` |
| `GestureDetector` | `Modifier.clickable { }` | `onClick` / `onPress` | `onTap` on `<view>` |
| `Column` | `Column` | `flexDirection: 'column'` | `<view flexDirection="column">` (default) |
| `Row` | `Row` | `flexDirection: 'row'` | `<view flexDirection="row">` |
| `Stack` | `Box` with `align` | `position: absolute` | `<view>` + children with `position="absolute"` |
| `Modifier.padding(16.dp)` | `Modifier.padding(16.dp)` | `style={{padding:16}}` | `padding={16}` on any element |
| `Navigator.push` | `navController.navigate("route")` | `navigate()` / `router.push` | `navigationController.push(Page, vm, ctx)` |
| `Navigator.pop` | `navController.popBackStack()` | `goBack()` / `router.back` | `navigationController.pop()` |
| `showModalBottomSheet` | `ModalBottomSheet` / `Dialog` | `<Modal>` | `navigationController.present(Page, vm, ctx)` |
| `InheritedWidget` / `Provider` | `CompositionLocalProvider` | `React.Context` + `useContext` | `createProviderComponentWithKeyName<T>()` + `withProviders()` |
| `SharedPreferences` | `SharedPreferences` / `DataStore` | `AsyncStorage` / `localStorage` | `PersistentStore` (valdi persistence) |
| `http.get()` / `dio` | `viewModelScope.launch { api.get() }` | `fetch()` / `axios` | `HTTPClient.get()` (valdi_http) |
| `Lottie` | `LottieAnimation` | `<Lottie>` | `<animatedimage>` |
| `BackdropFilter` | `BlurMaskFilter` | CSS `backdrop-filter` | `<blur>` (iOS only) |

## Key import paths

```typescript
import { Component, StatefulComponent } from 'valdi_core/src/Component';
import { Style } from 'valdi_core/src/Style';
import { createProviderComponentWithKeyName } from 'valdi_core/src/provider/createProvider';
import { withProviders, ProvidersValuesViewModel } from 'valdi_core/src/provider/withProviders';
import { createReusableCallback } from 'valdi_core/src/utils/Callback';
import { HTTPClient } from 'valdi_http/src/HTTPClient';
import { PersistentStore } from 'persistence/src/PersistentStore';
import { Layout, View } from 'valdi_tsx/src/NativeTemplateElements';
```

## Provider pattern (replaces React Context / Flutter InheritedWidget)

```typescript
import { createProviderComponentWithKeyName } from 'valdi_core/src/provider/createProvider';
import { ProvidersValuesViewModel, withProviders } from 'valdi_core/src/provider/withProviders';

const ThemeProvider = createProviderComponentWithKeyName<ThemeService>('ThemeProvider');

// ✅ Root provides value
class AppRoot extends Component {
  private theme = new ThemeService();
  onRender() {
    <ThemeProvider value={this.theme}><App /></ThemeProvider>;
  }
}

// ✅ Consumer wraps with HOC
interface MyViewModel extends ProvidersValuesViewModel<[ThemeService]> {}
class MyComp extends Component<MyViewModel> {
  onRender() {
    const [theme] = this.viewModel.providersValues;
    <view backgroundColor={theme.primary} />;
  }
}
const MyCompWithProvider = withProviders(ThemeProvider)(MyComp);
```

## Further reading

- [Migrating from React](../../../docs/docs/start-from-react.md)
- [Migrating from Flutter](../../../docs/docs/migrate-from-flutter.md)
- [Migrating from Jetpack Compose](../../../docs/docs/migrate-from-compose.md)


================================================
FILE: ai-skills/skills/valdi-migrate/tests/.gitignore
================================================
# Generated by integration tests — run `bazel build` after regenerating
output/


================================================
FILE: ai-skills/skills/valdi-migrate/tests/BUILD.bazel
================================================
load("//bzl/valdi:valdi_module.bzl", "valdi_module")

valdi_module(
    name = "tests",
    srcs = glob([
        "src/**/*.ts",
        "src/**/*.tsx",
        "output/**/*.ts",
        "output/**/*.tsx",
    ]) + [
        "tsconfig.json",
    ],
    android_output_target = "release",
    ios_module_name = "SCCValdiMigrateTest",
    ios_output_target = "release",
    visibility = ["//visibility:public"],
    deps = [
        "//src/valdi_modules/src/valdi/persistence",
        "//src/valdi_modules/src/valdi/valdi_core",
        "//src/valdi_modules/src/valdi/valdi_http",
        "//src/valdi_modules/src/valdi/valdi_tsx",
    ],
)


================================================
FILE: ai-skills/skills/valdi-migrate/tests/README.md
================================================
# valdi-migrate skill tests

Validates that code migrated to Valdi using the `valdi-migrate` skill is free of
anti-patterns (React hooks, Compose APIs, inline lambdas, `map()` in render loops, etc.)
and that the output actually compiles.

## Files

| File | Description |
|------|-------------|
| `BUILD.bazel` | Bazel build target — compiles `src/` and `output/` together |
| `tsconfig.json` | TypeScript config |
| `check_antipatterns.py` | Linter — exits 0 if clean, 1 if violations found |
| `flutter_example.dart` | Source Flutter code to migrate |
| `compose_example.kt` | Source Jetpack Compose code to migrate |
| `react_example.tsx` | Source React code to migrate |
| `src/expected_valdi.tsx` | Reference correct Valdi output (canonical ground truth) |
| `output/` | Skill-generated migrations — checked in after running integration tests |

## Integration tests

These tests verify the skill produces correct, compilable Valdi from each source framework.

### 1. Generate migrations

Ask Claude (with the `valdi-migrate` skill active) to migrate each source file:

```
Migrate flutter_example.dart to Valdi
Migrate compose_example.kt to Valdi
Migrate react_example.tsx to Valdi
```

Save each output to the `output/` directory:
- `output/flutter_migrated.tsx`
- `output/compose_migrated.tsx`
- `output/react_migrated.tsx`

### 2. Anti-pattern check

Verify none of the outputs contain framework-specific patterns:

```bash
cd client/src/open_source/ai-skills/skills/valdi-migrate/tests

python3 check_antipatterns.py output/flutter_migrated.tsx   # must pass
python3 check_antipatterns.py output/compose_migrated.tsx   # must pass
python3 check_antipatterns.py output/react_migrated.tsx     # must pass

# Sanity check — source files should still fail
python3 check_antipatterns.py react_example.tsx             # expected: fail
python3 check_antipatterns.py compose_example.kt            # expected: fail
```

### 3. Compile check

Verify all outputs (reference + migrations) build with the Valdi compiler:

```bash
cd client/src/open_source
bazel build //ai-skills/skills/valdi-migrate/tests:tests
```

Expected: `Build completed successfully`

## Updating the tests

- **Source examples** (`flutter_example.dart`, `compose_example.kt`, `react_example.tsx`): add new patterns you want the skill to handle correctly.
- **Reference output** (`src/expected_valdi.tsx`): update when Valdi APIs change (import paths, type signatures, etc.). Must always compile and pass the linter.
- **Skill** (`../skill.md`): update when adding new source frameworks or fixing incorrect migration guidance.


================================================
FILE: ai-skills/skills/valdi-migrate/tests/check_antipatterns.py
================================================
#!/usr/bin/env python3
"""
Validates a Valdi TSX file for known anti-patterns.
Usage: python3 check_antipatterns.py <file.tsx>
Returns exit code 0 if clean, 1 if violations found.
"""

import sys
import re

ANTI_PATTERNS = [
    # React hooks
    (r'\buseState\b',           'React hook: useState'),
    (r'\buseEffect\b',          'React hook: useEffect'),
    (r'\buseContext\b',         'React hook: useContext'),
    (r'\buseMemo\b',            'React hook: useMemo'),
    (r'\buseCallback\b',        'React hook: useCallback'),
    (r'\buseRef\b',             'React hook: useRef'),

    # Compose APIs
    (r'@Composable',            'Compose: @Composable annotation'),
    (r'\bremember\s*\{',        'Compose: remember { }'),
    (r'\bmutableStateOf\b',     'Compose: mutableStateOf'),
    (r'\bLaunchedEffect\b',     'Compose: LaunchedEffect'),
    (r'\bDisposableEffect\b',   'Compose: DisposableEffect'),

    # Functional components
    (r'const\s+\w+\s*=\s*\([^)]*\)\s*=>\s*[<(]',  'Functional component arrow fn'),
    (r'function\s+\w+\s*\([^)]*\)\s*\{[^}]*return\s*<',  'Functional component with return JSX'),

    # Wrong naming
    (r'\bthis\.props\b',        'Wrong: this.props (should be this.viewModel)'),
    (r'\bonMount\b',            'Wrong: onMount (should be onCreate)'),
    (r'\bonUnmount\b',          'Wrong: onUnmount (should be onDestroy)'),
    (r'\bmarkNeedsRender\b',    'Wrong: markNeedsRender (use this.setState)'),
    (r'\bscheduleRender\b',     'Wrong: scheduleRender (deprecated)'),

    # return JSX in onRender
    (r'onRender\s*\(\s*\)\s*\{[^}]*return\s*<', 'onRender() should not return JSX'),

    # Inline lambdas in JSX props (e.g. onTap={() => ...})
    (r'on\w+\s*=\s*\{\s*\(\s*\)\s*=>',  'Inline lambda in JSX prop (use class arrow fn)'),

    # map() in JSX context
    (r'\.map\s*\([^)]*=>\s*[^)]*<\w',   'map() returns array (use forEach in onRender)'),

    # new Style inside onRender
    (r'onRender\s*\(\s*\)\s*\{(?:[^}]|\{[^}]*\})*new\s+Style\s*<', 'new Style() inside onRender()'),

    # Wrong import paths (discovered by build failures)
    # Provider is two separate files, not a directory import
    (r"from 'valdi_core/src/provider'",
     "Wrong import: use 'valdi_core/src/provider/createProvider' and/or 'valdi_core/src/provider/withProviders'"),
]

def check_file(path: str) -> list[tuple[int, str, str]]:
    violations = []
    with open(path) as f:
        lines = f.readlines()
    for lineno, line in enumerate(lines, 1):
        stripped = line.lstrip()
        # Skip comment lines
        if stripped.startswith('//') or stripped.startswith('*') or stripped.startswith('#'):
            continue
        for pattern, description in ANTI_PATTERNS:
            if re.search(pattern, line):
                violations.append((lineno, description, line.rstrip()))
    return violations

def main():
    if len(sys.argv) < 2:
        print(f'Usage: {sys.argv[0]} <file.tsx>', file=sys.stderr)
        sys.exit(2)

    path = sys.argv[1]
    violations = check_file(path)

    if not violations:
        print(f'✅  {path}: no anti-patterns found')
        sys.exit(0)
    else:
        print(f'❌  {path}: {len(violations)} violation(s) found')
        for lineno, desc, text in violations:
            print(f'  Line {lineno}: [{desc}]')
            print(f'    {text}')
        sys.exit(1)

if __name__ == '__main__':
    main()


================================================
FILE: ai-skills/skills/valdi-migrate/tests/compose_example.kt
================================================
// Jetpack Compose example — @Composable functions, remember, LaunchedEffect,
// LazyColumn, navigation, CompositionLocal.
// Goal: migrate this to Valdi.

import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.navigation.NavController

// --- CompositionLocal theme ---
val LocalAppTheme = compositionLocalOf { AppTheme() }
data class AppTheme(val primary: String = "#FFFC00")

// --- Stateless greeting ---
@Composable
fun Greeting(name: String) {
    Text("Hello, $name")
}

// --- Stateful counter ---
@Composable
fun Counter(label: String) {
    var count by remember { mutableStateOf(0) }
    Button(onClick = { count++ }) {
        Text("$label: $count")
    }
}

// --- Data loading with LaunchedEffect ---
@Composable
fun UserProfile(userId: String) {
    var profile by remember { mutableStateOf<Profile?>(null) }

    LaunchedEffect(userId) {
        profile = fetchProfile(userId)   // suspend fun
    }

    if (profile == null) {
        CircularProgressIndicator()
    } else {
        Text(profile!!.name)
    }
}

// --- LazyColumn list ---
@Composable
fun UserList(users: List<User>) {
    LazyColumn {
        items(users, key = { it.id }) { user ->
            UserRow(user = user)
        }
    }
}

// --- Layout with Column / Row / Modifier ---
@Composable
fun ProfileCard(user: User) {
    Column(
        modifier = Modifier
            .fillMaxWidth()
            .padding(16.dp)
    ) {
        Row(modifier = Modifier.fillMaxWidth()) {
            Text(user.name, style = MaterialTheme.typography.headlineSmall)
            Spacer(Modifier.weight(1f))
            Text(user.handle)
        }
        Spacer(modifier = Modifier.height(8.dp))
        Text(user.bio)
    }
}

// --- Navigation ---
@Composable
fun HomeScreen(navController: NavController) {
    Button(onClick = { navController.navigate("detail/42") }) {
        Text("Go to Detail")
    }
}

// --- CompositionLocal consumer ---
@Composable
fun ThemedBadge(text: String) {
    val theme = LocalAppTheme.current
    Box(
        modifier = Modifier.background(Color(android.graphics.Color.parseColor(theme.primary)))
    ) {
        Text(text)
    }
}


================================================
FILE: ai-skills/skills/valdi-migrate/tests/flutter_example.dart
================================================
// Flutter example — mix of StatelessWidget, StatefulWidget, ListView.builder,
// navigation, SharedPreferences, and a Provider consumer.
// Goal: migrate this to Valdi.

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';

// --- Theme service (ChangeNotifier) ---
class ThemeService extends ChangeNotifier {
  Color primary = Colors.yellow;
}

// --- Stateless greeting ---
class Greeting extends StatelessWidget {
  final String name;
  const Greeting({required this.name});

  @override
  Widget build(BuildContext context) {
    return Text('Hello, $name');
  }
}

// --- Stateful counter ---
class Counter extends StatefulWidget {
  final String label;
  const Counter({required this.label});
  @override
  State<Counter> createState() => _CounterState();
}

class _CounterState extends State<Counter> {
  int _count = 0;

  void _increment() {
    setState(() { _count++; });
  }

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: _increment,
      child: Text('${widget.label}: $_count'),
    );
  }
}

// --- User list with async fetch and cancellation ---
class UserList extends StatefulWidget {
  @override
  State<UserList> createState() => _UserListSta
Download .txt
Showing preview only (290K chars total). Download the full file or copy to clipboard to get everything.
gitextract_meqeqabv/

├── .bazelignore
├── .bazelrc
├── .bazelversion
├── .cursorrules
├── .editorconfig
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   ├── documentation.md
│   │   └── feature_request.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   └── workflows/
│       ├── README.md
│       ├── bzl-changes.yml
│       ├── comment-test-results.yml
│       ├── pr-size-labeler.yml
│       ├── publish-npm.yml
│       ├── release-test.yml
│       ├── test-cli-linux.yml
│       └── welcome.yml
├── .gitignore
├── .prettierrc.json
├── AGENTS.md
├── BUILD.bazel
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE.md
├── MODULE.bazel
├── README.md
├── SECURITY.md
├── WORKSPACE
├── WORKSPACE.bzlmod
├── ai-skills/
│   ├── CONTRIBUTING_SKILLS.md
│   ├── registry.json
│   └── skills/
│       ├── valdi-android/
│       │   └── skill.md
│       ├── valdi-async/
│       │   ├── skill.md
│       │   └── tests/
│       │       ├── BUILD.bazel
│       │       ├── README.md
│       │       ├── src/
│       │       │   └── reference.tsx
│       │       └── tsconfig.json
│       ├── valdi-bazel/
│       │   └── skill.md
│       ├── valdi-compiler/
│       │   └── skill.md
│       ├── valdi-component-tests/
│       │   ├── skill.md
│       │   └── tests/
│       │       ├── BUILD.bazel
│       │       ├── README.md
│       │       ├── src/
│       │       │   └── ProfileCard.tsx
│       │       ├── test/
│       │       │   └── ProfileCardTest.spec.tsx
│       │       └── tsconfig.json
│       ├── valdi-cpp-runtime/
│       │   └── skill.md
│       ├── valdi-custom-view/
│       │   └── skill.md
│       ├── valdi-ios/
│       │   └── skill.md
│       ├── valdi-migrate/
│       │   ├── skill.md
│       │   └── tests/
│       │       ├── .gitignore
│       │       ├── BUILD.bazel
│       │       ├── README.md
│       │       ├── check_antipatterns.py
│       │       ├── compose_example.kt
│       │       ├── flutter_example.dart
│       │       ├── react_example.tsx
│       │       ├── src/
│       │       │   └── expected_valdi.tsx
│       │       └── tsconfig.json
│       ├── valdi-overview/
│       │   └── skill.md
│       ├── valdi-perf/
│       │   ├── skill.md
│       │   └── tests/
│       │       ├── BUILD.bazel
│       │       ├── README.md
│       │       ├── src/
│       │       │   └── reference.tsx
│       │       └── tsconfig.json
│       ├── valdi-polyglot-module/
│       │   └── skill.md
│       ├── valdi-setup/
│       │   └── skill.md
│       ├── valdi-testing/
│       │   └── skill.md
│       └── valdi-tsx/
│           ├── skill.md
│           └── tests/
│               ├── BUILD.bazel
│               ├── README.md
│               ├── src/
│               │   └── reference.tsx
│               └── tsconfig.json
├── apps/
│   ├── .prettierrc.json
│   ├── benchmark/
│   │   ├── BUILD.bazel
│   │   ├── app_assets/
│   │   │   ├── android/
│   │   │   │   └── values/
│   │   │   │       ├── colors.xml
│   │   │   │       └── themes.xml
│   │   │   └── ios/
│   │   │       └── Icons.xcassets/
│   │   │           └── AppIcon.appiconset/
│   │   │               └── Contents.json
│   │   └── src/
│   │       ├── android/
│   │       │   ├── BUILD.bazel
│   │       │   └── MyNativeModuleFactory.kt
│   │       ├── cpp/
│   │       │   ├── BUILD.bazel
│   │       │   └── CppModule.cpp
│   │       ├── ios/
│   │       │   ├── BUILD.bazel
│   │       │   └── SCMyNativeModuleFactory.m
│   │       └── valdi/
│   │           └── benchmark/
│   │               ├── BUILD.bazel
│   │               ├── src/
│   │               │   ├── BenchmarkApp.tsx
│   │               │   ├── BenchmarkSingleRunComponent.tsx
│   │               │   ├── DrawFrameBenchmark.tsx
│   │               │   ├── MarshallingTest.tsx
│   │               │   ├── MicroBenchTest.tsx
│   │               │   ├── NativeHelper.d.ts
│   │               │   ├── ProtoImportTest.tsx
│   │               │   ├── RenderTest.tsx
│   │               │   ├── complex_test.proto
│   │               │   ├── cpp.d.ts
│   │               │   ├── main.tsx
│   │               │   ├── microbench.js
│   │               │   ├── proto.protodecl
│   │               │   └── proto_noidx.protodecl
│   │               └── tsconfig.json
│   ├── cli_example/
│   │   ├── BUILD.bazel
│   │   └── index.tsx
│   ├── helloworld/
│   │   ├── .eslintrc.js
│   │   ├── BUILD.bazel
│   │   ├── app_assets/
│   │   │   ├── android/
│   │   │   │   └── values/
│   │   │   │       ├── colors.xml
│   │   │   │       └── themes.xml
│   │   │   └── ios/
│   │   │       └── Icons.xcassets/
│   │   │           └── AppIcon.appiconset/
│   │   │               └── Contents.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── android/
│   │   │   │   ├── BUILD.bazel
│   │   │   │   └── MyNativeModuleFactory.kt
│   │   │   ├── cpp/
│   │   │   │   ├── BUILD.bazel
│   │   │   │   ├── CppModule.cpp
│   │   │   │   └── DesktopMyNativeModule.cpp
│   │   │   ├── ios/
│   │   │   │   ├── BUILD.bazel
│   │   │   │   └── SCMyNativeModuleFactory.m
│   │   │   └── valdi/
│   │   │       ├── .terserrc.json
│   │   │       ├── _configs/
│   │   │       │   ├── base.tsconfig.json
│   │   │       │   └── eslint.tsconfig.json
│   │   │       ├── hello_world/
│   │   │       │   ├── BUILD.bazel
│   │   │       │   ├── src/
│   │   │       │   │   ├── CppModule.d.ts
│   │   │       │   │   ├── GettingStartedCodelab.tsx
│   │   │       │   │   ├── HelloWorldApp.tsx
│   │   │       │   │   ├── NativeModule.d.ts
│   │   │       │   │   └── index.ts
│   │   │       │   └── tsconfig.json
│   │   │       └── tsconfig.json
│   │   └── standalone_app/
│   │       ├── BUILD.bazel
│   │       ├── README.md
│   │       ├── android/
│   │       │   └── Main.kt
│   │       └── androidTest/
│   │           ├── AndroidManifest.xml
│   │           └── LaunchTest.kt
│   ├── managed_context_example/
│   │   ├── BUILD.bazel
│   │   └── ManagedContextExample.tsx
│   ├── navigation_example/
│   │   ├── BUILD.bazel
│   │   ├── NavigationExample.tsx
│   │   └── tsconfig.json
│   └── valdi_gpt/
│       ├── .eslintrc.js
│       ├── BUILD.bazel
│       ├── package.json
│       ├── src/
│       │   └── valdi/
│       │       ├── .terserrc.json
│       │       ├── _configs/
│       │       │   ├── base.tsconfig.json
│       │       │   └── eslint.tsconfig.json
│       │       ├── ai_service/
│       │       │   ├── BUILD.bazel
│       │       │   ├── src/
│       │       │   │   ├── AiService.ts
│       │       │   │   └── OpenAi.ts
│       │       │   └── tsconfig.json
│       │       ├── conversation/
│       │       │   ├── BUILD.bazel
│       │       │   ├── src/
│       │       │   │   ├── Conversation.tsx
│       │       │   │   ├── InputBar.tsx
│       │       │   │   ├── Message.tsx
│       │       │   │   └── index.ts
│       │       │   ├── test/
│       │       │   │   └── Conversation.spec.tsx
│       │       │   └── tsconfig.json
│       │       ├── tsconfig.json
│       │       └── valdi_gpt/
│       │           ├── BUILD.bazel
│       │           ├── src/
│       │           │   ├── ValdiGptApp.tsx
│       │           │   └── types/
│       │           │       ├── Long.d.ts
│       │           │       └── globals.d.ts
│       │           └── tsconfig.json
│       └── web_demo/
│           ├── README.md
│           ├── package.json
│           ├── src/
│           │   ├── App.js
│           │   ├── App.scss
│           │   ├── RegisterNativeModules.js
│           │   ├── index.html
│           │   └── index.js
│           └── webpack.config.js
├── bin/
│   ├── BUILD.bazel
│   ├── MODULE.bazel
│   ├── WORKSPACE
│   ├── compiler/
│   │   ├── linux/
│   │   │   └── valdi_compiler
│   │   └── macos/
│   │       └── valdi_compiler
│   └── pngquant/
│       ├── linux/
│       │   └── pngquant
│       └── macos/
│           └── pngquant
├── bzl/
│   ├── BUILD.bazel
│   ├── additional_dependencies.bzl
│   ├── android/
│   │   ├── BUILD.bazel
│   │   ├── collect_android_assets.bzl
│   │   ├── filter_jar.bzl
│   │   ├── package_aar.bzl
│   │   ├── platform_transition.bzl
│   │   └── zip_relative.sh
│   ├── asset_package.bzl
│   ├── client_objc_library.bzl
│   ├── common/
│   │   ├── BUILD.bazel
│   │   ├── application_names.bzl
│   │   └── nodejs_info.bzl
│   ├── conditions/
│   │   ├── BUILD.bazel
│   │   ├── custom_selects.bzl
│   │   └── selects.bzl
│   ├── constants/
│   │   └── BUILD.bazel
│   ├── dependencies.bzl
│   ├── expand_template.bzl
│   ├── ide/
│   │   └── open_source.bazelproject
│   ├── macros/
│   │   ├── BUILD.bazel
│   │   ├── MODULE.bazel
│   │   ├── WORKSPACE
│   │   └── android.bzl
│   ├── modulemap.bzl
│   ├── nested_repository.bzl
│   ├── platforms/
│   │   ├── BUILD.bazel
│   │   ├── MODULE.bazel
│   │   ├── WORKSPACE
│   │   ├── conditions/
│   │   │   └── BUILD.bazel
│   │   ├── flavors/
│   │   │   └── BUILD.bazel
│   │   ├── os/
│   │   │   └── BUILD.bazel
│   │   └── toggles/
│   │       └── BUILD.bazel
│   ├── prebuilt_tools.bzl
│   ├── runtime_flags/
│   │   └── BUILD.bazel
│   ├── toolchains/
│   │   ├── BUILD.bazel
│   │   ├── MODULE.bazel
│   │   └── WORKSPACE
│   ├── valdi/
│   │   ├── AndroidManifest.xml.tpl
│   │   ├── BUILD.bazel
│   │   ├── Empty.bundle/
│   │   │   └── Info.plist
│   │   ├── Info.plist
│   │   ├── app_templates/
│   │   │   ├── AndroidDebugAppManifest.xml.tpl
│   │   │   ├── AndroidLibManifest.xml
│   │   │   ├── AndroidReleaseAppManifest.xml.tpl
│   │   │   ├── BUILD.bazel
│   │   │   ├── Info.plist.tpl
│   │   │   ├── StartActivity.kt.tpl
│   │   │   ├── cli_main.cpp.tpl
│   │   │   ├── ios_main.m.tpl
│   │   │   └── macos_main.m.tpl
│   │   ├── common.bzl
│   │   ├── empty.c
│   │   ├── empty.js
│   │   ├── empty.kt
│   │   ├── empty.swift
│   │   ├── extract_cpp_srcs.bzl
│   │   ├── extract_objc_srcs.bzl
│   │   ├── extract_swift_srcs.bzl
│   │   ├── generate_android_manifest.bzl
│   │   ├── localizable_strings.bzl
│   │   ├── npm/
│   │   │   ├── BUILD.bazel
│   │   │   ├── README.md
│   │   │   ├── package.json
│   │   │   ├── pnpm-workspace.yaml
│   │   │   └── repositories.bzl
│   │   ├── package.json.tmpl
│   │   ├── rewrite_hdrs.bzl
│   │   ├── snap_macros/
│   │   │   ├── BUILD.bazel
│   │   │   ├── MODULE.bazel
│   │   │   ├── WORKSPACE
│   │   │   ├── internal/
│   │   │   │   └── sourcegen/
│   │   │   │       └── valdi_context_factory.bzl
│   │   │   └── library/
│   │   │       └── snap_client_ios_library.bzl
│   │   ├── source_set/
│   │   │   ├── BUILD.bazel
│   │   │   ├── source_set.bzl
│   │   │   └── utils.bzl
│   │   ├── suffixed_deps.bzl
│   │   ├── toolchains.bzl
│   │   ├── tsconfig.json
│   │   ├── valdi_android_application.bzl
│   │   ├── valdi_android_library.bzl
│   │   ├── valdi_application.bzl
│   │   ├── valdi_cli_application.bzl
│   │   ├── valdi_collapse_web_paths.bzl
│   │   ├── valdi_compiled.bzl
│   │   ├── valdi_config.yaml.tpl
│   │   ├── valdi_exported_library.bzl
│   │   ├── valdi_extract_output_rule_helper.bzl
│   │   ├── valdi_ios_application.bzl
│   │   ├── valdi_macos_application.bzl
│   │   ├── valdi_module.bzl
│   │   ├── valdi_module_android_common.bzl
│   │   ├── valdi_module_info_extractor.bzl
│   │   ├── valdi_module_native.bzl
│   │   ├── valdi_paths.bzl
│   │   ├── valdi_projectsync.bzl
│   │   ├── valdi_protodecl_to_js.bzl
│   │   ├── valdi_run_compiler.bzl
│   │   ├── valdi_static_resource.bzl
│   │   ├── valdi_test.bzl
│   │   ├── valdi_toolchain.bzl
│   │   ├── valdi_toolchain_binary.bzl
│   │   └── valdi_toolchain_type.bzl
│   ├── valdi_compiler_repos_extension.bzl
│   ├── valdi_library.bzl
│   ├── workspace_init.bzl
│   ├── workspace_postinit.bzl
│   ├── workspace_preinit.bzl
│   └── workspace_prepare.bzl
├── compiler/
│   ├── companion/
│   │   ├── .gitignore
│   │   ├── .npmrc
│   │   ├── .nvmrc
│   │   ├── .prettierignore
│   │   ├── .prettierrc.json
│   │   ├── .vscode/
│   │   │   └── settings.json
│   │   ├── BUILD.bazel
│   │   ├── GIT_HASH
│   │   ├── README.md
│   │   ├── jest.config.js
│   │   ├── package.json
│   │   ├── remotedebug-ios-webkit-adapter/
│   │   │   ├── .editorconfig
│   │   │   ├── .github/
│   │   │   │   └── workflows/
│   │   │   │       ├── auto_tags.yml
│   │   │   │       ├── build.yml
│   │   │   │       └── publish.yml
│   │   │   ├── .gitignore
│   │   │   ├── .npmignore
│   │   │   ├── .nvmrc
│   │   │   ├── BUILD.bazel
│   │   │   ├── README.md
│   │   │   ├── bin/
│   │   │   │   └── remotedebug-ios-webkit-adapter
│   │   │   ├── gulpfile.js
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   ├── adapters/
│   │   │   │   │   ├── adapter.ts
│   │   │   │   │   ├── adapterCollection.ts
│   │   │   │   │   ├── adapterInterfaces.ts
│   │   │   │   │   ├── androidAdapter.ts
│   │   │   │   │   ├── hermesAdapter.ts
│   │   │   │   │   ├── iosAdapter.ts
│   │   │   │   │   ├── testAdapter.ts
│   │   │   │   │   └── universalAdapter.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── iosSimulatorSocketFinder.ts
│   │   │   │   ├── lib/
│   │   │   │   │   ├── mock-socket.d.ts
│   │   │   │   │   └── test-targets.json
│   │   │   │   ├── logger.ts
│   │   │   │   ├── protocols/
│   │   │   │   │   ├── androidTarget.ts
│   │   │   │   │   ├── hermes/
│   │   │   │   │   │   └── hermes.ts
│   │   │   │   │   ├── ios/
│   │   │   │   │   │   ├── ios.ts
│   │   │   │   │   │   ├── ios12.ts
│   │   │   │   │   │   ├── ios8.ts
│   │   │   │   │   │   ├── ios9.ts
│   │   │   │   │   │   └── screencast.ts
│   │   │   │   │   ├── iosTarget.ts
│   │   │   │   │   ├── protocol.ts
│   │   │   │   │   └── target.ts
│   │   │   │   └── server.ts
│   │   │   ├── test/
│   │   │   │   ├── helperMocks.ts
│   │   │   │   └── protocols/
│   │   │   │       └── target.test.ts
│   │   │   ├── test.css
│   │   │   ├── tsconfig.json
│   │   │   └── tslint.json
│   │   ├── scripts/
│   │   │   ├── run.sh
│   │   │   ├── run_dev.sh
│   │   │   └── update_companion.sh
│   │   ├── src/
│   │   │   ├── AST.spec.ts
│   │   │   ├── AST.ts
│   │   │   ├── BatchMinifier.ts
│   │   │   ├── CodeInstrumentation.ts
│   │   │   ├── CompanionServiceBase.ts
│   │   │   ├── CompilerCompanion.ts
│   │   │   ├── ConsoleLogTransformer.spec.ts
│   │   │   ├── ConsoleLogTransformer.ts
│   │   │   ├── DebuggingProxy.ts
│   │   │   ├── GenerateIds.spec.ts
│   │   │   ├── GenerateIds.ts
│   │   │   ├── GeneratedFileHeader.ts
│   │   │   ├── IWorkspace.d.ts
│   │   │   ├── Identifier.ts
│   │   │   ├── JSXProcessor.spec.ts
│   │   │   ├── JSXProcessor.ts
│   │   │   ├── ObjectiveCWriter.ts
│   │   │   ├── OutputWriter.ts
│   │   │   ├── SourceMapUtils.ts
│   │   │   ├── TSUtils.spec.ts
│   │   │   ├── TSUtils.ts
│   │   │   ├── Workspace.ts
│   │   │   ├── WorkspaceStore.ts
│   │   │   ├── ZombieKiller.ts
│   │   │   ├── cache/
│   │   │   │   ├── CachingWorkspace.spec.ts
│   │   │   │   ├── CachingWorkspace.ts
│   │   │   │   ├── CachingWorkspaceFactory.ts
│   │   │   │   ├── CircularLoopTracker.spec.ts
│   │   │   │   ├── CircularLoopTracker.ts
│   │   │   │   ├── ICompilationCache.d.ts
│   │   │   │   ├── SQLiteCompilationCache.spec.ts
│   │   │   │   └── SQLiteCompilationCache.ts
│   │   │   ├── cli/
│   │   │   │   ├── generateGhostOwnershipMap.ts
│   │   │   │   └── rewriteImports.ts
│   │   │   ├── index.ts
│   │   │   ├── index_tsnode.js
│   │   │   ├── logger/
│   │   │   │   ├── ILogger.ts
│   │   │   │   ├── LoggerUtils.ts
│   │   │   │   ├── ProtocolLogger.ts
│   │   │   │   └── StreamLogger.ts
│   │   │   ├── native/
│   │   │   │   ├── CompileNativeCommand.ts
│   │   │   │   ├── IRtoString.ts
│   │   │   │   ├── NativeCodeWriter.ts
│   │   │   │   ├── NativeCompiler.spec.ts
│   │   │   │   ├── NativeCompiler.ts
│   │   │   │   ├── NativeCompilerOptions.ts
│   │   │   │   ├── NativeHelper.ts
│   │   │   │   ├── builder/
│   │   │   │   │   ├── INativeCompilerBuilder.ts
│   │   │   │   │   ├── NativeCompilerBuilder.ts
│   │   │   │   │   ├── NativeCompilerBuilderIR.ts
│   │   │   │   │   ├── VariableContext.ts
│   │   │   │   │   └── internal/
│   │   │   │   │       ├── NativeCompilerBlockBuilderContext.ts
│   │   │   │   │       └── transformers/
│   │   │   │   │           ├── NativeCompilerTransformerAutoRelease.ts
│   │   │   │   │           ├── NativeCompilerTransformerConstantFolding.ts
│   │   │   │   │           ├── NativeCompilerTransformerInsertRetainRelease.ts
│   │   │   │   │           ├── NativeCompilerTransformerMergeRelease.ts
│   │   │   │   │           ├── NativeCompilerTransformerOptimizeAssignments.ts
│   │   │   │   │           ├── NativeCompilerTransformerOptimizeLoads.ts
│   │   │   │   │           ├── NativeCompilerTransformerOptimizeVarRefs.ts
│   │   │   │   │           ├── NativeCompilerTransformerResolveBuilderStubs.ts
│   │   │   │   │           ├── NativeCompilerTransformerResolveSlots.ts
│   │   │   │   │           └── utils/
│   │   │   │   │               ├── IRVisitors.ts
│   │   │   │   │               └── JumpIndexer.ts
│   │   │   │   ├── emitter/
│   │   │   │   │   ├── CompilerNativeCEmitter.ts
│   │   │   │   │   └── INativeCompilerEmitter.ts
│   │   │   │   └── utils/
│   │   │   │       ├── AssignmentTracker.ts
│   │   │   │       ├── NameAllocator.ts
│   │   │   │       ├── NamePath.ts
│   │   │   │       ├── StringEscape.ts
│   │   │   │       └── VariableIdMap.ts
│   │   │   ├── project/
│   │   │   │   ├── FileManager.ts
│   │   │   │   ├── Project.spec.ts
│   │   │   │   ├── Project.ts
│   │   │   │   ├── SourceFileManager.ts
│   │   │   │   ├── TypeScriptHosts.ts
│   │   │   │   ├── VirtualFileSystem.spec.ts
│   │   │   │   ├── VirtualFileSystem.ts
│   │   │   │   └── tsInternals.ts
│   │   │   ├── protocol.ts
│   │   │   ├── sqlite_bindings/
│   │   │   │   ├── README.md
│   │   │   │   ├── better_sqlite3_linux_x86_64.node
│   │   │   │   └── better_sqlite3_macos_arm64.node
│   │   │   ├── strings/
│   │   │   │   ├── GenerateStringsFiles.spec.ts
│   │   │   │   ├── GenerateStringsFiles.ts
│   │   │   │   ├── exportStringsFiles.ts
│   │   │   │   ├── utils.spec.ts
│   │   │   │   └── utils.ts
│   │   │   ├── tslibs/
│   │   │   │   ├── .gitattributes
│   │   │   │   ├── GenerateTSLibs.ts
│   │   │   │   ├── TSLibsDatabase.ts
│   │   │   │   └── tslibs.json
│   │   │   ├── types/
│   │   │   │   └── IstanbulLibInstrument.d.ts
│   │   │   └── utils/
│   │   │       ├── EmitResolver.ts
│   │   │       ├── ImportPathResolver.ts
│   │   │       ├── Lazy.ts
│   │   │       ├── SerialTaskQueue.ts
│   │   │       ├── Stopwatch.ts
│   │   │       ├── StringUtils.ts
│   │   │       ├── TextParser.ts
│   │   │       ├── companionTransport.ts
│   │   │       ├── fileUtils.ts
│   │   │       ├── getArgumentValue.ts
│   │   │       ├── rethrow.ts
│   │   │       └── sha256.ts
│   │   ├── supported-locales/
│   │   │   ├── .gitignore
│   │   │   ├── .npmrc
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   └── index.ts
│   │   │   └── tsconfig.json
│   │   ├── tsconfig.base.json
│   │   ├── tsconfig.bazel.json
│   │   ├── tsconfig.json
│   │   ├── webpack.config.js
│   │   └── webpack.dev.config.js
│   └── compiler/
│       ├── .gitignore
│       ├── BUILD.bazel
│       ├── Compiler/
│       │   ├── .gitignore
│       │   ├── Package.resolved
│       │   ├── Package.swift
│       │   ├── Sources/
│       │   │   ├── ADBClient/
│       │   │   │   ├── ADBClient.swift
│       │   │   │   ├── ADBDeviceConnection.swift
│       │   │   │   └── DaemonServiceADBAutoConnector.swift
│       │   │   ├── Bazel/
│       │   │   │   ├── BazelPersistentWorker.swift
│       │   │   │   ├── BazelWorkerProtocol.swift
│       │   │   │   └── BundleInfo+Bazel.swift
│       │   │   ├── BundleManager.swift
│       │   │   ├── CSS/
│       │   │   │   ├── CSSModuleCompiler.swift
│       │   │   │   ├── Selector.swift
│       │   │   │   ├── StyleSheetCompiler.swift
│       │   │   │   ├── StyleSheetCompilerResult.swift
│       │   │   │   ├── StyleTree+Proto.swift
│       │   │   │   └── StyleTree.swift
│       │   │   ├── Config/
│       │   │   │   ├── CompilerConfig.swift
│       │   │   │   ├── CompilerFileInputList.swift
│       │   │   │   ├── ResolvedConfigs.swift
│       │   │   │   ├── ValdiProjectConfig.swift
│       │   │   │   └── ValdiUserConfig.swift
│       │   │   ├── Constants.swift
│       │   │   ├── Debugger/
│       │   │   │   └── AndroidDebuggingTarget.swift
│       │   │   ├── Files/
│       │   │   │   └── ValdiFilesFinder.swift
│       │   │   ├── Generation/
│       │   │   │   ├── CodeWriter.swift
│       │   │   │   ├── Cpp/
│       │   │   │   │   ├── CppCodeGenerator.swift
│       │   │   │   │   ├── CppFunctionGenerator.swift
│       │   │   │   │   ├── CppModuleGenerator.swift
│       │   │   │   │   ├── CppSchemaWriter.swift
│       │   │   │   │   ├── CppValidation.swift
│       │   │   │   │   └── PropertyNameAllocator+CPP.swift
│       │   │   │   ├── EmittedIdentifiers.swift
│       │   │   │   ├── ExportedFunctionGenerator.swift
│       │   │   │   ├── ExportedModuleGenerator.swift
│       │   │   │   ├── GeneratedTypesDiagnostics.swift
│       │   │   │   ├── Kotlin/
│       │   │   │   │   ├── JVMClass.swift
│       │   │   │   │   ├── KotlinCodeGenerator.swift
│       │   │   │   │   ├── KotlinEmittedTypeReferences.swift
│       │   │   │   │   ├── KotlinFunctionGenerator.swift
│       │   │   │   │   ├── KotlinModuleGenerator.swift
│       │   │   │   │   ├── KotlinSchemaWriter.swift
│       │   │   │   │   └── KotlinValidation.swift
│       │   │   │   ├── NativeSourceGenerator.swift
│       │   │   │   ├── ObjC/
│       │   │   │   │   ├── ObjCCodeGenerator.swift
│       │   │   │   │   ├── ObjCDependencyRepresentationGenerator.swift
│       │   │   │   │   ├── ObjCEmittedIdentifiers.swift
│       │   │   │   │   ├── ObjCEmittedTrampolineFunctions.swift
│       │   │   │   │   ├── ObjCFunctionGenerator.swift
│       │   │   │   │   ├── ObjCModuleGenerator.swift
│       │   │   │   │   ├── ObjCSchemaWriter.swift
│       │   │   │   │   └── ObjCValidation.swift
│       │   │   │   ├── SchemaWriter.swift
│       │   │   │   └── Swift/
│       │   │   │       ├── SwiftCodeGenerator.swift
│       │   │   │       ├── SwiftEmittedIdentifiers.swift
│       │   │   │       ├── SwiftFunctionGenerator.swift
│       │   │   │       ├── SwiftSchemaWriter.swift
│       │   │   │       └── SwiftValidation.swift
│       │   │   ├── Images/
│       │   │   │   ├── ImageConverter.swift
│       │   │   │   ├── ImageToolbox.swift
│       │   │   │   ├── ImageVariantResolver.swift
│       │   │   │   └── ImageVariantSpecs.swift
│       │   │   ├── Kotlin/
│       │   │   │   └── KotlinCompiler.swift
│       │   │   ├── Logs/
│       │   │   │   ├── LogsCleaner.swift
│       │   │   │   ├── LogsFileHandle.swift
│       │   │   │   ├── LogsRotator.swift
│       │   │   │   └── LogsWriter.swift
│       │   │   ├── Models/
│       │   │   │   ├── CompilationResult.swift
│       │   │   │   ├── DependencyMetadata.swift
│       │   │   │   ├── DownloadableArtifactSignatures.swift
│       │   │   │   ├── File.swift
│       │   │   │   ├── FinalFile.swift
│       │   │   │   ├── FontAsset.swift
│       │   │   │   ├── IgnoredFile.swift
│       │   │   │   ├── ImageAsset.swift
│       │   │   │   ├── ImageVariantsFilter.swift
│       │   │   │   ├── JavaScriptFile.swift
│       │   │   │   ├── NativeSource.swift
│       │   │   │   ├── ResourceResult.swift
│       │   │   │   ├── TransformedResource.swift
│       │   │   │   ├── Valdi.pb.swift
│       │   │   │   ├── ZippableItem.swift
│       │   │   │   ├── valdi-artifact-management.pb.swift
│       │   │   │   └── valdi-daemon-registry.pb.swift
│       │   │   ├── OutputDirectories.swift
│       │   │   ├── Parser/
│       │   │   │   ├── Models/
│       │   │   │   │   └── ValdiRawDocument.swift
│       │   │   │   └── ValdiDocumentParser.swift
│       │   │   ├── Pipeline/
│       │   │   │   ├── CompilationItem.swift
│       │   │   │   ├── CompilationItems.swift
│       │   │   │   ├── CompilationMode.swift
│       │   │   │   ├── CompilationPipeline.swift
│       │   │   │   ├── CompilationProcessor.swift
│       │   │   │   ├── CompilationSequence.swift
│       │   │   │   ├── DeferredWarningCollector.swift
│       │   │   │   ├── JSConstants.swift
│       │   │   │   └── ModulesFilter.swift
│       │   │   ├── Processors/
│       │   │   │   ├── ApplyTypeScriptAnnotationsProcessor.swift
│       │   │   │   ├── BundleResourcesProcessor.swift
│       │   │   │   ├── CSSModulesProcessor.swift
│       │   │   │   ├── ClientSqlExportProcessor.swift
│       │   │   │   ├── ClientSqlProcessor.swift
│       │   │   │   ├── CodeCoverageProcessor.swift
│       │   │   │   ├── CombineNativeSourcesProcessor.swift
│       │   │   │   ├── CompileDocumentsProcessor.swift
│       │   │   │   ├── CompileTypeScriptProcessor.swift
│       │   │   │   ├── DiagnosticsProcessor.swift
│       │   │   │   ├── DocumentUserScriptExtractionProcessor.swift
│       │   │   │   ├── DumpCompilationMetadataProcessor.swift
│       │   │   │   ├── DumpComponentsProcessor.swift
│       │   │   │   ├── DumpTypeScriptSymbolsProcessor.swift
│       │   │   │   ├── FilterItemsProcessor.swift
│       │   │   │   ├── FinalFilesVerificationProcessor.swift
│       │   │   │   ├── GenerateAssetCatalogProcessor.swift
│       │   │   │   ├── GenerateBuildFileProcessor.swift
│       │   │   │   ├── GenerateDependencyInjectionDataProcessor.swift
│       │   │   │   ├── GenerateGlobalMetadataProcessor.swift
│       │   │   │   ├── GenerateIdsFilesProcessor.swift
│       │   │   │   ├── GenerateModelsProcessor.swift
│       │   │   │   ├── GenerateModuleBuildFileProcessor.swift
│       │   │   │   ├── GenerateViewClassesProcessor.swift
│       │   │   │   ├── GeneratedTypesVerificationProcessor.swift
│       │   │   │   ├── HotReloadingProcessor.swift
│       │   │   │   ├── IdentifyFontAssetsProcessor.swift
│       │   │   │   ├── IdentifyImageAssetsProcessor.swift
│       │   │   │   ├── IdentifyItemsProcessor.swift
│       │   │   │   ├── ImageResourcesProcessor.swift
│       │   │   │   ├── InvalidDocumentsProcessor.swift
│       │   │   │   ├── JavaScriptPreCompiler.swift
│       │   │   │   ├── LoadDumpedClassMappingProcessor.swift
│       │   │   │   ├── MinifyJsProcessor.swift
│       │   │   │   ├── NativeCodeGenerationManager.swift
│       │   │   │   ├── ParseDocumentsProcessor.swift
│       │   │   │   ├── ParseTypeScriptAnnotationsProcessor.swift
│       │   │   │   ├── PrependWebJsProcessor.swift
│       │   │   │   ├── ProjectClassMappingManager.swift
│       │   │   │   ├── ResolveOutputPathsProcessor.swift
│       │   │   │   ├── SaveFilesProcessor.swift
│       │   │   │   ├── SourceMapProcessor.swift
│       │   │   │   ├── TranslationStringsProcessor.swift
│       │   │   │   ├── TypeScriptAnnotationsManager.swift
│       │   │   │   ├── TypeScriptCompilerManager.swift
│       │   │   │   ├── TypeScriptProcessingUtils.swift
│       │   │   │   └── UserScriptManager.swift
│       │   │   ├── Reloader/
│       │   │   │   ├── AddressPort.swift
│       │   │   │   ├── AutoRecompiler.swift
│       │   │   │   ├── DaemonService.swift
│       │   │   │   ├── DaemonServiceConnectedClient.swift
│       │   │   │   ├── DaemonServiceDefinitions.swift
│       │   │   │   ├── DaemonServiceSimulatorAutoConnector.swift
│       │   │   │   ├── DaemonServiceUSBMuxAutoConnector.swift
│       │   │   │   ├── DaemonTCPConnection.swift
│       │   │   │   ├── DaemonTCPConnectionAcceptor.swift
│       │   │   │   ├── DocumentChangeNotifier.swift
│       │   │   │   ├── FileDependenciesManager.swift
│       │   │   │   ├── NonSpammyLog.swift
│       │   │   │   ├── ReloaderDeviceWhitelist.swift
│       │   │   │   ├── ReloaderServiceAnnouncer.swift
│       │   │   │   ├── ReloaderServiceUDPAnnouncer.swift
│       │   │   │   ├── ResourceStore.swift
│       │   │   │   ├── String+Network.swift
│       │   │   │   ├── ValdiDaemonProtocolClient.swift
│       │   │   │   └── Watchman/
│       │   │   │       ├── WatchmanClient.swift
│       │   │   │       ├── WatchmanConnection.swift
│       │   │   │       └── WatchmanResponse.swift
│       │   │   ├── Sass/
│       │   │   │   ├── LibSassCompiler.swift
│       │   │   │   └── SassCompiler.swift
│       │   │   ├── StaticRes/
│       │   │   │   └── StaticResGenerator.swift
│       │   │   ├── Template/
│       │   │   │   ├── CompilationMetadata.swift
│       │   │   │   ├── KotlinViewClassGenerator.swift
│       │   │   │   ├── LanguageSpecificViewClassGenerator.swift
│       │   │   │   ├── ObjCViewClassGenerator.swift
│       │   │   │   ├── ProjectClassMapping.swift
│       │   │   │   ├── ResolvedClassMapping.swift
│       │   │   │   ├── SwiftViewClassGenerator.swift
│       │   │   │   ├── TemplateCompilerResult.swift
│       │   │   │   ├── ValdiTemplateCompiler.swift
│       │   │   │   └── ViewClassGenerator.swift
│       │   │   ├── Tests/
│       │   │   │   └── Tests.swift
│       │   │   ├── ToolboxExecutable/
│       │   │   │   └── ToolboxExecutable.swift
│       │   │   ├── TypeScript/
│       │   │   │   ├── CompanionExecutable.swift
│       │   │   │   ├── CompanionExecutableProvider.swift
│       │   │   │   ├── JSCodeInstrumentation.swift
│       │   │   │   ├── JSDocs.swift
│       │   │   │   ├── TypeScriptAnnotation.swift
│       │   │   │   ├── TypeScriptCommands.swift
│       │   │   │   ├── TypeScriptCommentedFile.swift
│       │   │   │   ├── TypeScriptCommentedSymbol.swift
│       │   │   │   ├── TypeScriptCompiler.swift
│       │   │   │   ├── TypeScriptCompilerCompanionDriver.swift
│       │   │   │   ├── TypeScriptCompilerDriver.swift
│       │   │   │   ├── TypeScriptFile.swift
│       │   │   │   ├── TypeScriptGenerator.swift
│       │   │   │   ├── TypeScriptIntermediateUtils.swift
│       │   │   │   ├── TypeScriptNativeTypeExporter.swift
│       │   │   │   ├── TypeScriptNativeTypeResolver.swift
│       │   │   │   ├── TypeScriptStringsModuleGenerator.swift
│       │   │   │   ├── TypeScriptSymbol.swift
│       │   │   │   ├── TypeScriptSymbolParser.swift
│       │   │   │   └── ValdiJSElement.swift
│       │   │   ├── USBMuxClient/
│       │   │   │   ├── USBMuxBroadcastConnection.swift
│       │   │   │   ├── USBMuxClient.swift
│       │   │   │   ├── USBMuxConnection.swift
│       │   │   │   ├── USBMuxDeviceConnection.swift
│       │   │   │   ├── USBMuxError.swift
│       │   │   │   ├── USBMuxPacket.swift
│       │   │   │   └── USBMuxTunnel.swift
│       │   │   ├── Utils/
│       │   │   │   ├── ArtifactUploader.swift
│       │   │   │   ├── AsyncTaskQueue.swift
│       │   │   │   ├── BackoffTimer.swift
│       │   │   │   ├── BatchSequence.swift
│       │   │   │   ├── BatchWorkerQueue.swift
│       │   │   │   ├── BlueSocketTCPConnection.swift
│       │   │   │   ├── CLIUtils.swift
│       │   │   │   ├── Caching/
│       │   │   │   │   ├── DiskCache.swift
│       │   │   │   │   ├── DiskCacheImpl.swift
│       │   │   │   │   └── DiskCacheProvider.swift
│       │   │   │   ├── Cancelable.swift
│       │   │   │   ├── CompilationCache.swift
│       │   │   │   ├── CompilerError.swift
│       │   │   │   ├── ComponentPath.swift
│       │   │   │   ├── ConfigValue.swift
│       │   │   │   ├── DataConvertible.swift
│       │   │   │   ├── DispatchChannelTCPConnection.swift
│       │   │   │   ├── DumpModuleInfos.swift
│       │   │   │   ├── Extensions/
│       │   │   │   │   ├── Array+ParallelMap.swift
│       │   │   │   │   ├── Array+Search.swift
│       │   │   │   │   ├── BlueSocket+Extensions.swift
│       │   │   │   │   ├── Collection+Utils.swift
│       │   │   │   │   ├── Data+HexString.swift
│       │   │   │   │   ├── Data+SHA256.swift
│       │   │   │   │   ├── Data+Serialization.swift
│       │   │   │   │   ├── Data+UnsafePointers.swift
│       │   │   │   │   ├── DispatchQueue+Promise.swift
│       │   │   │   │   ├── DispatchSemaphore+Lock.swift
│       │   │   │   │   ├── Message+orderedSerializedData.swift
│       │   │   │   │   ├── NodeAttribute+Utils.swift
│       │   │   │   │   ├── Result+FromTuple.swift
│       │   │   │   │   ├── Result+GetError.swift
│       │   │   │   │   ├── String+Concatenate.swift
│       │   │   │   │   ├── String+EnvVariables.swift
│       │   │   │   │   ├── String+FileExtensions.swift
│       │   │   │   │   ├── String+JS.swift
│       │   │   │   │   ├── String+NSRange.swift
│       │   │   │   │   ├── String+Regex.swift
│       │   │   │   │   ├── String+Stride.swift
│       │   │   │   │   ├── String+Trim.swift
│       │   │   │   │   ├── Swift+Utils.swift
│       │   │   │   │   ├── TimeInterval+Utils.swift
│       │   │   │   │   ├── URL+FileExtensions.swift
│       │   │   │   │   ├── URL+Navigation.swift
│       │   │   │   │   ├── URL+RandomFile.swift
│       │   │   │   │   └── URL+Symlink.swift
│       │   │   │   ├── FileHandleReader.swift
│       │   │   │   ├── FileHeaderCommentGenerator.swift
│       │   │   │   ├── GeneratedSourceFilename.swift
│       │   │   │   ├── InclusionConfig.swift
│       │   │   │   ├── KillOnTimeout.swift
│       │   │   │   ├── LinesIndexer.swift
│       │   │   │   ├── Logger.swift
│       │   │   │   ├── MeasureExecution.swift
│       │   │   │   ├── NetworkInterfaceAddresses.swift
│       │   │   │   ├── Parser.swift
│       │   │   │   ├── PipeHandle.swift
│       │   │   │   ├── ProcessHandle.swift
│       │   │   │   ├── Promise.swift
│       │   │   │   ├── RandomAccessCollection+SafeGet.swift
│       │   │   │   ├── Ref.swift
│       │   │   │   ├── ResolvedModuleImport.swift
│       │   │   │   ├── SafeAutorelease.swift
│       │   │   │   ├── SentryClient.swift
│       │   │   │   ├── Synchronized.swift
│       │   │   │   ├── TCPConnection.swift
│       │   │   │   ├── TCPTunnel.swift
│       │   │   │   ├── TCPTunnelConnection.swift
│       │   │   │   ├── Trie.swift
│       │   │   │   ├── TypeScriptCommands+ParserDebug.swift
│       │   │   │   ├── UnresolvedPath.swift
│       │   │   │   ├── ValdiFileManager.swift
│       │   │   │   ├── ValdiModuleBuilder.swift
│       │   │   │   ├── ValdiModuleUtils.swift
│       │   │   │   └── ZstdCompressor.swift
│       │   │   ├── ValdiCompiler.swift
│       │   │   ├── ValdiCompilerArguments.swift
│       │   │   ├── ValdiCompilerRunner.swift
│       │   │   ├── ViewModels/
│       │   │   │   ├── CppEnumGenerator.swift
│       │   │   │   ├── CppModelGenerator.swift
│       │   │   │   ├── ExportedEnumGenerator.swift
│       │   │   │   ├── KotlinEnumGenerator.swift
│       │   │   │   ├── KotlinFactoryGenerator.swift
│       │   │   │   ├── KotlinModelGenerator.swift
│       │   │   │   ├── ObjCEnumGenerator.swift
│       │   │   │   ├── ObjCModelGenerator.swift
│       │   │   │   ├── ObjCSelector.swift
│       │   │   │   ├── PropertyNameAllocator+Kotlin.swift
│       │   │   │   ├── PropertyNameAllocator+ObjC.swift
│       │   │   │   ├── PropertyNameAllocator+Swift.swift
│       │   │   │   ├── PropertyNameAllocator.swift
│       │   │   │   ├── SwiftEnumGenerator.swift
│       │   │   │   ├── SwiftModelGenerator.swift
│       │   │   │   └── ValdiModelGenerator.swift
│       │   │   └── main.swift
│       │   ├── Tests/
│       │   │   ├── CompilerTests/
│       │   │   │   ├── CompilerTests.swift
│       │   │   │   └── ValdiAnnotationTests.swift
│       │   │   └── LinuxMain.swift
│       │   └── Vendors/
│       │       ├── BlueSocket/
│       │       │   ├── Package.swift
│       │       │   └── Sources/
│       │       │       ├── Socket.swift
│       │       │       ├── SocketProtocols.swift
│       │       │       └── SocketUtils.swift
│       │       ├── Clibsass/
│       │       │   ├── Package.swift
│       │       │   ├── README.snap
│       │       │   ├── Sources/
│       │       │   │   ├── GNUmakefile.am
│       │       │   │   ├── MurmurHash2.hpp
│       │       │   │   ├── ast.cpp
│       │       │   │   ├── ast.hpp
│       │       │   │   ├── ast2c.cpp
│       │       │   │   ├── ast2c.hpp
│       │       │   │   ├── ast_def_macros.hpp
│       │       │   │   ├── ast_fwd_decl.cpp
│       │       │   │   ├── ast_fwd_decl.hpp
│       │       │   │   ├── ast_helpers.hpp
│       │       │   │   ├── ast_sel_cmp.cpp
│       │       │   │   ├── ast_sel_super.cpp
│       │       │   │   ├── ast_sel_unify.cpp
│       │       │   │   ├── ast_sel_weave.cpp
│       │       │   │   ├── ast_selectors.cpp
│       │       │   │   ├── ast_selectors.hpp
│       │       │   │   ├── ast_supports.cpp
│       │       │   │   ├── ast_supports.hpp
│       │       │   │   ├── ast_values.cpp
│       │       │   │   ├── ast_values.hpp
│       │       │   │   ├── b64/
│       │       │   │   │   ├── cencode.h
│       │       │   │   │   └── encode.h
│       │       │   │   ├── backtrace.cpp
│       │       │   │   ├── backtrace.hpp
│       │       │   │   ├── base64vlq.cpp
│       │       │   │   ├── base64vlq.hpp
│       │       │   │   ├── bind.cpp
│       │       │   │   ├── bind.hpp
│       │       │   │   ├── c2ast.cpp
│       │       │   │   ├── c2ast.hpp
│       │       │   │   ├── c99func.c
│       │       │   │   ├── cencode.c
│       │       │   │   ├── check_nesting.cpp
│       │       │   │   ├── check_nesting.hpp
│       │       │   │   ├── color_maps.cpp
│       │       │   │   ├── color_maps.hpp
│       │       │   │   ├── constants.cpp
│       │       │   │   ├── constants.hpp
│       │       │   │   ├── context.cpp
│       │       │   │   ├── context.hpp
│       │       │   │   ├── cssize.cpp
│       │       │   │   ├── cssize.hpp
│       │       │   │   ├── dart_helpers.hpp
│       │       │   │   ├── debug.hpp
│       │       │   │   ├── debugger.hpp
│       │       │   │   ├── emitter.cpp
│       │       │   │   ├── emitter.hpp
│       │       │   │   ├── environment.cpp
│       │       │   │   ├── environment.hpp
│       │       │   │   ├── error_handling.cpp
│       │       │   │   ├── error_handling.hpp
│       │       │   │   ├── eval.cpp
│       │       │   │   ├── eval.hpp
│       │       │   │   ├── eval_selectors.cpp
│       │       │   │   ├── expand.cpp
│       │       │   │   ├── expand.hpp
│       │       │   │   ├── extender.cpp
│       │       │   │   ├── extender.hpp
│       │       │   │   ├── extension.cpp
│       │       │   │   ├── extension.hpp
│       │       │   │   ├── file.cpp
│       │       │   │   ├── file.hpp
│       │       │   │   ├── fn_colors.cpp
│       │       │   │   ├── fn_colors.hpp
│       │       │   │   ├── fn_lists.cpp
│       │       │   │   ├── fn_lists.hpp
│       │       │   │   ├── fn_maps.cpp
│       │       │   │   ├── fn_maps.hpp
│       │       │   │   ├── fn_miscs.cpp
│       │       │   │   ├── fn_miscs.hpp
│       │       │   │   ├── fn_numbers.cpp
│       │       │   │   ├── fn_numbers.hpp
│       │       │   │   ├── fn_selectors.cpp
│       │       │   │   ├── fn_selectors.hpp
│       │       │   │   ├── fn_strings.cpp
│       │       │   │   ├── fn_strings.hpp
│       │       │   │   ├── fn_utils.cpp
│       │       │   │   ├── fn_utils.hpp
│       │       │   │   ├── include/
│       │       │   │   │   ├── sass/
│       │       │   │   │   │   ├── base.h
│       │       │   │   │   │   ├── context.h
│       │       │   │   │   │   ├── functions.h
│       │       │   │   │   │   ├── values.h
│       │       │   │   │   │   ├── version.h
│       │       │   │   │   │   └── version.h.in
│       │       │   │   │   ├── sass.h
│       │       │   │   │   └── sass2scss.h
│       │       │   │   ├── inspect.cpp
│       │       │   │   ├── inspect.hpp
│       │       │   │   ├── json.cpp
│       │       │   │   ├── json.hpp
│       │       │   │   ├── kwd_arg_macros.hpp
│       │       │   │   ├── lexer.cpp
│       │       │   │   ├── lexer.hpp
│       │       │   │   ├── listize.cpp
│       │       │   │   ├── listize.hpp
│       │       │   │   ├── mapping.hpp
│       │       │   │   ├── memory/
│       │       │   │   │   ├── allocator.cpp
│       │       │   │   │   ├── allocator.hpp
│       │       │   │   │   ├── config.hpp
│       │       │   │   │   ├── memory_pool.hpp
│       │       │   │   │   ├── shared_ptr.cpp
│       │       │   │   │   └── shared_ptr.hpp
│       │       │   │   ├── memory.hpp
│       │       │   │   ├── operation.hpp
│       │       │   │   ├── operators.cpp
│       │       │   │   ├── operators.hpp
│       │       │   │   ├── ordered_map.hpp
│       │       │   │   ├── output.cpp
│       │       │   │   ├── output.hpp
│       │       │   │   ├── parser.cpp
│       │       │   │   ├── parser.hpp
│       │       │   │   ├── parser_selectors.cpp
│       │       │   │   ├── permutate.hpp
│       │       │   │   ├── plugins.cpp
│       │       │   │   ├── plugins.hpp
│       │       │   │   ├── position.cpp
│       │       │   │   ├── position.hpp
│       │       │   │   ├── prelexer.cpp
│       │       │   │   ├── prelexer.hpp
│       │       │   │   ├── remove_placeholders.cpp
│       │       │   │   ├── remove_placeholders.hpp
│       │       │   │   ├── sass.cpp
│       │       │   │   ├── sass.hpp
│       │       │   │   ├── sass2scss.cpp
│       │       │   │   ├── sass_context.cpp
│       │       │   │   ├── sass_context.hpp
│       │       │   │   ├── sass_functions.cpp
│       │       │   │   ├── sass_functions.hpp
│       │       │   │   ├── sass_values.cpp
│       │       │   │   ├── sass_values.hpp
│       │       │   │   ├── settings.hpp
│       │       │   │   ├── source.cpp
│       │       │   │   ├── source.hpp
│       │       │   │   ├── source_data.hpp
│       │       │   │   ├── source_map.cpp
│       │       │   │   ├── source_map.hpp
│       │       │   │   ├── stylesheet.cpp
│       │       │   │   ├── stylesheet.hpp
│       │       │   │   ├── support/
│       │       │   │   │   └── libsass.pc.in
│       │       │   │   ├── to_value.cpp
│       │       │   │   ├── to_value.hpp
│       │       │   │   ├── units.cpp
│       │       │   │   ├── units.hpp
│       │       │   │   ├── utf8/
│       │       │   │   │   ├── checked.h
│       │       │   │   │   ├── core.h
│       │       │   │   │   └── unchecked.h
│       │       │   │   ├── utf8.h
│       │       │   │   ├── utf8_string.cpp
│       │       │   │   ├── utf8_string.hpp
│       │       │   │   ├── util.cpp
│       │       │   │   ├── util.hpp
│       │       │   │   ├── util_string.cpp
│       │       │   │   ├── util_string.hpp
│       │       │   │   ├── values.cpp
│       │       │   │   └── values.hpp
│       │       │   └── VERSION.txt
│       │       ├── SwiftCSSParser/
│       │       │   ├── Package.resolved
│       │       │   ├── Package.swift
│       │       │   └── Sources/
│       │       │       ├── README
│       │       │       ├── StyleElement.swift
│       │       │       └── StyleSheet.swift
│       │       ├── Yaml/
│       │       │   ├── Package.swift
│       │       │   └── Sources/
│       │       │       ├── YAMLOperators.swift
│       │       │       ├── YAMLParser.swift
│       │       │       ├── YAMLRegex.swift
│       │       │       ├── YAMLResult.swift
│       │       │       ├── YAMLTokenizer.swift
│       │       │       └── Yaml.swift
│       │       ├── Zstd/
│       │       │   ├── Package.swift
│       │       │   └── Sources/
│       │       │       ├── bitstream.h
│       │       │       ├── compiler.h
│       │       │       ├── cpu.h
│       │       │       ├── debug.c
│       │       │       ├── debug.h
│       │       │       ├── entropy_common.c
│       │       │       ├── error_private.c
│       │       │       ├── error_private.h
│       │       │       ├── fse.h
│       │       │       ├── fse_compress.c
│       │       │       ├── fse_decompress.c
│       │       │       ├── hist.c
│       │       │       ├── hist.h
│       │       │       ├── huf.h
│       │       │       ├── huf_compress.c
│       │       │       ├── huf_decompress.c
│       │       │       ├── include/
│       │       │       │   └── zstd.h
│       │       │       ├── mem.h
│       │       │       ├── pool.c
│       │       │       ├── pool.h
│       │       │       ├── threading.c
│       │       │       ├── threading.h
│       │       │       ├── xxhash.c
│       │       │       ├── xxhash.h
│       │       │       ├── zstd_common.c
│       │       │       ├── zstd_compress.c
│       │       │       ├── zstd_compress_internal.h
│       │       │       ├── zstd_compress_literals.c
│       │       │       ├── zstd_compress_literals.h
│       │       │       ├── zstd_compress_sequences.c
│       │       │       ├── zstd_compress_sequences.h
│       │       │       ├── zstd_cwksp.h
│       │       │       ├── zstd_ddict.c
│       │       │       ├── zstd_ddict.h
│       │       │       ├── zstd_decompress.c
│       │       │       ├── zstd_decompress_block.c
│       │       │       ├── zstd_decompress_block.h
│       │       │       ├── zstd_decompress_internal.h
│       │       │       ├── zstd_double_fast.c
│       │       │       ├── zstd_double_fast.h
│       │       │       ├── zstd_errors.h
│       │       │       ├── zstd_fast.c
│       │       │       ├── zstd_fast.h
│       │       │       ├── zstd_internal.h
│       │       │       ├── zstd_lazy.c
│       │       │       ├── zstd_lazy.h
│       │       │       ├── zstd_ldm.c
│       │       │       ├── zstd_ldm.h
│       │       │       ├── zstd_opt.c
│       │       │       ├── zstd_opt.h
│       │       │       ├── zstdmt_compress.c
│       │       │       └── zstdmt_compress.h
│       │       └── katana-parser/
│       │           ├── Package.swift
│       │           ├── README
│       │           └── Sources/
│       │               ├── foundation.c
│       │               ├── include/
│       │               │   ├── foundation.h
│       │               │   ├── katana.h
│       │               │   ├── katana.lex.h
│       │               │   ├── katana.tab.h
│       │               │   ├── parser.h
│       │               │   ├── selector.h
│       │               │   └── tokenizer.h
│       │               ├── katana.lex.c
│       │               ├── katana.tab.c
│       │               ├── parser.c
│       │               ├── selector.c
│       │               └── tokenizer.c
│       ├── README.md
│       ├── generate_proto.py
│       ├── generate_proto.sh
│       ├── scripts/
│       │   ├── README_local_compiler.md
│       │   ├── entitlements.plist
│       │   ├── update_compiler.sh
│       │   └── use_local_compiler.sh
│       ├── valdi-artifact-management.proto
│       ├── valdi-daemon-registry.proto
│       └── valdi.proto
├── docs/
│   ├── DEV_SETUP.md
│   ├── INSTALL.md
│   ├── README.md
│   ├── TROUBLESHOOTING.md
│   ├── api/
│   │   ├── api-quick-reference.md
│   │   ├── api-reference-elements.md
│   │   └── api-style-attributes.md
│   ├── codelabs/
│   │   ├── advanced_ui/
│   │   │   ├── 1-setup.md
│   │   │   ├── 2-section_list.md
│   │   │   └── 3-flexbox.md
│   │   ├── getting_started/
│   │   │   ├── 1-introduction.md
│   │   │   ├── 2-start_coding.md
│   │   │   ├── 3-declarative_rendering.md
│   │   │   ├── 3-setup_code_tools.md
│   │   │   ├── 4-control_flow_loops.md
│   │   │   ├── 5-component_state.md
│   │   │   ├── 6-component_lifecycle.md
│   │   │   ├── 7-component_events.md
│   │   │   └── 8-unittest.md
│   │   ├── how_to_get_help.md
│   │   ├── integration_with_native/
│   │   │   ├── 1-introduction.md
│   │   │   ├── 2-setup_ui.md
│   │   │   ├── 3-context_view_model.md
│   │   │   ├── 4-get_friends.md
│   │   │   ├── 5-get_ready_for_testing.md
│   │   │   ├── 6-native_build_module.md
│   │   │   ├── android/
│   │   │   │   ├── 1-android_setup_for_development.md
│   │   │   │   ├── 2-android_hook_up_module.md
│   │   │   │   ├── 3-android_hook_up_snapchatter_service.md
│   │   │   │   ├── 4-android_recommendFriendsCallback.md
│   │   │   │   └── 5-android_testing.md
│   │   │   ├── ios/
│   │   │   │   ├── 1-ios_setup_for_development.md
│   │   │   │   ├── 2-ios_hook_up_module.md
│   │   │   │   ├── 3-ios_hook_up_snapchatter_service.md
│   │   │   │   ├── 4-ios_recommendfriendscallback.md
│   │   │   │   └── 5-ios_testing.md
│   │   │   └── ios_swift/
│   │   │       ├── 1-ios_setup_for_development.md
│   │   │       ├── 2-ios_hook_up_module.md
│   │   │       ├── 3-ios_hook_up_snapchatter_service.md
│   │   │       └── 4-ios_recommendfriendscallback.md
│   │   └── shared_business_logic/
│   │       ├── 1-introduction.md
│   │       ├── 2-setup_module.md
│   │       ├── 3-business_logic.md
│   │       ├── 4-native_annotations.md
│   │       ├── android/
│   │       │   ├── 1-android_setup_for_development.md
│   │       │   └── 2-android_hook_up_module.md
│   │       └── ios/
│   │           ├── 1-ios_setup_for_development.md
│   │           └── 2-ios_hook_up_module.md
│   ├── docs/
│   │   ├── advanced-animations.md
│   │   ├── advanced-element-references.md
│   │   ├── advanced-full-stack.md
│   │   ├── advanced-images.md
│   │   ├── advanced-localization.md
│   │   ├── advanced-native-references.md
│   │   ├── advanced-protobuf.md
│   │   ├── advanced-provider.md
│   │   ├── advanced-worker-service.md
│   │   ├── ai-tooling.md
│   │   ├── choosing-valdi.md
│   │   ├── client-libraries-rxjs.md
│   │   ├── command-line-references.md
│   │   ├── control-flow.md
│   │   ├── core-component.md
│   │   ├── core-events.md
│   │   ├── core-flexbox.md
│   │   ├── core-images.md
│   │   ├── core-module.md
│   │   ├── core-scrolls.md
│   │   ├── core-slots.md
│   │   ├── core-states.md
│   │   ├── core-styling.md
│   │   ├── core-text.md
│   │   ├── core-touches.md
│   │   ├── core-video.md
│   │   ├── core-views.md
│   │   ├── export-model-vs-export-proxy-marshalling.md
│   │   ├── faq.md
│   │   ├── glossary.md
│   │   ├── help-support.md
│   │   ├── help-troubleshooting.md
│   │   ├── internals-api-design.md
│   │   ├── internals-compiler.md
│   │   ├── internals-native-integration.md
│   │   ├── internals-renderer.md
│   │   ├── internals-runtime.md
│   │   ├── migrate-from-compose.md
│   │   ├── migrate-from-flutter.md
│   │   ├── native-annotations.md
│   │   ├── native-bindings.md
│   │   ├── native-collectionview.md
│   │   ├── native-context.md
│   │   ├── native-customviews.md
│   │   ├── native-polyglot.md
│   │   ├── native-types.md
│   │   ├── native-view-model.md
│   │   ├── navigation.md
│   │   ├── on-render.md
│   │   ├── performance-memory-leaks.md
│   │   ├── performance-optimization.md
│   │   ├── performance-tracing.md
│   │   ├── performance-view-recycling.md
│   │   ├── start-about.md
│   │   ├── start-code-lab.md
│   │   ├── start-from-react.md
│   │   ├── start-install.md
│   │   ├── start-introduction.md
│   │   ├── stdlib-coreutils.md
│   │   ├── stdlib-filesystem.md
│   │   ├── stdlib-http.md
│   │   ├── stdlib-persistence.md
│   │   ├── third-party-dependencies.md
│   │   ├── workflow-appstore-release.md
│   │   ├── workflow-bazel.md
│   │   ├── workflow-cli-application.md
│   │   ├── workflow-disk.md
│   │   ├── workflow-external-build-system.md
│   │   ├── workflow-hermes-debugger.md
│   │   ├── workflow-inspector.md
│   │   ├── workflow-style-guide.md
│   │   └── workflow-testing.md
│   └── setup/
│       ├── linux_setup.md
│       └── macos_setup.md
├── fossa-deps.yml
├── libs/
│   ├── dummy/
│   │   ├── BUILD.bazel
│   │   ├── src/
│   │   │   ├── dummy/
│   │   │   │   └── main.cpp
│   │   │   └── manifest/
│   │   │       └── AndroidManifest.xml
│   │   └── test/
│   │       └── Test.cpp
│   ├── image_toolbox/
│   │   ├── BUILD.bazel
│   │   ├── README.md
│   │   └── src/
│   │       ├── image_toolbox/
│   │       │   ├── ImageToolbox.cpp
│   │       │   ├── ImageToolbox.hpp
│   │       │   ├── SVGRenderer.cpp
│   │       │   └── SVGRenderer.hpp
│   │       └── image_toolbox_c/
│   │           ├── image_toolbox.cpp
│   │           └── image_toolbox.h
│   └── utils/
│       ├── BUILD.bazel
│       └── src/
│           ├── utils/
│           │   ├── NoDestructor.hpp
│           │   ├── ObjCppPtrWrapper.hpp
│           │   ├── base/
│           │   │   ├── Function.hpp
│           │   │   └── NonCopyable.hpp
│           │   ├── crypto/
│           │   │   ├── AesEncryptor.cpp
│           │   │   ├── AesEncryptor.hpp
│           │   │   ├── CryptoHelpers.cpp
│           │   │   └── CryptoHelpers.hpp
│           │   ├── debugging/
│           │   │   ├── Assert.cpp
│           │   │   ├── Assert.hpp
│           │   │   ├── DjinniPrologue.hpp
│           │   │   ├── Trace.cpp
│           │   │   ├── Trace.hpp
│           │   │   └── detail/
│           │   │       ├── AssertInternals.cpp
│           │   │       └── AssertInternals.hpp
│           │   ├── encoding/
│           │   │   ├── Base64Utils.cpp
│           │   │   └── Base64Utils.hpp
│           │   ├── logging/
│           │   │   ├── Log.hpp
│           │   │   ├── Logger.cpp
│           │   │   └── Logger.hpp
│           │   ├── platform/
│           │   │   ├── BuildOptions.hpp
│           │   │   ├── BuildOptionsDefault.hpp
│           │   │   ├── BuildOptionsGenerated.hpp.in
│           │   │   ├── JNITypeStubs.hpp
│           │   │   ├── JvmOnLoad.cpp
│           │   │   ├── JvmOnLoad.hpp
│           │   │   ├── JvmUtils.cpp
│           │   │   ├── JvmUtils.hpp
│           │   │   └── TargetPlatform.hpp
│           │   └── time/
│           │       ├── BoottimeClock.cpp
│           │       ├── BoottimeClock.hpp
│           │       ├── Duration.hpp
│           │       ├── StopWatch.hpp
│           │       ├── UptimeClock.cpp
│           │       └── UptimeClock.hpp
│           └── utils_oss/
│               └── utils_oss.cpp
├── modules/
│   ├── .terserrc.json
│   ├── BUILD.bazel
│   ├── _configs/
│   │   ├── base.tsconfig.json
│   │   └── eslint.tsconfig.json
│   ├── hello_world/
│   │   ├── BUILD.bazel
│   │   ├── module.yaml
│   │   ├── src/
│   │   │   ├── HelloWorldApp.tsx
│   │   │   └── index.ts
│   │   └── tsconfig.json
│   ├── tsconfig.json
│   └── types/
│       ├── Long.d.ts
│       └── globals.d.ts
├── npm_modules/
│   ├── cli/
│   │   ├── .bazelignore
│   │   ├── .bootstrap/
│   │   │   ├── apps/
│   │   │   │   ├── cli_application/
│   │   │   │   │   ├── BUILD.bazel.template
│   │   │   │   │   └── modules/
│   │   │   │   │       └── {{MODULE_NAME}}/
│   │   │   │   │           ├── BUILD.bazel.template
│   │   │   │   │           └── src/
│   │   │   │   │               └── index.ts
│   │   │   │   └── ui_application/
│   │   │   │       ├── .eslint.rc
│   │   │   │       ├── BUILD.bazel.template
│   │   │   │       ├── modules/
│   │   │   │       │   └── {{MODULE_NAME}}/
│   │   │   │       │       ├── BUILD.bazel.template
│   │   │   │       │       └── src/
│   │   │   │       │           └── App.tsx
│   │   │   │       └── package.json
│   │   │   └── modules/
│   │   │       ├── polyglot_bridge_module/
│   │   │       │   ├── BUILD.bazel.template
│   │   │       │   ├── android/
│   │   │       │   │   └── CalculatorModuleFactory.kt.template
│   │   │       │   ├── ios/
│   │   │       │   │   └── SCCCalculatorModuleFactory.m.template
│   │   │       │   ├── src/
│   │   │       │   │   └── Calculator.d.ts
│   │   │       │   └── web/
│   │   │       │       ├── Calculator.ts
│   │   │       │       └── tsconfig.json
│   │   │       ├── polyglot_view_module/
│   │   │       │   ├── BUILD.bazel.template
│   │   │       │   ├── android/
│   │   │       │   │   ├── PolyglotNativeView.kt.template
│   │   │       │   │   └── PolyglotNativeViewAttributesBinder.kt.template
│   │   │       │   ├── ios/
│   │   │       │   │   ├── SCPolyglotView.h
│   │   │       │   │   └── SCPolyglotView.m
│   │   │       │   ├── macos/
│   │   │       │   │   ├── SCPolyglotView.h
│   │   │       │   │   └── SCPolyglotView.m
│   │   │       │   ├── src/
│   │   │       │   │   └── PolyglotCustomView.tsx.template
│   │   │       │   └── web/
│   │   │       │       ├── PolyglotWeb.ts.template
│   │   │       │       └── tsconfig.json
│   │   │       └── ui_component/
│   │   │           ├── BUILD.bazel.template
│   │   │           └── src/
│   │   │               └── NewModuleComponent.tsx
│   │   ├── .config/
│   │   │   └── copyconfig.json
│   │   ├── .editorconfig
│   │   ├── .eslintignore
│   │   ├── .eslintrc.js
│   │   ├── .github/
│   │   │   └── README.md
│   │   ├── .gitignore
│   │   ├── .metadata/
│   │   │   ├── .bazelrc.template
│   │   │   ├── .bazelversion.template
│   │   │   ├── .editorconfig.template
│   │   │   ├── .eslintrc.js.template
│   │   │   ├── .gitignore.template
│   │   │   ├── .prettierrc.json.template
│   │   │   ├── .watchmanconfig.template
│   │   │   ├── AGENTS.md.template
│   │   │   ├── README.md.template
│   │   │   ├── WORKSPACE.template
│   │   │   ├── config.yaml.template
│   │   │   ├── package.json.template
│   │   │   ├── skill-reference.tsx.template
│   │   │   ├── skill-tests-BUILD.bazel.template
│   │   │   ├── skill-tests-README.md.template
│   │   │   └── skill.md.template
│   │   ├── .prettierignore
│   │   ├── .prettierrc.json
│   │   ├── LINUX_COMPATIBILITY.md
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── prettier.config.js
│   │   ├── scripts/
│   │   │   ├── bundle-skills.js
│   │   │   ├── sync-agents-md.sh
│   │   │   └── update-agents-templates.ts
│   │   ├── spec/
│   │   │   └── support/
│   │   │       └── jasmine.json
│   │   ├── src/
│   │   │   ├── commands/
│   │   │   │   ├── bootstrap.ts
│   │   │   │   ├── build.ts
│   │   │   │   ├── devSetup.ts
│   │   │   │   ├── doctor.ts
│   │   │   │   ├── export.ts
│   │   │   │   ├── hotreload.ts
│   │   │   │   ├── install.ts
│   │   │   │   ├── lint.ts
│   │   │   │   ├── lint_commands/
│   │   │   │   │   ├── lintCheck.ts
│   │   │   │   │   └── lintFormat.ts
│   │   │   │   ├── log.ts
│   │   │   │   ├── newModule.ts
│   │   │   │   ├── package.ts
│   │   │   │   ├── projectsync.ts
│   │   │   │   ├── skills.ts
│   │   │   │   ├── skills_commands/
│   │   │   │   │   ├── create.ts
│   │   │   │   │   ├── install.ts
│   │   │   │   │   ├── list.ts
│   │   │   │   │   ├── remove.ts
│   │   │   │   │   └── update.ts
│   │   │   │   └── test.ts
│   │   │   ├── core/
│   │   │   │   ├── constants.ts
│   │   │   │   └── errors.ts
│   │   │   ├── index.ts
│   │   │   ├── setup/
│   │   │   │   ├── DevSetupHelper.ts
│   │   │   │   ├── linuxSetup.ts
│   │   │   │   ├── macOSSetup.ts
│   │   │   │   ├── setupEntryPoint.ts
│   │   │   │   └── versions.ts
│   │   │   └── utils/
│   │   │       ├── ArgumentsResolver.ts
│   │   │       ├── BazelClient.ts
│   │   │       ├── Digraph.ts
│   │   │       ├── LoadingIndicator.ts
│   │   │       ├── applicationUtils.ts
│   │   │       ├── buildInfo.ts
│   │   │       ├── byString.ts
│   │   │       ├── cliUtils.ts
│   │   │       ├── copyBootstrapFiles.ts
│   │   │       ├── deviceUtils.ts
│   │   │       ├── errorUtils.ts
│   │   │       ├── fileUtils.ts
│   │   │       ├── githubUtils.ts
│   │   │       ├── jsonUtils.ts
│   │   │       ├── lintUtils.ts
│   │   │       ├── linuxDistro.spec.ts
│   │   │       ├── linuxDistro.ts
│   │   │       ├── logUtils.ts
│   │   │       ├── pathUtils.ts
│   │   │       ├── skillsAdapters.ts
│   │   │       ├── skillsRegistry.ts
│   │   │       ├── stringUtils.spec.ts
│   │   │       ├── stringUtils.ts
│   │   │       ├── tempDir.ts
│   │   │       └── zipUtils.ts
│   │   ├── test/
│   │   │   ├── ValdiSmokeTest.ts
│   │   │   └── helpers/
│   │   │       ├── AsyncHelpers.ts
│   │   │       ├── CommandHelpers.ts
│   │   │       ├── ProjectHelpers.ts
│   │   │       ├── StreamHelpers.ts
│   │   │       └── TypeScriptClient.ts
│   │   ├── tsconfig.dist.json
│   │   └── tsconfig.json
│   └── eslint-plugin-valdi/
│       ├── .gitignore
│       ├── package.json
│       ├── src/
│       │   ├── index.ts
│       │   └── rules/
│       │       ├── assign-timer-id.ts
│       │       ├── attributed-text-no-array-assignment.ts
│       │       ├── jsx-no-lambda.ts
│       │       ├── mutate-state-without-set-state.ts
│       │       ├── no-declare-test-without-describe.ts
│       │       ├── no-implicit-index-import.ts
│       │       ├── no-import-from-test-outside-test-dir.ts
│       │       ├── no-react-patterns.ts
│       │       └── only-const-enum.ts
│       ├── tests/
│       │   └── mocha-setup.mjs
│       └── tsconfig.json
├── package.json
├── scripts/
│   ├── config_setup.sh
│   ├── dev_setup.sh
│   ├── linux_deps_setup.sh
│   ├── linux_dev_setup.sh
│   ├── mac_deps_setup.sh
│   ├── macos_dev_setup.sh
│   ├── npm_setup.sh
│   ├── premerge_check.sh
│   ├── verify_not_rosetta.sh
│   └── vscode/
│       ├── install_extensions.sh
│       ├── valdi-debug.vsix
│       └── valdi-vivaldi.vsix
├── snap_drawing/
│   ├── BUILD.bazel
│   ├── README.md
│   ├── scripts/
│   │   └── run_benchmark.sh
│   ├── src/
│   │   ├── benchmark/
│   │   │   └── main.cpp
│   │   ├── demo/
│   │   │   ├── SnapDrawingDemo.mm
│   │   │   ├── SnapDrawingVideoEncoder.h
│   │   │   └── SnapDrawingVideoEncoder.mm
│   │   └── snap_drawing/
│   │       ├── android/
│   │       │   ├── AndroidFrameScheduler.cpp
│   │       │   └── AndroidFrameScheduler.hpp
│   │       ├── apple/
│   │       │   ├── CoreGraphicsUtils.cpp
│   │       │   ├── CoreGraphicsUtils.hpp
│   │       │   ├── Drawing/
│   │       │   │   ├── BaseDisplayLinkFrameScheduler.cpp
│   │       │   │   ├── BaseDisplayLinkFrameScheduler.hpp
│   │       │   │   ├── CADisplayLinkFrameScheduler.h
│   │       │   │   ├── CADisplayLinkFrameScheduler.mm
│   │       │   │   ├── CVDisplayLinkFrameScheduler.cpp
│   │       │   │   └── CVDisplayLinkFrameScheduler.hpp
│   │       │   ├── MetalGraphicsContext.mm
│   │       │   ├── MetalSurfacePresenterManager.h
│   │       │   └── MetalSurfacePresenterManager.mm
│   │       └── cpp/
│   │           ├── Animations/
│   │           │   ├── Animation.cpp
│   │           │   ├── Animation.hpp
│   │           │   ├── InterpolationFunction.cpp
│   │           │   ├── InterpolationFunction.hpp
│   │           │   ├── SpringAnimation.cpp
│   │           │   ├── SpringAnimation.hpp
│   │           │   ├── SpringForce.cpp
│   │           │   ├── SpringForce.hpp
│   │           │   ├── ValueInterpolators.cpp
│   │           │   ├── ValueInterpolators.hpp
│   │           │   ├── ViscousFluidInterpolator.cpp
│   │           │   ├── ViscousFluidInterpolator.hpp
│   │           │   └── bezier.hpp
│   │           ├── Drawing/
│   │           │   ├── BlendMode.cpp
│   │           │   ├── BlendMode.hpp
│   │           │   ├── BoxShadow.cpp
│   │           │   ├── BoxShadow.hpp
│   │           │   ├── Composition/
│   │           │   │   ├── CompositionState.cpp
│   │           │   │   ├── CompositionState.hpp
│   │           │   │   ├── Compositor.cpp
│   │           │   │   ├── Compositor.hpp
│   │           │   │   ├── CompositorPlane.cpp
│   │           │   │   ├── CompositorPlane.hpp
│   │           │   │   ├── CompositorPlaneList.cpp
│   │           │   │   ├── CompositorPlaneList.hpp
│   │           │   │   ├── ResolvedPlane.cpp
│   │           │   │   └── ResolvedPlane.hpp
│   │           │   ├── DisplayList/
│   │           │   │   ├── CleanUpDisplayListVisitor.cpp
│   │           │   │   ├── CleanUpDisplayListVisitor.hpp
│   │           │   │   ├── DebugJSONDisplayListVisitor.cpp
│   │           │   │   ├── DebugJSONDisplayListVisitor.hpp
│   │           │   │   ├── DisplayList.cpp
│   │           │   │   ├── DisplayList.hpp
│   │           │   │   ├── DisplayListOperations.cpp
│   │           │   │   ├── DisplayListOperations.hpp
│   │           │   │   ├── DrawDisplayListVisitor.cpp
│   │           │   │   └── DrawDisplayListVisitor.hpp
│   │           │   ├── DrawLooper.cpp
│   │           │   ├── DrawLooper.hpp
│   │           │   ├── DrawLooperEntry.cpp
│   │           │   ├── DrawLooperEntry.hpp
│   │           │   ├── DrawOperation.cpp
│   │           │   ├── DrawOperation.hpp
│   │           │   ├── DrawingContext.cpp
│   │           │   ├── DrawingContext.hpp
│   │           │   ├── GraphicsContext/
│   │           │   │   ├── ANativeWindowGraphicsContext.cpp
│   │           │   │   ├── ANativeWindowGraphicsContext.hpp
│   │           │   │   ├── BitmapGraphicsContext.cpp
│   │           │   │   ├── BitmapGraphicsContext.hpp
│   │           │   │   ├── EGLUtils.cpp
│   │           │   │   ├── EGLUtils.hpp
│   │           │   │   ├── GLGraphicsContext.cpp
│   │           │   │   ├── GLGraphicsContext.hpp
│   │           │   │   ├── GrGraphicsContext.cpp
│   │           │   │   ├── GrGraphicsContext.hpp
│   │           │   │   ├── GraphicsContext.cpp
│   │           │   │   ├── GraphicsContext.hpp
│   │           │   │   ├── IShaderCache.hpp
│   │           │   │   ├── MetalGraphicsContext.cpp
│   │           │   │   └── MetalGraphicsContext.hpp
│   │           │   ├── IFrameScheduler.hpp
│   │           │   ├── LayerContent.cpp
│   │           │   ├── LayerContent.hpp
│   │           │   ├── LinearGradient.cpp
│   │           │   ├── LinearGradient.hpp
│   │           │   ├── Mask/
│   │           │   │   ├── CompositeMask.cpp
│   │           │   │   ├── CompositeMask.hpp
│   │           │   │   ├── IMask.hpp
│   │           │   │   ├── PaintMask.cpp
│   │           │   │   └── PaintMask.hpp
│   │           │   ├── MaskFilter.cpp
│   │           │   ├── MaskFilter.hpp
│   │           │   ├── Paint.cpp
│   │           │   ├── Paint.hpp
│   │           │   ├── RadialGradient.cpp
│   │           │   ├── RadialGradient.hpp
│   │           │   ├── Raster/
│   │           │   │   ├── BitmapCache.cpp
│   │           │   │   ├── BitmapCache.hpp
│   │           │   │   ├── RasterContext.cpp
│   │           │   │   ├── RasterContext.hpp
│   │           │   │   ├── RasterDamageResolver.cpp
│   │           │   │   └── RasterDamageResolver.hpp
│   │           │   ├── Shader.cpp
│   │           │   ├── Shader.hpp
│   │           │   └── Surface/
│   │           │       ├── DrawableSurface.cpp
│   │           │       ├── DrawableSurface.hpp
│   │           │       ├── DrawableSurfaceCanvas.cpp
│   │           │       ├── DrawableSurfaceCanvas.hpp
│   │           │       ├── ExternalSurface.cpp
│   │           │       ├── ExternalSurface.hpp
│   │           │       ├── ExternalSurfacePresenterState.cpp
│   │           │       ├── ExternalSurfacePresenterState.hpp
│   │           │       ├── Surface.cpp
│   │           │       ├── Surface.hpp
│   │           │       ├── SurfacePresenter.cpp
│   │           │       ├── SurfacePresenter.hpp
│   │           │       ├── SurfacePresenterList.cpp
│   │           │       ├── SurfacePresenterList.hpp
│   │           │       ├── SurfacePresenterManager.cpp
│   │           │       └── SurfacePresenterManager.hpp
│   │           ├── Events/
│   │           │   ├── Event.cpp
│   │           │   ├── Event.hpp
│   │           │   ├── EventCallback.hpp
│   │           │   ├── EventId.hpp
│   │           │   ├── EventQueue.cpp
│   │           │   └── EventQueue.hpp
│   │           ├── Layers/
│   │           │   ├── AnimatedImageLayer.cpp
│   │           │   ├── AnimatedImageLayer.hpp
│   │           │   ├── ButtonLayer.cpp
│   │           │   ├── ButtonLayer.hpp
│   │           │   ├── ExternalLayer.cpp
│   │           │   ├── ExternalLayer.hpp
│   │           │   ├── FlexboxLayer.cpp
│   │           │   ├── FlexboxLayer.hpp
│   │           │   ├── ImageLayer.cpp
│   │           │   ├── ImageLayer.hpp
│   │           │   ├── Interfaces/
│   │           │   │   ├── ILayer.hpp
│   │           │   │   ├── ILayerRoot.hpp
│   │           │   │   └── ILoadedAssetLayer.hpp
│   │           │   ├── Layer.cpp
│   │           │   ├── Layer.hpp
│   │           │   ├── LayerRoot.cpp
│   │           │   ├── LayerRoot.hpp
│   │           │   ├── Mask/
│   │           │   │   ├── GradientMaskLayer.cpp
│   │           │   │   ├── GradientMaskLayer.hpp
│   │           │   │   ├── IMaskLayer.hpp
│   │           │   │   ├── PaintMaskLayer.cpp
│   │           │   │   ├── PaintMaskLayer.hpp
│   │           │   │   ├── ScrollLayerFadingEdgesMaskLayer.cpp
│   │           │   │   └── ScrollLayerFadingEdgesMaskLayer.hpp
│   │           │   ├── Scroll/
│   │           │   │   ├── AndroidScroller.cpp
│   │           │   │   ├── AndroidScroller.hpp
│   │           │   │   ├── BaseScrollLayerAnimation.cpp
│   │           │   │   ├── BaseScrollLayerAnimation.hpp
│   │           │   │   ├── IOSScroller.cpp
│   │           │   │   ├── IOSScroller.hpp
│   │           │   │   ├── IScroller.hpp
│   │           │   │   ├── SplineScrollPhysics.cpp
│   │           │   │   ├── SplineScrollPhysics.hpp
│   │           │   │   ├── SpringFlingScrollLayerAnimation.cpp
│   │           │   │   ├── SpringFlingScrollLayerAnimation.hpp
│   │           │   │   ├── SpringScrollPhysics.cpp
│   │           │   │   └── SpringScrollPhysics.hpp
│   │           │   ├── ScrollLayer.cpp
│   │           │   ├── ScrollLayer.hpp
│   │           │   ├── ShapeLayer.cpp
│   │           │   ├── ShapeLayer.hpp
│   │           │   ├── SpinnerLayer.cpp
│   │           │   ├── SpinnerLayer.hpp
│   │           │   ├── TextLayer.cpp
│   │           │   ├── TextLayer.hpp
│   │           │   ├── VideoLayer.cpp
│   │           │   └── VideoLayer.hpp
│   │           ├── Resources.cpp
│   │           ├── Resources.hpp
│   │           ├── Text/
│   │           │   ├── AttributedText.cpp
│   │           │   ├── AttributedText.hpp
│   │           │   ├── Character.hpp
│   │           │   ├── CharactersIterator.hpp
│   │           │   ├── Font.cpp
│   │           │   ├── Font.hpp
│   │           │   ├── FontFamily.cpp
│   │           │   ├── FontFamily.hpp
│   │           │   ├── FontFamilyWithLoadableTypefaces.cpp
│   │           │   ├── FontFamilyWithLoadableTypefaces.hpp
│   │           │   ├── FontFamilyWithStyleSet.cpp
│   │           │   ├── FontFamilyWithStyleSet.hpp
│   │           │   ├── FontManager.cpp
│   │           │   ├── FontManager.hpp
│   │           │   ├── FontMetrics.hpp
│   │           │   ├── FontStyle.cpp
│   │           │   ├── FontStyle.hpp
│   │           │   ├── Harfbuzz.cpp
│   │           │   ├── Harfbuzz.hpp
│   │           │   ├── IFontManager.cpp
│   │           │   ├── IFontManager.hpp
│   │           │   ├── LoadableTypeface.cpp
│   │           │   ├── LoadableTypeface.hpp
│   │           │   ├── SkFontMgrSingleton.cpp
│   │           │   ├── SkFontMgrSingleton.hpp
│   │           │   ├── TextLayout.cpp
│   │           │   ├── TextLayout.hpp
│   │           │   ├── TextLayoutBuilder.cpp
│   │           │   ├── TextLayoutBuilder.hpp
│   │           │   ├── TextShaper.cpp
│   │           │   ├── TextShaper.hpp
│   │           │   ├── TextShaperCache.cpp
│   │           │   ├── TextShaperCache.hpp
│   │           │   ├── TextShaperHarfbuzz.cpp
│   │           │   ├── TextShaperHarfbuzz.hpp
│   │           │   ├── Typeface.cpp
│   │           │   ├── Typeface.hpp
│   │           │   ├── TypefaceRegistry.cpp
│   │           │   ├── TypefaceRegistry.hpp
│   │           │   ├── Unicode.cpp
│   │           │   ├── Unicode.hpp
│   │           │   ├── WordCachingTextShaper.cpp
│   │           │   └── WordCachingTextShaper.hpp
│   │           ├── Touches/
│   │           │   ├── AttributedTextOnTapGestureRecognizer.cpp
│   │           │   ├── AttributedTextOnTapGestureRecognizer.hpp
│   │           │   ├── DoubleTapGestureRecognizer.cpp
│   │           │   ├── DoubleTapGestureRecognizer.hpp
│   │           │   ├── DragGestureRecognizer.cpp
│   │           │   ├── DragGestureRecognizer.hpp
│   │           │   ├── GestureRecognizer.cpp
│   │           │   ├── GestureRecognizer.hpp
│   │           │   ├── GesturesConfiguration.cpp
│   │           │   ├── GesturesConfiguration.hpp
│   │           │   ├── LongPressGestureRecognizer.cpp
│   │           │   ├── LongPressGestureRecognizer.hpp
│   │           │   ├── MoveGestureRecognizer.cpp
│   │           │   ├── MoveGestureRecognizer.hpp
│   │           │   ├── PinchGestureRecognizer.cpp
│   │           │   ├── PinchGestureRecognizer.hpp
│   │           │   ├── RotateGestureRecognizer.cpp
│   │           │   ├── RotateGestureRecognizer.hpp
│   │           │   ├── ScrollGestureRecognizer.cpp
│   │           │   ├── ScrollGestureRecognizer.hpp
│   │           │   ├── SingleTapGestureRecognizer.cpp
│   │           │   ├── SingleTapGestureRecognizer.hpp
│   │           │   ├── TapGestureRecognizer.cpp
│   │           │   ├── TapGestureRecognizer.hpp
│   │           │   ├── TouchDispatcher.cpp
│   │           │   ├── TouchDispatcher.hpp
│   │           │   ├── TouchEvent.cpp
│   │           │   ├── TouchEvent.hpp
│   │           │   ├── TouchGestureRecognizer.cpp
│   │           │   ├── TouchGestureRecognizer.hpp
│   │           │   ├── WheelGestureRecognizer.cpp
│   │           │   └── WheelGestureRecognizer.hpp
│   │           └── Utils/
│   │               ├── Aliases.hpp
│   │               ├── AnimatedImage.cpp
│   │               ├── AnimatedImage.hpp
│   │               ├── Bitmap.cpp
│   │               ├── Bitmap.hpp
│   │               ├── BitmapFactory.cpp
│   │               ├── BitmapFactory.hpp
│   │               ├── BitmapUtils.cpp
│   │               ├── BitmapUtils.hpp
│   │               ├── BorderRadius.cpp
│   │               ├── BorderRadius.hpp
│   │               ├── BoundingBoxHierarchy.cpp
│   │               ├── BoundingBoxHierarchy.hpp
│   │               ├── BytesUtils.cpp
│   │               ├── BytesUtils.hpp
│   │               ├── Color.cpp
│   │               ├── Color.hpp
│   │               ├── Duration.hpp
│   │               ├── Geometry.cpp
│   │               ├── Geometry.hpp
│   │               ├── GradientWrapper.cpp
│   │               ├── GradientWrapper.hpp
│   │               ├── Image.cpp
│   │               ├── Image.hpp
│   │               ├── ImageQueue.cpp
│   │               ├── ImageQueue.hpp
│   │               ├── JSONUtils.cpp
│   │               ├── JSONUtils.hpp
│   │               ├── LazyPath.cpp
│   │               ├── LazyPath.hpp
│   │               ├── LottieAnimatedImage.cpp
│   │               ├── LottieAnimatedImage.hpp
│   │               ├── Matrix.cpp
│   │               ├── Matrix.hpp
│   │               ├── Path.cpp
│   │               ├── Path.hpp
│   │               ├── PathInterpolator.cpp
│   │               ├── PathInterpolator.hpp
│   │               ├── SafeContainer.cpp
│   │               ├── SafeContainer.hpp
│   │               ├── Scalar.cpp
│   │               ├── Scalar.hpp
│   │               ├── SkCodecAnimatedImage.cpp
│   │               ├── SkCodecAnimatedImage.hpp
│   │               ├── SkiaBridge.cpp
│   │               ├── SkiaBridge.hpp
│   │               ├── TimePoint.hpp
│   │               ├── UTFUtils.cpp
│   │               ├── UTFUtils.hpp
│   │               ├── VelocityTracker.cpp
│   │               └── VelocityTracker.hpp
│   ├── test/
│   │   ├── src/
│   │   │   ├── Compositor_Tests.cpp
│   │   │   ├── DisplayList_Tests.cpp
│   │   │   ├── DoubleTapGestureRecognizer_tests.cpp
│   │   │   ├── DragGestureRecognizer_tests.cpp
│   │   │   ├── DrawLooper_Tests.cpp
│   │   │   ├── FlexboxLayer_tests.cpp
│   │   │   ├── ImageBitmap_tests.cpp
│   │   │   ├── ImageQueue_tests.cpp
│   │   │   ├── Interpolator_Tests.cpp
│   │   │   ├── Layer_tests.cpp
│   │   │   ├── LongPressGestureRecognizer_tests.cpp
│   │   │   ├── LottieLayer_tests.cpp
│   │   │   ├── PinchGestureRecognizer_tests.cpp
│   │   │   ├── RasterContext_tests.cpp
│   │   │   ├── RasterDamageResolver_tests.cpp
│   │   │   ├── RotateGestureRecognizer_tests.cpp
│   │   │   ├── ScrollLayer_test.cpp
│   │   │   ├── SingleTapGestureRecognizer_tests.cpp
│   │   │   ├── TextLayout_Tests.cpp
│   │   │   ├── TextShaperCache_tests.cpp
│   │   │   ├── TouchDispatcher_tests.cpp
│   │   │   ├── TouchGestureRecognizer_tests.cpp
│   │   │   ├── VideoLayer_tests.cpp
│   │   │   ├── WheelGestureRecognizer_tests.cpp
│   │   │   └── WordCachingTextShaper_tests.cpp
│   │   └── utils/
│   │       ├── DisplayListBuilder.cpp
│   │       ├── DisplayListBuilder.hpp
│   │       ├── TestBitmap.cpp
│   │       ├── TestBitmap.hpp
│   │       ├── TestDataUtils.cpp
│   │       ├── TestDataUtils.hpp
│   │       ├── TestGestureUtils.cpp
│   │       └── TestGestureUtils.hpp
│   └── testdata/
│       └── lottie_loading.json
├── src/
│   ├── BUILD.bazel
│   ├── platform-projects/
│   │   └── android/
│   │       ├── android_exports.lst
│   │       ├── build_id_note_symbols.ld
│   │       ├── client/
│   │       │   ├── .gitignore
│   │       │   ├── proguard-rules.pro
│   │       │   └── src/
│   │       │       └── main/
│   │       │           ├── AndroidManifest.xml
│   │       │           └── res/
│   │       │               └── values/
│   │       │                   └── strings.xml
│   │       └── dummy/
│   │           ├── .gitignore
│   │           ├── prepare_compressed_library.sh
│   │           ├── proguard-rules.pro
│   │           └── src/
│   │               └── main/
│   │                   ├── AndroidManifest.xml
│   │                   └── res/
│   │                       └── values/
│   │                           └── strings.xml
│   └── valdi_modules/
│       ├── .prettierrc.json
│       └── src/
│           ├── cpp/
│           │   └── valdi_http/
│           │       ├── BUILD.bazel
│           │       ├── HTTPRequestManagerModuleFactory.cpp
│           │       └── HTTPRequestManagerModuleFactory.hpp
│           └── valdi/
│               ├── _configs/
│               │   ├── BUILD.bazel
│               │   ├── base.tsconfig.json
│               │   └── eslint.tsconfig.json
│               ├── bridge_observables/
│               │   ├── BUILD.bazel
│               │   ├── README.md
│               │   ├── module.yaml
│               │   ├── src/
│               │   │   ├── types/
│               │   │   │   ├── BridgeError.d.ts
│               │   │   │   ├── BridgeObservable.ts
│               │   │   │   ├── BridgeObserver.d.ts
│               │   │   │   ├── BridgeObserverEvent.d.ts
│               │   │   │   └── BridgeSubject.d.ts
│               │   │   └── utils/
│               │   │       ├── convertBridgeObservableToObservable.ts
│               │   │       ├── convertBridgeObserverToObserver.ts
│               │   │       ├── convertBridgeSubjectToObservable.ts
│               │   │       ├── convertBridgeSubjectToObserver.ts
│               │   │       ├── convertBridgeSubjectToSubject.ts
│               │   │       ├── convertObservableToBridgeObservable.ts
│               │   │       ├── convertObserverToBridgeObserver.ts
│               │   │       ├── convertSubjectToBridgeSubject.ts
│               │   │       ├── converter.ts
│               │   │       └── optional/
│               │   │           ├── convertOptionalBridgeObservableToObservable.ts
│               │   │           └── convertOptionalBridgeSubjectToObservable.ts
│               │   └── tsconfig.json
│               ├── coreutils/
│               │   ├── BUILD.bazel
│               │   ├── README.md
│               │   ├── module.yaml
│               │   ├── src/
│               │   │   ├── ArrayUtils.ts
│               │   │   ├── Base64.ts
│               │   │   ├── LRUCache.ts
│               │   │   ├── Range.ts
│               │   │   ├── RuntimeBase.d.ts
│               │   │   ├── SerialTaskQueue.ts
│               │   │   ├── StringMap.d.ts
│               │   │   ├── StringSet.d.ts
│               │   │   ├── Uint8ArrayUtils.ts
│               │   │   ├── dummy.ts
│               │   │   ├── md5.ts
│               │   │   ├── unicode/
│               │   │   │   ├── TextCoding.ts
│               │   │   │   ├── UnicodeNative.d.ts
│               │   │   │   └── UnicodeString.ts
│               │   │   ├── url.ts
│               │   │   └── uuidUtils.ts
│               │   ├── test/
│               │   │   ├── Base64.spec.ts
│               │   │   ├── LRUCache.spec.ts
│               │   │   ├── TextCoding.spec.ts
│               │   │   ├── UnicodeString.spec.ts
│               │   │   ├── md5.spec.ts
│               │   │   ├── urls.spec.ts
│               │   │   └── uuidUtils.spec.ts
│               │   ├── tsconfig.json
│               │   └── web/
│               │       ├── UnicodeNative.ts
│               │       └── tsconfig.json
│               ├── drawing/
│               │   ├── BUILD.bazel
│               │   ├── module.yaml
│               │   ├── src/
│               │   │   ├── AttributedTextNative.d.ts
│               │   │   ├── BitmapFactory.ts
│               │   │   ├── BitmapNative.d.ts
│               │   │   ├── Drawing.ts
│               │   │   ├── DrawingModuleProvider.d.ts
│               │   │   ├── FontManager.ts
│               │   │   ├── FontManagerNative.d.ts
│               │   │   ├── IBitmap.d.ts
│               │   │   ├── IManagedContext.d.ts
│               │   │   ├── INativeBitmap.d.ts
│               │   │   ├── ManagedContextAssetTracker.ts
│               │   │   ├── ManagedContextFactory.ts
│               │   │   └── ManagedContextNative.d.ts
│               │   ├── test/
│               │   │   ├── ManagedContextAssetTracker.spec.ts
│               │   │   └── ManagedContextFactory.spec.tsx
│               │   ├── tsconfig.json
│               │   └── web/
│               │       ├── BitmapNative.ts
│               │       ├── DrawingModuleProvider.ts
│               │       ├── FontManagerNative.ts
│               │       ├── ManagedContextNative.ts
│               │       └── tsconfig.json
│               ├── file_system/
│               │   ├── BUILD.bazel
│               │   ├── README.md
│               │   ├── module.yaml
│               │   ├── src/
│               │   │   ├── FileSystem.ts
│               │   │   └── FileSystemModule.d.ts
│               │   ├── test/
│               │   │   ├── FileSystem.spec.ts
│               │   │   └── test_file.txt
│               │   ├── tsconfig.json
│               │   └── web/
│               │       ├── FileSystem.ts
│               │       └── tsconfig.json
│               ├── foundation/
│               │   ├── BUILD.bazel
│               │   ├── README.md
│               │   ├── module.yaml
│               │   ├── src/
│               │   │   ├── Announcer.ts
│               │   │   ├── CachedFunctionCall.ts
│               │   │   ├── Debounce.ts
│               │   │   ├── DebounceBatch.ts
│               │   │   ├── DebounceReorder.ts
│               │   │   ├── DeferredPromise.ts
│               │   │   ├── Error.d.ts
│               │   │   ├── ICancelable.d.ts
│               │   │   ├── IDisposable.d.ts
│               │   │   ├── KeyedFunctionCache.ts
│               │   │   ├── Lazy.ts
│               │   │   ├── Long.ts
│               │   │   ├── NativeViewUtils.ts
│               │   │   ├── Provider.ts
│               │   │   ├── Subscribable.ts
│               │   │   ├── Subscription.d.ts
│               │   │   ├── Timer.ts
│               │   │   ├── UnreachableError.ts
│               │   │   ├── array.ts
│               │   │   ├── deepClone.ts
│               │   │   ├── emoji.ts
│               │   │   ├── equality.ts
│               │   │   ├── foundation.ts
│               │   │   ├── function.ts
│               │   │   ├── functional/
│               │   │   │   ├── README.md
│               │   │   │   ├── cacheResolved.ts
│               │   │   │   ├── mapArguments.ts
│               │   │   │   ├── mapResult.ts
│               │   │   │   └── transformProperties.ts
│               │   │   ├── impl/
│               │   │   │   ├── CallbackCancelable.ts
│               │   │   │   ├── CallbackDisposable.ts
│               │   │   │   └── CancelableGroup.ts
│               │   │   ├── isDefined.ts
│               │   │   ├── isUndefined.ts
│               │   │   ├── makePropertiesOpaque.ts
│               │   │   ├── map.ts
│               │   │   ├── number.ts
│               │   │   ├── object.ts
│               │   │   ├── required.ts
│               │   │   ├── runWith.ts
│               │   │   ├── set.ts
│               │   │   ├── shuffle.ts
│               │   │   ├── staticImplements.ts
│               │   │   ├── string.ts
│               │   │   ├── time.ts
│               │   │   ├── trace.ts
│               │   │   ├── unicode.ts
│               │   │   └── uuid.ts
│               │   ├── test/
│               │   │   ├── DeferredPromise.spec.ts
│               │   │   ├── KeyedFunctionCache.spec.ts
│               │   │   ├── deepClone.spec.ts
│               │   │   ├── functional/
│               │   │   │   ├── cacheResolved.spec.ts
│               │   │   │   ├── mapArguments.spec.ts
│               │   │   │   ├── mapResult.spec.ts
│               │   │   │   └── transformProperties.spec.ts
│               │   │   ├── isDefinedTest.ts
│               │   │   ├── multiInsertTest.ts
│               │   │   ├── required.spec.ts
│               │   │   ├── runWith.spec.ts
│               │   │   ├── stringTest.ts
│               │   │   └── util/
│               │   │       ├── ExplorerVirtualNode.ts
│               │   │       ├── ReproducibleGenerator.ts
│               │   │       ├── componentGetChildren.ts
│               │   │       ├── componentGetElements.ts
│               │   │       ├── componentGetKey.ts
│               │   │       ├── componentGetVirtualNode.ts
│               │   │       ├── componentGlobFind.ts
│               │   │       ├── componentKeyFind.ts
│               │   │       ├── componentTreeDump.ts
│               │   │       ├── componentTypeFind.ts
│               │   │       ├── consoleColor.ts
│               │   │       ├── elementGlobFind.ts
│               │   │       ├── elementKeyFind.ts
│               │   │       ├── elementTreeDump.ts
│               │   │       ├── elementTypeFind.ts
│               │   │       ├── findNodeWithKey.ts
│               │   │       ├── getAttributeFromNode.ts
│               │   │       ├── getIsUnderNode.ts
│               │   │       ├── globToRegex.ts
│               │   │       ├── isRenderedElement.ts
│               │   │       ├── lib/
│               │   │       │   └── faker.js
│               │   │       ├── mockFlushable.ts
│               │   │       ├── mockFlushableWithData.ts
│               │   │       ├── mockFlushableWithDataAndError.ts
│               │   │       ├── mockObject.ts
│               │   │       ├── mockObjectWithSpy.ts
│               │   │       ├── tapNodeWithKey.ts
│               │   │       ├── typeInTextFieldWithKey.ts
│               │   │       ├── untilNextRenderComplete.ts
│               │   │       ├── untilRenderComplete.ts
│               │   │       ├── virtualNodeGetKey.ts
│               │   │       ├── virtualNodeTreeDump.ts
│               │   │       ├── waitFor.ts
│               │   │       └── waitForNodeWithKey.ts
│               │   └── tsconfig.json
│               ├── jasmine/
│               │   ├── BUILD.bazel
│               │   ├── README.md
│               │   ├── module.yaml
│               │   ├── package.json
│               │   ├── src/
│               │   │   ├── boot.js
│               │   │   ├── console_reporter.js
│               │   │   ├── jasmine-reporters/
│               │   │   │   └── junit_reporter.js
│               │   │   ├── jasmine.d.ts
│               │   │   ├── jasmine.js
│               │   │   └── origin_boot.js
│               │   └── tsconfig.json
│               ├── persistence/
│               │   ├── BUILD.bazel
│               │   ├── module.yaml
│               │   ├── src/
│               │   │   ├── PersistentStore.ts
│               │   │   └── PersistentStoreNative.d.ts
│               │   ├── test/
│               │   │   └── PersistentStoreTest.ts
│               │   ├── tsconfig.json
│               │   └── web/
│               │       ├── PersistentStoreNative.ts
│               │       └── tsconfig.json
│               ├── source_map/
│               │   ├── BUILD.bazel
│               │   ├── module.yaml
│               │   ├── src/
│               │   │   ├── ISourceMap.d.ts
│               │   │   ├── SourceMap.ts
│               │   │   ├── StackSymbolicator.ts
│               │   │   └── VLQ.ts
│               │   ├── test/
│               │   │   ├── SourceMap.spec.ts
│               │   │   └── SourceMapExample.ts
│               │   └── tsconfig.json
│               ├── tsconfig.json
│               ├── types/
│               │   ├── BUILD.bazel
│               │   ├── Long.d.ts
│               │   └── globals.d.ts
│               ├── valdi_core/
│               │   ├── BUILD.bazel
│               │   ├── README.md
│               │   ├── module.yaml
│               │   ├── package.json
│               │   ├── src/
│               │   │   ├── AnimationOptions.ts
│               │   │   ├── Any.d.ts
│               │   │   ├── AnyRenderFunction.d.ts
│               │   │   ├── Application.ts
│               │   │   ├── ApplicationBridge.d.ts
│               │   │   ├── Asset.ts
│               │   │   ├── AssetCatalog.ts
│               │   │   ├── BugReporter.ts
│               │   │   ├── BuildType.ts
│               │   │   ├── CSSModule.ts
│               │   │   ├── CancelablePromise.ts
│               │   │   ├── CancellableAnimation.d.ts
│               │   │   ├── CancellableAnimationPromise.ts
│               │   │   ├── CapturedNode.ts
│               │   │   ├── CompilerIntrinsics.ts
│               │   │   ├── Component.ts
│               │   │   ├── ComponentKey.d.ts
│               │   │   ├── ComponentPath.ts
│               │   │   ├── ComponentPrototype.ts
│               │   │   ├── ComponentRef.ts
│               │   │   ├── Console.ts
│               │   │   ├── ConsoleRepresentable.d.ts
│               │   │   ├── Device.ts
│               │   │   ├── DeviceBridge.d.ts
│               │   │   ├── ElementModifier.tsx
│               │   │   ├── ElementRef.ts
│               │   │   ├── EntryPointComponent.tsx
│               │   │   ├── EntryPointRenderFunction.d.ts
│               │   │   ├── EntryPointViewModel.d.ts
│               │   │   ├── FunctionComponent.tsx
│               │   │   ├── GeometricPath.ts
│               │   │   ├── Geometry.d.ts
│               │   │   ├── IComponent.d.ts
│               │   │   ├── IComponentRenderObserver.d.ts
│               │   │   ├── IEntryPointComponent.d.ts
│               │   │   ├── IModuleLoader.d.ts
│               │   │   ├── IRenderedElement.d.ts
│               │   │   ├── IRenderedElementApplier.d.ts
│               │   │   ├── IRenderedVirtualNode.d.ts
│               │   │   ├── IRenderedVirtualNodeData.ts
│               │   │   ├── IRenderer.ts
│               │   │   ├── IRendererDelegate.d.ts
│               │   │   ├── IRendererEventListener.ts
│               │   │   ├── IRootComponentsManager.ts
│               │   │   ├── IRootElementObserver.d.ts
│               │   │   ├── IRuntimeIssueObserver.d.ts
│               │   │   ├── Init.js
│               │   │   ├── JSX.ts
│               │   │   ├── JSXBootstrap.ts
│               │   │   ├── JSXRendererDelegate.ts
│               │   │   ├── Lazy.tsx
│               │   │   ├── LocalizableStrings.ts
│               │   │   ├── Long.js
│               │   │   ├── ModuleLoader.ts
│               │   │   ├── ModuleLoaderGlobal.ts
│               │   │   ├── NativeReferences.ts
│               │   │   ├── NodePrototype.ts
│               │   │   ├── PostInit.ts
│               │   │   ├── Promise.js
│               │   │   ├── PromisePolyfill.ts
│               │   │   ├── RenderRequest.d.ts
│               │   │   ├── Renderer.ts
│               │   │   ├── RendererFactory.d.ts
│               │   │   ├── RootComponentsManager.ts
│               │   │   ├── SchedulingPageComponent.ts
│               │   │   ├── SetTimeout.ts
│               │   │   ├── StringCache.ts
│               │   │   ├── Strings.d.ts
│               │   │   ├── Style.ts
│               │   │   ├── SymbolicatedError.d.ts
│               │   │   ├── Symbolicator.ts
│               │   │   ├── SystemFont.ts
│               │   │   ├── TsnHelper.ts
│               │   │   ├── TypeConverter.d.ts
│               │   │   ├── UncaughtErrorHandler.ts
│               │   │   ├── Valdi.ts
│               │   │   ├── ValdiRuntime.d.ts
│               │   │   ├── WithLazyPromise.tsx
│               │   │   ├── debugging/
│               │   │   │   ├── CustomMessageHandler.d.ts
│               │   │   │   ├── DaemonClientManager.ts
│               │   │   │   ├── DaemonClientManagerResolver.ts
│               │   │   │   ├── DaemonClientRequests.d.ts
│               │   │   │   ├── DebugConsole.tsx
│               │   │   │   ├── DebugConsoleButton.tsx
│               │   │   │   ├── DebugMessage.d.ts
│               │   │   │   ├── DefaultErrorBoundary.tsx
│               │   │   │   ├── ErrorComponent.tsx
│               │   │   │   ├── ErrorViewModel.d.ts
│               │   │   │   ├── Messages.ts
│               │   │   │   ├── RendererEventRecorder.ts
│               │   │   │   ├── RuntimeIssueDisplayer.tsx
│               │   │   │   ├── Styles.ts
│               │   │   │   └── VirtualNodePathDisplayer.tsx
│               │   │   ├── localization/
│               │   │   │   ├── ExternalUnparsedLocalizableStringResolver.ts
│               │   │   │   ├── IUnparsedLocalizableStringResolver.d.ts
│               │   │   │   ├── InlineUnparsedLocalizableStringResolver.ts
│               │   │   │   ├── Locale.ts
│               │   │   │   ├── LocaleResolver.ts
│               │   │   │   ├── LocalizableString.ts
│               │   │   │   └── LocalizableStringsModule.ts
│               │   │   ├── provider/
│               │   │   │   ├── GlobalProviderSource.ts
│               │   │   │   ├── IProviderSource.d.ts
│               │   │   │   ├── ProviderComponent.d.ts
│               │   │   │   ├── ProviderKey.ts
│               │   │   │   ├── ProviderSource.ts
│               │   │   │   ├── WithGlobalProviderSource.tsx
│               │   │   │   ├── createProvider.tsx
│               │   │   │   ├── resolveProviderSource.ts
│               │   │   │   ├── resolveProviderValue.ts
│               │   │   │   └── withProviders.tsx
│               │   │   ├── slot/
│               │   │   │   ├── DetachedSlot.ts
│               │   │   │   └── DetachedSlotRenderer.tsx
│               │   │   ├── tslib.d.ts
│               │   │   ├── tslib.js
│               │   │   ├── utility_types/
│               │   │   │   └── MergeType.d.ts
│               │   │   └── utils/
│               │   │       ├── AttributedTextBuilder.ts
│               │   │       ├── Buffer.ts
│               │   │       ├── Callback.ts
│               │   │       ├── CallbackInternal.ts
│               │   │       ├── ClassNames.ts
│               │   │       ├── CompilerError.ts
│               │   │       ├── ComponentUtils.ts
│               │   │       ├── EditTextUtils.ts
│               │   │       ├── ErrorUtils.ts
│               │   │       ├── FunctionUtils.ts
│               │   │       ├── GeometricPathBuilder.ts
│               │   │       ├── IdentifyableObject.ts
│               │   │       ├── ImageFilter.ts
│               │   │       ├── KeepAliveCallback.ts
│               │   │       ├── LazyPromise.ts
│               │   │       ├── NumberUtils.ts
│               │   │       ├── OnIdle.ts
│               │   │       ├── Optional.ts
│               │   │       ├── PartialUtils.ts
│               │   │       ├── PromiseUtils.ts
│               │   │       ├── PropertyList.ts
│               │   │       ├── PropertyListTest.ts
│               │   │       ├── RenderedElementUtils.ts
│               │   │       ├── RenderedVirtualNodeUtils.ts
│               │   │       ├── RendererError.ts
│               │   │       ├── Stopwatch.ts
│               │   │       ├── StringUtils.ts
│               │   │       ├── TestUtils.ts
│               │   │       ├── TimeUtils.ts
│               │   │       ├── Trace.ts
│               │   │       ├── UuidUtils.ts
│               │   │       ├── When.ts
│               │   │       └── WithRequired.ts
│               │   ├── tsconfig.json
│               │   └── web/
│               │       ├── ApplicationBridge.ts
│               │       ├── DeviceBridge.ts
│               │       ├── Strings.ts
│               │       └── tsconfig.json
│               ├── valdi_http/
│               │   ├── BUILD.bazel
│               │   ├── module.yaml
│               │   ├── src/
│               │   │   ├── HTTPClient.ts
│               │   │   ├── HTTPTypes.d.ts
│               │   │   ├── IHTTPClient.d.ts
│               │   │   └── NativeHTTPClient.d.ts
│               │   ├── tsconfig.json
│               │   └── web/
│               │       ├── WebHTTPClient.ts
│               │       └── tsconfig.json
│               ├── valdi_image_generator/
│               │   ├── BUILD.bazel
│               │   ├── module.yaml
│               │   └── src/
│               │       ├── ImageGenerator.ts
│               │       └── main.ts
│               ├── valdi_navigation/
│               │   ├── BUILD.bazel
│               │   ├── module.yaml
│               │   ├── src/
│               │   │   ├── INavigator.ts
│               │   │   ├── NavigationComponent.ts
│               │   │   ├── NavigationController.ts
│               │   │   ├── NavigationPage.ts
│               │   │   ├── NavigationPageComponent.ts
│               │   │   ├── NavigationRoot.tsx
│               │   │   └── NavigationView.tsx
│               │   └── tsconfig.json
│               ├── valdi_protobuf/
│               │   ├── BUILD.bazel
│               │   ├── module.yaml
│               │   ├── package.json
│               │   ├── proto/
│               │   │   ├── test.proto
│               │   │   ├── test2.proto
│               │   │   ├── test3.proto
│               │   │   └── test4.proto
│               │   ├── scripts/
│               │   │   └── generate_test_protos.py
│               │   ├── src/
│               │   │   ├── Arena.ts
│               │   │   ├── Descriptor.ts
│               │   │   ├── FieldFactory.ts
│               │   │   ├── Message.ts
│               │   │   ├── ProtobufBuilder.ts
│               │   │   ├── ValdiProtobuf.d.ts
│               │   │   ├── ValdiProtobufModule.ts
│               │   │   ├── types.d.ts
│               │   │   └── utils/
│               │   │       └── misc.ts
│               │   ├── test/
│               │   │   ├── Test.spec.ts
│               │   │   ├── proto.d.ts
│               │   │   ├── proto.js
│               │   │   ├── proto.protodecl
│               │   │   └── proto_config.yaml
│               │   ├── tsconfig.json
│               │   └── web/
│               │       ├── Message.ts
│               │       ├── ValdiProtobuf.ts
│               │       ├── headless/
│               │       │   ├── DescriptorDatabase.ts
│               │       │   ├── FullyQualifiedName.ts
│               │       │   ├── HeadlessValdiProtobufModule.ts
│               │       │   ├── NamespaceGenerator.ts
│               │       │   └── descriptor.ts
│               │       ├── test/
│               │       │   ├── DescriptorDatabase.spec.ts
│               │       │   ├── DescriptorDatabaseTestUtils.ts
│               │       │   ├── NamespaceGenerator.spec.ts
│               │       │   ├── README.md
│               │       │   ├── extract_types.py
│               │       │   ├── proto-types.d.ts
│               │       │   ├── run_tests.js
│               │       │   └── run_tests.sh
│               │       └── tsconfig.json
│               ├── valdi_rxjs/
│               │   ├── BUILD.bazel
│               │   ├── README.md
│               │   ├── module.yaml
│               │   ├── package.json
│               │   ├── src/
│               │   │   ├── AnyCatcher.ts
│               │   │   ├── AsyncSubject.ts
│               │   │   ├── BehaviorSubject.ts
│               │   │   ├── Notification.ts
│               │   │   ├── NotificationFactories.ts
│               │   │   ├── Observable.ts
│               │   │   ├── Operator.ts
│               │   │   ├── ReplaySubject.ts
│               │   │   ├── Scheduler.ts
│               │   │   ├── Subject.ts
│               │   │   ├── Subscriber.ts
│               │   │   ├── Subscription.ts
│               │   │   ├── config.ts
│               │   │   ├── firstValueFrom.ts
│               │   │   ├── firstValueWhere.ts
│               │   │   ├── index.ts
│               │   │   ├── lastValueFrom.ts
│               │   │   ├── observable/
│               │   │   │   ├── ConnectableObservable.ts
│               │   │   │   ├── bindCallback.ts
│               │   │   │   ├── bindCallbackInternals.ts
│               │   │   │   ├── combineLatest.ts
│               │   │   │   ├── concat.ts
│               │   │   │   ├── connectable.ts
│               │   │   │   ├── defer.ts
│               │   │   │   ├── empty.ts
│               │   │   │   ├── forkJoin.ts
│               │   │   │   ├── from.ts
│               │   │   │   ├── fromEvent.ts
│               │   │   │   ├── fromEventPattern.ts
│               │   │   │   ├── fromSubscribable.ts
│               │   │   │   ├── generate.ts
│               │   │   │   ├── iif.ts
│               │   │   │   ├── innerFrom.ts
│               │   │   │   ├── interval.ts
│               │   │   │   ├── merge.ts
│               │   │   │   ├── never.ts
│               │   │   │   ├── of.ts
│               │   │   │   ├── onErrorResumeNext.ts
│               │   │   │   ├── pairs.ts
│               │   │   │   ├── partition.ts
│               │   │   │   ├── race.ts
│               │   │   │   ├── range.ts
│               │   │   │   ├── throwError.ts
│               │   │   │   ├── timer.ts
│               │   │   │   ├── using.ts
│               │   │   │   └── zip.ts
│               │   │   ├── operators/
│               │   │   │   ├── OperatorSubscriber.ts
│               │   │   │   ├── audit.ts
│               │   │   │   ├── auditTime.ts
│               │   │   │   ├── buffer.ts
│               │   │   │   ├── bufferCount.ts
│               │   │   │   ├── bufferTime.ts
│               │   │   │   ├── bufferToggle.ts
│               │   │   │   ├── bufferWhen.ts
│               │   │   │   ├── catchError.ts
│               │   │   │   ├── combineAll.ts
│               │   │   │   ├── combineLatest.ts
│               │   │   │   ├── combineLatestAll.ts
│               │   │   │   ├── combineLatestWith.ts
│               │   │   │   ├── concat.ts
│               │   │   │   ├── concatAll.ts
│               │   │   │   ├── concatMap.ts
│               │   │   │   ├── concatMapTo.ts
│               │   │   │   ├── concatWith.ts
│               │   │   │   ├── connect.ts
│               │   │   │   ├── count.ts
│               │   │   │   ├── debounce.ts
│               │   │   │   ├── debounceTime.ts
│               │   │   │   ├── defaultIfEmpty.ts
│               │   │   │   ├── delay.ts
│               │   │   │   ├── delayWhen.ts
│               │   │   │   ├── dematerialize.ts
│               │   │   │   ├── distinct.ts
│               │   │   │   ├── distinctUntilChanged.ts
│               │   │   │   ├── distinctUntilKeyChanged.ts
│               │   │   │   ├── elementAt.ts
│               │   │   │   ├── endWith.ts
│               │   │   │   ├── every.ts
│               │   │   │   ├── exhaust.ts
│               │   │   │   ├── exhaustAll.ts
│               │   │   │   ├── exhaustMap.ts
│               │   │   │   ├── expand.ts
│               │   │   │   ├── filter.ts
│               │   │   │   ├── finalize.ts
│               │   │   │   ├── find.ts
│               │   │   │   ├── findIndex.ts
│               │   │   │   ├── first.ts
│               │   │   │   ├── flatMap.ts
│               │   │   │   ├── groupBy.ts
│               │   │   │   ├── ignoreElements.ts
│               │   │   │   ├── isEmpty.ts
│               │   │   │   ├── joinAllInternals.ts
│               │   │   │   ├── last.ts
│               │   │   │   ├── map.ts
│               │   │   │   ├── mapTo.ts
│               │   │   │   ├── materialize.ts
│               │   │   │   ├── max.ts
│               │   │   │   ├── merge.ts
│               │   │   │   ├── mergeAll.ts
│               │   │   │   ├── mergeInternals.ts
│               │   │   │   ├── mergeMap.ts
│               │   │   │   ├── mergeMapTo.ts
│               │   │   │   ├── mergeScan.ts
│               │   │   │   ├── mergeWith.ts
│               │   │   │   ├── min.ts
│               │   │   │   ├── multicast.ts
│               │   │   │   ├── observeOn.ts
│               │   │   │   ├── onErrorResumeNext.ts
│               │   │   │   ├── pairwise.ts
│               │   │   │   ├── partition.ts
│               │   │   │   ├── pluck.ts
│               │   │   │   ├── publish.ts
│               │   │   │   ├── publishBehavior.ts
│               │   │   │   ├── publishLast.ts
│               │   │   │   ├── publishReplay.ts
│               │   │   │   ├── race.ts
│               │   │   │   ├── raceWith.ts
│               │   │   │   ├── reduce.ts
│               │   │   │   ├── refCount.ts
│               │   │   │   ├── repeat.ts
│               │   │   │   ├── repeatWhen.ts
│               │   │   │   ├── retry.ts
│               │   │   │   ├── retryWhen.ts
│               │   │   │   ├── sample.ts
│               │   │   │   ├── sampleTime.ts
│               │   │   │   ├── scan.ts
│               │   │   │   ├── scanInternals.ts
│               │   │   │   ├── sequenceEqual.ts
│               │   │   │   ├── share.ts
│               │   │   │   ├── shareReplay.ts
│               │   │   │   ├── single.ts
│               │   │   │   ├── skip.ts
│               │   │   │   ├── skipLast.ts
│               │   │   │   ├── skipUntil.ts
│               │   │   │   ├── skipWhile.ts
│               │   │   │   ├── startWith.ts
│               │   │   │   ├── subscribeOn.ts
│               │   │   │   ├── switchAll.ts
│               │   │   │   ├── switchMap.ts
│               │   │   │   ├── switchMapTo.ts
│               │   │   │   ├── switchScan.ts
│               │   │   │   ├── take.ts
│               │   │   │   ├── takeLast.ts
│               │   │   │   ├── takeUntil.ts
│               │   │   │   ├── takeWhile.ts
│               │   │   │   ├── tap.ts
│               │   │   │   ├── throttle.ts
│               │   │   │   ├── throttleTime.ts
│               │   │   │   ├── throwIfEmpty.ts
│               │   │   │   ├── timeInterval.ts
│               │   │   │   ├── timeout.ts
│               │   │   │   ├── timeoutWith.ts
│               │   │   │   ├── timestamp.ts
│               │   │   │   ├── toArray.ts
│               │   │   │   ├── window.ts
│               │   │   │   ├── windowCount.ts
│               │   │   │   ├── windowTime.ts
│               │   │   │   ├── windowToggle.ts
│               │   │   │   ├── windowWhen.ts
│               │   │   │   ├── withLatestFrom.ts
│               │   │   │   ├── zip.ts
│               │   │   │   ├── zipAll.ts
│               │   │   │   └── zipWith.ts
│               │   │   ├── scheduled/
│               │   │   │   ├── scheduleArray.ts
│               │   │   │   ├── scheduleAsyncIterable.ts
│               │   │   │   ├── scheduleIterable.ts
│               │   │   │   ├── scheduleObservable.ts
│               │   │   │   ├── schedulePromise.ts
│               │   │   │   ├── scheduleReadableStreamLike.ts
│               │   │   │   └── scheduled.ts
│               │   │   ├── scheduler/
│               │   │   │   ├── Action.ts
│               │   │   │   ├── AnimationFrameAction.ts
│               │   │   │   ├── AnimationFrameScheduler.ts
│               │   │   │   ├── AsapAction.ts
│               │   │   │   ├── AsapScheduler.ts
│               │   │   │   ├── AsyncAction.ts
│               │   │   │   ├── AsyncScheduler.ts
│               │   │   │   ├── QueueAction.ts
│               │   │   │   ├── QueueScheduler.ts
│               │   │   │   ├── VirtualTimeScheduler.ts
│               │   │   │   ├── animationFrame.ts
│               │   │   │   ├── animationFrameProvider.ts
│               │   │   │   ├── asap.ts
│               │   │   │   ├── async.ts
│               │   │   │   ├── dateTimestampProvider.ts
│               │   │   │   ├── immediateProvider.ts
│               │   │   │   ├── intervalProvider.ts
│               │   │   │   ├── performanceTimestampProvider.ts
│               │   │   │   ├── queue.ts
│               │   │   │   └── timeoutProvider.ts
│               │   │   ├── symbol/
│               │   │   │   ├── iterator.ts
│               │   │   │   └── observable.ts
│               │   │   ├── testing/
│               │   │   │   ├── ColdObservable.ts
│               │   │   │   ├── HotObservable.ts
│               │   │   │   ├── SubscriptionLog.ts
│               │   │   │   ├── SubscriptionLoggable.ts
│               │   │   │   ├── TestMessage.ts
│               │   │   │   └── TestScheduler.ts
│               │   │   ├── types.ts
│               │   │   └── util/
│               │   │       ├── ArgumentOutOfRangeError.ts
│               │   │       ├── EmptyError.ts
│               │   │       ├── Immediate.ts
│               │   │       ├── NotFoundError.ts
│               │   │       ├── ObjectUnsubscribedError.ts
│               │   │       ├── SequenceError.ts
│               │   │       ├── UnsubscriptionError.ts
│               │   │       ├── applyMixins.ts
│               │   │       ├── args.ts
│               │   │       ├── argsArgArrayOrObject.ts
│               │   │       ├── argsOrArgArray.ts
│               │   │       ├── arrRemove.ts
│               │   │       ├── createErrorClass.ts
│               │   │       ├── createObject.ts
│               │   │       ├── errorContext.ts
│               │   │       ├── executeSchedule.ts
│               │   │       ├── identity.ts
│               │   │       ├── isArrayLike.ts
│               │   │       ├── isAsyncIterable.ts
│               │   │       ├── isDate.ts
│               │   │       ├── isFunction.ts
│               │   │       ├── isInteropObservable.ts
│               │   │       ├── isIterable.ts
│               │   │       ├── isObservable.ts
│               │   │       ├── isPromise.ts
│               │   │       ├── isReadableStreamLike.ts
│               │   │       ├── isScheduler.ts
│               │   │       ├── lift.ts
│               │   │       ├── mapOneOrManyArgs.ts
│               │   │       ├── noop.ts
│               │   │       ├── not.ts
│               │   │       ├── pipe.ts
│               │   │       ├── reportUnhandledError.ts
│               │   │       ├── subscribeToArray.ts
│               │   │       ├── throwUnobservableError.ts
│               │   │       └── workarounds.ts
│               │   └── tsconfig.json
│               ├── valdi_standalone/
│               │   ├── BUILD.bazel
│               │   ├── module.yaml
│               │   ├── src/
│               │   │   ├── ArgumentsParser.ts
│               │   │   ├── CodeCoverage.ts
│               │   │   ├── FailedTestRetryReporter.ts
│               │   │   ├── IstanbulIibCoverage.ts
│               │   │   ├── JasmineBootstrap.ts
│               │   │   ├── NativeModules.ts
│               │   │   ├── TestsRunner.ts
│               │   │   └── ValdiStandalone.ts
│               │   └── tsconfig.json
│               ├── valdi_test/
│               │   ├── BUILD.bazel
│               │   ├── README.md
│               │   ├── module.yaml
│               │   ├── src/
│               │   │   ├── FunctionTest.ts
│               │   │   ├── IntegrationTests.tsx
│               │   │   └── MarshallingTests.ts
│               │   ├── strings/
│               │   │   ├── strings-en.json
│               │   │   └── strings-fr-FR.json
│               │   ├── test/
│               │   │   ├── AssetCatalog.spec.ts
│               │   │   ├── AttributedTextBuilder.spec.ts
│               │   │   ├── BenchmarkUtils.ts
│               │   │   ├── Component.spec.ts
│               │   │   ├── ComponentTestExample.tsx
│               │   │   ├── DetachedSlot.spec.tsx
│               │   │   ├── ElementForViewClass.d.ts
│               │   │   ├── IRenderedElementViewClass.ts
│               │   │   ├── JSXTest.spec.tsx
│               │   │   ├── JSXTestUtils.tsx
│               │   │   ├── Locale.spec.ts
│               │   │   ├── LocaleResolver.spec.ts
│               │   │   ├── LocalizableStrings.spec.ts
│               │   │   ├── Localization.spec.ts
│               │   │   ├── Long.spec.ts
│               │   │   ├── MicroBenchmarks.ts
│               │   │   ├── ModuleLoader.spec.ts
│               │   │   ├── Provider.spec.tsx
│               │   │   ├── Renderer.spec.ts
│               │   │   ├── RendererEventRecorder.spec.ts
│               │   │   ├── RendererTestDelegate.ts
│               │   │   └── Style.spec.ts
│               │   └── tsconfig.json
│               ├── valdi_tsx/
│               │   ├── BUILD.bazel
│               │   ├── README.md
│               │   ├── module.yaml
│               │   ├── src/
│               │   │   ├── Accessibility.d.ts
│               │   │   ├── Asset.d.ts
│               │   │   ├── AttributedText.d.ts
│               │   │   ├── AttributedTextInlineImageAttachment.d.ts
│               │   │   ├── GeometricPath.d.ts
│               │   │   ├── Geometry.d.ts
│               │   │   ├── GestureEvents.d.ts
│               │   │   ├── IComponentBase.d.ts
│               │   │   ├── IFontProvider.d.ts
│               │   │   ├── IRenderedComponentHolder.d.ts
│               │   │   ├── IRenderedElementBase.d.ts
│               │   │   ├── IRenderedElementHolder.d.ts
│               │   │   ├── IScrollPerfLoggerBridge.d.ts
│               │   │   ├── IStyle.d.ts
│               │   │   ├── ImageFilter.d.ts
│               │   │   ├── JSX.ts
│               │   │   ├── NativeNode.d.ts
│               │   │   ├── NativeTemplateElements.d.ts
│               │   │   ├── NativeView.d.ts
│               │   │   ├── PropertyList.d.ts
│               │   │   └── ViewFactory.d.ts
│               │   ├── tsconfig.json
│               │   ├── types/
│               │   │   ├── Long.d.ts
│               │   │   └── globals.d.ts
│               │   └── web/
│               │       ├── JSX.stub.d.ts
│               │       ├── JSX.ts
│               │       └── tsconfig.json
│               ├── valdi_web/
│               │   ├── BUILD.bazel
│               │   ├── README.md
│               │   ├── src/
│               │   │   ├── ValdiWeb.ts
│               │   │   └── WebTest.tsx
│               │   ├── strings/
│               │   │   ├── strings-ar.json
│               │   │   ├── strings-bn-BD.json
│               │   │   ├── strings-bn-IN.json
│               │   │   ├── strings-da-DK.json
│               │   │   ├── strings-de-DE.json
│               │   │   ├── strings-el-GR.json
│               │   │   ├── strings-en-GB.json
│               │   │   ├── strings-en.json
│               │   │   ├── strings-es-AR.json
│               │   │   ├── strings-es-ES.json
│               │   │   ├── strings-es-MX.json
│               │   │   ├── strings-es.json
│               │   │   ├── strings-fi-FI.json
│               │   │   ├── strings-fil-PH.json
│               │   │   ├── strings-fr-FR.json
│               │   │   ├── strings-gu-IN.json
│               │   │   ├── strings-hi-IN.json
│               │   │   ├── strings-id-ID.json
│               │   │   ├── strings-it-IT.json
│               │   │   ├── strings-ja-JP.json
│               │   │   ├── strings-kn-IN.json
│               │   │   ├── strings-ko-KR.json
│               │   │   ├── strings-ml-IN.json
│               │   │   ├── strings-mr-IN.json
│               │   │   ├── strings-ms-MY.json
│               │   │   ├── strings-nb-NO.json
│               │   │   ├── strings-nl-NL.json
│               │   │   ├── strings-pa.json
│               │   │   ├── strings-pl-PL.json
│               │   │   ├── strings-pt-BR.json
│               │   │   ├── strings-pt-PT.json
│               │   │   ├── strings-ro-RO.json
│               │   │   ├── strings-ru-RU.json
│               │   │   ├── strings-sv-SE.json
│               │   │   ├── strings-ta-IN.json
│               │   │   ├── strings-te-IN.json
│               │   │   ├── strings-th-TH.json
│               │   │   ├── strings-tr-TR.json
│               │   │   ├── strings-ur-PK.json
│               │   │   ├── strings-vi-VN.json
│               │   │   ├── strings-zh-Hans.json
│               │   │   └── strings-zh-Hant.json
│               │   └── tsconfig.json
│               ├── web_renderer/
│               │   ├── BUILD.bazel
│               │   ├── src/
│               │   │   ├── HTMLRenderer.ts
│               │   │   ├── ValdiWebRenderer.ts
│               │   │   ├── ValdiWebRendererDelegate.ts
│               │   │   ├── ValdiWebRuntime.ts
│               │   │   ├── WebPolyglotRegistry.ts
│               │   │   ├── WebPolyglotRuntime.ts
│               │   │   ├── WebPolyglotRuntimeNative.d.ts
│               │   │   ├── WebPolyglotTypes.d.ts
│               │   │   ├── WebViewClassRegistry.ts
│               │   │   ├── styles/
│               │   │   │   ├── ValdiWebStyles.ts
│               │   │   │   ├── handleMarginPadding.ts
│               │   │   │   ├── isNumber.ts
│               │   │   │   ├── requiresUnitlessNumber.ts
│               │   │   │   └── touchAreaExtension.ts
│               │   │   ├── utils/
│               │   │   │   └── parseAttributedText.ts
│               │   │   └── views/
│               │   │       ├── WebValdiCustomView.ts
│               │   │       ├── WebValdiImage.ts
│               │   │       ├── WebValdiLabel.ts
│               │   │       ├── WebValdiLayout.ts
│               │   │       ├── WebValdiScroll.ts
│               │   │       ├── WebValdiShape.ts
│               │   │       ├── WebValdiSpinner.ts
│               │   │       ├── WebValdiTextField.ts
│               │   │       ├── WebValdiTextView.ts
│               │   │       ├── WebValdiVideo.ts
│               │   │       └── WebValdiView.ts
│               │   ├── test/
│               │   │   └── WebValdiImage.spec.ts
│               │   └── tsconfig.json
│               └── worker/
│                   ├── BUILD.bazel
│                   ├── README.md
│                   ├── module.yaml
│                   ├── src/
│                   │   ├── IWorkerService.d.ts
│                   │   ├── ServiceCallback.d.ts
│                   │   ├── Worker.ts
│                   │   ├── WorkerService.ts
│                   │   ├── WorkerServiceEntryPoint.ts
│                   │   ├── WorkerServiceExecutor.ts
│                   │   ├── internal/
│                   │   │   ├── ManagedWorker.ts
│                   │   │   └── ManagedWorkerService.ts
│                   │   └── utils/
│                   │       └── WorkerServiceBridgeUtils.ts
│                   ├── test/
│                   │   ├── CalculatorService.ts
│                   │   ├── WorkerService.spec.ts
│                   │   └── WorkerTest.ts
│                   ├── test_workers/
│                   │   ├── EchoWorker.ts
│                   │   ├── README.md
│                   │   └── TestWorker.ts
│                   └── tsconfig.json
├── third-party/
│   ├── backward/
│   │   ├── BUILD.bazel
│   │   └── backward.BUILD
│   ├── bazel_features/
│   │   ├── BUILD.bazel
│   │   └── fix_bazel_version.patch
│   ├── boost/
│   │   ├── BUILD.bazel
│   │   ├── WORKSPACE
│   │   ├── asio-ssl.cpp
│   │   ├── asio.cpp
│   │   ├── boost.BUILD
│   │   └── patches/
│   │       ├── BUILD.bazel
│   │       ├── asio.patch
│   │       ├── global_asio_initializers.patch
│   │       ├── interprocess_emscripten.patch
│   │       └── remove_invalid_file_1_78.patch
│   ├── build_bazel_rules_android/
│   │   └── patches/
│   │       ├── BUILD.bazel
│   │       ├── rules_android_android_rules.patch
│   │       ├── rules_android_rules_aar_import.patch
│   │       ├── rules_android_rules_android_local_test.patch
│   │       └── rules_android_rules_attrs.patch
│   ├── djinni-support-lib/
│   │   ├── BUILD.bazel
│   │   ├── README.snap
│   │   └── src/
│   │       ├── .gitignore
│   │       └── djinni/
│   │           ├── cpp/
│   │           │   ├── DataRef.cpp
│   │           │   ├── DataRef.hpp
│   │           │   ├── DataRef_c_translator.cpp
│   │           │   ├── DataRef_c_translator.hpp
│   │           │   ├── DataView.hpp
│   │           │   ├── DataView_c_translator.cpp
│   │           │   ├── DataView_c_translator.hpp
│   │           │   ├── Future.hpp
│   │           │   ├── Future_c.cpp
│   │           │   ├── Future_c.h
│   │           │   ├── Future_c_translator.cpp
│   │           │   ├── Future_c_translator.hpp
│   │           │   ├── Outcome_c.cpp
│   │           │   ├── Outcome_c.h
│   │           │   ├── Outcome_c_translator.hpp
│   │           │   ├── Provider.hpp
│   │           │   ├── Provider_c.cpp
│   │           │   ├── Provider_c.h
│   │           │   ├── Provider_c_translator.hpp
│   │           │   ├── SharedFuture.hpp
│   │           │   ├── djinni_c.cpp
│   │           │   ├── djinni_c.h
│   │           │   ├── djinni_c_ref.hpp
│   │           │   ├── djinni_c_translators.cpp
│   │           │   ├── djinni_c_translators.hpp
│   │           │   ├── djinni_c_types.cpp
│   │           │   ├── djinni_c_types.hpp
│   │           │   ├── expected.hpp
│   │           │   └── tl_expected.hpp
│   │           ├── dataref.yaml
│   │           ├── dataview.yaml
│   │           ├── djinni_common.hpp
│   │           ├── future.yaml
│   │           ├── java/
│   │           │   └── com/
│   │           │       ├── dropbox/
│   │           │       │   └── djinni/
│   │           │       │       └── NativeLibLoader.java
│   │           │       └── snapchat/
│   │           │           └── djinni/
│   │           │               ├── DataRefHelper.java
│   │           │               ├── Future.java
│   │           │               ├── NativeFutureHandler.java
│   │           │               ├── NativeObjectManager.java
│   │           │               ├── NativeProviderHandler.java
│   │           │               ├── Outcome.java
│   │           │               ├── Promise.java
│   │           │               ├── Provider.java
│   │           │               └── SharedState.java
│   │           ├── jni/
│   │           │   ├── DataRef_jni.cpp
│   │           │   ├── DataRef_jni.hpp
│   │           │   ├── DataView_jni.hpp
│   │           │   ├── Future_jni.cpp
│   │           │   ├── Future_jni.hpp
│   │           │   ├── Marshal.hpp
│   │           │   ├── Outcome_jni.hpp
│   │           │   ├── Provider_jni.cpp
│   │           │   ├── Provider_jni.hpp
│   │           │   ├── djinni_main.cpp
│   │           │   ├── djinni_support.cpp
│   │           │   └── djinni_support.hpp
│   │           ├── objc/
│   │           │   ├── DJFuture.h
│   │           │   ├── DJFuture.mm
│   │           │   ├── DJICppWrapperCache+Private.h
│   │           │   ├── DJIError.h
│   │           │   ├── DJIError.mm
│   │           │   ├── DJIMarshal+Private.h
│   │           │   ├── DJIObjcWrapperCache+Private.h
│   │           │   ├── DJIProxyCaches.mm
│   │           │   ├── DJOutcome.h
│   │           │   ├── DJOutcome.mm
│   │           │   ├── DJProvider.h
│   │           │   ├── DJProvider.mm
│   │           │   ├── DataRef_objc.hpp
│   │           │   ├── DataRef_objc.mm
│   │           │   ├── DataView_objc.hpp
│   │           │   ├── Future_objc.hpp
│   │           │   ├── Outcome_objc.hpp
│   │           │   └── Provider_objc.hpp
│   │           ├── outcome.yaml
│   │           ├── provider.yaml
│   │           ├── proxy_cache_impl.hpp
│   │           ├── proxy_cache_interface.hpp
│   │           ├── swift/
│   │           │   ├── DJData.swift
│   │           │   ├── DJFuture.swift
│   │           │   ├── DJMarshal.swift
│   │           │   ├── DJOutcome.swift
│   │           │   ├── DJProtobuf.swift
│   │           │   ├── DJProvider.swift
│   │           │   └── DjinniSupport.swift
│   │           ├── swiftxx/
│   │           │   ├── Data_swift.cpp
│   │           │   ├── Data_swift.hpp
│   │           │   ├── Future_swift.cpp
│   │           │   ├── Future_swift.hpp
│   │           │   ├── Outcome_swift.hpp
│   │           │   ├── Provider_swift.cpp
│   │           │   ├── Provider_swift.hpp
│   │           │   ├── djinni_support.cpp
│   │           │   └── djinni_support.hpp
│   │           ├── ts/
│   │           │   ├── DjinniModule.ts
│   │           │   ├── Outcome.ts
│   │           │   └── Provider.ts
│   │           ├── valdi/
│   │           │   ├── DataRef_valdi.cpp
│   │           │   ├── DataRef_valdi.hpp
│   │           │   ├── DataView_valdi.hpp
│   │           │   ├── Future_valdi.hpp
│   │           │   ├── Outcome_valdi.hpp
│   │           │   ├── Provider_valdi.hpp
│   │           │   ├── djinni_valdi.cpp
│   │           │   └── djinni_valdi.hpp
│   │           ├── valdi-ts/
│   │           │   ├── module.yaml
│   │           │   ├── src/
│   │           │   │   ├── Djinni.ts
│   │           │   │   ├── Outcome.ts
│   │           │   │   ├── ProtoSupport.ts
│   │           │   │   └── Provider.ts
│   │           │   └── tsconfig.json
│   │           └── wasm/
│   │               ├── DataRef_wasm.cpp
│   │               ├── DataRef_wasm.hpp
│   │               ├── DataView_wasm.hpp
│   │               ├── Future_wasm.hpp
│   │               ├── Outcome_wasm.hpp
│   │               ├── Provider_wasm.hpp
│   │               ├── djinni_wasm.cpp
│   │               └── djinni_wasm.hpp
│   ├── fmt/
│   │   ├── BUILD.bazel
│   │   └── fmt.BUILD
│   ├── harfbuzz/
│   │   ├── BUILD.bazel
│   │   └── harfbuzz.BUILD
│   ├── hermes/
│   │   ├── BUILD.bazel
│   │   ├── cmake_configure.bzl
│   │   ├── hermes.BUILD
│   │   └── prepared_include/
│   │       ├── android-arm64-v8a/
│   │       │   └── llvh/
│   │       │       └── Config/
│   │       │           └── config.h
│   │       ├── android-armeabi-v7a/
│   │       │   └── llvh/
│   │       │       └── Config/
│   │       │           └── config.h
│   │       ├── android-x86_64/
│   │       │   └── llvh/
│   │       │       └── Config/
│   │       │           └── config.h
│   │       ├── apple/
│   │       │   └── llvh/
│   │       │       └── Config/
│   │       │           └── config.h
│   │       ├── hermes/
│   │       │   └── InternalBytecode/
│   │       │       └── InternalBytecode.inc
│   │       ├── linux/
│   │       │   └── llvh/
│   │       │       └── Config/
│   │       │           └── config.h
│   │       └── llvh/
│   │           └── IR/
│   │               └── Attributes.inc
│   ├── icu/
│   │   ├── BUILD.bazel
│   │   └── icu.BUILD
│   ├── jscore/
│   │   ├── BUILD.bazel
│   │   └── include/
│   │       └── JavaScriptCore/
│   │           ├── APICallbackFunction.h
│   │           ├── APICast.h
│   │           ├── APIUtils.h
│   │           ├── JSAPIWrapperObject.h
│   │           ├── JSBase.h
│   │           ├── JSBasePrivate.h
│   │           ├── JSCTestRunnerUtils.h
│   │           ├── JSCallbackConstructor.h
│   │           ├── JSCallbackFunction.h
│   │           ├── JSCallbackObject.h
│   │           ├── JSCallbackObjectFunctions.h
│   │           ├── JSClassRef.h
│   │           ├── JSContext.h
│   │           ├── JSContextInternal.h
│   │           ├── JSContextPrivate.h
│   │           ├── JSContextRef.h
│   │           ├── JSContextRefInspectorSupport.h
│   │           ├── JSContextRefInternal.h
│   │           ├── JSContextRefPrivate.h
│   │           ├── JSExport.h
│   │           ├── JSHeapFinalizerPrivate.h
│   │           ├── JSManagedValue.h
│   │           ├── JSManagedValueInternal.h
│   │           ├── JSMarkingConstraintPrivate.h
│   │           ├── JSObjectRef.h
│   │           ├── JSObjectRefPrivate.h
│   │           ├── JSRemoteInspector.h
│   │           ├── JSRetainPtr.h
│   │           ├── JSScriptRefPrivate.h
│   │           ├── JSStringRef.h
│   │           ├── JSStringRefBSTR.h
│   │           ├── JSStringRefCF.h
│   │           ├── JSStringRefPrivate.h
│   │           ├── JSTypedArray.h
│   │           ├── JSValue.h
│   │           ├── JSValueInternal.h
│   │           ├── JSValueRef.h
│   │           ├── JSVirtualMachine.h
│   │           ├── JSVirtualMachineInternal.h
│   │           ├── JSVirtualMachinePrivate.h
│   │           ├── JSWeakObjectMapRefInternal.h
│   │           ├── JSWeakObjectMapRefPrivate.h
│   │           ├── JSWeakPrivate.h
│   │           ├── JSWeakValue.h
│   │           ├── JSWrapperMap.h
│   │           ├── JavaScript.h
│   │           ├── JavaScriptCore.h
│   │           ├── ObjCCallbackFunction.h
│   │           ├── ObjcRuntimeExtras.h
│   │           ├── OpaqueJSString.h
│   │           └── WebKitAvailability.h
│   ├── jsoncpp/
│   │   ├── BUILD.bazel
│   │   └── jsoncpp.BUILD
│   ├── libjpeg_turbo/
│   │   ├── BUILD.bazel
│   │   ├── include_fix.patch
│   │   └── warning_fix.patch
│   ├── libpng/
│   │   ├── BUILD.bazel
│   │   └── fix_armv7.patch
│   ├── ocmock/
│   │   ├── BUILD
│   │   ├── OCMock.build
│   │   └── README.snap
│   ├── phmap/
│   │   ├── BUILD.bazel
│   │   └── phmap.BUILD
│   ├── protobuf_cpp/
│   │   └── BUILD.bazel
│   ├── quickjs/
│   │   ├── BUILD.bazel
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── VERSION
│   │   ├── include/
│   │   │   └── quickjs/
│   │   │       ├── libbf.h
│   │   │       ├── libregexp.h
│   │   │       ├── libunicode.h
│   │   │       └── quickjs.h
│   │   └── src/
│   │       └── quickjs/
│   │           ├── cutils.c
│   │           ├── cutils.h
│   │           ├── libbf.c
│   │           ├── libregexp-opcode.h
│   │           ├── libregexp.c
│   │           ├── libunicode-table.h
│   │           ├── libunicode.c
│   │           ├── list.h
│   │           ├── quickjs-atom.h
│   │           ├── quickjs-opcode.h
│   │           └── quickjs.c
│   ├── resvg/
│   │   ├── BUILD.bazel
│   │   ├── README.md
│   │   ├── resvg.BUILD
│   │   └── resvg_libs/
│   │       ├── BUILD.bazel
│   │       ├── MODULE.bazel
│   │       ├── WORKSPACE
│   │       └── libs/
│   │           ├── Linux/
│   │           │   └── x86_64/
│   │           │       └── lib/
│   │           │           └── libresvg.a
│   │           └── Macos/
│   │               ├── armv8/
│   │               │   └── lib/
│   │               │       └── libresvg.a
│   │               └── x86_64/
│   │                   └── lib/
│   │                       └── libresvg.a
│   ├── rules_android_ndk/
│   │   └── patches/
│   │       ├── BUILD.bazel
│   │       └── expose_bins.patch
│   ├── rules_hdrs/
│   │   ├── BUILD.bazel
│   │   ├── MODULE.bazel
│   │   ├── WORKSPACE
│   │   ├── hmap/
│   │   │   ├── BUILD.bazel
│   │   │   ├── hmap.bzl
│   │   │   ├── hmap.c
│   │   │   ├── hmap.h
│   │   │   ├── hmapbuild.c
│   │   │   ├── hmapdump.c
│   │   │   ├── hmaptest.c
│   │   │   ├── lines.c
│   │   │   ├── lines.h
│   │   │   └── uthash.h
│   │   └── umbrella_header/
│   │       ├── BUILD.bazel
│   │       └── umbrella_header.bzl
│   ├── rules_kotlin/
│   │   ├── BUILD.bazel
│   │   └── fix_manifest_custom_package.patch
│   ├── rules_swift/
│   │   └── patches/
│   │       ├── BUILD.bazel
│   │       └── rules_swift.patch
│   ├── skia_user_config/
│   │   ├── BUILD.bazel
│   │   ├── MODULE.bazel
│   │   ├── SkUserConfig.h
│   │   ├── WORKSPACE
│   │   ├── copts.bzl
│   │   └── linkopts.bzl
│   ├── test262/
│   │   ├── BUILD.bazel
│   │   ├── scripts/
│   │   │   ├── BUILD.bazel
│   │   │   └── zip.sh
│   │   └── test262.BUILD
│   ├── v8/
│   │   ├── BUILD.bazel
│   │   ├── README.md
│   │   ├── README.snap
│   │   ├── include/
│   │   │   └── v8/
│   │   │       ├── cppgc/
│   │   │       │   ├── allocation.h
│   │   │       │   ├── common.h
│   │   │       │   ├── cross-thread-persistent.h
│   │   │       │   ├── custom-space.h
│   │   │       │   ├── default-platform.h
│   │   │       │   ├── ephemeron-pair.h
│   │   │       │   ├── explicit-management.h
│   │   │       │   ├── garbage-collected.h
│   │   │       │   ├── heap-consistency.h
│   │   │       │   ├── heap-handle.h
│   │   │       │   ├── heap-state.h
│   │   │       │   ├── heap-statistics.h
│   │   │       │   ├── heap.h
│   │   │       │   ├── internal/
│   │   │       │   │   ├── api-constants.h
│   │   │       │   │   ├── atomic-entry-flag.h
│   │   │       │   │   ├── base-page-handle.h
│   │   │       │   │   ├── caged-heap-local-data.h
│   │   │       │   │   ├── caged-heap.h
│   │   │       │   │   ├── compiler-specific.h
│   │   │       │   │   ├── finalizer-trait.h
│   │   │       │   │   ├── gc-info.h
│   │   │       │   │   ├── logging.h
│   │   │       │   │   ├── member-storage.h
│   │   │       │   │   ├── name-trait.h
│   │   │       │   │   ├── persistent-node.h
│   │   │       │   │   ├── pointer-policies.h
│   │   │       │   │   └── write-barrier.h
│   │   │       │   ├── liveness-broker.h
│   │   │       │   ├── macros.h
│   │   │       │   ├── member.h
│   │   │       │   ├── name-provider.h
│   │   │       │   ├── object-size-trait.h
│   │   │       │   ├── persistent.h
│   │   │       │   ├── platform.h
│   │   │       │   ├── prefinalizer.h
│   │   │       │   ├── process-heap-statistics.h
│   │   │       │   ├── sentinel-pointer.h
│   │   │       │   ├── source-location.h
│   │   │       │   ├── testing.h
│   │   │       │   ├── trace-trait.h
│   │   │       │   ├── type-traits.h
│   │   │       │   └── visitor.h
│   │   │       ├── libplatform/
│   │   │       │   ├── libplatform-export.h
│   │   │       │   ├── libplatform.h
│   │   │       │   └── v8-tracing.h
│   │   │       ├── v8-array-buffer.h
│   │   │       ├── v8-callbacks.h
│   │   │       ├── v8-container.h
│   │   │       ├── v8-context.h
│   │   │       ├── v8-cppgc.h
│   │   │       ├── v8-data.h
│   │   │       ├── v8-date.h
│   │   │       ├── v8-debug.h
│   │   │       ├── v8-embedder-heap.h
│   │   │       ├── v8-embedder-state-scope.h
│   │   │       ├── v8-exception.h
│   │   │       ├── v8-extension.h
│   │   │       ├── v8-external.h
│   │   │       ├── v8-fast-api-calls.h
│   │   │       ├── v8-forward.h
│   │   │       ├── v8-function-callback.h
│   │   │       ├── v8-function.h
│   │   │       ├── v8-handle-base.h
│   │   │       ├── v8-initialization.h
│   │   │       ├── v8-inspector-protocol.h
│   │   │       ├── v8-inspector.h
│   │   │       ├── v8-internal.h
│   │   │       ├── v8-isolate.h
│   │   │       ├── v8-json.h
│   │   │       ├── v8-local-handle.h
│   │   │       ├── v8-locker.h
│   │   │       ├── v8-maybe.h
│   │   │       ├── v8-memory-span.h
│   │   │       ├── v8-message.h
│   │   │       ├── v8-metrics.h
│   │   │       ├── v8-microtask-queue.h
│   │   │       ├── v8-microtask.h
│   │   │       ├── v8-object.h
│   │   │       ├── v8-persistent-handle.h
│   │   │       ├── v8-platform.h
│   │   │       ├── v8-primitive-object.h
│   │   │       ├── v8-primitive.h
│   │   │       ├── v8-profiler.h
│   │   │       ├── v8-promise.h
│   │   │       ├── v8-proxy.h
│   │   │       ├── v8-regexp.h
│   │   │       ├── v8-script.h
│   │   │       ├── v8-snapshot.h
│   │   │       ├── v8-source-location.h
│   │   │       ├── v8-statistics.h
│   │   │       ├── v8-template.h
│   │   │       ├── v8-traced-handle.h
│   │   │       ├── v8-typed-array.h
│   │   │       ├── v8-unwinder-state.h
│   │   │       ├── v8-unwinder.h
│   │   │       ├── v8-util.h
│   │   │       ├── v8-value-serializer-version.h
│   │   │       ├── v8-value-serializer.h
│   │   │       ├── v8-value.h
│   │   │       ├── v8-version-string.h
│   │   │       ├── v8-version.h
│   │   │       ├── v8-wasm-trap-handler-posix.h
│   │   │       ├── v8-wasm-trap-handler-win.h
│   │   │       ├── v8-wasm.h
│   │   │       ├── v8-weak-callback-info.h
│   │   │       ├── v8.h
│   │   │       └── v8config.h
│   │   └── v8.bzl
│   ├── websocketpp/
│   │   ├── BUILD.bazel
│   │   ├── patches/
│   │   │   ├── BUILD.bazel
│   │   │   └── fix_ios_lrt.patch
│   │   └── websocketpp.BUILD
│   ├── xxhash/
│   │   ├── BUILD.bazel
│   │   └── xxhash.BUILD
│   ├── yoga/
│   │   ├── BUILD.bazel
│   │   ├── README.snap
│   │   └── src/
│   │       ├── android/
│   │       │   ├── Dummy.cpp
│   │       │   ├── include/
│   │       │   │   ├── fb/
│   │       │   │   │   └── Doxyfile
│   │       │   │   ├── fbjni/
│   │       │   │   │   ├── ByteBuffer.h
│   │       │   │   │   ├── Context.h
│   │       │   │   │   ├── File.h
│   │       │   │   │   ├── JThread.h
│   │       │   │   │   ├── NativeRunnable.h
│   │       │   │   │   ├── ReadableByteChannel.h
│   │       │   │   │   ├── detail/
│   │       │   │   │   │   ├── Boxed.h
│   │       │   │   │   │   ├── Common.h
│   │       │   │   │   │   ├── CoreClasses-inl.h
│   │       │   │   │   │   ├── CoreClasses.h
│   │       │   │   │   │   ├── Environment.h
│   │       │   │   │   │   ├── Exceptions.h
│   │       │   │   │   │   ├── Hybrid.h
│   │       │   │   │   │   ├── Iterator-inl.h
│   │       │   │   │   │   ├── Iterator.h
│   │       │   │   │   │   ├── JWeakReference.h
│   │       │   │   │   │   ├── Log.h
│   │       │   │   │   │   ├── Meta-forward.h
│   │       │   │   │   │   ├── Meta-inl.h
│   │       │   │   │   │   ├── Meta.h
│   │       │   │   │   │   ├── MetaConvert.h
│   │       │   │   │   │   ├── ReferenceAllocators-inl.h
│   │       │   │   │   │   ├── ReferenceAllocators.h
│   │       │   │   │   │   ├── References-forward.h
│   │       │   │   │   │   ├── References-inl.h
│   │       │   │   │   │   ├── References.h
│   │       │   │   │   │   ├── Registration-inl.h
│   │       │   │   │   │   ├── Registration.h
│   │       │   │   │   │   ├── TypeTraits.h
│   │       │   │   │   │   └── utf8.h
│   │       │   │   │   └── fbjni.h
│   │       │   │   └── lyra/
│   │       │   │       ├── lyra.h
│   │       │   │       └── lyra_exceptions.h
│   │       │   ├── jni/
│   │       │   │   ├── ByteBuffer.cpp
│   │       │   │   ├── ReadableByteChannel.cpp
│   │       │   │   ├── detail/
│   │       │   │   │   ├── Environment.cpp
│   │       │   │   │   ├── Exceptions.cpp
│   │       │   │   │   ├── Hybrid.cpp
│   │       │   │   │   ├── References.cpp
│   │       │   │   │   └── utf8.cpp
│   │       │   │   └── fbjni.cpp
│   │       │   └── lyra/
│   │       │       ├── cxa_throw.cpp
│   │       │       ├── lyra.cpp
│   │       │       ├── lyra_breakpad.cpp
│   │       │       └── lyra_exceptions.cpp
│   │       ├── ios/
│   │       │   └── yoga/
│   │       │       ├── UIView+Yoga.h
│   │       │       ├── UIView+Yoga.m
│   │       │       ├── YGLayout+Private.h
│   │       │       ├── YGLayout.h
│   │       │       └── YGLayout.m
│   │       ├── java/
│   │       │   └── com/
│   │       │       └── facebook/
│   │       │           └── yoga/
│   │       │               ├── YogaAlign.java
│   │       │               ├── YogaBaselineFunction.java
│   │       │               ├── YogaConfig.java
│   │       │               ├── YogaConstants.java
│   │       │               ├── YogaDimension.java
│   │       │               ├── YogaDirection.java
│   │       │               ├── YogaDisplay.java
│   │       │               ├── YogaEdge.java
│   │       │               ├── YogaExperimentalFeature.java
│   │       │               ├── YogaFlexDirection.java
│   │       │               ├── YogaJustify.java
│   │       │               ├── YogaLogLevel.java
│   │       │               ├── YogaLogger.java
│   │       │               ├── YogaMeasureFunction.java
│   │       │               ├── YogaMeasureMode.java
│   │       │               ├── YogaMeasureOutput.java
│   │       │               ├── YogaNode.java
│   │       │               ├── YogaNodeCloneFunction.java
│   │       │               ├── YogaNodeType.java
│   │       │               ├── YogaOverflow.java
│   │       │               ├── YogaPositionType.java
│   │       │               ├── YogaPrintOptions.java
│   │       │               ├── YogaUnit.java
│   │       │               ├── YogaValue.java
│   │       │               └── YogaWrap.java
│   │       └── yoga/
│   │           ├── Bitfield.h
│   │           ├── CompactValue.h
│   │           ├── Utils.cpp
│   │           ├── Utils.h
│   │           ├── YGConfig.cpp
│   │           ├── YGConfig.h
│   │           ├── YGEnums.cpp
│   │           ├── YGEnums.h
│   │           ├── YGFloatOptional.h
│   │           ├── YGLayout.cpp
│   │           ├── YGLayout.hpp
│   │           ├── YGMacros.h
│   │           ├── YGNode.cpp
│   │           ├── YGNode.h
│   │           ├── YGNodePrint.cpp
│   │           ├── YGNodePrint.h
│   │           ├── YGStyle.cpp
│   │           ├── YGStyle.h
│   │           ├── YGValue.cpp
│   │           ├── YGValue.h
│   │           ├── Yoga-internal.h
│   │           ├── Yoga.cpp
│   │           ├── Yoga.h
│   │           ├── event/
│   │           │   ├── event.cpp
│   │           │   └── event.h
│   │           ├── internal/
│   │           │   ├── experiments-inl.h
│   │           │   ├── experiments.cpp
│   │           │   └── experiments.h
│   │           ├── log.cpp
│   │           └── log.h
│   ├── zlib/
│   │   ├── BUILD.bazel
│   │   └── zlib.BUILD
│   ├── zlib_chromium/
│   │   ├── BUILD.bazel
│   │   ├── patches/
│   │   │   ├── BUILD.bazel
│   │   │   └── apple.patch
│   │   └── zlib_chromium.BUILD
│   ├── zlib_skia/
│   │   ├── BUILD.bazel
│   │   └── android_ios_x86_64.patch
│   ├── zoo/
│   │   ├── BUILD.bazel
│   │   └── zoo.BUILD
│   └── zstd/
│       ├── BUILD.bazel
│       └── zstd.BUILD
├── tools/
│   ├── ci/
│   │   ├── bazel_build.sh
│   │   ├── bootstrap_app.sh
│   │   ├── build_core_targets.sh
│   │   ├── install_cli.sh
│   │   ├── release_test.sh
│   │   ├── run_tests.sh
│   │   ├── test_exported_lib.sh
│   │   └── test_workflow_locally.sh
│   └── zstd/
│       ├── BUILD.bazel
│       ├── Dockerfile
│       ├── bin/
│       │   ├── linux/
│       │   │   └── zstd
│       │   └── macos/
│       │       └── zstd
│       ├── build_zstd_linux.sh
│       ├── build_zstd_macos.sh
│       ├── build_zstd_within_environment.sh
│       ├── rebuild_all.sh
│       └── zstdw
├── tsn/
│   ├── .gitignore
│   ├── BUILD.bazel
│   ├── README.md
│   ├── examples/
│   │   ├── BUILD.bazel
│   │   ├── microbench/
│   │   │   ├── README.md
│   │   │   └── microbench.js
│   │   ├── nbody/
│   │   │   └── nbody_example.ts
│   │   ├── richards/
│   │   │   └── richards.js
│   │   ├── stackoverflow_test/
│   │   │   └── stackoverflow.ts
│   │   └── tsconfig.json
│   ├── main/
│   │   └── main.cpp
│   ├── rtl/
│   │   ├── BUILD.bazel
│   │   ├── rtl/
│   │   │   └── tsn.ts
│   │   └── tsconfig.json
│   ├── scripts/
│   │   ├── bazel/
│   │   │   ├── test262_preprocess_test.sh
│   │   │   └── test262_run_test.sh
│   │   ├── compile.sh
│   │   ├── compile_single.sh
│   │   ├── ignored_test262.txt
│   │   └── refresh.sh
│   ├── src/
│   │   ├── test262/
│   │   │   ├── preprocessor/
│   │   │   │   └── main.cpp
│   │   │   ├── runner/
│   │   │   │   ├── TestReporter.cpp
│   │   │   │   ├── TestReporter.hpp
│   │   │   │   └── main.cpp
│   │   │   ├── shared/
│   │   │   │   ├── Test262Helpers.hpp
│   │   │   │   ├── Test262Serialization.cpp
│   │   │   │   └── Test262Serialization.hpp
│   │   │   └── skip_list.json
│   │   └── tsn/
│   │       ├── tsn.cpp
│   │       └── tsn.h
│   ├── tests/
│   │   ├── BUILD.bazel
│   │   ├── tsconfig.json
│   │   ├── tsn_integration_tests/
│   │   │   ├── arith_binary_operators.ts
│   │   │   ├── arith_unary_operators.ts
│   │   │   ├── arith_unary_operators_pros.ts
│   │   │   ├── async_generator.ts
│   │   │   ├── await.ts
│   │   │   ├── backtrace.ts
│   │   │   ├── binary_operators.ts
│   │   │   ├── bitwise_operators.ts
│   │   │   ├── capturing_closures.ts
│   │   │   ├── classes.ts
│   │   │   ├── classes_method_from_value.ts
│   │   │   ├── classes_properties.ts
│   │   │   ├── classes_properties_from_value.ts
│   │   │   ├── destructuring.ts
│   │   │   ├── element_access.ts
│   │   │   ├── enums.ts
│   │   │   ├── exception.ts
│   │   │   ├── exports.ts
│   │   │   ├── for_in.ts
│   │   │   ├── for_of.ts
│   │   │   ├── function_as_classes.ts
│   │   │   ├── generator.ts
│   │   │   ├── if_statements.ts
│   │   │   ├── imports.ts
│   │   │   ├── js_bridge.ts
│   │   │   ├── logical_operators.ts
│   │   │   ├── loops.ts
│   │   │   ├── memory_management.ts
│   │   │   ├── mutable_capturing_closures.ts
│   │   │   ├── null_coalescing.ts
│   │   │   ├── object_properties.ts
│   │   │   ├── optional_operator.ts
│   │   │   ├── spread_literals.ts
│   │   │   ├── string_template.ts
│   │   │   ├── switch_stmt.ts
│   │   │   ├── ternary_operators.ts
│   │   │   ├── try_catch_finally.ts
│   │   │   └── variables.ts
│   │   └── tsn_test_helpers/
│   │       ├── bootstrap.ts
│   │       ├── epilogue.ts
│   │       └── globals.d.ts
│   └── tsn.bzl
├── valdi/
│   ├── .gitignore
│   ├── BUILD.bazel
│   ├── README.md
│   ├── bzl_project/
│   │   └── BUILD.bazel
│   ├── compiler/
│   │   └── toolbox/
│   │       ├── BUILD.bazel
│   │       └── src/
│   │           └── valdi/
│   │               ├── compiler_toolbox/
│   │               │   ├── CompilerToolbox.cpp
│   │               │   ├── CompilerToolbox.hpp
│   │               │   ├── RewriteHeader.cpp
│   │               │   └── RewriteHeader.hpp
│   │               ├── main/
│   │               │   └── main.cpp
│   │               └── stamp/
│   │                   ├── Stamp.cpp
│   │                   └── Stamp.hpp
│   ├── fuzz/
│   │   ├── BUILD.bazel
│   │   ├── build.sh
│   │   └── src/
│   │       └── valdi/
│   │           └── runtime/
│   │               └── Resources/
│   │                   └── ValdiModuleArchive_fuzz_test.cpp
│   ├── generated-src/
│   │   ├── cpp/
│   │   │   └── valdi/
│   │   │       ├── Keychain.hpp
│   │   │       └── RuntimeMessageHandler.hpp
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── snapchat/
│   │   │           └── client/
│   │   │               └── valdi/
│   │   │                   ├── Keychain.java
│   │   │                   └── RuntimeMessageHandler.java
│   │   ├── jni/
│   │   │   └── valdi/
│   │   │       ├── NativeKeychain.cpp
│   │   │       ├── NativeKeychain.hpp
│   │   │       ├── NativeRuntimeMessageHandler.cpp
│   │   │       └── NativeRuntimeMessageHandler.hpp
│   │   ├── objc/
│   │   │   └── valdi/
│   │   │       ├── SCNValdiKeychain+Private.h
│   │   │       ├── SCNValdiKeychain+Private.mm
│   │   │       ├── SCNValdiKeychain.h
│   │   │       ├── SCNValdiRuntimeMessageHandler+Private.h
│   │   │       ├── SCNValdiRuntimeMessageHandler+Private.mm
│   │   │       └── SCNValdiRuntimeMessageHandler.h
│   │   └── yaml/
│   │       ├── Keychain.yaml
│   │       └── RuntimeMessageHandler.yaml
│   ├── protogen-lite/
│   │   └── valdi/
│   │       ├── valdi.pb.cc
│   │       └── valdi.pb.h
│   ├── res/
│   │   └── xml/
│   │       ├── valdi_date_picker.xml
│   │       ├── valdi_number_picker.xml
│   │       ├── valdi_scroll_view_kitkat.xml
│   │       └── valdi_time_picker.xml
│   ├── scripts/
│   │   ├── bazel_utils.py
│   │   ├── clang_tidy.sh
│   │   ├── emoji/
│   │   │   ├── .gitignore
│   │   │   ├── .prettierrc.json
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   └── emoji_gen/
│   │   │   │       └── index.ts
│   │   │   └── tsconfig.json
│   │   ├── run_debugger_test.sh
│   │   └── update_extensions.sh
│   ├── src/
│   │   ├── android_support/
│   │   │   └── java/
│   │   │       └── com/
│   │   │           └── snap/
│   │   │               └── valdi/
│   │   │                   └── support/
│   │   │                       ├── AppBootstrapActivity.kt
│   │   │                       ├── AppBootstrapper.kt
│   │   │                       ├── DefaultNavigator.kt
│   │   │                       ├── NavigationView.kt
│   │   │                       ├── ScrollBridgeLoggerFactoryModule.kt
│   │   │                       ├── SupportFonts.kt
│   │   │                       ├── SupportModules.kt
│   │   │                       └── SupportValdiViewLoaderManager.kt
│   │   ├── bindings/
│   │   │   ├── include/
│   │   │   │   └── valdi/
│   │   │   │       └── bindings/
│   │   │   │           ├── ViewTranslator_jni.hpp
│   │   │   │           └── ViewTranslator_objc.hpp
│   │   │   └── view.yaml
│   │   ├── java/
│   │   │   ├── AndroidManifest.xml
│   │   │   ├── com/
│   │   │   │   ├── snap/
│   │   │   │   │   └── valdi/
│   │   │   │   │       ├── AsyncValdiViewLoader.kt
│   │   │   │   │       ├── BuildOptions.kt
│   │   │   │   │       ├── CppViewFactory.kt
│   │   │   │   │       ├── DebugMessagePresenter.kt
│   │   │   │   │       ├── DeferredViewFactory.kt
│   │   │   │   │       ├── ExceptionReporter.kt
│   │   │   │   │       ├── IBitmap.kt
│   │   │   │   │       ├── IValdiRuntime.kt
│   │   │   │   │       ├── InflationCompletion.kt
│   │   │   │   │       ├── LazyViewFactory.kt
│   │   │   │   │       ├── MainThreadBatchDispatcher.kt
│   │   │   │   │       ├── NoOpValdiViewLoader.kt
│   │   │   │   │       ├── PreloadingMode.kt
│   │   │   │   │       ├── RenderBackend.kt
│   │   │   │   │       ├── ScopedValdiViewLoader.kt
│   │   │   │   │       ├── ValdiContextConfiguration.kt
│   │   │   │   │       ├── ValdiRuntime.kt
│   │   │   │   │       ├── ValdiTweaks.kt
│   │   │   │   │       ├── ValdiViewLoaderManager.kt
│   │   │   │   │       ├── ViewFactory.kt
│   │   │   │   │       ├── ViewFactoryPrivate.kt
│   │   │   │   │       ├── ViewRef.kt
│   │   │   │   │       ├── actions/
│   │   │   │   │       │   ├── JSCaller.kt
│   │   │   │   │       │   ├── ValdiAction.java
│   │   │   │   │       │   ├── ValdiActionHandlerHolder.kt
│   │   │   │   │       │   ├── ValdiActions.kt
│   │   │   │   │       │   ├── ValdiNativeAction.kt
│   │   │   │   │       │   └── ValdiRunnableAction.kt
│   │   │   │   │       ├── attributes/
│   │   │   │   │       │   ├── AttributeHandlerDelegate.kt
│   │   │   │   │       │   ├── AttributePreprocessor.kt
│   │   │   │   │       │   ├── AttributesBinder.kt
│   │   │   │   │       │   ├── AttributesBindingContext.kt
│   │   │   │   │       │   ├── AttributesBindingContextNative.kt
│   │   │   │   │       │   ├── MeasureDelegate.kt
│   │   │   │   │       │   ├── MeasuredSize.kt
│   │   │   │   │       │   ├── RegisterAttributesBinder.kt
│   │   │   │   │       │   ├── ViewLayoutAttributes.kt
│   │   │   │   │       │   ├── ViewLayoutAttributesCpp.kt
│   │   │   │   │       │   ├── conversions/
│   │   │   │   │       │   │   └── ColorConversions.kt
│   │   │   │   │       │   └── impl/
│   │   │   │   │       │       ├── AnimatedImageViewAttributesBinder.kt
│   │   │   │   │       │       ├── EditTextAttributesBinder.kt
│   │   │   │   │       │       ├── EditTextMultilineAttributesBinder.kt
│   │   │   │   │       │       ├── ScrollViewAttributesBinder.kt
│   │   │   │   │       │       ├── ShapeViewAttributesBinder.kt
│   │   │   │   │       │       ├── TextViewAttributesBinder.kt
│   │   │   │   │       │       ├── ValdiDatePickerAttributesBinder.kt
│   │   │   │   │       │       ├── ValdiImageViewAttributesBinder.kt
│   │   │   │   │       │       ├── ValdiIndexPickerAttributesBinder.kt
│   │   │   │   │       │       ├── ValdiRootViewAttributesBinder.kt
│   │   │   │   │       │       ├── ValdiTextViewAttributesBinder.kt
│   │   │   │   │       │       ├── ValdiTextViewBackgroundEffectsLayoutManager.kt
│   │   │   │   │       │       ├── ValdiTimePickerAttributesBinder.kt
│   │   │   │   │       │       ├── ValdiVideoViewAttributesBinder.kt
│   │   │   │   │       │       ├── ViewAttributesBinder.kt
│   │   │   │   │       │       ├── ViewGroupAttributesBinder.kt
│   │   │   │   │       │       ├── animations/
│   │   │   │   │       │       │   ├── AnimationType.kt
│   │   │   │   │       │       │   ├── ColorAnimator.kt
│   │   │   │   │       │       │   ├── TextAnimator.kt
│   │   │   │   │       │       │   ├── ValdiAnimator.kt
│   │   │   │   │       │       │   ├── ValdiAnimatorBase.kt
│   │   │   │   │       │       │   ├── ValdiAnimatorFactory.kt
│   │   │   │   │       │       │   ├── ValdiInterpolatingAnimator.kt
│   │   │   │   │       │       │   ├── ValdiInterpolatingValueAnimator.kt
│   │   │   │   │       │       │   ├── ValdiSpringAnimator.kt
│   │   │   │   │       │       │   ├── ValdiSpringValueAnimator.kt
│   │   │   │   │       │       │   ├── ValdiValueAnimator.kt
│   │   │   │   │       │       │   ├── ValdiValueAnimatorConfig.kt
│   │   │   │   │       │       │   ├── ViewAnimator.kt
│   │   │   │   │       │       │   └── transition/
│   │   │   │   │       │       │       └── ValdiTransitionInfo.kt
│   │   │   │   │       │       ├── fonts/
│   │   │   │   │       │       │   ├── DefaultFonts.kt
│   │   │   │   │       │       │   ├── DefaultTypefaceResLoader.kt
│   │   │   │   │       │       │   ├── FontDataProvider.kt
│   │   │   │   │       │       │   ├── FontDescriptor.kt
│   │   │   │   │       │       │   ├── FontLoader.kt
│   │   │   │   │       │       │   ├── FontManager.kt
│   │   │   │   │       │       │   ├── MissingFontsTracker.kt
│   │   │   │   │       │       │   └── TypefaceResLoader.kt
│   │   │   │   │       │       ├── gestures/
│   │   │   │   │       │       │   ├── DoubleTapContext.kt
│   │   │   │   │       │       │   ├── DragContext.kt
│   │   │   │   │       │       │   ├── GestureAttributes.kt
│   │   │   │   │       │       │   ├── GestureAttributesUtils.kt
│   │   │   │   │       │       │   ├── HitTestUtils.kt
│   │   │   │   │       │       │   ├── LongPressContext.kt
│   │   │   │   │       │       │   ├── PinchContext.kt
│   │   │   │   │       │       │   ├── PointerUtils.kt
│   │   │   │   │       │       │   ├── PredicateUtils.kt
│   │   │   │   │       │       │   ├── RotateContext.kt
│   │   │   │   │       │       │   ├── RotationTracker.kt
│   │   │   │   │       │       │   ├── TapContext.kt
│   │   │   │   │       │       │   └── TouchContext.kt
│   │   │   │   │       │       ├── gradients/
│   │   │   │   │       │       │   └── ValdiGradient.kt
│   │   │   │   │       │       └── richtext/
│   │   │   │   │       │           ├── AttributedText.kt
│   │   │   │   │       │           ├── AttributedTextCpp.kt
│   │   │   │   │       │           ├── FontAttributes.kt
│   │   │   │   │       │           ├── ImageAttachmentSpan.kt
│   │   │   │   │       │           ├── OnLayoutSpan.kt
│   │   │   │   │       │           ├── OnTapSpan.kt
│   │   │   │   │       │           ├── OutlineReplacementSpan.kt
│   │   │   │   │       │           ├── OutlineSpan.kt
│   │   │   │   │       │           ├── RichTextConverter.kt
│   │   │   │   │       │           ├── TextAlignment.kt
│   │   │   │   │       │           ├── TextDecoration.kt
│   │   │   │   │       │           ├── TextSizeSpan.kt
│   │   │   │   │       │           └── TextViewHelper.kt
│   │   │   │   │       ├── bundle/
│   │   │   │   │       │   ├── AssetImageLoaderCompletion.kt
│   │   │   │   │       │   ├── AssetVideoLoaderCompletion.kt
│   │   │   │   │       │   ├── AssetsManager.kt
│   │   │   │   │       │   ├── IValdiCustomModuleProvider.kt
│   │   │   │   │       │   ├── LocalAssetLoader.kt
│   │   │   │   │       │   └── ResourceResolver.kt
│   │   │   │   │       ├── callable/
│   │   │   │   │       │   ├── BridgeFunctionImpls.kt
│   │   │   │   │       │   ├── ValdiBridgeFunction.kt
│   │   │   │   │       │   ├── ValdiFunction.kt
│   │   │   │   │       │   ├── ValdiFunctionActionAdapter.kt
│   │   │   │   │       │   ├── ValdiFunctionNative.kt
│   │   │   │   │       │   ├── ValdiFunctionTrampoline.kt
│   │   │   │   │       │   └── ValdiFunctionUtils.kt
│   │   │   │   │       ├── context/
│   │   │   │   │       │   ├── AndroidRootViewHandler.kt
│   │   │   │   │       │   ├── ContextManager.kt
│   │   │   │   │       │   ├── IRootViewHandler.kt
│   │   │   │   │       │   ├── IValdiContext.kt
│   │   │   │   │       │   ├── LazyValdiContext.kt
│   │   │   │   │       │   ├── RootViewHandlerBase.kt
│   │   │   │   │       │   ├── SnapDrawingRootViewHandler.kt
│   │   │   │   │       │   ├── ValdiContext.kt
│   │   │   │   │       │   ├── ValdiContextId.kt
│   │   │   │   │       │   └── ValdiViewOwner.kt
│   │   │   │   │       ├── drawables/
│   │   │   │   │       │   ├── BoxShadowRenderer.kt
│   │   │   │   │       │   ├── BoxShadowRendererImpl.kt
│   │   │   │   │       │   ├── BoxShadowRendererPool.kt
│   │   │   │   │       │   ├── DeferredBoxShadowRenderer.kt
│   │   │   │   │       │   ├── ValdiBitmapDrawable.kt
│   │   │   │   │       │   ├── ValdiGradientDrawable.kt
│   │   │   │   │       │   ├── ValdiImageDrawable.kt
│   │   │   │   │       │   └── utils/
│   │   │   │   │       │       ├── BlurUtils.kt
│   │   │   │   │       │       ├── BorderRadii.kt
│   │   │   │   │       │       ├── DrawableInfoProvider.kt
│   │   │   │   │       │       ├── FixedDrawableInfoProvider.kt
│   │   │   │   │       │       ├── MaskPathRenderer.kt
│   │   │   │   │       │       └── ValdiGradientDrawablePool.kt
│   │   │   │   │       ├── exceptions/
│   │   │   │   │       │   ├── AttributeError.kt
│   │   │   │   │       │   ├── ExceptionHandler.kt
│   │   │   │   │       │   ├── ExceptionUtils.kt
│   │   │   │   │       │   ├── GlobalExceptionHandler.kt
│   │   │   │   │       │   ├── MarshallerException.kt
│   │   │   │   │       │   ├── ValdiException.kt
│   │   │   │   │       │   └── ValdiFatalException.kt
│   │   │   │   │       ├── extensions/
│   │   │   │   │       │   └── ViewUtils.kt
│   │   │   │   │       ├── imageloading/
│   │   │   │   │       │   ├── DefaultValImageLoader.kt
│   │   │   │   │       │   └── ValdiImageLoaderPostprocessor.kt
│   │   │   │   │       ├── jsmodules/
│   │   │   │   │       │   ├── JSThreadDispatcher.kt
│   │   │   │   │       │   ├── ValdiJSRuntime.kt
│   │   │   │   │       │   ├── ValdiJSRuntimeImpl.kt
│   │   │   │   │       │   ├── ValdiJSWorker.kt
│   │   │   │   │       │   ├── ValdiScopedJSRuntime.kt
│   │   │   │   │       │   └── ValdiStringsModule.kt
│   │   │   │   │       ├── keyboard/
│   │   │   │   │       │   └── KeyboardManager.kt
│   │   │   │   │       ├── logger/
│   │   │   │   │       │   ├── DefaultLogger.kt
│   │   │   │   │       │   ├── LogLevel.kt
│   │   │   │   │       │   └── Logger.kt
│   │   │   │   │       ├── modules/
│   │   │   │   │       │   ├── DrawingModuleFontImpl.kt
│   │   │   │   │       │   ├── DrawingModuleImpl.kt
│   │   │   │   │       │   ├── ModuleFactoryRegistry.kt
│   │   │   │   │       │   ├── RegisterValdiModule.kt
│   │   │   │   │       │   ├── ValdiApplicationModule.kt
│   │   │   │   │       │   ├── ValdiBridgeModule.kt
│   │   │   │   │       │   ├── ValdiBridgeObserver.kt
│   │   │   │   │       │   ├── ValdiDateFormattingModule.kt
│   │   │   │   │       │   ├── ValdiDeviceModule.kt
│   │   │   │   │       │   ├── ValdiGeneratedModuleFactory.kt
│   │   │   │   │       │   ├── ValdiNativeModules.kt
│   │   │   │   │       │   ├── ValdiNumberFormattingModule.kt
│   │   │   │   │       │   └── drawing/
│   │   │   │   │       │       ├── DrawingModule.kt
│   │   │   │   │       │       ├── Font.kt
│   │   │   │   │       │       ├── FontSpecs.kt
│   │   │   │   │       │       ├── FontStyle.kt
│   │   │   │   │       │       ├── FontWeight.kt
│   │   │   │   │       │       └── Size.kt
│   │   │   │   │       ├── nativebridge/
│   │   │   │   │       │   ├── ContextNative.kt
│   │   │   │   │       │   ├── MainThreadDispatcher.java
│   │   │   │   │       │   ├── ReflectionViewFactory.kt
│   │   │   │   │       │   ├── RuntimeNative.kt
│   │   │   │   │       │   ├── ValdiViewManager.kt
│   │   │   │   │       │   ├── ValdiViewManagerOperations.kt
│   │   │   │   │       │   └── ValdiViewManagerOperationsManager.kt
│   │   │   │   │       ├── navigation/
│   │   │   │   │       │   ├── INavigator.kt
│   │   │   │   │       │   ├── INavigatorPageConfig.kt
│   │   │   │   │       │   └── INavigatorPageVisibility.kt
│   │   │   │   │       ├── network/
│   │   │   │   │       │   ├── CompositeRequestManager.kt
│   │   │   │   │       │   ├── DefaultHTTPRequestManager.kt
│   │   │   │   │       │   └── HTTPRequestTask.kt
│   │   │   │   │       ├── nodes/
│   │   │   │   │       │   ├── IValdiViewNode.kt
│   │   │   │   │       │   ├── ValdiViewNode.kt
│   │   │   │   │       │   └── ValdiViewNodeRef.kt
│   │   │   │   │       ├── preload/
│   │   │   │   │       │   └── ValdiPreloader.kt
│   │   │   │   │       ├── promise/
│   │   │   │   │       │   ├── CancelableResolvablePromise.kt
│   │   │   │   │       │   ├── CppPromise.kt
│   │   │   │   │       │   ├── CppPromiseCallback.kt
│   │   │   │   │       │   ├── Promise.kt
│   │   │   │   │       │   ├── PromiseCallback.kt
│   │   │   │   │       │   ├── PromiseUtils.kt
│   │   │   │   │       │   ├── RejectedPromise.kt
│   │   │   │   │       │   ├── ResolvablePromise.kt
│   │   │   │   │       │   └── ResolvedPromise.kt
│   │   │   │   │       ├── schema/
│   │   │   │   │       │   ├── ValdiClass.kt
│   │   │   │   │       │   ├── ValdiClassConstructor.kt
│   │   │   │   │       │   ├── ValdiClassDelegateManager.kt
│   │   │   │   │       │   ├── ValdiEnum.kt
│   │   │   │   │       │   ├── ValdiEnumType.kt
│   │   │   │   │       │   ├── ValdiField.kt
│   │   │   │   │       │   ├── ValdiFunctionClass.kt
│   │   │   │   │       │   ├── ValdiInterface.kt
│   │   │   │   │       │   ├── ValdiMarshallableObjectDescriptor.kt
│   │   │   │   │       │   ├── ValdiMethod.kt
│   │   │   │   │       │   ├── ValdiOptionalMethod.kt
│   │   │   │   │       │   ├── ValdiUntypedClass.kt
│   │   │   │   │       │   ├── ValdiValueMarshallerRegistry.kt
│   │   │   │   │       │   ├── ValdiValueMarshallerRegistryCpp.kt
│   │   │   │   │       │   └── ValdiValueMarshallerRegistryJava.kt
│   │   │   │   │       ├── snapdrawing/
│   │   │   │   │       │   ├── AnimatedImage.kt
│   │   │   │   │       │   ├── PathUtils.kt
│   │   │   │   │       │   ├── SnapDrawingChoreographerFrameScheduler.kt
│   │   │   │   │       │   ├── SnapDrawingFontManager.kt
│   │   │   │   │       │   ├── SnapDrawingFrameScheduler.kt
│   │   │   │   │       │   ├── SnapDrawingOptions.kt
│   │   │   │   │       │   ├── SnapDrawingRenderMode.kt
│   │   │   │   │       │   ├── SnapDrawingRootHandle.kt
│   │   │   │   │       │   ├── SnapDrawingRuntime.kt
│   │   │   │   │       │   ├── SnapDrawingRuntimeCPP.kt
│   │   │   │   │       │   ├── SnapDrawingSurfacePresenter.kt
│   │   │   │   │       │   ├── SnapDrawingSurfacePresenterListener.kt
│   │   │   │   │       │   ├── SnapDrawingSurfaceViewZOrder.kt
│   │   │   │   │       │   ├── SnapDrawingThreadedFrameScheduler.kt
│   │   │   │   │       │   ├── SurfacePresenterFactory.kt
│   │   │   │   │       │   └── SurfacePresenterManager.kt
│   │   │   │   │       ├── store/
│   │   │   │   │       │   ├── Encryptor.kt
│   │   │   │   │       │   └── KeychainUtils.kt
│   │   │   │   │       ├── utils/
│   │   │   │   │       │   ├── AttributeSetXmlHelper.kt
│   │   │   │   │       │   ├── AutoDisposable.kt
│   │   │   │   │       │   ├── BitmapHandler.kt
│   │   │   │   │       │   ├── BitmapPool.kt
│   │   │   │   │       │   ├── BridgeCallUtils.kt
│   │   │   │   │       │   ├── CanvasClipper.kt
│   │   │   │   │       │   ├── CollectionUtils.kt
│   │   │   │   │       │   ├── ColorType.kt
│   │   │   │   │       │   ├── CoordinateResolver.kt
│   │   │   │   │       │   ├── CppNativeHandlePair.kt
│   │   │   │   │       │   ├── DelegatedLoader.kt
│   │   │   │   │       │   ├── Disposable.kt
│   │   │   │   │       │   ├── DisposableCallback.kt
│   │   │   │   │       │   ├── DisposableLoadCompletion.kt
│   │   │   │   │       │   ├── DisposablePrivate.kt
│   │   │   │   │       │   ├── DisposableRunnable.kt
│   │   │   │   │       │   ├── DisposableUtils.kt
│   │   │   │   │       │   ├── EmptyAttributeSet.kt
│   │   │   │   │       │   ├── EventTime.kt
│   │   │   │   │       │   ├── ExecutorsUtil.kt
│   │   │   │   │       │   ├── GeometricPath.kt
│   │   │   │   │       │   ├── IAsyncWorkScheduler.kt
│   │   │   │   │       │   ├── IScheduler.kt
│   │   │   │   │       │   ├── InternedString.kt
│   │   │   │   │       │   ├── InternedStringCPP.kt
│   │   │   │   │       │   ├── InternedStringJava.kt
│   │   │   │   │       │   ├── JSConversions.kt
│   │   │   │   │       │   ├── JavaScriptCapturedStacktrace.kt
│   │   │   │   │       │   ├── JavaScriptMemoryStatistics.kt
│   │   │   │   │       │   ├── JavaScriptThreadStatus.kt
│   │   │   │   │       │   ├── LoadCompletion.kt
│   │   │   │   │       │   ├── LoaderDelegate.kt
│   │   │   │   │       │   ├── LoggerUtils.kt
│   │   │   │   │       │   ├── MainThreadUtils.kt
│   │   │   │   │       │   ├── NativeHandlesManager.kt
│   │   │   │   │       │   ├── NativeRef.kt
│   │   │   │   │       │   ├── PathInterpolator.kt
│   │   │   │   │       │   ├── QoSClass.kt
│   │   │   │   │       │   ├── Ref.kt
│   │   │   │   │       │   ├── SingleRunnable.kt
│   │   │   │   │       │   ├── ThrottlerAsyncWorkerScheduler.kt
│   │   │   │   │       │   ├── Trace.kt
│   │   │   │   │       │   ├── TypedRef.kt
│   │   │   │   │       │   ├── ValdiActionUtils.kt
│   │   │   │   │       │   ├── ValdiAssetLoadOptions.kt
│   │   │   │   │       │   ├── ValdiAssetLoader.kt
│   │   │   │   │       │   ├── ValdiEnumUtils.kt
│   │   │   │   │       │   ├── ValdiImage.kt
│   │   │   │   │       │   ├── ValdiImageContent.kt
│   │   │   │   │       │   ├── ValdiImageFactory.kt
│   │   │   │   │       │   ├── ValdiImageLoadCompletion.kt
│   │   │   │   │       │   ├── ValdiImageLoader.kt
│   │   │   │   │       │   ├── ValdiImageWithBitmap.kt
│   │   │   │   │       │   ├── ValdiImageWithContent.kt
│   │   │   │   │       │   ├── ValdiImageWithDeferredContent.kt
│   │   │   │   │       │   ├── ValdiJNI.kt
│   │   │   │   │       │   ├── ValdiLeakTracker.kt
│   │   │   │   │       │   ├── ValdiMarshallable.kt
│   │   │   │   │       │   ├── ValdiMarshallableObject.kt
│   │   │   │   │       │   ├── ValdiMarshaller.kt
│   │   │   │   │       │   ├── ValdiMarshallerCPP.kt
│   │   │   │   │       │   ├── ValdiMarshallerJava.kt
│   │   │   │   │       │   ├── ValdiObjects.kt
│   │   │   │   │       │   ├── ValdiRawImageResourceLoader.kt
│   │   │   │   │       │   ├── ValdiTextDirectionHeuristic.kt
│   │   │   │   │       │   ├── ValdiThread.kt
│   │   │   │   │       │   ├── ValdiVideoLoader.kt
│   │   │   │   │       │   ├── ValdiVideoPlayer.kt
│   │   │   │   │       │   ├── ValdiVideoPlayerCreatedCompletion.kt
│   │   │   │   │       │   ├── ViewRefSupport.kt
│   │   │   │   │       │   └── executors/
│   │   │   │   │       │       └── ExecutorFactory.kt
│   │   │   │   │       ├── viewmodel/
│   │   │   │   │       │   └── ValdiViewModel.kt
│   │   │   │   │       ├── views/
│   │   │   │   │       │   ├── AnimatedImageView.kt
│   │   │   │   │       │   ├── CustomChildViewAppender.kt
│   │   │   │   │       │   ├── EdgeEffectWrapper.kt
│   │   │   │   │       │   ├── ExtendedFadingEdgeRenderer.kt
│   │   │   │   │       │   ├── IScrollPerfLoggerBridge.kt
│   │   │   │   │       │   ├── ShapeView.kt
│   │   │   │   │       │   ├── TextViewUtils.kt
│   │   │   │   │       │   ├── ValdiAccessibilityDelegate.kt
│   │   │   │   │       │   ├── ValdiAccessibilityDelegateHierarchy.kt
│   │   │   │   │       │   ├── ValdiAssetReceiver.kt
│   │   │   │   │       │   ├── ValdiClippableView.kt
│   │   │   │   │       │   ├── ValdiDatePicker.kt
│   │   │   │   │       │   ├── ValdiEditText.kt
│   │   │   │   │       │   ├── ValdiEditTextMultiline.kt
│   │   │   │   │       │   ├── ValdiForegroundHolder.kt
│   │   │   │   │       │   ├── ValdiGeneratedRootView.kt
│   │   │   │   │       │   ├── ValdiImageView.kt
│   │   │   │   │       │   ├── ValdiIndexPicker.kt
│   │   │   │   │       │   ├── ValdiMeasurer.kt
│   │   │   │   │       │   ├── ValdiRecyclableView.kt
│   │   │   │   │       │   ├── ValdiRootView.kt
│   │   │   │   │       │   ├── ValdiScrollUtil.kt
│   │   │   │   │       │   ├── ValdiScrollView.kt
│   │   │   │   │       │   ├── ValdiScrollableView.kt
│   │   │   │   │       │   ├── ValdiTextHolder.kt
│   │   │   │   │       │   ├── ValdiTextView.kt
│   │   │   │   │       │   ├── ValdiTimePicker.kt
│   │   │   │   │       │   ├── ValdiTouchTarget.kt
│   │   │   │   │       │   ├── ValdiVideoView.kt
│   │   │   │   │       │   ├── ValdiView.kt
│   │   │   │   │       │   ├── snapdrawing/
│   │   │   │   │       │   │   ├── SnapDrawingContainerView.kt
│   │   │   │   │       │   │   ├── SnapDrawingEmbeddedView.kt
│   │   │   │   │       │   │   ├── SnapDrawingSurfaceView.kt
│   │   │   │   │       │   │   └── SnapDrawingTextureView.kt
│   │   │   │   │       │   └── touches/
│   │   │   │   │       │       ├── AndroidDetectorGestureRecognizer.kt
│   │   │   │   │       │       ├── AttributedTextTapGestureRecognizer.kt
│   │   │   │   │       │       ├── DisallowInterceptTouchEventMode.kt
│   │   │   │   │       │       ├── DoubleTapGestureRecognizer.kt
│   │   │   │   │       │       ├── DragGestureRecognizer.kt
│   │   │   │   │       │       ├── GestureRecognizers.kt
│   │   │   │   │       │       ├── GesturesState.kt
│   │   │   │   │       │       ├── LongPressGestureRecognizer.kt
│   │   │   │   │       │       ├── PinchGestureDetector.kt
│   │   │   │   │       │       ├── PinchGestureRecognizer.kt
│   │   │   │   │       │       ├── PinchGestureRecognizerV2.kt
│   │   │   │   │       │       ├── RotateGestureRecognizer.kt
│   │   │   │   │       │       ├── RotateGestureRecognizerV2.kt
│   │   │   │   │       │       ├── RotationGestureDetector.kt
│   │   │   │   │       │       ├── ScrollViewDragGestureRecognizer.kt
│   │   │   │   │       │       ├── TapGestureRecognizer.kt
│   │   │   │   │       │       ├── TouchDispatcher.kt
│   │   │   │   │       │       ├── TouchDispatcherImpl.kt
│   │   │   │   │       │       ├── TouchDispatcherNewExperience.kt
│   │   │   │   │       │       ├── TouchGestureRecognizer.kt
│   │   │   │   │       │       ├── ValdiGesturePointer.kt
│   │   │   │   │       │       ├── ValdiGestureRecognizer.kt
│   │   │   │   │       │       └── backbutton/
│   │   │   │   │       │           └── BackButtonListener.kt
│   │   │   │   │       └── workarounds/
│   │   │   │   │           └── AndroidDeviceWorkarounds.kt
│   │   │   │   └── snapchat/
│   │   │   │       └── client/
│   │   │   │           └── valdi/
│   │   │   │               ├── NativeBridge.java
│   │   │   │               ├── UndefinedValue.java
│   │   │   │               └── utils/
│   │   │   │                   ├── CppObjectWrapper.kt
│   │   │   │                   └── ValdiCPPAction.java
│   │   │   ├── generate_interface.sh
│   │   │   └── proguard-rules.pro
│   │   ├── java_plugin/
│   │   │   └── processor/
│   │   │       └── ValdiAnnotationProcessor.kt
│   │   └── valdi/
│   │       ├── .clang-tidy
│   │       ├── android/
│   │       │   ├── AccessibilityBridge.cpp
│   │       │   ├── AccessibilityBridge.hpp
│   │       │   ├── AndroidAssetLoader.cpp
│   │       │   ├── AndroidAssetLoader.hpp
│   │       │   ├── AndroidBitmap.cpp
│   │       │   ├── AndroidBitmap.hpp
│   │       │   ├── AndroidBitmapFactory.cpp
│   │       │   ├── AndroidBitmapFactory.hpp
│   │       │   ├── AndroidDispatchQueue.cpp
│   │       │   ├── AndroidDispatchQueue.hpp
│   │       │   ├── AndroidKeychain.cpp
│   │       │   ├── AndroidKeychain.hpp
│   │       │   ├── AndroidManifest.xml
│   │       │   ├── AndroidValueMarshallerRegistry.cpp
│   │       │   ├── AndroidValueMarshallerRegistry.hpp
│   │       │   ├── AndroidViewFactory.cpp
│   │       │   ├── AndroidViewFactory.hpp
│   │       │   ├── AndroidViewHolder.cpp
│   │       │   ├── AndroidViewHolder.hpp
│   │       │   ├── AndroidViewTransaction.cpp
│   │       │   ├── AndroidViewTransaction.hpp
│   │       │   ├── AnimatedImageJNI.hpp
│   │       │   ├── AttributedTextJNI.hpp
│   │       │   ├── AttributesBindingContextWrapper.cpp
│   │       │   ├── AttributesBindingContextWrapper.hpp
│   │       │   ├── AttributesJNI.hpp
│   │       │   ├── CppPromiseCallbackJNI.hpp
│   │       │   ├── CppPromiseJNI.hpp
│   │       │   ├── DeferredViewOperations.cpp
│   │       │   ├── DeferredViewOperations.hpp
│   │       │   ├── FunctionTrampolineJNI.hpp
│   │       │   ├── InternedStringCPP.hpp
│   │       │   ├── JavaClassDelegate.cpp
│   │       │   ├── JavaClassDelegate.hpp
│   │       │   ├── JavaEnumClassDelegate.cpp
│   │       │   ├── JavaEnumClassDelegate.hpp
│   │       │   ├── JavaFunctionClassDelegate.cpp
│   │       │   ├── JavaFunctionClassDelegate.hpp
│   │       │   ├── JavaInterfaceClassDelegate.cpp
│   │       │   ├── JavaInterfaceClassDelegate.hpp
│   │       │   ├── JavaMethodClassDelegate.cpp
│   │       │   ├── JavaMethodClassDelegate.hpp
│   │       │   ├── JavaObjectClassDelegate.cpp
│   │       │   ├── JavaObjectClassDelegate.hpp
│   │       │   ├── JavaUntypedClassDelegate.cpp
│   │       │   ├── JavaUntypedClassDelegate.hpp
│   │       │   ├── JavaValueDelegate.cpp
│   │       │   ├── JavaValueDelegate.hpp
│   │       │   ├── Logger.cpp
│   │       │   ├── Logger.hpp
│   │       │   ├── MainThreadDispatcher.cpp
│   │       │   ├── MainThreadDispatcher.hpp
│   │       │   ├── MarshallerJNI.cpp
│   │       │   ├── ModuleFactoryRegistryJNI.hpp
│   │       │   ├── NativeBridge.cpp
│   │       │   ├── NativeBridge.hpp
│   │       │   ├── RegisterJNI.cpp
│   │       │   ├── ResourceLoader.cpp
│   │       │   ├── ResourceLoader.hpp
│   │       │   ├── RuntimeListener.cpp
│   │       │   ├── RuntimeListener.hpp
│   │       │   ├── RuntimeManagerWrapper.cpp
│   │       │   ├── RuntimeManagerWrapper.hpp
│   │       │   ├── RuntimeWrapper.cpp
│   │       │   ├── RuntimeWrapper.hpp
│   │       │   ├── ValdiFunctionNative.hpp
│   │       │   ├── ValdiMarshallableObjectDescriptorJavaClass.cpp
│   │       │   ├── ValdiMarshallableObjectDescriptorJavaClass.hpp
│   │       │   ├── ValueMarshallerRegistryCppJNI.hpp
│   │       │   ├── ViewManager.cpp
│   │       │   ├── ViewManager.hpp
│   │       │   ├── dummy.cpp
│   │       │   └── snap_drawing/
│   │       │       ├── AndroidScrollConstantsResolver.cpp
│   │       │       ├── AndroidScrollConstantsResolver.hpp
│   │       │       ├── AndroidSnapDrawingRuntime.cpp
│   │       │       ├── AndroidSnapDrawingRuntime.hpp
│   │       │       ├── AndroidSnapDrawingUtils.cpp
│   │       │       ├── AndroidSnapDrawingUtils.hpp
│   │       │       ├── AndroidSurfacePresenterManager.cpp
│   │       │       ├── AndroidSurfacePresenterManager.hpp
│   │       │       ├── SnapDrawingLayerRootHost.cpp
│   │       │       └── SnapDrawingLayerRootHost.hpp
│   │       ├── cli_runner/
│   │       │   ├── CLIRunner.cpp
│   │       │   └── CLIRunner.hpp
│   │       ├── hermes/
│   │       │   ├── Hermes.hpp
│   │       │   ├── HermesBytecodeCache.cpp
│   │       │   ├── HermesBytecodeCache.hpp
│   │       │   ├── HermesDebuggerConnection.cpp
│   │       │   ├── HermesDebuggerConnection.hpp
│   │       │   ├── HermesDebuggerRegistry.cpp
│   │       │   ├── HermesDebuggerRegistry.hpp
│   │       │   ├── HermesDebuggerServer.cpp
│   │       │   ├── HermesDebuggerServer.hpp
│   │       │   ├── HermesJavaScriptCompiler.cpp
│   │       │   ├── HermesJavaScriptCompiler.hpp
│   │       │   ├── HermesJavaScriptContext.cpp
│   │       │   ├── HermesJavaScriptContext.hpp
│   │       │   ├── HermesJavaScriptContextFactory.cpp
│   │       │   ├── HermesJavaScriptContextFactory.hpp
│   │       │   ├── HermesUtils.cpp
│   │       │   ├── HermesUtils.hpp
│   │       │   └── WebSocketServer/
│   │       │       ├── IWebSocketConnection.hpp
│   │       │       ├── IWebSocketServer.hpp
│   │       │       ├── WebSocketPP.hpp
│   │       │       ├── WebSocketServer.cpp
│   │       │       ├── WebSocketServer.hpp
│   │       │       ├── WebSocketServerConnectionImpl.cpp
│   │       │       ├── WebSocketServerConnectionImpl.hpp
│   │       │       ├── WebSocketServerImpl.cpp
│   │       │       └── WebSocketServerImpl.hpp
│   │       ├── ios/
│   │       │   ├── Action/
│   │       │   │   ├── SCValdiJSAction.h
│   │       │   │   └── SCValdiJSAction.mm
│   │       │   ├── Animations/
│   │       │   │   ├── SCValdiAnimator.h
│   │       │   │   ├── SCValdiAnimator.m
│   │       │   │   ├── SCValdiLayerAnimation.h
│   │       │   │   └── SCValdiLayerAnimation.m
│   │       │   ├── Bootstrap/
│   │       │   │   ├── SCValdiAppMain.h
│   │       │   │   ├── SCValdiAppMain.m
│   │       │   │   ├── SCValdiBootstrappingAppDelegate.h
│   │       │   │   └── SCValdiBootstrappingAppDelegate.m
│   │       │   ├── CPPBindings/
│   │       │   │   ├── SCValdiLoggerBridge.h
│   │       │   │   ├── SCValdiLoggerBridge.mm
│   │       │   │   ├── SCValdiMainThreadDispatcher.h
│   │       │   │   ├── SCValdiMainThreadDispatcher.mm
│   │       │   │   ├── SCValdiRuntimeListener.h
│   │       │   │   ├── SCValdiRuntimeListener.mm
│   │       │   │   ├── SCValdiViewManager.h
│   │       │   │   ├── SCValdiViewManager.mm
│   │       │   │   ├── SCValdiViewTransaction.h
│   │       │   │   ├── SCValdiViewTransaction.mm
│   │       │   │   ├── UIViewHolder.h
│   │       │   │   └── UIViewHolder.mm
│   │       │   ├── Categories/
│   │       │   │   ├── UIButton+Valdi.h
│   │       │   │   ├── UIButton+Valdi.m
│   │       │   │   ├── UIControl+Valdi.h
│   │       │   │   ├── UIControl+Valdi.m
│   │       │   │   ├── UISwitch+Valdi.h
│   │       │   │   ├── UISwitch+Valdi.m
│   │       │   │   ├── UIView+Valdi.h
│   │       │   │   ├── UIView+Valdi.m
│   │       │   │   ├── UIVisualEffectView+Valdi.h
│   │       │   │   └── UIVisualEffectView+Valdi.m
│   │       │   ├── Gestures/
│   │       │   │   ├── SCValdiGestureRecognizers.h
│   │       │   │   └── SCValdiGestureRecognizers.mm
│   │       │   ├── Info.plist
│   │       │   ├── NativeModules/
│   │       │   │   ├── Drawing/
│   │       │   │   │   ├── SCValdiDrawingModuleFactory.h
│   │       │   │   │   └── SCValdiDrawingModuleFactory.m
│   │       │   │   ├── SCValdiApplicationModule.h
│   │       │   │   ├── SCValdiApplicationModule.m
│   │       │   │   ├── SCValdiBridgeModuleUtils.h
│   │       │   │   ├── SCValdiBridgeModuleUtils.m
│   │       │   │   ├── SCValdiDeviceModule.h
│   │       │   │   └── SCValdiDeviceModule.m
│   │       │   ├── Resources/
│   │       │   │   ├── SCValdiResourceLoader.h
│   │       │   │   └── SCValdiResourceLoader.mm
│   │       │   ├── SCValdiAssetLoader.h
│   │       │   ├── SCValdiAssetLoader.mm
│   │       │   ├── SCValdiAttributesBinder.h
│   │       │   ├── SCValdiAttributesBinder.mm
│   │       │   ├── SCValdiAutoDestroyingContext.h
│   │       │   ├── SCValdiAutoDestroyingContext.m
│   │       │   ├── SCValdiContext+CPP.h
│   │       │   ├── SCValdiContext.h
│   │       │   ├── SCValdiContext.mm
│   │       │   ├── SCValdiDefaultHTTPRequestManager.h
│   │       │   ├── SCValdiDefaultHTTPRequestManager.m
│   │       │   ├── SCValdiDefaultImageLoader.h
│   │       │   ├── SCValdiDefaultImageLoader.m
│   │       │   ├── SCValdiDisposable.h
│   │       │   ├── SCValdiJSRuntimeImpl.h
│   │       │   ├── SCValdiJSRuntimeImpl.m
│   │       │   ├── SCValdiJSWorker.h
│   │       │   ├── SCValdiJSWorker.mm
│   │       │   ├── SCValdiJsConvertible.h
│   │       │   ├── SCValdiKeychainStore.h
│   │       │   ├── SCValdiKeychainStore.m
│   │       │   ├── SCValdiRuntime+Private.h
│   │       │   ├── SCValdiRuntime.h
│   │       │   ├── SCValdiRuntime.mm
│   │       │   ├── SCValdiRuntimeManager.h
│   │       │   ├── SCValdiRuntimeManager.mm
│   │       │   ├── SCValdiUserDefaultsStore.h
│   │       │   ├── SCValdiUserDefaultsStore.m
│   │       │   ├── SCValdiViewModel.h
│   │       │   ├── SCValdiViewNode+CPP.h
│   │       │   ├── SCValdiViewNode.h
│   │       │   ├── SCValdiViewNode.mm
│   │       │   ├── SnapDrawing/
│   │       │   │   ├── AnimatedImage/
│   │       │   │   │   ├── SCSnapDrawingAnimatedImage+CPP.h
│   │       │   │   │   ├── SCSnapDrawingAnimatedImage.h
│   │       │   │   │   ├── SCSnapDrawingAnimatedImage.mm
│   │       │   │   │   ├── SCSnapDrawingAnimatedImageView.h
│   │       │   │   │   └── SCSnapDrawingAnimatedImageView.mm
│   │       │   │   ├── SCSnapDrawingUIView+CPP.h
│   │       │   │   ├── SCSnapDrawingUIView.h
│   │       │   │   ├── SCSnapDrawingUIView.mm
│   │       │   │   ├── SCValdiSnapDrawingRuntime.h
│   │       │   │   ├── SCValdiSnapDrawingRuntime.mm
│   │       │   │   ├── SCValdiSnapDrawingSurfacePresenterManager.h
│   │       │   │   ├── SCValdiSnapDrawingSurfacePresenterManager.mm
│   │       │   │   ├── SCValdiSurfacePresenterView.h
│   │       │   │   └── SCValdiSurfacePresenterView.m
│   │       │   ├── Text/
│   │       │   │   ├── NSAttributedString+Valdi.h
│   │       │   │   ├── NSAttributedString+Valdi.m
│   │       │   │   ├── SCValdiAttributedText.h
│   │       │   │   ├── SCValdiAttributedText.mm
│   │       │   │   ├── SCValdiAttributedTextHelper.h
│   │       │   │   ├── SCValdiAttributedTextHelper.m
│   │       │   │   ├── SCValdiFont.h
│   │       │   │   ├── SCValdiFont.m
│   │       │   │   ├── SCValdiFontAttributes.h
│   │       │   │   ├── SCValdiFontAttributes.m
│   │       │   │   ├── SCValdiFontManager.h
│   │       │   │   ├── SCValdiFontManager.m
│   │       │   │   ├── SCValdiImageAttachmentInfo.h
│   │       │   │   ├── SCValdiImageAttachmentInfo.m
│   │       │   │   ├── SCValdiOnLayoutAttribute.h
│   │       │   │   ├── SCValdiOnLayoutAttribute.m
│   │       │   │   ├── SCValdiOnTapAttribute.h
│   │       │   │   ├── SCValdiOnTapAttribute.m
│   │       │   │   ├── SCValdiTextLayout.h
│   │       │   │   └── SCValdiTextLayout.m
│   │       │   ├── Utils/
│   │       │   │   ├── ContextUtils.h
│   │       │   │   ├── ContextUtils.mm
│   │       │   │   ├── GradientUtils.h
│   │       │   │   ├── GradientUtils.m
│   │       │   │   ├── SCValdiCapturedJSStacktrace.h
│   │       │   │   ├── SCValdiCapturedJSStacktrace.m
│   │       │   │   ├── SCValdiImageFilter.h
│   │       │   │   ├── SCValdiImageFilter.mm
│   │       │   │   ├── SCValdiViewFactoryImpl.h
│   │       │   │   └── SCValdiViewFactoryImpl.mm
│   │       │   ├── Valdi.h
│   │       │   └── Views/
│   │       │       ├── SCValdiActivityIndicatorView.h
│   │       │       ├── SCValdiActivityIndicatorView.m
│   │       │       ├── SCValdiAnimatedContentView.h
│   │       │       ├── SCValdiAnimatedContentView.mm
│   │       │       ├── SCValdiBlurView.h
│   │       │       ├── SCValdiBlurView.m
│   │       │       ├── SCValdiDatePicker.h
│   │       │       ├── SCValdiDatePicker.m
│   │       │       ├── SCValdiDatePickerUtils.h
│   │       │       ├── SCValdiDatePickerUtils.m
│   │       │       ├── SCValdiDateTimePicker.h
│   │       │       ├── SCValdiDateTimePicker.m
│   │       │       ├── SCValdiIScrollPerfLoggerBridgeFactory.h
│   │       │       ├── SCValdiIndexPicker.h
│   │       │       ├── SCValdiIndexPicker.m
│   │       │       ├── SCValdiLabel.h
│   │       │       ├── SCValdiLabel.m
│   │       │       ├── SCValdiShapeView.h
│   │       │       ├── SCValdiShapeView.m
│   │       │       ├── SCValdiTextField.h
│   │       │       ├── SCValdiTextField.m
│   │       │       ├── SCValdiTextView.h
│   │       │       ├── SCValdiTextView.m
│   │       │       ├── SCValdiTextViewEffectsLayoutManager.h
│   │       │       ├── SCValdiTextViewEffectsLayoutManager.m
│   │       │       ├── SCValdiTimePicker.h
│   │       │       └── SCValdiTimePicker.m
│   │       ├── jni/
│   │       │   ├── JavaThread.cpp
│   │       │   └── JavaThread.hpp
│   │       ├── jsbridge/
│   │       │   ├── JavaScriptBridge.cpp
│   │       │   └── JavaScriptBridge.hpp
│   │       ├── jscore/
│   │       │   ├── JSCoreCustomClasses.cpp
│   │       │   ├── JSCoreCustomClasses.hpp
│   │       │   ├── JSCoreDebuggerProxy.cpp
│   │       │   ├── JSCoreDebuggerProxy.hpp
│   │       │   ├── JSCoreUtils.cpp
│   │       │   ├── JSCoreUtils.hpp
│   │       │   ├── JavaScriptCoreContext.cpp
│   │       │   ├── JavaScriptCoreContext.hpp
│   │       │   ├── JavaScriptCoreContextFactory.cpp
│   │       │   └── JavaScriptCoreContextFactory.hpp
│   │       ├── macos/
│   │       │   ├── Bootstrap/
│   │       │   │   ├── SCValdiAppMain.h
│   │       │   │   ├── SCValdiAppMain.m
│   │       │   │   ├── SCValdiBootstrappingAppDelegate.m
│   │       │   │   └── SCValdiBootstrappingNSAppDelegate.h
│   │       │   ├── MacOSSnapDrawingRuntime.h
│   │       │   ├── MacOSSnapDrawingRuntime.mm
│   │       │   ├── SCDirectoryUtils.h
│   │       │   ├── SCDirectoryUtils.mm
│   │       │   ├── SCValdiCursorUpdater.h
│   │       │   ├── SCValdiCursorUpdater.m
│   │       │   ├── SCValdiDefaultHTTPRequestManager.h
│   │       │   ├── SCValdiDefaultHTTPRequestManager.mm
│   │       │   ├── SCValdiMacOSAttributesBinder.h
│   │       │   ├── SCValdiMacOSAttributesBinder.mm
│   │       │   ├── SCValdiMacOSFunction.h
│   │       │   ├── SCValdiMacOSFunction.mm
│   │       │   ├── SCValdiMacOSStringsBridgeModule.h
│   │       │   ├── SCValdiMacOSStringsBridgeModule.mm
│   │       │   ├── SCValdiMacOSSurfacePresenterManager.h
│   │       │   ├── SCValdiMacOSSurfacePresenterManager.mm
│   │       │   ├── SCValdiMacOSViewManager.h
│   │       │   ├── SCValdiMacOSViewManager.mm
│   │       │   ├── SCValdiObjCUtils.h
│   │       │   ├── SCValdiObjCUtils.mm
│   │       │   ├── SCValdiRuntime.h
│   │       │   ├── SCValdiRuntime.mm
│   │       │   ├── SCValdiSnapDrawingNSView.h
│   │       │   ├── SCValdiSnapDrawingNSView.mm
│   │       │   └── Views/
│   │       │       ├── SCValdiMacOSTextField.h
│   │       │       ├── SCValdiMacOSTextField.m
│   │       │       ├── SCValdiSurfacePresenterView.h
│   │       │       └── SCValdiSurfacePresenterView.m
│   │       ├── quickjs/
│   │       │   ├── QuickJSJavaScriptContext.cpp
│   │       │   ├── QuickJSJavaScriptContext.hpp
│   │       │   ├── QuickJSJavaScriptContextFactory.cpp
│   │       │   ├── QuickJSJavaScriptContextFactory.hpp
│   │       │   ├── QuickJSUtils.cpp
│   │       │   └── QuickJSUtils.hpp
│   │       ├── runtime/
│   │       │   ├── Attributes/
│   │       │   │   ├── AccessibilityAttributes.cpp
│   │       │   │   ├── AccessibilityAttributes.hpp
│   │       │   │   ├── Animator.cpp
│   │       │   │   ├── Animator.hpp
│   │       │   │   ├── AssetAttributes.cpp
│   │       │   │   ├── AssetAttributes.hpp
│   │       │   │   ├── AttributeHandler.cpp
│   │       │   │   ├── AttributeHandler.hpp
│   │       │   │   ├── AttributeHandlerDelegate.cpp
│   │       │   │   ├── AttributeHandlerDelegate.hpp
│   │       │   │   ├── AttributeHandlerDelegateWithCallable.cpp
│   │       │   │   ├── AttributeHandlerDelegateWithCallable.hpp
│   │       │   │   ├── AttributeId.hpp
│   │       │   │   ├── AttributeIds.cpp
│   │       │   │   ├── AttributeIds.hpp
│   │       │   │   ├── AttributeOwner.cpp
│   │       │   │   ├── AttributeOwner.hpp
│   │       │   │   ├── AttributePostprocessor.cpp
│   │       │   │   ├── AttributePostprocessor.hpp
│   │       │   │   ├── AttributePreprocessor.cpp
│   │       │   │   ├── AttributePreprocessor.hpp
│   │       │   │   ├── AttributeValue.cpp
│   │       │   │   ├── AttributeValue.hpp
│   │       │   │   ├── AttributesApplier.cpp
│   │       │   │   ├── AttributesApplier.hpp
│   │       │   │   ├── AttributesBinderHelper.cpp
│   │       │   │   ├── AttributesBinderHelper.hpp
│   │       │   │   ├── AttributesBindingContext.cpp
│   │       │   │   ├── AttributesBindingContext.hpp
│   │       │   │   ├── AttributesBindingContextImpl.cpp
│   │       │   │   ├── AttributesBindingContextImpl.hpp
│   │       │   │   ├── AttributesManager.cpp
│   │       │   │   ├── AttributesManager.hpp
│   │       │   │   ├── BorderRadius.cpp
│   │       │   │   ├── BorderRadius.hpp
│   │       │   │   ├── BoundAttributes.cpp
│   │       │   │   ├── BoundAttributes.hpp
│   │       │   │   ├── CompositeAttribute.cpp
│   │       │   │   ├── CompositeAttribute.hpp
│   │       │   │   ├── CompositeAttributeUtils.cpp
│   │       │   │   ├── CompositeAttributeUtils.hpp
│   │       │   │   ├── DefaultAttributeProcessors.cpp
│   │       │   │   ├── DefaultAttributeProcessors.hpp
│   │       │   │   ├── DefaultAttributes.cpp
│   │       │   │   ├── DefaultAttributes.hpp
│   │       │   │   ├── NoOpDefaultAttributeHandler.cpp
│   │       │   │   ├── NoOpDefaultAttributeHandler.hpp
│   │       │   │   ├── PreprocessorCache.cpp
│   │       │   │   ├── PreprocessorCache.hpp
│   │       │   │   ├── PreprocessorCacheKey.cpp
│   │       │   │   ├── PreprocessorCacheKey.hpp
│   │       │   │   ├── ScrollAttributes.cpp
│   │       │   │   ├── ScrollAttributes.hpp
│   │       │   │   ├── TextAttributeValueParser.cpp
│   │       │   │   ├── TextAttributeValueParser.hpp
│   │       │   │   ├── ValueConverters.cpp
│   │       │   │   ├── ValueConverters.hpp
│   │       │   │   ├── ViewNodeAttribute.cpp
│   │       │   │   ├── ViewNodeAttribute.hpp
│   │       │   │   ├── ViewNodeAttributesApplier.cpp
│   │       │   │   ├── ViewNodeAttributesApplier.hpp
│   │       │   │   └── Yoga/
│   │       │   │       ├── YGEdgesAttributeHandlerDelegate.cpp
│   │       │   │       ├── YGEdgesAttributeHandlerDelegate.hpp
│   │       │   │       ├── YGEnumAttributeHandlerDelegate.cpp
│   │       │   │       ├── YGEnumAttributeHandlerDelegate.hpp
│   │       │   │       ├── YGFloatOptionalAttributeHandlerDelegate.cpp
│   │       │   │       ├── YGFloatOptionalAttributeHandlerDelegate.hpp
│   │       │   │       ├── YGValueAttributeHandlerDelegate.cpp
│   │       │   │       ├── YGValueAttributeHandlerDelegate.hpp
│   │       │   │       ├── Yoga.cpp
│   │       │   │       ├── Yoga.hpp
│   │       │   │       ├── YogaAttributeHandlerDelegate.cpp
│   │       │   │       ├── YogaAttributeHandlerDelegate.hpp
│   │       │   │       ├── YogaAttributes.cpp
│   │       │   │       ├── YogaAttributes.hpp
│   │       │   │       ├── YogaGetterSetterAttributeHandlerDelegate.cpp
│   │       │   │       └── YogaGetterSetterAttributeHandlerDelegate.hpp
│   │       │   ├── CSS/
│   │       │   │   ├── CSSAttributes.cpp
│   │       │   │   ├── CSSAttributes.hpp
│   │       │   │   ├── CSSAttributesManager.cpp
│   │       │   │   ├── CSSAttributesManager.hpp
│   │       │   │   ├── CSSDocument.cpp
│   │       │   │   ├── CSSDocument.hpp
│   │       │   │   ├── CSSNode.cpp
│   │       │   │   ├── CSSNode.hpp
│   │       │   │   ├── CSSNodeParentResolver.hpp
│   │       │   │   ├── StyleAttributesCache.cpp
│   │       │   │   └── StyleAttributesCache.hpp
│   │       │   ├── Context/
│   │       │   │   ├── AttributionResolver.cpp
│   │       │   │   ├── AttributionResolver.hpp
│   │       │   │   ├── Context.cpp
│   │       │   │   ├── Context.hpp
│   │       │   │   ├── ContextAttachedValdiObject.cpp
│   │       │   │   ├── ContextAttachedValdiObject.hpp
│   │       │   │   ├── ContextAutoDestroy.cpp
│   │       │   │   ├── ContextAutoDestroy.hpp
│   │       │   │   ├── ContextComponentRenderer.cpp
│   │       │   │   ├── ContextComponentRenderer.hpp
│   │       │   │   ├── ContextEntry.cpp
│   │       │   │   ├── ContextEntry.hpp
│   │       │   │   ├── ContextHandler.cpp
│   │       │   │   ├── ContextHandler.hpp
│   │       │   │   ├── ContextManager.cpp
│   │       │   │   ├── ContextManager.hpp
│   │       │   │   ├── IViewNodeAssetHandler.hpp
│   │       │   │   ├── IViewNodesAssetTracker.hpp
│   │       │   │   ├── RawViewNodeId.hpp
│   │       │   │   ├── RenderingBackendType.cpp
│   │       │   │   ├── RenderingBackendType.hpp
│   │       │   │   ├── ViewManagerContext.cpp
│   │       │   │   ├── ViewManagerContext.hpp
│   │       │   │   ├── ViewNode.cpp
│   │       │   │   ├── ViewNode.hpp
│   │       │   │   ├── ViewNodeAccessibility.cpp
│   │       │   │   ├── ViewNodeAccessibility.hpp
│   │       │   │   ├── ViewNodeAccessibilityState.cpp
│   │       │   │   ├── ViewNodeAccessibilityState.hpp
│   │       │   │   ├── ViewNodeAssetHandler.cpp
│   │       │   │   ├── ViewNodeAssetHandler.hpp
│   │       │   │   ├── ViewNodeChildrenIndexer.cpp
│   │       │   │   ├── ViewNodeChildrenIndexer.hpp
│   │       │   │   ├── ViewNodePath.cpp
│   │       │   │   ├── ViewNodePath.hpp
│   │       │   │   ├── ViewNodeScrollState.cpp
│   │       │   │   ├── ViewNodeScrollState.hpp
│   │       │   │   ├── ViewNodeTree.cpp
│   │       │   │   ├── ViewNodeTree.hpp
│   │       │   │   ├── ViewNodeTreeManager.cpp
│   │       │   │   ├── ViewNodeTreeManager.hpp
│   │       │   │   ├── ViewNodeViewStats.cpp
│   │       │   │   ├── ViewNodeViewStats.hpp
│   │       │   │   ├── ViewNodesFrameObserver.cpp
│   │       │   │   ├── ViewNodesFrameObserver.hpp
│   │       │   │   ├── ViewNodesVisibilityObserver.cpp
│   │       │   │   └── ViewNodesVisibilityObserver.hpp
│   │       │   ├── Debugger/
│   │       │   │   ├── BoostAsioUtils.cpp
│   │       │   │   ├── BoostAsioUtils.hpp
│   │       │   │   ├── DaemonClient.cpp
│   │       │   │   ├── DaemonClient.hpp
│   │       │   │   ├── DebuggerService.cpp
│   │       │   │   ├── DebuggerService.hpp
│   │       │   │   ├── IDaemonClient.hpp
│   │       │   │   ├── IDebuggerServiceListener.hpp
│   │       │   │   ├── ITCPConnection.hpp
│   │       │   │   ├── ITCPServer.hpp
│   │       │   │   ├── TCPClient.cpp
│   │       │   │   ├── TCPClient.hpp
│   │       │   │   ├── TCPConnectionImpl.cpp
│   │       │   │   ├── TCPConnectionImpl.hpp
│   │       │   │   ├── TCPServer.cpp
│   │       │   │   ├── TCPServer.hpp
│   │       │   │   ├── TCPServerConnectionImpl.cpp
│   │       │   │   ├── TCPServerConnectionImpl.hpp
│   │       │   │   ├── TCPServerImpl.cpp
│   │       │   │   └── TCPServerImpl.hpp
│   │       │   ├── ErrorCodes.hpp
│   │       │   ├── IRuntimeListener.hpp
│   │       │   ├── Interfaces/
│   │       │   │   ├── IDiskCache.hpp
│   │       │   │   ├── IJavaScriptBridge.hpp
│   │       │   │   ├── IJavaScriptContext.cpp
│   │       │   │   ├── IJavaScriptContext.hpp
│   │       │   │   ├── IRemoteDownloader.hpp
│   │       │   │   ├── IResourceLoader.hpp
│   │       │   │   ├── ITweakValueProvider.hpp
│   │       │   │   ├── IViewManager.hpp
│   │       │   │   └── IViewTransaction.hpp
│   │       │   ├── JavaScript/
│   │       │   │   ├── JSFunctionExportMode.hpp
│   │       │   │   ├── JSFunctionWithCallable.cpp
│   │       │   │   ├── JSFunctionWithCallable.hpp
│   │       │   │   ├── JSFunctionWithMethod.cpp
│   │       │   │   ├── JSFunctionWithMethod.hpp
│   │       │   │   ├── JSFunctionWithValueFunction.cpp
│   │       │   │   ├── JSFunctionWithValueFunction.hpp
│   │       │   │   ├── JSPromise.cpp
│   │       │   │   ├── JSPromise.hpp
│   │       │   │   ├── JSPropertyNameIndex.cpp
│   │       │   │   ├── JSPropertyNameIndex.hpp
│   │       │   │   ├── JSValueRefHolder.cpp
│   │       │   │   ├── JSValueRefHolder.hpp
│   │       │   │   ├── JavaScriptANRDetector.cpp
│   │       │   │   ├── JavaScriptANRDetector.hpp
│   │       │   │   ├── JavaScriptAssetLoadObserver.cpp
│   │       │   │   ├── JavaScriptAssetLoadObserver.hpp
│   │       │   │   ├── JavaScriptBridgedObjectLeakTracker.cpp
│   │       │   │   ├── JavaScriptBridgedObjectLeakTracker.hpp
│   │       │   │   ├── JavaScriptCapturedStacktrace.cpp
│   │       │   │   ├── JavaScriptCapturedStacktrace.hpp
│   │       │   │   ├── JavaScriptCircularRefChecker.hpp
│   │       │   │   ├── JavaScriptComponentContextHandler.cpp
│   │       │   │   ├── JavaScriptComponentContextHandler.hpp
│   │       │   │   ├── JavaScriptContextEntryPoint.cpp
│   │       │   │   ├── JavaScriptContextEntryPoint.hpp
│   │       │   │   ├── JavaScriptErrorStackTrace.cpp
│   │       │   │   ├── JavaScriptErrorStackTrace.hpp
│   │       │   │   ├── JavaScriptFunctionCallContext.cpp
│   │       │   │   ├── JavaScriptFunctionCallContext.hpp
│   │       │   │   ├── JavaScriptHeapDumpBuilder.cpp
│   │       │   │   ├── JavaScriptHeapDumpBuilder.hpp
│   │       │   │   ├── JavaScriptLong.cpp
│   │       │   │   ├── JavaScriptLong.hpp
│   │       │   │   ├── JavaScriptModuleContainer.cpp
│   │       │   │   ├── JavaScriptModuleContainer.hpp
│   │       │   │   ├── JavaScriptRuntime.cpp
│   │       │   │   ├── JavaScriptRuntime.hpp
│   │       │   │   ├── JavaScriptRuntimeDeserializers.cpp
│   │       │   │   ├── JavaScriptRuntimeDeserializers.hpp
│   │       │   │   ├── JavaScriptStringCache.cpp
│   │       │   │   ├── JavaScriptStringCache.hpp
│   │       │   │   ├── JavaScriptTaskScheduler.cpp
│   │       │   │   ├── JavaScriptTaskScheduler.hpp
│   │       │   │   ├── JavaScriptTypes.cpp
│   │       │   │   ├── JavaScriptTypes.hpp
│   │       │   │   ├── JavaScriptUtils.cpp
│   │       │   │   ├── JavaScriptUtils.hpp
│   │       │   │   ├── JavaScriptValueDelegate.cpp
│   │       │   │   ├── JavaScriptValueDelegate.hpp
│   │       │   │   ├── JavaScriptValueMarshaller.cpp
│   │       │   │   ├── JavaScriptValueMarshaller.hpp
│   │       │   │   ├── JavaScriptWorker.cpp
│   │       │   │   ├── JavaScriptWorker.hpp
│   │       │   │   ├── Modules/
│   │       │   │   │   ├── AttributedTextNativeModuleFactory.cpp
│   │       │   │   │   ├── AttributedTextNativeModuleFactory.hpp
│   │       │   │   │   ├── FileSystemFactory.cpp
│   │       │   │   │   ├── FileSystemFactory.hpp
│   │       │   │   │   ├── JavaScriptModuleFactory.hpp
│   │       │   │   │   ├── JavaScriptModuleFactoryBridge.cpp
│   │       │   │   │   ├── JavaScriptModuleFactoryBridge.hpp
│   │       │   │   │   ├── PersistentStore.cpp
│   │       │   │   │   ├── PersistentStore.hpp
│   │       │   │   │   ├── PersistentStoreModuleFactory.cpp
│   │       │   │   │   ├── PersistentStoreModuleFactory.hpp
│   │       │   │   │   ├── ProtobufArena.cpp
│   │       │   │   │   ├── ProtobufArena.hpp
│   │       │   │   │   ├── ProtobufMessageFactory.cpp
│   │       │   │   │   ├── ProtobufMessageFactory.hpp
│   │       │   │   │   ├── ProtobufModule.cpp
│   │       │   │   │   ├── ProtobufModule.hpp
│   │       │   │   │   ├── ProtobufModuleFactory.cpp
│   │       │   │   │   ├── ProtobufModuleFactory.hpp
│   │       │   │   │   ├── TCPSocketModuleFactory.cpp
│   │       │   │   │   ├── TCPSocketModuleFactory.hpp
│   │       │   │   │   ├── UnicodeModuleFactory.cpp
│   │       │   │   │   └── UnicodeModuleFactory.hpp
│   │       │   │   ├── ValueFunctionWithJSValue.cpp
│   │       │   │   ├── ValueFunctionWithJSValue.hpp
│   │       │   │   ├── WrappedJSValueRef.cpp
│   │       │   │   └── WrappedJSValueRef.hpp
│   │       │   ├── Metrics/
│   │       │   │   ├── Metrics.cpp
│   │       │   │   └── Metrics.hpp
│   │       │   ├── Rendering/
│   │       │   │   ├── AnimationOptions.cpp
│   │       │   │   ├── AnimationOptions.hpp
│   │       │   │   ├── RenderRequest.cpp
│   │       │   │   ├── RenderRequest.hpp
│   │       │   │   ├── RenderRequestEntries.cpp
│   │       │   │   ├── RenderRequestEntries.hpp
│   │       │   │   ├── ViewNodeRenderer.cpp
│   │       │   │   └── ViewNodeRenderer.hpp
│   │       │   ├── Resources/
│   │       │   │   ├── AssetBytesStore.cpp
│   │       │   │   ├── Asse
Download .txt
Showing preview only (960K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (10519 symbols across 1230 files)

FILE: ai-skills/skills/valdi-async/tests/src/reference.tsx
  type UserProfileViewModel (line 13) | interface UserProfileViewModel {
  type UserProfileState (line 17) | interface UserProfileState {
  class UserProfile (line 22) | class UserProfile extends StatefulComponent<UserProfileViewModel, UserPr...
    method onCreate (line 28) | onCreate(): void {
    method onViewModelUpdate (line 32) | onViewModelUpdate(previous?: UserProfileViewModel): void {
    method onDestroy (line 39) | onDestroy(): void {
    method fetchUser (line 43) | private fetchUser(id: string): void {
    method onRender (line 51) | onRender(): void {
  type ClockViewModel (line 62) | interface ClockViewModel {
  type ClockState (line 66) | interface ClockState {
  class LiveClock (line 70) | class LiveClock extends StatefulComponent<ClockViewModel, ClockState> {
    method onCreate (line 73) | onCreate(): void {
    method onRender (line 83) | onRender(): void {
  type DataState (line 92) | interface DataState {
  type DataViewModel (line 96) | interface DataViewModel {
  class DataLoader (line 100) | class DataLoader extends StatefulComponent<DataViewModel, DataState> {
    method onCreate (line 103) | onCreate(): void {
    method loadData (line 107) | private async loadData(): Promise<void> {
    method onRender (line 115) | onRender(): void {
  type SearchViewModel (line 123) | interface SearchViewModel {
  type SearchState (line 127) | interface SearchState {
  class SearchBar (line 131) | class SearchBar extends StatefulComponent<SearchViewModel, SearchState> {
    method onViewModelUpdate (line 138) | onViewModelUpdate(previous?: SearchViewModel): void {
    method onDestroy (line 147) | onDestroy(): void {
    method fetchResults (line 151) | private fetchResults(query: string): void {
    method onRender (line 160) | onRender(): void {
  type FetchState (line 173) | interface FetchState {
  type FetchViewModel (line 177) | interface FetchViewModel {
  class ThirdPartyFetcher (line 181) | class ThirdPartyFetcher extends StatefulComponent<FetchViewModel, FetchS...
    method onCreate (line 186) | onCreate(): void {
    method onDestroy (line 197) | onDestroy(): void {
    method onRender (line 201) | onRender(): void {

FILE: ai-skills/skills/valdi-component-tests/tests/src/ProfileCard.tsx
  type FollowBadgeViewModel (line 8) | interface FollowBadgeViewModel {
  class FollowBadge (line 12) | class FollowBadge extends Component<FollowBadgeViewModel> {
    method onRender (line 13) | onRender(): void {
  type ProfileCardViewModel (line 20) | interface ProfileCardViewModel {
  class ProfileCard (line 27) | class ProfileCard extends Component<ProfileCardViewModel> {
    method onRender (line 28) | onRender(): void {

FILE: ai-skills/skills/valdi-migrate/tests/check_antipatterns.py
  function check_file (line 56) | def check_file(path: str) -> list[tuple[int, str, str]]:
  function main (line 70) | def main():

FILE: ai-skills/skills/valdi-migrate/tests/flutter_example.dart
  class ThemeService (line 10) | class ThemeService extends ChangeNotifier {
  class Greeting (line 15) | class Greeting extends StatelessWidget {
    method build (line 20) | Widget build(BuildContext context)
  class Counter (line 26) | class Counter extends StatefulWidget {
    method createState (line 30) | State<Counter> createState()
  class _CounterState (line 33) | class _CounterState extends State<Counter> {
    method _increment (line 36) | void _increment()
    method build (line 41) | Widget build(BuildContext context)
  class UserList (line 50) | class UserList extends StatefulWidget {
    method createState (line 52) | State<UserList> createState()
  class _UserListState (line 55) | class _UserListState extends State<UserList> {
    method initState (line 59) | void initState()
    method _loadUsers (line 64) | Future<void> _loadUsers()
    method build (line 71) | Widget build(BuildContext context)
  class SettingsScreen (line 82) | class SettingsScreen extends StatefulWidget {
    method createState (line 84) | State<SettingsScreen> createState()
  class _SettingsScreenState (line 87) | class _SettingsScreenState extends State<SettingsScreen> {
    method initState (line 91) | void initState()
    method _load (line 96) | Future<void> _load()
    method _toggle (line 101) | Future<void> _toggle()
    method build (line 109) | Widget build(BuildContext context)
  class ThemedButton (line 120) | class ThemedButton extends StatelessWidget {
    method build (line 122) | Widget build(BuildContext context)

FILE: ai-skills/skills/valdi-migrate/tests/react_example.tsx
  type User (line 27) | interface User { id: string; name: string; }

FILE: ai-skills/skills/valdi-migrate/tests/src/expected_valdi.tsx
  class AppThemeService (line 25) | class AppThemeService {
  type GreetingViewModel (line 34) | interface GreetingViewModel {
  class Greeting (line 38) | class Greeting extends Component<GreetingViewModel> {
    method onRender (line 39) | onRender(): void {
  type CounterViewModel (line 48) | interface CounterViewModel {
  type CounterState (line 52) | interface CounterState {
  class Counter (line 56) | class Counter extends StatefulComponent<CounterViewModel, CounterState> {
    method onRender (line 64) | onRender(): void {
  type UserProfileViewModel (line 75) | interface UserProfileViewModel {
  type UserProfileState (line 78) | interface UserProfileState {
  class UserProfile (line 82) | class UserProfile extends StatefulComponent<UserProfileViewModel, UserPr...
    method onCreate (line 85) | onCreate(): void {
    method onViewModelUpdate (line 89) | onViewModelUpdate(previous?: UserProfileViewModel): void {
    method loadProfile (line 95) | private async loadProfile(id: string) {
    method onRender (line 100) | onRender(): void {
  type User (line 113) | interface User { id: string; name: string; }
  type UserListViewModel (line 115) | interface UserListViewModel {
  class UserList (line 119) | class UserList extends Component<UserListViewModel> {
    method onRender (line 120) | onRender(): void {
  type ProfileCardViewModel (line 134) | interface ProfileCardViewModel {
  class ProfileCard (line 140) | class ProfileCard extends Component<ProfileCardViewModel> {
    method onRender (line 141) | onRender(): void {
  type CardViewModel (line 159) | interface CardViewModel {
  class ProfileCardStyled (line 164) | class ProfileCardStyled extends Component<CardViewModel> {
    method onRender (line 165) | onRender(): void {
  type ThemedBadgeViewModel (line 186) | interface ThemedBadgeViewModel extends ProvidersValuesViewModel<[AppThem...
  class ThemedBadge (line 190) | class ThemedBadge extends Component<ThemedBadgeViewModel> {
    method onRender (line 191) | onRender(): void {
  type SettingsState (line 206) | interface SettingsState {
  class SettingsScreen (line 210) | class SettingsScreen extends StatefulComponent<{}, SettingsState> {
    method onCreate (line 213) | async onCreate() {
    method onRender (line 224) | onRender(): void {
  type FetchState (line 238) | interface FetchState {
  class UserListFetch (line 242) | class UserListFetch extends StatefulComponent<{}, FetchState> {
    method onCreate (line 248) | onCreate(): void {
    method onDestroy (line 256) | onDestroy(): void {
    method onRender (line 260) | onRender(): void {

FILE: ai-skills/skills/valdi-perf/tests/src/reference.tsx
  type TabBarViewModel (line 20) | interface TabBarViewModel {
  class TabBar (line 24) | class TabBar extends Component<TabBarViewModel> {
    method onRender (line 25) | onRender(): void {
  type UserRowViewModel (line 36) | interface UserRowViewModel {
  class UserRow (line 41) | class UserRow extends Component<UserRowViewModel> {
    method onRender (line 42) | onRender(): void {
  type UserListViewModel (line 50) | interface UserListViewModel {
  type UserListState (line 54) | interface UserListState {
  class UserList (line 58) | class UserList extends StatefulComponent<UserListViewModel, UserListStat...
    method onViewModelUpdate (line 64) | onViewModelUpdate(previous?: UserListViewModel): void {
    method onRender (line 73) | onRender(): void {
  type SectionViewModel (line 81) | interface SectionViewModel {
  type SectionListViewModel (line 86) | interface SectionListViewModel {
  type SectionListState (line 90) | interface SectionListState {
  class SectionList (line 94) | class SectionList extends StatefulComponent<SectionListViewModel, Sectio...
    method handleSectionTap (line 97) | private handleSectionTap(id: string): void {
    method onRender (line 101) | onRender(): void {
  type Item (line 115) | interface Item {
  type FlatListViewModel (line 120) | interface FlatListViewModel {
  class FlatList (line 125) | class FlatList extends Component<FlatListViewModel> {
    method onRender (line 126) | onRender(): void {
  type FeedViewModel (line 135) | interface FeedViewModel {
  class Feed (line 139) | class Feed extends Component<FeedViewModel> {
    method onRender (line 147) | onRender(): void {
  type CardViewModel (line 154) | interface CardViewModel {
  class Card (line 159) | class Card extends Component<CardViewModel> {
    method onRender (line 160) | onRender(): void {
  type ListItem (line 175) | interface ListItem {
  type StableListViewModel (line 180) | interface StableListViewModel {
  class StableList (line 184) | class StableList extends Component<StableListViewModel> {
    method onRender (line 185) | onRender(): void {

FILE: ai-skills/skills/valdi-tsx/tests/src/reference.tsx
  type GreetingViewModel (line 31) | interface GreetingViewModel {
  class Greeting (line 35) | class Greeting extends Component<GreetingViewModel> {
    method onRender (line 36) | onRender(): void {
  type CounterViewModel (line 44) | interface CounterViewModel {
  type CounterState (line 48) | interface CounterState {
  class Counter (line 53) | class Counter extends StatefulComponent<CounterViewModel, CounterState> {
    method onCreate (line 56) | onCreate(): void {
    method onViewModelUpdate (line 63) | onViewModelUpdate(previous?: CounterViewModel): void {
    method onDestroy (line 69) | onDestroy(): void {
    method onRender (line 82) | onRender(): void {
  type ItemViewModel (line 97) | interface ItemViewModel {
  type ItemListViewModel (line 102) | interface ItemListViewModel {
  class ItemList (line 106) | class ItemList extends Component<ItemListViewModel> {
    method onRender (line 107) | onRender(): void {
  type MediaPlayerViewModel (line 121) | interface MediaPlayerViewModel {
  class MediaPlayer (line 125) | class MediaPlayer extends Component<MediaPlayerViewModel> {
    method onRender (line 126) | onRender(): void {
  class ThemeService (line 137) | class ThemeService {
  type ThemedViewModel (line 144) | interface ThemedViewModel extends ProvidersValuesViewModel<[ThemeService...
  class ThemedLabel (line 148) | class ThemedLabel extends Component<ThemedViewModel> {
    method onRender (line 149) | onRender(): void {
  class AppRoot (line 158) | class AppRoot extends Component {
    method onRender (line 161) | onRender(): void {

FILE: apps/benchmark/src/cpp/CppModule.cpp
  type snap::valdi::benchmark (line 9) | namespace snap::valdi::benchmark {
    class CppHelperModule (line 17) | class CppHelperModule : public valdi_core::ModuleFactory {
      method getModulePath (line 19) | Valdi::StringBox getModulePath() final {
      method loadModule (line 23) | Valdi::Value loadModule() final {

FILE: apps/benchmark/src/valdi/benchmark/src/BenchmarkApp.tsx
  class App (line 19) | class App extends Component {
    method onRender (line 20) | onRender(): void {
    method renderButtons (line 30) | private renderButtons(navigationController: NavigationController): void {
    method renderButton (line 38) | private renderButton(
    method presentPage (line 50) | private presentPage(
  type PageButtonViewModel (line 59) | interface PageButtonViewModel {
  class PageButton (line 64) | class PageButton extends Component<PageButtonViewModel> {
    method onRender (line 65) | onRender(): void {

FILE: apps/benchmark/src/valdi/benchmark/src/BenchmarkSingleRunComponent.tsx
  type BenchmarkCompleteVerifierCallback (line 6) | type BenchmarkCompleteVerifierCallback = (component: IComponent) => bool...
  type BenchmarkCompleteCallback (line 7) | type BenchmarkCompleteCallback = () => void;
  type BenchmarkResult (line 9) | interface BenchmarkResult {}
  type BenchmarkRunner (line 11) | interface BenchmarkRunner {
  type BenchmarkSingleRunComponentViewModel (line 18) | interface BenchmarkSingleRunComponentViewModel {
  type State (line 34) | interface State {
  class BenchmarkSingleRunComponent (line 45) | class BenchmarkSingleRunComponent
    method onCreate (line 56) | onCreate() {
    method onDestroy (line 67) | onDestroy() {
    method onRender (line 71) | onRender() {
    method isComponentIsBenchmarkedComponentSubtree (line 93) | private isComponentIsBenchmarkedComponentSubtree(component: IComponent...
    method onComponentWillRerender (line 111) | onComponentWillRerender(component: IComponent) {
    method scheduleOnRenderEnd (line 120) | private scheduleOnRenderEnd(onDone: () => void, component: IComponent) {
    method onMainThreadIdle (line 131) | private onMainThreadIdle(sequence: number) {
    method notifyBenchmarkCompleted (line 141) | private notifyBenchmarkCompleted(idleDate: Date) {

FILE: apps/benchmark/src/valdi/benchmark/src/DrawFrameBenchmark.tsx
  type ComplexBenchmarkSceneViewModel (line 22) | interface ComplexBenchmarkSceneViewModel {
  function hsla (line 36) | function hsla(h: number, s: number, l: number, a: number): string {
  function makeAnimatedPath (line 61) | function makeAnimatedPath(frameIndex: number, variant: number): ReturnTy...
  function makeStrokePath (line 81) | function makeStrokePath(frameIndex: number, strokeIdx: number): ReturnTy...
  constant STROKE_COLORS (line 100) | const STROKE_COLORS = [
  constant STROKE_CAPS (line 107) | const STROKE_CAPS: Array<'round' | 'butt' | 'square'> = ['round', 'butt'...
  class ComplexBenchmarkScene (line 109) | class ComplexBenchmarkScene extends Component<ComplexBenchmarkSceneViewM...
    method onRender (line 110) | onRender(): void {
    method renderStickerEntity (line 170) | private renderStickerEntity(
    method renderCaptionEntity (line 228) | private renderCaptionEntity(idx: number): void {
    method renderDrawingEntity (line 267) | private renderDrawingEntity(idx: number): void {
    method renderFilterOverlay (line 297) | private renderFilterOverlay(idx: number): void {
    method renderBottomBar (line 321) | private renderBottomBar(idx: number): void {
    method renderClippingRegions (line 356) | private renderClippingRegions(idx: number): void {
  type PhaseStats (line 436) | interface PhaseStats {
  function computeStats (line 446) | function computeStats(name: string, values: number[]): PhaseStats {
  function formatMs (line 466) | function formatMs(ms: number): string {
  function statsBlock (line 470) | function statsBlock(s: PhaseStats): string {
  constant FRAME_COUNTS (line 483) | const FRAME_COUNTS = [30, 60, 120];
  constant BENCHMARK_WIDTH (line 484) | const BENCHMARK_WIDTH = 1080;
  constant BENCHMARK_HEIGHT (line 485) | const BENCHMARK_HEIGHT = 1920;
  type FrameTiming (line 487) | interface FrameTiming {
  type State (line 499) | interface State {
  type ViewModel (line 505) | interface ViewModel {}
  type ComponentContext (line 506) | interface ComponentContext {}
  class DrawFrameBenchmark (line 509) | class DrawFrameBenchmark extends NavigationPageStatefulComponent<ViewMod...
    method onRender (line 516) | onRender(): void {
    method executeBenchmark (line 577) | private async executeBenchmark(): Promise<void> {
  function monoSpaceFont (line 728) | function monoSpaceFont(size: number): string {

FILE: apps/benchmark/src/valdi/benchmark/src/MarshallingTest.tsx
  type Result (line 26) | interface Result {
  function runTest (line 38) | function runTest(body: (data: any) => any, data: any, iterations: number) {
  function pvalue (line 70) | function pvalue(times: number[], p: number): number {
  function average (line 86) | function average(numbers: number[]): number {
  type ViewModel (line 117) | interface ViewModel {}
  type ComponentContext (line 118) | interface ComponentContext {}
  type State (line 120) | interface State {
  class MarshallingTest (line 125) | class MarshallingTest extends NavigationPageStatefulComponent<ViewModel,...
    method onCreate (line 130) | onCreate() {
    method onRender (line 140) | onRender(): void {
    method renderResults (line 151) | private renderResults() {

FILE: apps/benchmark/src/valdi/benchmark/src/MicroBenchTest.tsx
  type ViewModel (line 13) | interface ViewModel {}
  type ComponentContext (line 14) | interface ComponentContext {}
  class MicroBenchTest (line 17) | class MicroBenchTest extends NavigationPageStatefulComponent<ViewModel, ...
    method onCreate (line 22) | onCreate() {
    method onRender (line 38) | onRender(): void {
  function monoSpaceFont (line 63) | function monoSpaceFont(size: number): string {

FILE: apps/benchmark/src/valdi/benchmark/src/NativeHelper.d.ts
  type FunctionTiming (line 8) | interface FunctionTiming {

FILE: apps/benchmark/src/valdi/benchmark/src/ProtoImportTest.tsx
  function runProtoImport (line 10) | function runProtoImport(src: string): number {
  type ViewModel (line 17) | interface ViewModel {}
  type ComponentContext (line 18) | interface ComponentContext {}
  type State (line 20) | interface State {
  class ProtoImportTest (line 26) | class ProtoImportTest extends NavigationPageStatefulComponent<ViewModel,...
    method onCreate (line 32) | onCreate() {
    method onRender (line 38) | onRender(): void {

FILE: apps/benchmark/src/valdi/benchmark/src/RenderTest.tsx
  type ViewModel (line 11) | interface ViewModel {}
  type ComponentContext (line 12) | interface ComponentContext {}
  class TestPage (line 14) | class TestPage extends Component {
    method onRender (line 15) | onRender() {
  class RenderTest (line 25) | class RenderTest extends NavigationPageStatefulComponent<ViewModel, Comp...
    method onRender (line 43) | onRender(): void {

FILE: apps/benchmark/src/valdi/benchmark/src/main.tsx
  function readChoice (line 30) | function readChoice(): string {

FILE: apps/benchmark/src/valdi/benchmark/src/microbench.js
  function pad (line 32) | function pad(str, n) {
  function pad_left (line 39) | function pad_left(str, n) {
  function pad_center (line 46) | function pad_center(str, n) {
  function toPrec (line 57) | function toPrec(n, prec) {
  function log_line (line 79) | function log_line() {
  function log_one (line 121) | function log_one(text, n, ti) {
  function bench (line 142) | function bench(f, text)
  function empty_loop (line 183) | function empty_loop(n) {
  function empty_down_loop (line 190) | function empty_down_loop(n) {
  function empty_down_loop2 (line 197) | function empty_down_loop2(n) {
  function empty_do_loop (line 204) | function empty_do_loop(n) {
  function date_now (line 210) | function date_now(n) {
  function date_parse (line 218) | function date_parse(n) {
  function prop_read (line 244) | function prop_read(n)
  function prop_write (line 259) | function prop_write(n)
  function prop_update (line 272) | function prop_update(n)
  function prop_create (line 285) | function prop_create(n)
  function prop_clone (line 307) | function prop_clone(n)
  function prop_delete (line 320) | function prop_delete(n)
  function array_read (line 346) | function array_read(n)
  function array_write (line 370) | function array_write(n)
  function array_prop_create (line 392) | function array_prop_create(n)
  function array_slice (line 404) | function array_slice(n)
  function array_length_decr (line 420) | function array_length_decr(n)
  function array_hole_length_decr (line 435) | function array_hole_length_decr(n)
  function array_push (line 452) | function array_push(n)
  function array_pop (line 464) | function array_pop(n)
  function typed_array_read (line 481) | function typed_array_read(n)
  function typed_array_write (line 505) | function typed_array_write(n)
  function global_read (line 529) | function global_read(n)
  function global_write_strict (line 558) | function global_write_strict(n)
  function local_destruct (line 570) | function local_destruct(n)
  function global_destruct_strict (line 602) | function global_destruct_strict(n)
  function g (line 615) | function g(a)
  function global_func_call (line 620) | function global_func_call(n)
  function func_call (line 634) | function func_call(n)
  function func_closure_call (line 653) | function func_closure_call(n)
  function int_arith (line 672) | function int_arith(n)
  function float_arith (line 686) | function float_arith(n)
  function bigfloat_arith (line 704) | function bigfloat_arith(n)
  function float256_arith (line 722) | function float256_arith(n)
  function bigint_arith (line 727) | function bigint_arith(n, bits)
  function bigint64_arith (line 745) | function bigint64_arith(n)
  function bigint256_arith (line 750) | function bigint256_arith(n)
  function set_collection_add (line 755) | function set_collection_add(n)
  function array_for (line 771) | function array_for(n)
  function array_for_in (line 787) | function array_for_in(n)
  function array_for_of (line 803) | function array_for_of(n)
  function math_min (line 819) | function math_min(n)
  function regexp_ascii (line 831) | function regexp_ascii(n)
  function regexp_utf16 (line 843) | function regexp_utf16(n)
  function string_build1 (line 856) | function string_build1(n)
  function string_build1x (line 869) | function string_build1x(n)
  function string_build2c (line 882) | function string_build2c(n)
  function string_build2 (line 895) | function string_build2(n, r)
  function string_build3 (line 908) | function string_build3(n)
  function string_build4 (line 921) | function string_build4(n)
  function sort_bench (line 937) | function sort_bench(text) {
  function int_to_string (line 1074) | function int_to_string(n)
  function float_to_string (line 1085) | function float_to_string(n)
  function string_to_int (line 1095) | function string_to_int(n)
  function string_to_float (line 1107) | function string_to_float(n)
  function load_result (line 1119) | function load_result(filename)
  function save_result (line 1159) | function save_result(filename, obj)
  function main (line 1188) | function main(argc, argv, g)

FILE: apps/helloworld/src/cpp/CppModule.cpp
  type snap::valdi::hello_world (line 5) | namespace snap::valdi::hello_world {
    class CppModule (line 7) | class CppModule : public valdi_core::ModuleFactory {
      method CppModule (line 9) | CppModule() = default;
      method getModulePath (line 12) | Valdi::StringBox getModulePath() final {
      method loadModule (line 16) | Valdi::Value loadModule() final {

FILE: apps/helloworld/src/cpp/DesktopMyNativeModule.cpp
  type snap::valdi::hello_world (line 3) | namespace snap::valdi::hello_world {
    class DesktopMyNativeModule (line 5) | class DesktopMyNativeModule : public valdi_core::ModuleFactory {
      method DesktopMyNativeModule (line 7) | DesktopMyNativeModule() = default;
      method getModulePath (line 10) | Valdi::StringBox getModulePath() final {
      method loadModule (line 14) | Valdi::Value loadModule() final {

FILE: apps/helloworld/src/valdi/hello_world/src/GettingStartedCodelab.tsx
  class GettingStartedCodelab (line 4) | class GettingStartedCodelab extends Component {
    method onRender (line 5) | onRender() {

FILE: apps/helloworld/src/valdi/hello_world/src/HelloWorldApp.tsx
  type ViewModel (line 14) | interface ViewModel {}
  type ComponentContext (line 20) | interface ComponentContext {}
  class App (line 26) | class App extends Component<ViewModel, ComponentContext> {
    method onCreate (line 27) | onCreate(): void {
    method onRender (line 32) | onRender(): void {

FILE: apps/helloworld/src/valdi/hello_world/src/NativeModule.d.ts
  constant APP_NAME (line 8) | const APP_NAME: string;

FILE: apps/managed_context_example/ManagedContextExample.tsx
  constant COMPONENT_HEIGHT (line 11) | const COMPONENT_HEIGHT = 200;
  class InnerComponent (line 13) | class InnerComponent extends Component {
    method onRender (line 14) | onRender(): void {
  function Section (line 42) | function Section(viewModel: { name: string; children?: AnyRenderFunction...
  function Button (line 51) | function Button(viewModel: { title: string; onTap: () => void }) {
  constant DOWNSCALE_RATIO (line 64) | const DOWNSCALE_RATIO = [1, 2, 4, 8];
  type State (line 66) | interface State {
  class App (line 72) | class App extends StatefulComponent<{}, State> {
    method onRender (line 78) | onRender(): void {
    method getComponentSize (line 135) | private getComponentSize(): [number, number] {
    method doRasterize (line 141) | private async doRasterize(): Promise<Asset> {

FILE: apps/navigation_example/NavigationExample.tsx
  type PageButtonViewModel (line 12) | interface PageButtonViewModel {
  class PageButton (line 17) | class PageButton extends Component<PageButtonViewModel> {
    method onRender (line 18) | onRender(): void {
  function PageBackground (line 36) | function PageBackground(viewModel: { children?: AnyRenderFunction | void...
  class Page1 (line 43) | class Page1 extends NavigationPageComponent<{}> {
    method onRender (line 44) | onRender(): void {
  class Page2 (line 57) | class Page2 extends NavigationPageComponent<{}> {
    method onRender (line 58) | onRender(): void {
  class Page3 (line 71) | class Page3 extends NavigationPageComponent<{}> {
    method onRender (line 72) | onRender(): void {
    method renderChildren (line 76) | private renderChildren() {
  class App (line 92) | class App extends Component {
    method onRender (line 93) | onRender(): void {
    method renderButtons (line 103) | private renderButtons(navigationController: NavigationController): void {
    method presentPage (line 109) | private presentPage(
    method renderButton (line 117) | private renderButton(

FILE: apps/valdi_gpt/src/valdi/ai_service/src/AiService.ts
  type GptRole (line 1) | enum GptRole {
  type GptMessage (line 7) | interface GptMessage {
  type AiService (line 12) | interface AiService {

FILE: apps/valdi_gpt/src/valdi/ai_service/src/OpenAi.ts
  constant OPENAI_MODEL (line 4) | const OPENAI_MODEL = 'gpt-4o-mini';
  constant OPENAI_API_KEY (line 5) | const OPENAI_API_KEY = 'YOUR_API_KEY_HERE';
  class OpenAi (line 15) | class OpenAi implements AiService {
    method addSystemPrompt (line 19) | public addSystemPrompt(message: string): void {
    method getResponse (line 26) | public async getResponse(messages: GptMessage[]): Promise<string> {

FILE: apps/valdi_gpt/src/valdi/conversation/src/Conversation.tsx
  type ConversationViewModel (line 7) | interface ConversationViewModel {}
  type ConversationContext (line 9) | interface ConversationContext {}
  type ConversationState (line 11) | interface ConversationState {
  class Conversation (line 16) | class Conversation extends StatefulComponent<ConversationViewModel, Conv...
    method onCreate (line 19) | onCreate(): void {
    method onRender (line 27) | onRender(): void {

FILE: apps/valdi_gpt/src/valdi/conversation/src/InputBar.tsx
  type InputBarViewModel (line 6) | interface InputBarViewModel {
  class InputBar (line 10) | class InputBar extends Component<InputBarViewModel> {
    method onRender (line 13) | onRender(): void {

FILE: apps/valdi_gpt/src/valdi/conversation/src/Message.tsx
  type MesssageViewModel (line 6) | interface MesssageViewModel {
  class Message (line 11) | class Message extends Component<MesssageViewModel> {
    method onRender (line 12) | onRender(): void {

FILE: apps/valdi_gpt/src/valdi/conversation/test/Conversation.spec.tsx
  class TestAiService (line 9) | class TestAiService implements AiService {
    method addSystemPrompt (line 12) | addSystemPrompt(message: string): void {}
    method getResponse (line 14) | getResponse(messages: GptMessage[]): Promise<string> {
  function renderRoot (line 85) | function renderRoot(driver: IComponentTestDriver, context = mockContext(...
  function mockContext (line 99) | function mockContext(): ConversationContext {

FILE: apps/valdi_gpt/src/valdi/valdi_gpt/src/ValdiGptApp.tsx
  type ValdiGptAppViewModel (line 10) | interface ValdiGptAppViewModel {}
  type ValdiGptAppContext (line 16) | interface ValdiGptAppContext {}
  class ValdiGptApp (line 22) | class ValdiGptApp extends Component<ValdiGptAppViewModel, ValdiGptAppCon...
    method onRender (line 23) | onRender(): void {

FILE: apps/valdi_gpt/src/valdi/valdi_gpt/src/types/Long.d.ts
  class Long (line 9) | class Long {

FILE: apps/valdi_gpt/web_demo/src/App.js
  class ValdiGPTDemo (line 12) | class ValdiGPTDemo extends React.Component {
    method constructor (line 13) | constructor(props) {
    method componentDidMount (line 18) | componentDidMount() {
    method render (line 31) | render() {

FILE: compiler/companion/remotedebug-ios-webkit-adapter/src/adapters/adapter.ts
  class Adapter (line 14) | class Adapter<TargetType extends AdapterTarget> extends EventEmitter {
    method constructor (line 24) | constructor(
    method id (line 55) | public get id(): string {
    method start (line 60) | public async start(): Promise<any> {
    method stop (line 72) | public stop(): void {
    method closeConnectionTo (line 85) | public closeConnectionTo(url: string): void {
    method getTargets (line 94) | public getTargets(metadata?: any): Promise<ITarget[]> {
    method connectTo (line 134) | public connectTo(targetId: string, wsFrom: WebSocket): TargetType | un...
    method forwardTo (line 177) | public forwardTo(targetId: string, message: string): void {
    method forceRefresh (line 187) | public forceRefresh() {
    method setTargetInfo (line 200) | protected setTargetInfo(t: ITarget, metadata?: any): ITarget {
    method timeout (line 233) | timeout(ms: number) {
    method refreshProcess (line 238) | protected async refreshProcess(child: ChildProcess, path: string, args...
    method spawnProcess (line 251) | protected spawnProcess(path: string, args: string[]): Promise<ChildPro...

FILE: compiler/companion/remotedebug-ios-webkit-adapter/src/adapters/adapterCollection.ts
  class AdapterCollection (line 11) | class AdapterCollection<TargetType extends AdapterTarget> extends Adapte...
    method constructor (line 14) | constructor(
    method start (line 25) | public start(): Promise<any> {
    method stop (line 37) | public stop(): void {
    method forceRefresh (line 45) | public forceRefresh() {
    method getTargets (line 53) | public getTargets(metadata?: any): Promise<ITarget[]> {
    method connectTo (line 77) | public connectTo(url: string, wsFrom: WebSocket): TargetType | undefin...
    method closeConnectionTo (line 89) | public closeConnectionTo(url: string): void {
    method forwardTo (line 97) | public forwardTo(url: string, message: string): void {
    method getWebSocketId (line 106) | private getWebSocketId(url: string): { adapterId: string; targetId: st...

FILE: compiler/companion/remotedebug-ios-webkit-adapter/src/adapters/adapterInterfaces.ts
  type IDeviceTarget (line 5) | interface IDeviceTarget {
  type ITarget (line 12) | interface ITarget {
  type IAdapterOptions (line 26) | interface IAdapterOptions {
  type IIOSDeviceTarget (line 35) | interface IIOSDeviceTarget extends IDeviceTarget {}
  type IIOSProxySettings (line 37) | interface IIOSProxySettings {
  type IAndroidDeviceTarget (line 43) | interface IAndroidDeviceTarget extends IDeviceTarget {}

FILE: compiler/companion/remotedebug-ios-webkit-adapter/src/adapters/androidAdapter.ts
  type AndroidDevice (line 14) | type AndroidDevice = { deviceId: string; endpoint: string };
  class AndroidAdapter (line 16) | class AndroidAdapter extends AdapterCollection<AndroidTarget> {
    method constructor (line 20) | constructor(id: string, socket: string) {
    method updateKnownDevices (line 25) | public updateKnownDevices(devices: AndroidDevice[]) {
    method getTargets (line 29) | public getTargets(): Promise<ITarget[]> {
    method connectTo (line 101) | public connectTo(url: string, wsFrom: WebSocket): AndroidTarget | unde...
    method getProtocolFor (line 116) | private getProtocolFor(version: string, target: AndroidTarget): IOSPro...

FILE: compiler/companion/remotedebug-ios-webkit-adapter/src/adapters/hermesAdapter.ts
  type HermesDevice (line 13) | type HermesDevice = { port: number };
  function promiseWithTimeout (line 15) | function promiseWithTimeout<T>(
  class HermesAdapter (line 28) | class HermesAdapter extends AdapterCollection<AndroidTarget> {
    method constructor (line 31) | constructor(id: string, socket: string) {
    method targetClose (line 36) | private targetClose(port: number) {
    method updateKnownDevices (line 47) | public updateKnownDevices(devices: HermesDevice[]) {
    method getTargetsOnDevice (line 73) | private getTargetsOnDevice(device: AndroidTarget, port: number): Promi...
    method getTargets (line 107) | public getTargets(): Promise<ITarget[]> {
    method connectTo (line 168) | public connectTo(url: string, wsFrom: WebSocket): AndroidTarget | unde...
    method setProtocolFor (line 178) | private setProtocolFor(version: string, target: AndroidTarget): Hermes...

FILE: compiler/companion/remotedebug-ios-webkit-adapter/src/adapters/iosAdapter.ts
  class IOSAdapter (line 23) | class IOSAdapter extends AdapterCollection<IOSTarget> {
    method constructor (line 27) | constructor(id: string, socket: string, proxySettings: IIOSProxySettin...
    method getTargets (line 43) | public getTargets(): Promise<ITarget[]> {
    method connectTo (line 103) | public connectTo(url: string, wsFrom: WebSocket): IOSTarget | undefined {
    method closeConnectionTo (line 118) | public closeConnectionTo(url: string): void {
    method getProxySettings (line 121) | public static async getProxySettings({
    method getProxySimulatorSocketString (line 154) | private static async getProxySimulatorSocketString(
    method getProxyPath (line 162) | private static getProxyPath(): Promise<string> {
    method getProtocolFor (line 198) | private getProtocolFor(version: string, target: IOSTarget): IOSProtocol {

FILE: compiler/companion/remotedebug-ios-webkit-adapter/src/adapters/testAdapter.ts
  class TestAdapter (line 11) | class TestAdapter extends Adapter<IOSTarget> {
    method constructor (line 14) | constructor(id: string, proxyUrl: string) {
    method getTargets (line 20) | public getTargets(): Promise<ITarget[]> {

FILE: compiler/companion/remotedebug-ios-webkit-adapter/src/adapters/universalAdapter.ts
  class UniversalAdapter (line 11) | class UniversalAdapter extends EventEmitter {
    method constructor (line 12) | constructor(private adapters: Adapter<any>[]) {
    method getTargets (line 21) | public async getTargets(): Promise<ITarget[]> {
    method connectTo (line 30) | public connectTo(url: string, wsFrom: WebSocket): AdapterTarget | unde...
    method closeConnectionTo (line 41) | public closeConnectionTo(url: string): void {
    method start (line 47) | public async start() {
    method stop (line 53) | public stop() {
    method forwardTo (line 59) | public forwardTo(targetId: string, message: string): void {
    method forceRefresh (line 65) | public forceRefresh() {

FILE: compiler/companion/remotedebug-ios-webkit-adapter/src/iosSimulatorSocketFinder.ts
  class IOSSimulatorSocketFinder (line 3) | class IOSSimulatorSocketFinder {
    method observeSockets (line 9) | public observeSockets(callback: (sockets: string[]) => void) {
    method start (line 13) | public start() {
    method stop (line 17) | public stop() {
    method listKnownSockets (line 22) | public async listKnownSockets(): Promise<string[]> {
    method arraysEqual (line 32) | private arraysEqual<T>(a: Array<T>, b: Array<T>) {
    method updateKnownSockets (line 43) | private updateKnownSockets(knownSockets: string[]) {
    method scheduleTick (line 59) | private scheduleTick() {
    method tick (line 65) | private tick() {

FILE: compiler/companion/remotedebug-ios-webkit-adapter/src/logger.ts
  class LoggerUtil (line 7) | class LoggerUtil {
    method constructor (line 9) | constructor() {
    method log (line 12) | public log(msg: string): void {
    method error (line 16) | public error(msg: string): void {

FILE: compiler/companion/remotedebug-ios-webkit-adapter/src/protocols/androidTarget.ts
  class AndroidTarget (line 13) | class AndroidTarget extends EventEmitter implements AdapterTarget {
    method constructor (line 30) | constructor(targetId: string, data?: ITarget) {
    method data (line 45) | public get data(): ITarget {
    method targetBased (line 49) | public set targetBased(isTargetBased: boolean) {
    method targetId (line 53) | public set targetId(targetId: string) {
    method kill (line 57) | public kill() {
    method connectTo (line 61) | public connectTo(url: string, wsFrom: WebSocket): void {
    method directConnectTo (line 70) | public directConnectTo(url: string): void {
    method forward (line 103) | public forward(message: string): void {
    method updateClient (line 112) | public updateClient(wsFrom: WebSocket): void {
    method addMessageFilter (line 120) | public addMessageFilter(method: string, filter: (msg: any) => Promise<...
    method callTarget (line 128) | public callTarget(method: string, params: any): Promise<any> {
    method fireEventToTools (line 141) | public fireEventToTools(method: string, params: any): void {
    method fireResultToTools (line 150) | public fireResultToTools(id: number, params: any): void {
    method replyWithEmpty (line 159) | public replyWithEmpty(msg: any): Promise<any> {
    method onMessageFromTools (line 164) | private onMessageFromTools(rawMessage: string): void {
    method receivedDataFromTarget (line 201) | private receivedDataFromTarget(data: Uint8Array) {
    method processBuffer (line 214) | private processBuffer() {
    method onMessageFromTarget (line 240) | private onMessageFromTarget(rawMessage: string): void {
    method sendToTools (line 323) | private sendToTools(rawMessage: string): void {
    method sendToTarget (line 332) | private sendToTarget(rawMessage: string): void {
    method isSocketConnected (line 374) | private isSocketConnected(ws: WebSocket): boolean {

FILE: compiler/companion/remotedebug-ios-webkit-adapter/src/protocols/hermes/hermes.ts
  class HermesProtocol (line 10) | class HermesProtocol extends ProtocolAdapter {
    method constructor (line 15) | constructor(target: AdapterTarget, version: String) {
    method callFunctionOn (line 36) | private callFunctionOn(msg: any): Promise<any> {
    method onRuntimeEnable (line 46) | private onRuntimeEnable(msg: any): Promise<any> {
    method onDidRuntimeEnable (line 50) | private onDidRuntimeEnable(msg: any): Promise<any> {
    method onTargetRunIfWaitingForDebugger (line 55) | private onTargetRunIfWaitingForDebugger(msg: any): Promise<any> {
    method onScriptParsed (line 66) | private onScriptParsed(msg: any): Promise<any> {

FILE: compiler/companion/remotedebug-ios-webkit-adapter/src/protocols/ios/ios.ts
  type IRange (line 13) | interface IRange {
  type IDisabledStyle (line 20) | interface IDisabledStyle {
  method constructor (line 41) | constructor(target: AdapterTarget) {
  method onDomGetDocument (line 165) | private onDomGetDocument(): void {
  method onSetStyleTexts (line 170) | private onSetStyleTexts(msg: any): Promise<any> {
  method compareRanges (line 228) | private compareRanges(rangeLeft: any, rangeRight: any) {
  method onGetMatchedStylesForNode (line 237) | private onGetMatchedStylesForNode(msg: any): Promise<any> {
  method onCanEmulate (line 243) | private onCanEmulate(msg: any): Promise<any> {
  method onGetPlatformFontsForNode (line 251) | private onGetPlatformFontsForNode(msg: any): Promise<any> {
  method onGetBackgroundColors (line 260) | private onGetBackgroundColors(msg: any): Promise<any> {
  method onAddRule (line 269) | private onAddRule(msg: any): Promise<any> {
  method onCanSetScriptSource (line 285) | private onCanSetScriptSource(msg: any): Promise<any> {
  method onSetBlackboxPatterns (line 294) | private onSetBlackboxPatterns(msg: any): Promise<any> {
  method onSetAsyncCallStackDepth (line 301) | private onSetAsyncCallStackDepth(msg: any): Promise<any> {
  method onDebuggerEnable (line 310) | private onDebuggerEnable(msg: any): Promise<any> {
  method onDidDebuggerEnable (line 315) | private onDidDebuggerEnable(msg: any): Promise<any> {
  method onGetMatchedStylesForNodeResult (line 319) | private onGetMatchedStylesForNodeResult(msg: any): Promise<any> {
  method onExecutionContextCreated (line 344) | private onExecutionContextCreated(msg: any): Promise<any> {
  method onEvaluate (line 366) | private onEvaluate(msg: any): Promise<any> {
  method onRuntimeOnCompileScript (line 395) | private onRuntimeOnCompileScript(msg: any): Promise<any> {
  method onRuntimeGetProperties (line 412) | private onRuntimeGetProperties(msg: any): Promise<any> {
  method onRuntimeEnable (line 430) | private onRuntimeEnable(msg: any): Promise<any> {
  method onDidRuntimeEnable (line 434) | private onDidRuntimeEnable(msg: any): Promise<any> {
  method onTargetRunIfWaitingForDebugger (line 439) | private onTargetRunIfWaitingForDebugger(msg: any): Promise<any> {
  method onScriptParsed (line 449) | private onScriptParsed(msg: any): Promise<any> {
  method onDomEnable (line 465) | private onDomEnable(msg: any): Promise<any> {
  method onSetInspectMode (line 470) | private onSetInspectMode(msg: any): Promise<any> {
  method onInspect (line 477) | private onInspect(msg: any): Promise<any> {
  method DOMDebuggerOnGetEventListeners (line 485) | private DOMDebuggerOnGetEventListeners(msg: any): Promise<any> {
  method onPushNodesByBackendIdsToFrontend (line 521) | private onPushNodesByBackendIdsToFrontend(msg: any): Promise<any> {
  method onGetBoxModel (line 551) | private onGetBoxModel(msg: any): Promise<any> {
  method onGetNodeForLocation (line 574) | private onGetNodeForLocation(msg: any): Promise<any> {
  method onStartScreencast (line 588) | private onStartScreencast(msg: any): Promise<any> {
  method onStopScreencast (line 606) | private onStopScreencast(msg: any): Promise<any> {
  method onScreencastFrameAck (line 616) | private onScreencastFrameAck(msg: any): Promise<any> {
  method onGetNavigationHistory (line 626) | private onGetNavigationHistory(msg: any): Promise<any> {
  method onEmulateTouchFromMouseEvent (line 645) | private onEmulateTouchFromMouseEvent(msg: any): Promise<any> {
  method onCanEmulateNetworkConditions (line 693) | private onCanEmulateNetworkConditions(msg: any): Promise<any> {
  method onConsoleMessageAdded (line 701) | private onConsoleMessageAdded(msg: any): Promise<any> {
  method enumerateStyleSheets (line 744) | protected enumerateStyleSheets(): void {
  method mapSelectorList (line 757) | protected mapSelectorList(selectorList : any): void {
  method mapRule (line 761) | protected mapRule(cssRule : any): void {
  method mapStyle (line 773) | protected mapStyle(cssStyle : any, ruleOrigin : any): void {
  method mapCssProperty (line 826) | protected mapCssProperty(cssProperty : any): void {
  method getLineColumnFromIndex (line 843) | private static getLineColumnFromIndex(
  method extractDisabledStyles (line 875) | private static extractDisabledStyles(styleText: string, range: IRange): ...

FILE: compiler/companion/remotedebug-ios-webkit-adapter/src/protocols/ios/ios12.ts
  class IOS12Protocol (line 4) | class IOS12Protocol extends IOS9Protocol {
    method constructor (line 6) | constructor(target: IOSTarget) {
    method onTargetCreated (line 13) | private onTargetCreated(msg: any): Promise<any> {

FILE: compiler/companion/remotedebug-ios-webkit-adapter/src/protocols/ios/ios8.ts
  class IOS8Protocol (line 9) | class IOS8Protocol extends IOSProtocol {
    method constructor (line 11) | constructor(target: IOSTarget) {
    method mapSelectorList (line 25) | protected mapSelectorList (selectorList : any): void {

FILE: compiler/companion/remotedebug-ios-webkit-adapter/src/protocols/ios/ios9.ts
  class IOS9Protocol (line 9) | class IOS9Protocol extends IOSProtocol {
    method constructor (line 11) | constructor(target: AdapterTarget) {
    method mapSelectorList (line 15) | protected mapSelectorList (selectorList : any): void {

FILE: compiler/companion/remotedebug-ios-webkit-adapter/src/protocols/ios/screencast.ts
  class ScreencastSession (line 8) | class ScreencastSession {
    method constructor (line 25) | constructor(target: AdapterTarget, format?: string, quality?: number, ...
    method dispose (line 33) | public dispose(): void {
    method start (line 37) | public start(): void {
    method stop (line 53) | public stop(): void {
    method ackFrame (line 57) | public ackFrame(frameNumber: number): void {
    method recordingLoop (line 61) | private recordingLoop(): void {

FILE: compiler/companion/remotedebug-ios-webkit-adapter/src/protocols/iosTarget.ts
  class IOSTarget (line 12) | class IOSTarget extends EventEmitter implements AdapterTarget {
    method constructor (line 27) | constructor(targetId: string, data?: ITarget) {
    method data (line 42) | public get data(): ITarget {
    method targetBased (line 46) | public set targetBased(isTargetBased: boolean) {
    method targetId (line 50) | public set targetId(targetId: string) {
    method kill (line 54) | public kill() {
    method connectTo (line 60) | public connectTo(url: string, wsFrom: WebSocket): void {
    method forward (line 94) | public forward(message: string): void {
    method updateClient (line 103) | public updateClient(wsFrom: WebSocket): void {
    method addMessageFilter (line 111) | public addMessageFilter(method: string, filter: (msg: any) => Promise<...
    method callTarget (line 119) | public callTarget(method: string, params: any): Promise<any> {
    method fireEventToTools (line 132) | public fireEventToTools(method: string, params: any): void {
    method fireResultToTools (line 141) | public fireResultToTools(id: number, params: any): void {
    method replyWithEmpty (line 150) | public replyWithEmpty(msg: any): Promise<any> {
    method onMessageFromTools (line 155) | private onMessageFromTools(rawMessage: string): void {
    method onMessageFromTarget (line 190) | private onMessageFromTarget(rawMessage: string): void {
    method sendToTools (line 270) | private sendToTools(rawMessage: string): void {
    method sendToTarget (line 279) | private sendToTarget(rawMessage: string): void {
    method isSocketConnected (line 308) | private isSocketConnected(ws: WebSocket): boolean {

FILE: compiler/companion/remotedebug-ios-webkit-adapter/src/protocols/protocol.ts
  class ProtocolAdapter (line 7) | class ProtocolAdapter {
    method constructor (line 10) | constructor(target: AdapterTarget) {

FILE: compiler/companion/remotedebug-ios-webkit-adapter/src/protocols/target.ts
  type AdapterTarget (line 10) | interface AdapterTarget extends EventEmitter {

FILE: compiler/companion/remotedebug-ios-webkit-adapter/src/server.ts
  class ProxyServer (line 23) | class ProxyServer extends EventEmitter {
    method constructor (line 37) | constructor() {
    method updateKnownHermesDevices (line 41) | public updateKnownHermesDevices(devices: HermesDevice[]) {
    method updateKnownAndroidDevices (line 45) | public updateKnownAndroidDevices(devices: AndroidDevice[]) {
    method run (line 49) | public async run(serverPort: number): Promise<number> {
    method stop (line 102) | public stop(): void {
    method startTargetFetcher (line 115) | private startTargetFetcher(): void {
    method stopTargetFetcher (line 132) | private stopTargetFetcher(): void {
    method setupHttpHandlers (line 140) | private setupHttpHandlers(): void {
    method onWSSConnection (line 189) | private onWSSConnection(websocket: ws, req: http.IncomingMessage): void {

FILE: compiler/companion/remotedebug-ios-webkit-adapter/test/helperMocks.ts
  class ProxyServerMock (line 5) | class ProxyServerMock {
  class LoggerMock (line 9) | class LoggerMock {
    method log (line 10) | public log(msg: string): void {}
    method error (line 11) | public error(msg: string): void {}

FILE: compiler/companion/remotedebug-ios-webkit-adapter/test/protocols/target.test.ts
  constant MODULE_UNDER_TEST (line 17) | const MODULE_UNDER_TEST = '../../protocols/target';
  function CreateTarget (line 19) | function CreateTarget(): IOSTarget {
  function setupTargetAndTools (line 34) | function setupTargetAndTools() {

FILE: compiler/companion/src/AST.spec.ts
  type CompiledFile (line 13) | interface CompiledFile {
  function compile (line 18) | function compile(str: string): CompiledFile {

FILE: compiler/companion/src/AST.ts
  type ASTNodeKind (line 11) | type ASTNodeKind = 'interface';
  type Node (line 14) | interface Node {
  type NamedNode (line 19) | interface NamedNode extends Node {
  type Comments (line 23) | interface Comments {
  type EnumMember (line 29) | interface EnumMember extends NamedNode {
  type Enum (line 35) | interface Enum extends NamedNode {
  type FunctionType (line 39) | interface FunctionType {
  type TypeArgument (line 44) | interface TypeArgument {
  type Type (line 48) | interface Type {
  type SuperTypeClause (line 60) | interface SuperTypeClause extends Node {
  type PropertyLikeDeclaration (line 65) | interface PropertyLikeDeclaration extends NamedNode {
  type TypeParameterLikeDeclaration (line 71) | interface TypeParameterLikeDeclaration extends NamedNode {}
  type Interface (line 73) | interface Interface extends NamedNode {
  type Function (line 80) | interface Function extends NamedNode {
  type Variable (line 85) | interface Variable extends NamedNode {
  type TypeReference (line 90) | interface TypeReference {
  type TypeReferences (line 95) | interface TypeReferences {
  function getIdentifierString (line 101) | function getIdentifierString(node: ts.Node): string {
  function parseFunctionType (line 105) | function parseFunctionType(node: ts.SignatureDeclarationBase, references...
  type ResolvedSymbol (line 129) | interface ResolvedSymbol {
  type SymbolGroup (line 135) | interface SymbolGroup {
  function makeResolvedSymbol (line 141) | function makeResolvedSymbol(symbol: ts.Symbol, isTypeParameter: boolean ...
  function resolveSymbolFromTypeName (line 151) | function resolveSymbolFromTypeName(typeName: ts.Type, typeChecker: ts.Ty...
  function resolveSymbol (line 219) | function resolveSymbol(type: ts.TypeNode, typeChecker: ts.TypeChecker): ...
  function resolveTypeReference (line 224) | function resolveTypeReference(
  function parseTypeFromSymbolGroup (line 252) | function parseTypeFromSymbolGroup(
  function parseType (line 306) | function parseType(type: ts.TypeNode | undefined, references: AST.TypeRe...
  function parsePropertyLike (line 406) | function parsePropertyLike(
  type DumpedRootNode (line 444) | interface DumpedRootNode {
  function isExportedSymbolOrHasAnnotation (line 458) | function isExportedSymbolOrHasAnnotation(nodeToDump: NodeToDump, shouldD...
  function hasExportModuleAnnotation (line 473) | function hasExportModuleAnnotation(nodeToDump: NodeToDump): boolean {
  function shouldDumpNodeMember (line 481) | function shouldDumpNodeMember(nodeToDump: NodeToDump, memberNode: ts.Typ...
  function getImportStringLiteralsFromSourceFile (line 498) | function getImportStringLiteralsFromSourceFile(sourceFile: ts.SourceFile...
  function isGlobalScopeAugmentation (line 511) | function isGlobalScopeAugmentation(module: ts.ModuleDeclaration): boolean {
  function containsGlobalScopeAugmentation (line 515) | function containsGlobalScopeAugmentation(sourceFile: ts.SourceFile): boo...
  function isExternalOrCommonJsModule (line 530) | function isExternalOrCommonJsModule(file: ts.SourceFile): boolean {
  function isJsonSourceFile (line 534) | function isJsonSourceFile(file: ts.SourceFile): boolean {
  function isModuleWithStringLiteralName (line 538) | function isModuleWithStringLiteralName(node: ts.Node): node is ts.Module...
  function containsOnlyAmbientModules (line 542) | function containsOnlyAmbientModules(sourceFile: ts.SourceFile): boolean {
  function isFileAffectingGlobalScope (line 551) | function isFileAffectingGlobalScope(sourceFile: ts.SourceFile): boolean {
  function isNonModuleWithAmbiantDeclarations (line 560) | function isNonModuleWithAmbiantDeclarations(sourceFile: ts.SourceFile): ...
  function dumpRootNodes (line 597) | function dumpRootNodes(sourceFile: ts.SourceFile, astReferences: AST.Typ...
  function dumpInterface (line 697) | function dumpInterface(
  function dumpFunction (line 765) | function dumpFunction(node: ts.FunctionDeclaration, references: AST.Type...
  function dumpVariable (line 777) | function dumpVariable(node: ts.VariableStatement, references: AST.TypeRe...
  function dumpEnum (line 792) | function dumpEnum(node: ts.EnumDeclaration): AST.Enum {

FILE: compiler/companion/src/BatchMinifier.ts
  type BatchMinifyResult (line 13) | interface BatchMinifyResult {
  type CommonMinifyOptions (line 19) | type CommonMinifyOptions = terser.MinifyOptions;
  type MinifyOutput (line 21) | interface MinifyOutput {
  type Minifier (line 49) | interface Minifier<MinifyOptionsT> {
  function deepCopy (line 61) | function deepCopy(obj: any): any {

FILE: compiler/companion/src/CodeInstrumentation.ts
  type CodeInstrumentationFileConfig (line 7) | interface CodeInstrumentationFileConfig {
  type CodeInstrumentationResult (line 12) | interface CodeInstrumentationResult {
  class CodeInstrumentation (line 21) | class CodeInstrumentation {
    method constructor (line 25) | private constructor() {
    method getInstance (line 51) | public static getInstance(): CodeInstrumentation {
    method instrumentFiles (line 59) | public instrumentFiles(files: [CodeInstrumentationFileConfig]): AddCod...
    method instrumentFile (line 65) | public instrumentFile(file: CodeInstrumentationFileConfig): CodeInstru...

FILE: compiler/companion/src/CompanionServiceBase.ts
  type ExitKind (line 12) | const enum ExitKind {
  class CompanionServiceBase (line 17) | class CompanionServiceBase {
    method constructor (line 23) | constructor(readonly options: Set<string>) {
    method addEndpoint (line 35) | addEndpoint<Request, Response extends ResponseBody>(
    method start (line 42) | start(): void {
    method processCommand (line 80) | private async processCommand(command: string, body: RequestBody): Prom...
    method processLine (line 89) | private async processLine(l: string): Promise<void> {
    method handleExit (line 112) | protected handleExit(exitKind: ExitKind): void {
    method setupSignals (line 124) | private setupSignals(): void {

FILE: compiler/companion/src/CompilerCompanion.ts
  class CompilerCompanion (line 62) | class CompilerCompanion extends CompanionServiceBase {
    method constructor (line 66) | constructor(options: Set<string>) {
    method addBaseEndpoints (line 85) | private addBaseEndpoints(): void {
    method handleExit (line 313) | protected override handleExit(exitKind: ExitKind): void {

FILE: compiler/companion/src/ConsoleLogTransformer.spec.ts
  function sanitize (line 6) | function sanitize(text: string): string {
  function transform (line 13) | function transform(input: string): string {

FILE: compiler/companion/src/ConsoleLogTransformer.ts
  constant CONSOLE_METHODS (line 32) | const CONSOLE_METHODS = new Set(['log', 'warn', 'error', 'info', 'debug']);
  function isConsoleCall (line 38) | function isConsoleCall(node: ts.CallExpression): boolean {
  function createGuardExpression (line 52) | function createGuardExpression(factory: ts.NodeFactory): ts.Expression {
  function unwrapParenthesizedExpression (line 59) | function unwrapParenthesizedExpression(node: ts.Expression): ts.Expressi...
  function createConsoleLogTransformer (line 71) | function createConsoleLogTransformer(): ts.TransformerFactory<ts.SourceF...

FILE: compiler/companion/src/DebuggingProxy.ts
  type AndroidDevice (line 8) | type AndroidDevice = { deviceId: string; endpoint: string };
  class DebuggingProxy (line 10) | class DebuggingProxy {
    method constructor (line 15) | constructor(private logger: ILogger | undefined) {}
    method start (line 17) | async start() {
    method stop (line 49) | stop() {
    method updateAvailableAndroidDevices (line 54) | updateAvailableAndroidDevices(androidDevices: AndroidDevice[]) {
    method updateAvailableHermesDevices (line 58) | updateAvailableHermesDevices(hermesDevices: HermesDevice[]) {

FILE: compiler/companion/src/GenerateIds.spec.ts
  constant TEST_ID_FILES (line 4) | const TEST_ID_FILES = `

FILE: compiler/companion/src/GenerateIds.ts
  type ObjectiveCFile (line 10) | interface ObjectiveCFile {
  type TypeScriptFile (line 15) | interface TypeScriptFile {
  type GenerateIds (line 20) | interface GenerateIds {
  type IdYaml (line 26) | interface IdYaml {
  type IdsYaml (line 30) | interface IdsYaml {
  type Id (line 34) | interface Id {
  function parseIds (line 41) | function parseIds(moduleName: string, fileContent: string): Id[] {
  function generateHeaderComment (line 66) | function generateHeaderComment(): string {
  function generateAndroidResourceFile (line 73) | function generateAndroidResourceFile(ids: Id[]): string {
  function generateIOSIds (line 88) | function generateIOSIds(ids: Id[], iosHeaderImportPath: string): Objecti...
  function generateTypeScriptIds (line 131) | function generateTypeScriptIds(ids: Id[]): TypeScriptFile {
  function generateIds (line 168) | function generateIds(moduleName: string, iosHeaderImportPath: string, fi...
  function generateIdsFromPath (line 182) | async function generateIdsFromPath(

FILE: compiler/companion/src/GeneratedFileHeader.ts
  class GeneratedFileHeader (line 1) | class GeneratedFileHeader {
    method generateMultilineComment (line 2) | static generateMultilineComment(comment: string): string {

FILE: compiler/companion/src/IWorkspace.d.ts
  type EmitResultEntry (line 10) | interface EmitResultEntry {
  type EmitResult (line 15) | interface EmitResult {
  type GetDiagnosticsResult (line 20) | interface GetDiagnosticsResult {
  type DumpSymbolsWithCommentsResult (line 27) | interface DumpSymbolsWithCommentsResult {
  type OpenFileImportPath (line 32) | interface OpenFileImportPath {
  type OpenFileResult (line 37) | interface OpenFileResult {
  type IWorkspace (line 42) | interface IWorkspace {

FILE: compiler/companion/src/Identifier.ts
  function makeRangeCheck (line 1) | function makeRangeCheck(fromChar: string, toChar: string): (charCode: nu...
  class Identifier (line 12) | class Identifier {
    method constructor (line 15) | constructor(str: string) {
    method toCamelCase (line 41) | toCamelCase(): string {
    method toPascalCase (line 55) | toPascalCase(): string {
    method toSnakeCase (line 59) | toSnakeCase(): string {

FILE: compiler/companion/src/JSXProcessor.spec.ts
  function sanitize (line 7) | function sanitize(text: string): string {
  function compile (line 11) | function compile(text: string, includeSourceMapping?: boolean): string {

FILE: compiler/companion/src/JSXProcessor.ts
  type JSXAttributeValueKind (line 7) | enum JSXAttributeValueKind {
  type JSXAttributeValue (line 13) | interface JSXAttributeValue {
  type JSXAttribute (line 18) | interface JSXAttribute {
  type JSXElement (line 24) | interface JSXElement {
  type JSXOutputState (line 32) | interface JSXOutputState {
  type JSXAttributeStatements (line 39) | interface JSXAttributeStatements {
  type Slotted (line 51) | interface Slotted {
  type JSXNodeKind (line 56) | const enum JSXNodeKind {
  type JSXNodeOutput (line 63) | interface JSXNodeOutput {
  function createStringLiteral (line 72) | function createStringLiteral(value: string, transformContext: ts.Transfo...
  class JSXProcessor (line 78) | class JSXProcessor {
    method constructor (line 79) | constructor(readonly logger?: ILogger) {}
    method makeTransformers (line 81) | makeTransformers(typeChecker: ts.TypeChecker): ts.TransformerFactory<t...
    method isAlphaNum (line 92) | private isAlphaNum(char: number): boolean {
    method toPascalCase (line 108) | private toPascalCase(key: string): string {
    method resolveJSXAttributeStatements (line 123) | private resolveJSXAttributeStatements(
    method makeIdentifier (line 201) | private makeIdentifier(prefix: string, type: string, output: JSXOutput...
    method getSlotValueExpr (line 210) | private getSlotValueExpr(
    method toStatement (line 228) | private toStatement(node: ts.Node, transformContext: ts.Transformation...
    method toExpression (line 237) | private toExpression(node: ts.Node, transformContext: ts.Transformatio...
    method toBlock (line 260) | private toBlock(statements: ts.Statement[], transformContext: ts.Trans...
    method mergeStatements (line 268) | private mergeStatements(statements: ts.Statement[], transformContext: ...
    method outputJSXChildren (line 276) | private outputJSXChildren(
    method createRendererCallExpr (line 299) | private createRendererCallExpr(
    method createRendererCall (line 311) | private createRendererCall(
    method isCompilerIntrinsicCall (line 326) | private isCompilerIntrinsicCall(node: ts.Node, intrisicCallName: strin...
    method isNamedSlotsExpression (line 338) | private isNamedSlotsExpression(expression: ts.Node): expression is ts....
    method isUnnamedSlotsExpression (line 342) | private isUnnamedSlotsExpression(expression: ts.Node): expression is t...
    method outputSlotExpression (line 346) | private outputSlotExpression(
    method isOptimizableNamedSlots (line 365) | private isOptimizableNamedSlots(
    method toStringLiteral (line 380) | private toStringLiteral(node: ts.PropertyName, transformContext: ts.Tr...
    method outputNamedSlotsExpression (line 391) | private outputNamedSlotsExpression(
    method getSingleJsxExpression (line 428) | private getSingleJsxExpression(children: ts.JsxChild[]): ts.Expression...
    method outputSlot (line 441) | private outputSlot(
    method createConstVariable (line 476) | private createConstVariable(
    method appendInitializedVariable (line 486) | private appendInitializedVariable(
    method resolveSetAttributeCall (line 500) | private resolveSetAttributeCall(node: ts.Expression, output: JSXOutput...
    method outputElementInner (line 518) | private outputElementInner(
    method outputComponentViewModelProperties (line 561) | private outputComponentViewModelProperties(
    method insertChildrenToUnnamedSlot (line 591) | private insertChildrenToUnnamedSlot(children: ts.JsxChild[], slotteds:...
    method isJsxText (line 612) | private isJsxText(child: ts.JsxChild): boolean {
    method isEmptyJsxExpression (line 627) | private isEmptyJsxExpression(child: ts.JsxChild): boolean {
    method ensureImplicitSlottedNotUsedWithExplicit (line 639) | private ensureImplicitSlottedNotUsedWithExplicit(
    method outputComponentChildren (line 652) | private outputComponentChildren(
    method toParametersArray (line 706) | private toParametersArray(
    method outputRenderSlot (line 718) | private outputRenderSlot(jsxElement: JSXElement, transformContext: ts....
    method getJsxNodeKind (line 761) | private getJsxNodeKind(tag: ts.JsxTagNameExpression, nodeTypeStr: stri...
    method outputJSXElement (line 791) | private outputJSXElement(
    method outputJSXSlot (line 853) | private outputJSXSlot(
    method throwInvalidJSXFunctionComponentAttribute (line 868) | private throwInvalidJSXFunctionComponentAttribute(jsxElement: JSXEleme...
    method outputJSXFunctionComponent (line 872) | private outputJSXFunctionComponent(
    method outputJSXComponent (line 955) | private outputJSXComponent(
    method outputJSX (line 1049) | private outputJSX(
    method findDeclarationsInsertionIndex (line 1107) | private findDeclarationsInsertionIndex(previousStatements: ts.NodeArra...
    method injectDeclarations (line 1123) | private injectDeclarations(
    method processJSXElement (line 1151) | private processJSXElement(
    method processSelfClosingJSXElement (line 1176) | private processSelfClosingJSXElement(
    method logNode (line 1196) | private logNode(node: ts.Node, state: JSXOutputState) {
    method flattenBlocks (line 1207) | private flattenBlocks(
    method doUpdateSourceFileNode (line 1236) | private doUpdateSourceFileNode(
    method transformSourceFile (line 1254) | private transformSourceFile(
    method transformNode (line 1273) | private transformNode(
    method transformNodeGeneric (line 1338) | private transformNodeGeneric(
    method onError (line 1360) | private onError(node: ts.Node, message: string): never {
    method log (line 1365) | private log(node: ts.Node, message: string) {
    method onUnexpectedNodeKind (line 1370) | private onUnexpectedNodeKind(node: ts.Node) {
    method checkNodeKind (line 1374) | private checkNodeKind(node: ts.Node, expectedKind: ts.SyntaxKind) {
    method isExpressionNonStaticMethodDeclaration (line 1380) | private isExpressionNonStaticMethodDeclaration(expression: ts.Expressi...
    method getJSXAttributeValue (line 1390) | private getJSXAttributeValue(value: ts.Node, output: JSXOutputState): ...
    method extractJSXAttribute (line 1430) | private extractJSXAttribute(
    method extractJSXSpreadAttribute (line 1469) | private extractJSXSpreadAttribute(node: ts.Node): JSXAttributeValue {
    method extractJSXAttributes (line 1482) | private extractJSXAttributes(
    method createFromFile (line 1514) | static createFromFile(fileName: string, fileContent: string, includeSo...
  class JSXFileProcessor (line 1519) | class JSXFileProcessor extends JSXProcessor {
    method constructor (line 1524) | constructor(fileName: string, fileContent: string, includeSourceMappin...
    method process (line 1531) | process(): string {

FILE: compiler/companion/src/ObjectiveCWriter.ts
  class ObjectiveCImports (line 3) | class ObjectiveCImports implements IOutputWriter {
    method append (line 7) | append(importPath: string): boolean {
    method content (line 18) | content(): string {
  class ObjectiveCWriter (line 29) | class ObjectiveCWriter extends OutputWriter {
    method appendImport (line 33) | appendImport(importPath: string): boolean {

FILE: compiler/companion/src/OutputWriter.ts
  function makeIndent (line 1) | function makeIndent(indent: number): string {
  type IOutputWriter (line 11) | interface IOutputWriter {
  type OutputWriterContent (line 15) | type OutputWriterContent = string | IOutputWriter;
  function outputContent (line 17) | function outputContent(contents: OutputWriterContent[]): string {
  class IndentedContent (line 31) | class IndentedContent implements IOutputWriter {
    method constructor (line 32) | constructor(readonly written: OutputWriterContent[], readonly indentat...
    method content (line 34) | content(): string {
  type Indentation (line 43) | interface Indentation {
  class OutputWriter (line 48) | class OutputWriter implements IOutputWriter {
    method writtenLength (line 52) | get writtenLength(): number {
    method append (line 56) | append(str: string | IOutputWriter) {
    method content (line 60) | content(): string {
    method beginIndent (line 64) | beginIndent(indentation: string) {
    method endIndent (line 70) | endIndent() {
    method withIndentation (line 82) | withIndentation(indentation: string, cb: () => void) {

FILE: compiler/companion/src/SourceMapUtils.ts
  constant SOURCE_MAP_PREFIX (line 4) | const SOURCE_MAP_PREFIX = `//# sourceMappingURL=data:application/json;ba...
  function getRawSourceMap (line 6) | function getRawSourceMap(fileContent: string): SourceMapModule.RawSource...
  function getSourceMap (line 17) | function getSourceMap(fileContent: string): SourceMapModule.SourceMapCon...
  function insertGeneratedPosition (line 25) | function insertGeneratedPosition(line: number, column: number, generated...
  function mergeSourceMaps (line 34) | function mergeSourceMaps(originalFile: string, generatedFile: string): s...

FILE: compiler/companion/src/TSUtils.spec.ts
  type CompiledFile (line 6) | interface CompiledFile {
  function compile (line 12) | function compile(str: string): CompiledFile {

FILE: compiler/companion/src/TSUtils.ts
  function isExpressionNode (line 3) | function isExpressionNode(node: ts.Node): node is ts.Expression {
  function isInExpressionContext (line 63) | function isInExpressionContext(node: ts.Node): boolean {
  function isJSXTagName (line 122) | function isJSXTagName(node: ts.Node) {
  type NodeComments (line 134) | interface NodeComments {
  function getNodeComments (line 140) | function getNodeComments(node: ts.Node): NodeComments | undefined {
  type NodeToDump (line 172) | interface NodeToDump {
  function isNodeExported (line 177) | function isNodeExported(node: ts.Node): boolean {
  function getRootNodesToDump (line 183) | function getRootNodesToDump(
  function findNode (line 203) | function findNode(
  type SymbolType (line 231) | const enum SymbolType {
  type SymbolObjectInfo (line 242) | interface SymbolObjectInfo {
  type ResolvedSymbol (line 248) | interface ResolvedSymbol {
  function symbolObjectInfoEquals (line 253) | function symbolObjectInfoEquals(left: SymbolObjectInfo | undefined, righ...
  function appendResolvedSymbolIfNeeded (line 261) | function appendResolvedSymbolIfNeeded(resolvedSymbol: ResolvedSymbol, ou...
  function getResolvedSymbolForType (line 275) | function getResolvedSymbolForType(type: ts.Type): ResolvedSymbol[] {
  function resolvedSymbolsOfExpression (line 332) | function resolvedSymbolsOfExpression(expression: ts.Expression, typeChec...
  type ResolvedType (line 337) | interface ResolvedType {
  function getSyntaxKindString (line 344) | function getSyntaxKindString(syntaxKind: ts.SyntaxKind): string {
  constant MAX_NODE_DEBUG_LENGTH (line 348) | const MAX_NODE_DEBUG_LENGTH = 50;
  function getNodeDebugDescription (line 350) | function getNodeDebugDescription(node: ts.Node): string {
  function resolveTypeOfExpression (line 364) | function resolveTypeOfExpression(expression: ts.Expression, typeChecker:...
  class Transpiler (line 398) | class Transpiler {
    method constructor (line 406) | constructor(input: string, transpileOptions: ts.TranspileOptions) {
    method transpile (line 463) | transpile(transformers?: ts.CustomTransformers): ts.TranspileOutput {
  type OuterExpressionKinds (line 481) | const enum OuterExpressionKinds {
  type OuterExpression (line 493) | type OuterExpression =
  function isOuterExpression (line 500) | function isOuterExpression(node: ts.Node, kinds = OuterExpressionKinds.A...
  function skipOuterExpressions (line 515) | function skipOuterExpressions(node: ts.Node, kinds = OuterExpressionKind...
  function skipParentheses (line 522) | function skipParentheses(node: ts.Node, excludeJSDocTypeAssertions?: boo...
  function isSuperCall (line 526) | function isSuperCall(n: ts.Node): n is ts.SuperCall {
  function getSuperCallFromStatement (line 532) | function getSuperCallFromStatement(statement: ts.Statement): ts.Expressi...
  function findSuperStatementIndex (line 541) | function findSuperStatementIndex(
  function statementHasSuperCall (line 557) | function statementHasSuperCall(node: ts.Node): boolean {

FILE: compiler/companion/src/Workspace.ts
  type OpenedFile (line 31) | interface OpenedFile {
  type EmitResultEntry (line 36) | interface EmitResultEntry {
  type EmitResult (line 41) | interface EmitResult {
  type GetDiagnosticsResult (line 46) | interface GetDiagnosticsResult {
  type PendingFileToOpen (line 53) | interface PendingFileToOpen {
  function mergeCustomTransformers (line 59) | function mergeCustomTransformers(
  class ProjectListener (line 87) | class ProjectListener implements IProjectListener {
    method constructor (line 89) | constructor(private readonly logger: ILogger) {}
    method onProgramWillChange (line 91) | onProgramWillChange(): void {
    method onProgramChanged (line 96) | onProgramChanged(): void {
    method onCompilerOptionsResolved (line 101) | onCompilerOptionsResolved(): void {}
    method onFileContentLoaded (line 102) | onFileContentLoaded(path: string): void {}
    method onSourceFileCreated (line 103) | onSourceFileCreated(path: string): void {}
    method onSourceFileInvalidated (line 104) | onSourceFileInvalidated(path: string): void {}
  class Workspace (line 107) | class Workspace implements IWorkspace {
    method constructor (line 117) | constructor(
    method initialize (line 138) | initialize(): void {
    method destroy (line 158) | destroy(): void {
    method addSourceFileAtPath (line 162) | addSourceFileAtPath(fileName: string) {
    method openFile (line 166) | async openFile(fileName: string): Promise<OpenFileResult> {
    method doOpenFile (line 178) | private doOpenFile(fileName: string): OpenFileResult {
    method openQueuedFiles (line 193) | private openQueuedFiles(): void {
    method getOpenedFile (line 205) | getOpenedFile(fileName: string): OpenedFile {
    method registerInMemoryFile (line 214) | registerInMemoryFile(fileName: string, fileContent: string): void {
    method registerDiskFile (line 220) | registerDiskFile(fileName: string, absoluteDiskPath: string): void {
    method requiresTSXProcessor (line 226) | static requiresTSXProcessor(fileName: string): boolean {
    method doEmitFile (line 230) | doEmitFile(
    method emitFile (line 274) | async emitFile(fileName: string): Promise<EmitResult> {
    method transformDiagnostic (line 278) | transformDiagnostic(project: Project, original: ts.DiagnosticWithLocat...
    method getLocationOfPositionInFile (line 318) | getLocationOfPositionInFile(file: ts.SourceFile, position: number): Lo...
    method doGetDiagnostics (line 324) | private doGetDiagnostics(openedFile: OpenedFile, syntactic: boolean, o...
    method makeDiagnostic (line 342) | private makeDiagnostic(sourceFile: ts.SourceFile, node: ts.Node, text:...
    method validateImports (line 350) | private validateImports(openedFile: OpenedFile, output: Diagnostic[]):...
    method getDiagnostics (line 369) | async getDiagnostics(fileName: string): Promise<GetDiagnosticsResult> {
    method getDiagnosticsSync (line 373) | getDiagnosticsSync(fileName: string): GetDiagnosticsResult {
    method dumpSymbolsWithComments (line 415) | async dumpSymbolsWithComments(fileName: string): Promise<DumpedSymbols...
    method getInterfaceAST (line 433) | async getInterfaceAST(fileName: string, position: number): Promise<Dum...
    method getFunctionAST (line 453) | async getFunctionAST(fileName: string, position: number): Promise<Dump...
    method getEnumAST (line 473) | async getEnumAST(fileName: string, position: number): Promise<DumpEnum...
    method resolveImportPath (line 487) | resolveImportPath(fromPath: string, toPath: string): string {
    method getFileNameForImportPath (line 491) | getFileNameForImportPath(importPath: string): string {

FILE: compiler/companion/src/WorkspaceStore.ts
  type CreateWorkspaceResult (line 6) | interface CreateWorkspaceResult {
  type StoreEntry (line 11) | interface StoreEntry {
  class WorkspaceStore (line 16) | class WorkspaceStore {
    method constructor (line 20) | constructor(
    method createWorkspace (line 26) | createWorkspace(): CreateWorkspaceResult {
    method destroyWorkspace (line 41) | destroyWorkspace(workspaceId: number): boolean {
    method destroyAllWorkspaces (line 51) | destroyAllWorkspaces(): void {
    method getEntry (line 56) | private getEntry(workspaceId: number): StoreEntry {
    method getWorkspace (line 68) | getWorkspace(workspaceId: number): IWorkspace {
    method getInitializedWorkspace (line 72) | getInitializedWorkspace(workspaceId: number): IWorkspace {
    method getUncachedWorkspace (line 80) | getUncachedWorkspace(workspaceId: number): Workspace {

FILE: compiler/companion/src/ZombieKiller.ts
  class ZombieKiller (line 10) | class ZombieKiller {
    method constructor (line 11) | constructor(private shutdownCallback: () => void) {}
    method stopAndNotify (line 15) | private stopAndNotify() {
    method stop (line 20) | stop() {
    method start (line 25) | start() {

FILE: compiler/companion/src/cache/CachingWorkspace.spec.ts
  type TestWorkspaceResponseHandler (line 14) | interface TestWorkspaceResponseHandler {
  class TestWorkspace (line 21) | class TestWorkspace implements IWorkspace {
    method initialize (line 31) | initialize(): void {}
    method destroy (line 33) | destroy(): void {}
    method registerInMemoryFile (line 35) | registerInMemoryFile(fileName: string, fileContent: string): void {
    method registerDiskFile (line 39) | registerDiskFile(fileName: string, absoluteDiskPath: string): void {
    method resolveImportPath (line 43) | resolveImportPath(fromPath: string, toPath: string): string {
    method getFileNameForImportPath (line 47) | getFileNameForImportPath(importPath: string): string {
    method appendNextRequestHandler (line 51) | appendNextRequestHandler<T>(method: string, fileName: string, position...
    method handleRequest (line 55) | private async handleRequest<T>(method: string, fileName: string, posit...
    method openFile (line 72) | openFile(fileName: string): Promise<OpenFileResult> {
    method emitFile (line 76) | emitFile(fileName: string): Promise<EmitResult> {
    method getDiagnostics (line 80) | getDiagnostics(fileName: string): Promise<GetDiagnosticsResult> {
    method dumpSymbolsWithComments (line 84) | dumpSymbolsWithComments(fileName: string): Promise<DumpedSymbolsWithCo...
    method getInterfaceAST (line 88) | getInterfaceAST(fileName: string, position: number): Promise<DumpedInt...
    method getEnumAST (line 92) | getEnumAST(fileName: string, position: number): Promise<DumpEnumRespon...
    method getFunctionAST (line 96) | getFunctionAST(fileName: string, position: number): Promise<DumpFuncti...
  type TestCompilationCacheEntry (line 101) | interface TestCompilationCacheEntry {
  class TestCompilationCache (line 107) | class TestCompilationCache implements ICompilationCache {
    method doResolveEntry (line 110) | private doResolveEntry(path: string, container: string, hash: string):...
    method close (line 128) | close(): void {}
    method evictEntriesBeforeTime (line 130) | evictEntriesBeforeTime(lastUsedTimestamp: number): void {}
    method getCachedEntry (line 132) | async getCachedEntry(path: string, container: string, hash: string): P...
    method setCachedEntry (line 136) | async setCachedEntry(path: string, container: string, hash: string, da...

FILE: compiler/companion/src/cache/CachingWorkspace.ts
  type ImportPaths (line 19) | interface ImportPaths {
  type CachedImportPaths (line 25) | interface CachedImportPaths {
  type CachedFileInfo (line 30) | interface CachedFileInfo {
  type RecursiveHashEntry (line 39) | interface RecursiveHashEntry {
  type OnCacheMissResult (line 45) | interface OnCacheMissResult<T> {
  type CacheKey (line 50) | const enum CacheKey {
  constant CACHE_TTL_MS (line 60) | const CACHE_TTL_MS = 1000 * 60 * 60 * 24 * 30;
  class CachingWorkspace (line 62) | class CachingWorkspace implements IWorkspace {
    method initialized (line 63) | get initialized(): boolean {
    method workspaceRoot (line 67) | get workspaceRoot(): string {
    method constructor (line 75) | constructor(
    method initialize (line 83) | initialize(): void {
    method destroy (line 88) | destroy(): void {
    method measureAndLog (line 93) | private async measureAndLog<T>(command: string, path: string, work: ()...
    method invalidateFileInfo (line 106) | private invalidateFileInfo(absolutePath: string): void {
    method registerInMemoryFile (line 119) | registerInMemoryFile(fileName: string, fileContent: string): void {
    method registerDiskFile (line 128) | registerDiskFile(fileName: string, absoluteDiskCachePath: string): void {
    method openFile (line 137) | async openFile(fileName: string): Promise<OpenFileResult> {
    method emitFile (line 149) | async emitFile(fileName: string): Promise<EmitResult> {
    method getDiagnostics (line 155) | async getDiagnostics(fileName: string): Promise<GetDiagnosticsResult> {
    method dumpSymbolsWithComments (line 164) | async dumpSymbolsWithComments(fileName: string): Promise<DumpedSymbols...
    method getInterfaceAST (line 170) | async getInterfaceAST(fileName: string, position: number): Promise<Dum...
    method getEnumAST (line 176) | async getEnumAST(fileName: string, position: number): Promise<DumpEnum...
    method getFunctionAST (line 182) | async getFunctionAST(fileName: string, position: number): Promise<Dump...
    method resolveImportPath (line 188) | resolveImportPath(fromPath: string, toPath: string): string {
    method getFileNameForImportPath (line 192) | getFileNameForImportPath(importPath: string): string {
    method processRequest (line 196) | private processRequest<T>(
    method processAndCacheRequest (line 222) | private processAndCacheRequest<T>(
    method getCachedItemForFile (line 234) | private getCachedItemForFile(cacheInfo: CachedFileInfo, cacheKey: stri...
    method getCachedItemForFileAndHash (line 242) | private async getCachedItemForFileAndHash(
    method setCachedItemForFile (line 259) | private setCachedItemForFile(cacheInfo: CachedFileInfo, cacheKey: stri...
    method setCachedItemForFileAndHash (line 267) | private setCachedItemForFileAndHash(cacheInfo: CachedFileInfo, hash: s...
    method getImportPathsFromCache (line 277) | private async getImportPathsFromCache(cacheInfo: CachedFileInfo): Prom...
    method doOpenFileInInnerWorkspace (line 299) | private async doOpenFileInInnerWorkspace(cacheFileInfo: CachedFileInfo...
    method openFileInInnerWorkspaceIfNeeded (line 315) | private async openFileInInnerWorkspaceIfNeeded(cacheFileInfo: CachedFi...
    method makeImportPaths (line 321) | private makeImportPaths(importPaths: OpenFileImportPath[], isNonModule...
    method resolveImportPaths (line 332) | private async resolveImportPaths(cacheFileInfo: CachedFileInfo): Promi...
    method resolveImportedFiles (line 365) | private async resolveImportedFiles(fileInfo: CachedFileInfo): Promise<...
    method computeAndSaveRecursiveHash (line 385) | private computeAndSaveRecursiveHash(
    method gatherFileDependencies (line 405) | private async gatherFileDependencies(
    method makeRecursiveHashEntries (line 443) | private makeRecursiveHashEntries(
    method computeRecursiveHashes (line 484) | private computeRecursiveHashes(entries: RecursiveHashEntry[]): number {
    method resolveRecursiveHash (line 510) | private async resolveRecursiveHash(fileInfo: CachedFileInfo): Promise<...
    method getResolvedCachedFileInfo (line 532) | private getResolvedCachedFileInfo(fileName: string): Promise<CachedFil...
    method resolvePath (line 547) | private resolvePath(fileName: string): FilePath {
    method getCachedFileInfo (line 552) | private getCachedFileInfo(fileName: string): CachedFileInfo {

FILE: compiler/companion/src/cache/CachingWorkspaceFactory.ts
  constant CACHE_VERSION (line 10) | const CACHE_VERSION = '2';
  function createCachingWorkspace (line 12) | function createCachingWorkspace(

FILE: compiler/companion/src/cache/CircularLoopTracker.ts
  type ICircularLoop (line 1) | type ICircularLoop = string[];
  type CircularLoopTrackerPushResult (line 3) | const enum CircularLoopTrackerPushResult {
  class CircularLoopTracker (line 21) | class CircularLoopTracker {
    method stackSize (line 22) | get stackSize(): number {
    method handleAlreadyVisited (line 30) | private handleAlreadyVisited(entry: string): CircularLoopTrackerPushRe...
    method push (line 60) | push(entry: string): CircularLoopTrackerPushResult {
    method pop (line 77) | pop(): void {
    method getCircularEntriesForEntry (line 81) | getCircularEntriesForEntry(entry: string): Set<string> | undefined {
    method getResolvedCircularLoops (line 85) | getResolvedCircularLoops(): ICircularLoop[] | undefined {
    method addEntriesToLoop (line 101) | private addEntriesToLoop(left: string, right: string, loopsByEntry: Ma...
    method handleCircularLoop (line 141) | private handleCircularLoop(startStackIndex: number): void {

FILE: compiler/companion/src/cache/ICompilationCache.d.ts
  type ICompilationCache (line 1) | interface ICompilationCache {

FILE: compiler/companion/src/cache/SQLiteCompilationCache.spec.ts
  class TestTimestampProvider (line 7) | class TestTimestampProvider implements SQLiteCompilationCacheTimestampPr...
    method getCurrentTimestamp (line 10) | getCurrentTimestamp(): number {
  function cacheIt (line 16) | function cacheIt(

FILE: compiler/companion/src/cache/SQLiteCompilationCache.ts
  type CompilationCacheEntry (line 8) | interface CompilationCacheEntry {
  type CompilationCacheMetadata (line 17) | interface CompilationCacheMetadata {
  type SQLiteCompilationCacheTimestampProvider (line 21) | interface SQLiteCompilationCacheTimestampProvider {
  constant SCHEMA_VERSION (line 28) | const SCHEMA_VERSION = '1';
  constant COMPRESSION_BYTES_THRESHOLD (line 29) | const COMPRESSION_BYTES_THRESHOLD = 500;
  function prepareDatabase (line 31) | function prepareDatabase(db: sqlite.Database, resolvedVersion: string): ...
  function createUnpreparedDatabase (line 57) | function createUnpreparedDatabase(filename: string): sqlite.Database {
  function createDatabase (line 74) | function createDatabase(
  constant FLUSH_DEFERRED_STATEMENTS_DELAY_MS (line 109) | const FLUSH_DEFERRED_STATEMENTS_DELAY_MS = 6000;
  class SQLiteCompilationCache (line 111) | class SQLiteCompilationCache implements ICompilationCache {
    method constructor (line 122) | constructor(
    method close (line 154) | close(): void {
    method flushDeferredStatements (line 159) | flushDeferredStatements(): void {
    method evictEntriesBeforeTime (line 178) | evictEntriesBeforeTime(lastUsedTimestamp: number): void {
    method getAllCachedEntries (line 183) | getAllCachedEntries(): CompilationCacheEntry[] {
    method enqueueDeferredStatement (line 187) | private enqueueDeferredStatement(cb: () => void) {
    method getCachedEntry (line 200) | async getCachedEntry(path: string, container: string, hash: string): P...
    method setCachedEntry (line 227) | async setCachedEntry(path: string, container: string, hash: string, da...
    method newInMemoryInstance (line 248) | static newInMemoryInstance(timestampProvider: SQLiteCompilationCacheTi...

FILE: compiler/companion/src/cli/generateGhostOwnershipMap.ts
  type GenerateGhostOwnershipMapResult (line 7) | type GenerateGhostOwnershipMapResult = { [key: string]: string };
  function generateGhostOwnershipMap (line 9) | async function generateGhostOwnershipMap(

FILE: compiler/companion/src/cli/rewriteImports.ts
  type ImportedSymbol (line 7) | interface ImportedSymbol {
  type ImportStatement (line 12) | interface ImportStatement {
  type FileContentChunk (line 23) | interface FileContentChunk {
  function resolveImportPath (line 30) | function resolveImportPath(projectDirectory: string, directory: string, ...
  type VisitImportResult (line 40) | const enum VisitImportResult {
  class ParsedFile (line 45) | class ParsedFile {
    method constructor (line 48) | constructor(
    method visitImports (line 56) | private visitImports(
    method updateImportForSymbolName (line 103) | updateImportForSymbolName(
    method insertImport (line 159) | private insertImport(symbolName: string, importPath: string) {
    method regenerateFileContent (line 187) | regenerateFileContent(): string {
    method generateImportedSymbol (line 201) | private generateImportedSymbol(importedSymbol: ImportedSymbol): string {
    method generateImportedSymbolList (line 211) | private generateImportedSymbolList(importedSymbolList: ImportedSymbol[...
    method generateImportStatement (line 216) | private generateImportStatement(importStatement: ImportStatement): str...
  function makeImportedSymbol (line 252) | function makeImportedSymbol(symbolName: string, parser: TextParser): Imp...
  function parseImportedSymbol (line 265) | function parseImportedSymbol(parser: TextParser): ImportedSymbol {
  function parseImportedSymbolsList (line 270) | function parseImportedSymbolsList(parser: TextParser): ImportedSymbol[] {
  function parseImport (line 280) | function parseImport(parser: TextParser): ImportStatement {
  function appendChunkIfNeeded (line 338) | function appendChunkIfNeeded(parser: TextParser, output: FileContentChun...
  function parseFile (line 356) | async function parseFile(filePath: string): Promise<ParsedFile> {
  function rewriteImports (line 386) | async function rewriteImports(

FILE: compiler/companion/src/logger/ILogger.ts
  type ILoggerStream (line 1) | type ILoggerStream = (...messages: any[]) => void;
  type ILogger (line 3) | interface ILogger {

FILE: compiler/companion/src/logger/LoggerUtils.ts
  function formatValue (line 1) | function formatValue(value: any): any {
  function formatMessages (line 8) | function formatMessages(messages: any[]): string {

FILE: compiler/companion/src/logger/ProtocolLogger.ts
  class ProtocolLogger (line 5) | class ProtocolLogger implements ILogger {
    method writeLogs (line 19) | private writeLogs(type: string, messages: any[]): void {

FILE: compiler/companion/src/logger/StreamLogger.ts
  class StreamLogger (line 5) | class StreamLogger implements ILogger {
    method constructor (line 6) | constructor(readonly stream: NodeJS.WritableStream) {}
    method enqueueLog (line 24) | private enqueueLog(type: string, messages: any[]): void {
    method forOutputFile (line 30) | static forOutputFile(outputPath: string): StreamLogger {
    method forStderr (line 34) | static forStderr(): StreamLogger {
    method forStdOut (line 38) | static forStdOut(): StreamLogger {

FILE: compiler/companion/src/native/CompileNativeCommand.ts
  function checkErrors (line 13) | function checkErrors(sourceFile: ts.SourceFile, diagnostics: Diagnostic[...
  class CancelationTokenImpl (line 29) | class CancelationTokenImpl implements ts.CancellationToken {
    method requestCancellation (line 32) | requestCancellation(): void {
    method isCancellationRequested (line 36) | isCancellationRequested(): boolean {
    method throwIfCancellationRequested (line 40) | throwIfCancellationRequested(): void {
  function compileFile (line 47) | function compileFile(
  function generateNativeModuleName (line 104) | function generateNativeModuleName(relativePaths: string[]): string {
  function compileNative (line 117) | async function compileNative(

FILE: compiler/companion/src/native/IRtoString.ts
  function getUnaryOperatorName (line 11) | function getUnaryOperatorName(unaryOpKind: NativeCompilerIR.UnaryOperato...
  function getBinaryOpOperatorName (line 30) | function getBinaryOpOperatorName(binaryOpKind: NativeCompilerIR.BinaryOp...
  function getBranchTypeName (line 83) | function getBranchTypeName(branchType: NativeCompilerBuilderBranchType):...
  function variableToString (line 92) | function variableToString(variable: NativeCompilerBuilderVariableID): st...
  class IRStringWriter (line 96) | class IRStringWriter {
    method constructor (line 97) | constructor(readonly writer: OutputWriter) {}
    method append (line 99) | append(str: string): IRStringWriter {
    method appendQuotedString (line 104) | appendQuotedString(str: string | undefined): IRStringWriter {
    method appendVariable (line 113) | appendVariable(variable: NativeCompilerBuilderVariableID): IRStringWri...
    method appendVariables (line 117) | appendVariables(variables: NativeCompilerBuilderVariableID[]): IRStrin...
    method appendAtom (line 129) | appendAtom(atom: NativeCompilerBuilderAtomID): IRStringWriter {
    method appendAtoms (line 133) | appendAtoms(atoms: NativeCompilerBuilderAtomID[]): IRStringWriter {
    method appendJumpTarget (line 145) | appendJumpTarget(jumpTarget: NativeCompilerBuilderJumpTargetID): IRStr...
  function outputIR (line 150) | function outputIR(ir: NativeCompilerIR.Base, output: IRStringWriter): IR...
  function IRtoString (line 701) | function IRtoString(irs: NativeCompilerIR.Base[]): string {

FILE: compiler/companion/src/native/NativeCodeWriter.ts
  class NativeCodeWriter (line 3) | class NativeCodeWriter extends OutputWriter {
    method appendWithNewLine (line 6) | appendWithNewLine(str: string | IOutputWriter | undefined = undefined)...
    method appendAssignment (line 13) | appendAssignment(variable: string, str: string): void {
    method appendLabel (line 19) | appendLabel(label: string) {
    method appendAssignmentWithFunctionCall (line 23) | appendAssignmentWithFunctionCall(variable: string, func: string, args:...
    method appendFunctionCall (line 29) | appendFunctionCall(func: string, args: Array<string>, endStatement: bo...
    method startAssignment (line 35) | private startAssignment(variable: string) {
    method endAssignment (line 39) | private endAssignment() {
    method startFunctionCall (line 43) | private startFunctionCall(funcName: string) {
    method endFunctionCall (line 47) | private endFunctionCall(endStatement: boolean = false) {
    method appendParameterList (line 54) | appendParameterList(args: Array<string>) {
    method appendGoto (line 62) | appendGoto(label: string) {
    method beginIfStatement (line 66) | beginIfStatement() {
    method endEndifStatement (line 70) | endEndifStatement() {
    method beginInitialization (line 74) | beginInitialization() {
    method endInitialization (line 78) | endInitialization() {
    method beginScope (line 83) | beginScope() {
    method endScope (line 88) | endScope(withNewLine: boolean = true) {
    method beginComment (line 96) | beginComment() {
    method endComment (line 101) | endComment() {

FILE: compiler/companion/src/native/NativeCompiler.spec.ts
  function sanitize (line 12) | function sanitize(text: string): string {
  function compileAsIRString (line 16) | function compileAsIRString(
  function compileAsC (line 40) | function compileAsC(
  function configuredCompile (line 89) | function configuredCompile(
  function compileSimplified (line 148) | function compileSimplified(text: string, functionsToKeep?: string[]): st...

FILE: compiler/companion/src/native/NativeCompiler.ts
  type NativeCompilerVariableIDWithParent (line 27) | interface NativeCompilerVariableIDWithParent {
  type NativeCompilerVariableIDValueDelegate (line 32) | interface NativeCompilerVariableIDValueDelegate {
  type BindingElementVariable (line 37) | interface BindingElementVariable {
  type AssignmentElementVariable (line 44) | interface AssignmentElementVariable {
  type CompilationPlan (line 50) | interface CompilationPlan {
  function makeValidModuleName (line 55) | function makeValidModuleName(name: string) {
  constant CONSTRUCTOR_NAME (line 62) | const CONSTRUCTOR_NAME = '__ctor__';
  class NativeCompilerContext (line 64) | class NativeCompilerContext {
    method constructor (line 65) | constructor(
    method withNamePath (line 76) | withNamePath(namePath: NamePath, isGenerator?: boolean, isAsync?: bool...
    method withAssignmentTracker (line 89) | withAssignmentTracker(assignmentTracker: AssignmentTracker | undefined...
  constant MAX_DEBUG_INFO_LENGTH (line 104) | const MAX_DEBUG_INFO_LENGTH = 50;
  type DeferredStatementCb (line 106) | type DeferredStatementCb = (context: NativeCompilerContext, builder: INa...
  type EnqueueDeferredStatementFunc (line 107) | type EnqueueDeferredStatementFunc = (cb: DeferredStatementCb) => void;
  class NativeCompiler (line 109) | class NativeCompiler {
    method constructor (line 118) | constructor(
    method allocateFunctionName (line 129) | private allocateFunctionName(nameInitial: string): string {
    method getFunctionName (line 133) | private getFunctionName(namePath: NamePath): string {
    method allocateUniqueVariableRefName (line 137) | private allocateUniqueVariableRefName(name: string): string {
    method onError (line 141) | private onError(node: ts.Node, message: string): never {
    method processBindingElement (line 145) | private processBindingElement(
    method processBindingName (line 184) | private processBindingName(
    method processVariableDeclaration (line 331) | private processVariableDeclaration(
    method registerAndGetStringLiteralValue (line 342) | private registerAndGetStringLiteralValue(
    method processStringLiteral (line 350) | private processStringLiteral(
    method processNumericalLiteral (line 357) | private processNumericalLiteral(
    method processPropertyAccessExpressionForCallExpressionEpilogue (line 374) | private processPropertyAccessExpressionForCallExpressionEpilogue(
    method processPropertyAccessExpressionForCallExpression (line 394) | processPropertyAccessExpressionForCallExpression(
    method resolveVariableToUseAsThis (line 422) | private resolveVariableToUseAsThis(
    method processPropertyAccessExpressionAsAssignment (line 436) | processPropertyAccessExpressionAsAssignment(
    method processElementAccessExpressionAsAssignment (line 452) | processElementAccessExpressionAsAssignment(
    method buildQuestionDotExpression (line 470) | private buildQuestionDotExpression(
    method doProcessPropertyAccessExpression (line 502) | private doProcessPropertyAccessExpression(
    method tryProcessEnumConstantValuePrologue (line 566) | private tryProcessEnumConstantValuePrologue(
    method processEnumConstantValueEpilogue (line 577) | private processEnumConstantValueEpilogue(
    method tryProcessEnumConstantValue (line 597) | private tryProcessEnumConstantValue(
    method processPropertyAccessExpression (line 610) | processPropertyAccessExpression(
    method processVariableDeclarationList (line 646) | processVariableDeclarationList(
    method processVariableStatement (line 663) | processVariableStatement(
    method processIdentifier (line 671) | processIdentifier(
    method processThis (line 679) | processThis(
    method processNullKeyword (line 689) | processNullKeyword(builder: INativeCompilerBlockBuilder, node: ts.Node...
    method processUndefinedKeyword (line 693) | processUndefinedKeyword(builder: INativeCompilerBlockBuilder, node: ts...
    method procssTrueKeyword (line 697) | procssTrueKeyword(buildr: INativeCompilerBlockBuilder, node: ts.Node):...
    method processFalseKeyword (line 701) | processFalseKeyword(buildr: INativeCompilerBlockBuilder, node: ts.Node...
    method processSuperKeyword (line 705) | processSuperKeyword(
    method processIdentifierAsAtom (line 718) | processIdentifierAsAtom(builder: INativeCompilerBlockBuilder, node: ts...
    method processIdentifierStringAsAtom (line 722) | processIdentifierStringAsAtom(builder: INativeCompilerBlockBuilder, te...
    method resolveRegisteredVariableRefForIdentifierName (line 726) | private resolveRegisteredVariableRefForIdentifierName(
    method resolveRegisteredVariableRefForIdentifier (line 739) | private resolveRegisteredVariableRefForIdentifier(
    method getVariableRefNameForImportedModule (line 747) | private getVariableRefNameForImportedModule(node: ts.Expression): stri...
    method createVariableRefNameForImportedModule (line 756) | private createVariableRefNameForImportedModule(node: ts.Expression): s...
    method makeValueDelegate (line 767) | private static makeValueDelegate(
    method resolveValueDelegate (line 797) | private resolveValueDelegate(
    method processIdentifierAsValueDelegate (line 831) | private processIdentifierAsValueDelegate(
    method getGlobalVariable (line 839) | private getGlobalVariable(
    method resolveNamePath (line 854) | private resolveNamePath(node: ts.Node, initialNamePath: NamePath): Nam...
    method processBinaryExpressionAsAssignment (line 865) | private processBinaryExpressionAsAssignment(
    method processAssignmentElement (line 878) | private processAssignmentElement(
    method processArrayAssignment (line 906) | private processArrayAssignment(
    method processObjectAssignment (line 1006) | private processObjectAssignment(
    method processBinaryExpressionResultAsAssignment (line 1083) | private processBinaryExpressionResultAsAssignment(
    method processBinaryExpression (line 1113) | processBinaryExpression(
    method processInterfaceDeclaration (line 1437) | processInterfaceDeclaration(builder: INativeCompilerBlockBuilder, node...
    method processDeclarationWithDefaultInitializer (line 1441) | private processDeclarationWithDefaultInitializer(
    method processParameterDeclaration (line 1466) | processParameterDeclaration(
    method isThisParameter (line 1530) | private isThisParameter(node: ts.ParameterDeclaration): boolean {
    method processParameterDeclarations (line 1538) | private processParameterDeclarations(
    method isAmbientDeclaration (line 1584) | private isAmbientDeclaration(node: ts.Node): boolean {
    method processFunctionBody (line 1589) | processFunctionBody(
    method processFunctionDeclaration (line 1626) | processFunctionDeclaration(
    method processGenerator (line 1663) | private processGenerator(
    method doProcessFunctionDeclaration (line 1690) | private doProcessFunctionDeclaration(
    method processFunctionExpression (line 1753) | processFunctionExpression(
    method processArrowFunction (line 1800) | processArrowFunction(
    method buildArrayWithElements (line 1821) | buildArrayWithElements(
    method processArrayLiteralExpression (line 1847) | processArrayLiteralExpression(
    method processNewExpression (line 1856) | processNewExpression(
    method buildConditionalVariable (line 1880) | private buildConditionalVariable(
    method processConditionalExpression (line 1922) | processConditionalExpression(
    method processAsExpression (line 1944) | processAsExpression(
    method processTypeOfExpression (line 1952) | processTypeOfExpression(
    method processRegularExpressionLiteral (line 1961) | processRegularExpressionLiteral(
    method processReturnStatement (line 2002) | processReturnStatement(
    method processThrowStatement (line 2016) | processThrowStatement(context: NativeCompilerContext, builder: INative...
    method processBreakStatement (line 2021) | processBreakStatement(builder: INativeCompilerBlockBuilder, node: ts.B...
    method processTryStatement (line 2030) | processTryStatement(context: NativeCompilerContext, builder: INativeCo...
    method processSwitchStatement (line 2061) | processSwitchStatement(
    method processStatementsInBlock (line 2132) | processStatementsInBlock(
    method processBlock (line 2153) | processBlock(context: NativeCompilerContext, builder: INativeCompilerB...
    method processSourceFile (line 2159) | processSourceFile(initFunctionName: string, node: ts.SourceFile) {
    method processObjectLiteralExpression (line 2189) | processObjectLiteralExpression(
    method processPropertyAssignment (line 2275) | processPropertyAssignment(
    method processPropertyName (line 2287) | processPropertyName(
    method appendSetPropertyIfNeeded (line 2305) | private appendSetPropertyIfNeeded(
    method processPrefixUnaryExpression (line 2323) | processPrefixUnaryExpression(
    method hasSpreadElement (line 2358) | private hasSpreadElement(args: ts.NodeArray<ts.Expression>): boolean {
    method doProcessCall (line 2368) | private doProcessCall(
    method processCallExpressionEpilogue (line 2404) | private processCallExpressionEpilogue(
    method processCallExpression (line 2419) | processCallExpression(
    method processDeleteExpression (line 2472) | processDeleteExpression(
    method processAwaitExpression (line 2499) | processAwaitExpression(
    method processYieldStarExpression (line 2513) | private processYieldStarExpression(
    method processYieldExpression (line 2570) | processYieldExpression(
    method processSuspendResume (line 2587) | private processSuspendResume(
    method processJsxExpression (line 2600) | processJsxExpression(
    method processExpressionStatement (line 2612) | processExpressionStatement(
    method processElementAccessExpression (line 2624) | processElementAccessExpression(
    method processForStatement (line 2688) | processForStatement(context: NativeCompilerContext, builder: INativeCo...
    method processIfStatement (line 2719) | processIfStatement(context: NativeCompilerContext, builder: INativeCom...
    method processWhileStatement (line 2743) | processWhileStatement(context: NativeCompilerContext, builder: INative...
    method processPostfixUnaryExpression (line 2759) | processPostfixUnaryExpression(
    method processParenthesizedExpression (line 2786) | processParenthesizedExpression(
    method processTemplateLiteralToken (line 2795) | processTemplateLiteralToken(
    method processTemplateExpression (line 2807) | processTemplateExpression(
    method processNonNullExpression (line 2832) | processNonNullExpression(
    method processVoidExpression (line 2840) | processVoidExpression(
    method processTypeAssertion (line 2849) | processTypeAssertion(
    method processExpression (line 2857) | processExpression(
    method processClassLikeDeclaration (line 2944) | processClassLikeDeclaration(
    method processClassDeclaration (line 3122) | processClassDeclaration(
    method processClassExpression (line 3130) | processClassExpression(
    method processClassElement (line 3138) | private processClassElement(
    method processMethodDeclaration (line 3183) | private processMethodDeclaration(
    method processGetAccessorDeclaration (line 3202) | private processGetAccessorDeclaration(
    method processSetAccessorDeclaration (line 3221) | private processSetAccessorDeclaration(
    method processPropertyDeclaration (line 3240) | private processPropertyDeclaration(
    method doBuildSetProperty (line 3262) | private doBuildSetProperty(
    method appendNodeDebugInfo (line 3276) | private appendNodeDebugInfo(builder: INativeCompilerBlockBuilder, node...
    method processEnumDeclaration (line 3294) | processEnumDeclaration(
    method appendExportedVariable (line 3336) | private appendExportedVariable(
    method isExportedDeclaration (line 3357) | private isExportedDeclaration(node: ts.Declaration): boolean {
    method appendExportedDeclarationIfNeeded (line 3365) | private appendExportedDeclarationIfNeeded(
    method isNodeResolvingToValue (line 3390) | private isNodeResolvingToValue(context: NativeCompilerContext, node: t...
    method processExportDeclaration (line 3398) | processExportDeclaration(
    method doImportModule (line 3448) | private doImportModule(
    method processImportModule (line 3460) | private processImportModule(
    method processForAwaitOfStatement (line 3490) | private processForAwaitOfStatement(
    method processForInOrOfStatement (line 3554) | private processForInOrOfStatement(
    method processForOfStatement (line 3609) | processForOfStatement(
    method processForInStatement (line 3621) | processForInStatement(
    method processImportDeclaration (line 3629) | processImportDeclaration(
    method processModuleDeclaration (line 3718) | processModuleDeclaration(
    method processContinueStatement (line 3747) | processContinueStatement(
    method processDoStatement (line 3766) | processDoStatement(context: NativeCompilerContext, builder: INativeCom...
    method processExportAssignment (line 3790) | processExportAssignment(
    method processEntityName (line 3809) | processEntityName(
    method processImportEqualsDeclaration (line 3827) | processImportEqualsDeclaration(
    method prepareBindingElement (line 3849) | private prepareBindingElement(
    method prepareBindingName (line 3871) | private prepareBindingName(
    method prepareVariableDeclaration (line 3900) | private prepareVariableDeclaration(
    method prepareVariableDeclarationList (line 3909) | private prepareVariableDeclarationList(builder: INativeCompilerBlockBu...
    method prepareVariableStatement (line 3919) | private prepareVariableStatement(
    method prepareFunctionDeclaration (line 3928) | private prepareFunctionDeclaration(
    method prepareClassDeclaration (line 3948) | private prepareClassDeclaration(
    method prepareEnumDeclaration (line 3960) | private prepareEnumDeclaration(
    method prepareModuleDeclaration (line 3970) | private prepareModuleDeclaration(
    method prepareImportDeclaration (line 3981) | private prepareImportDeclaration(
    method prepareImportEqualsDeclaration (line 4005) | private prepareImportEqualsDeclaration(
    method prepareStatement (line 4019) | private prepareStatement(plan: CompilationPlan, builder: INativeCompil...
    method processStatement (line 4048) | processStatement(context: NativeCompilerContext, builder: INativeCompi...
    method compile (line 4114) | compile(): NativeCompilerIR.Base[] {
  function compileIRsToC (line 4148) | function compileIRsToC(

FILE: compiler/companion/src/native/NativeCompilerOptions.ts
  type NativeCompilerOptions (line 1) | interface NativeCompilerOptions {

FILE: compiler/companion/src/native/NativeHelper.ts
  type NumberType (line 4) | enum NumberType {
  constant INT32_MAX (line 10) | const INT32_MAX = 2147483647;
  constant INT32_MIN (line 11) | const INT32_MIN = -INT32_MAX - 1;
  class NativeCompilerError (line 13) | class NativeCompilerError extends Error {
    method constructor (line 14) | constructor(filename: string, sourceFile: ts.SourceFile, node: ts.Node...
  function getNumericalStringTypeFromNumber (line 26) | function getNumericalStringTypeFromNumber(numberValue: number): NumberTy...
  function getNumericalStringType (line 38) | function getNumericalStringType(value: string): NumberType {
  function getModuleName (line 48) | function getModuleName(filePath: string) {
  function onError (line 54) | function onError(filename: string, sourceFile: ts.SourceFile, node: ts.N...
  function logNodeInfo (line 58) | function logNodeInfo(node: ts.Node): void {
  function uniqueNameFromNode (line 62) | function uniqueNameFromNode(moduleName: string, node: ts.Node): string {

FILE: compiler/companion/src/native/builder/INativeCompilerBuilder.ts
  type NativeCompilerBuilderVariableType (line 4) | const enum NativeCompilerBuilderVariableType {
  type NativeCompilerBuilderBranchType (line 17) | const enum NativeCompilerBuilderBranchType {
  class NativeCompilerBuilderVariableBase (line 34) | class NativeCompilerBuilderVariableBase {
    method type (line 35) | get type(): NativeCompilerBuilderVariableType {
    method constructor (line 41) | constructor(type: NativeCompilerBuilderVariableType) {
    method isRetainable (line 45) | isRetainable(): boolean {
    method getTypeString (line 53) | getTypeString(): string {
    method addType (line 92) | addType(type: NativeCompilerBuilderVariableType): void {
    method combineTypes (line 96) | static combineTypes(
  class NativeCompilerBuilderVariableID (line 123) | class NativeCompilerBuilderVariableID extends NativeCompilerBuilderVaria...
    method constructor (line 124) | constructor(
    method toString (line 133) | toString(): string {
  type ConstantType (line 138) | enum ConstantType {
  class ConstValue (line 145) | class ConstValue {
    method constructor (line 146) | constructor(
  class NativeCompilerBuilderVariableRef (line 153) | class NativeCompilerBuilderVariableRef extends NativeCompilerBuilderVari...
    method constructor (line 154) | constructor(
    method addType (line 162) | addType(type: NativeCompilerBuilderVariableType): void {
  class NativeCompilerBuilderAtomID (line 170) | class NativeCompilerBuilderAtomID {
    method constructor (line 171) | constructor(public readonly atom: number, readonly identifier: string) {}
  class NativeCompilerBuilderJumpTargetID (line 174) | class NativeCompilerBuilderJumpTargetID {
    method constructor (line 175) | constructor(public readonly label: number, public readonly tag: string...
  type INativeCompilerJumpTargetBuilder (line 178) | interface INativeCompilerJumpTargetBuilder {
  type INativeCompilerLoopBuilder (line 183) | interface INativeCompilerLoopBuilder {
  type INativeCompilerTryCatchBuilder (line 190) | interface INativeCompilerTryCatchBuilder {
  type INativeCompilerFunctionBuilder (line 196) | interface INativeCompilerFunctionBuilder {
  type VariableRefScope (line 203) | const enum VariableRefScope {
  type IVariableDelegate (line 208) | interface IVariableDelegate {
  type INativeCompilerBlockBuilder (line 216) | interface INativeCompilerBlockBuilder {
  type INativeCompilerBlockBuilderFunctionContext (line 483) | interface INativeCompilerBlockBuilderFunctionContext {

FILE: compiler/companion/src/native/builder/NativeCompilerBuilder.ts
  class NativeCompilerBlockBuilder (line 60) | class NativeCompilerBlockBuilder implements INativeCompilerBlockBuilder {
    method constructor (line 68) | constructor(
    method internalBuildSubBuilder (line 75) | private internalBuildSubBuilder(
    method registerExceptionTargetInScope (line 89) | registerExceptionTargetInScope(target: NativeCompilerBuilderJumpTarget...
    method resolveExceptionTargetInScope (line 93) | resolveExceptionTargetInScope(): NativeCompilerBuilderJumpTargetID | u...
    method resolveExceptionTargetInScopeOrThrow (line 97) | resolveExceptionTargetInScopeOrThrow(): NativeCompilerBuilderJumpTarge...
    method registerLazyVariableRef (line 106) | registerLazyVariableRef(
    method buildWithIRInsertionIndex (line 118) | private buildWithIRInsertionIndex<T>(
    method checkVariableId (line 132) | private checkVariableId(variableId: NativeCompilerBuilderVariableID) {
    method checkVariableRef (line 138) | private checkVariableRef(variableRef: NativeCompilerBuilderVariableRef) {
    method buildUninitializedVariableRef (line 142) | buildUninitializedVariableRef(
    method doBuildVariableRef (line 159) | private doBuildVariableRef(
    method buildVariableRef (line 182) | buildVariableRef(
    method buildInitializedVariableRef (line 215) | buildInitializedVariableRef(
    method buildLoadVariableRef (line 226) | buildLoadVariableRef(variableRef: NativeCompilerBuilderVariableRef): N...
    method buildSetVariableRef (line 241) | buildSetVariableRef(variableRef: NativeCompilerBuilderVariableRef, val...
    method registerVariableDelegate (line 255) | registerVariableDelegate(variableName: string, delegate: IVariableDele...
    method doResolveVariableRefOrDelegate (line 259) | private doResolveVariableRefOrDelegate(
    method resolveVariableRefOrDelegateInScope (line 266) | resolveVariableRefOrDelegateInScope(
    method resolveVariableInScope (line 272) | resolveVariableInScope(variableName: string): NativeCompilerBuilderVar...
    method registerExitTargetInScope (line 285) | registerExitTargetInScope(target: NativeCompilerBuilderJumpTargetID): ...
    method resolveExitTargetInScope (line 289) | resolveExitTargetInScope(): NativeCompilerBuilderJumpTargetID | undefi...
    method registerContinueTargetInScope (line 293) | registerContinueTargetInScope(target: NativeCompilerBuilderJumpTargetI...
    method resolveContinueTargetInScope (line 297) | resolveContinueTargetInScope(): NativeCompilerBuilderJumpTargetID | un...
    method buildFunctionBodySubBuilder (line 301) | buildFunctionBodySubBuilder(closureBlockBuilder: INativeCompilerBlockB...
    method buildSubBuilder (line 308) | buildSubBuilder(scoped: boolean): NativeCompilerBlockBuilder {
    method buildJumpTarget (line 319) | buildJumpTarget(tag: string): INativeCompilerJumpTargetBuilder {
    method buildJump (line 329) | buildJump(jumpTarget: NativeCompilerBuilderJumpTargetID): void {
    method buildBranch (line 337) | buildBranch(
    method buildThrow (line 354) | buildThrow(value: NativeCompilerBuilderVariableID): void {
    method buildSetProperty (line 364) | buildSetProperty(
    method buildSetProperties (line 382) | buildSetProperties(
    method buildSetPropertyValue (line 400) | buildSetPropertyValue(
    method buildSetPropertyIndex (line 419) | buildSetPropertyIndex(
    method buildCopyPropertiesFrom (line 437) | buildCopyPropertiesFrom(
    method buildGetPropertyValue (line 458) | buildGetPropertyValue(
    method buildDeleteProperty (line 480) | buildDeleteProperty(
    method buildDeletePropertyValue (line 500) | buildDeletePropertyValue(
    method buildGetClosureVariableRef (line 521) | buildGetClosureVariableRef(
    method buildGetModuleConst (line 545) | buildGetModuleConst(index: number): NativeCompilerBuilderVariableID {
    method buildGetProperty (line 559) | buildGetProperty(
    method getIntrinsicConstant (line 581) | getIntrinsicConstant(name: string): number | string | undefined {
    method hasIntrinsicFunction (line 585) | hasIntrinsicFunction(func: string): boolean {
    method buildIntrinsicCall (line 589) | buildIntrinsicCall(func: string, args: Array<NativeCompilerBuilderVari...
    method buildFunctionInvocation (line 605) | buildFunctionInvocation(
    method buildFunctionInvocationWithArgsArray (line 631) | buildFunctionInvocationWithArgsArray(
    method buildConstructorInvocation (line 654) | buildConstructorInvocation(
    method buildConstructorInvocationWithArgsArray (line 678) | buildConstructorInvocationWithArgsArray(
    method buildGetFunctionArg (line 700) | buildGetFunctionArg(index: number): NativeCompilerBuilderVariableID {
    method buildGetFunctionArgumentsObject (line 711) | buildGetFunctionArgumentsObject(startIndex: number): NativeCompilerBui...
    method buildKeyword (line 723) | buildKeyword(keywordKind: NativeCompilerIR.KeywordKind) {
    method buildGetSuper (line 750) | buildGetSuper(): NativeCompilerBuilderVariableID {
    method buildGetSuperConstructor (line 764) | buildGetSuperConstructor(): NativeCompilerBuilderVariableID {
    method buildAssignableUndefined (line 778) | buildAssignableUndefined(): NativeCompilerBuilderVariableID {
    method buildUndefined (line 782) | buildUndefined(): NativeCompilerBuilderVariableID {
    method buildNull (line 792) | buildNull(): NativeCompilerBuilderVariableID {
    method buildThis (line 799) | buildThis(): NativeCompilerBuilderVariableID {
    method buildNewTarget (line 803) | buildNewTarget(): NativeCompilerBuilderVariableID {
    method buildCopy (line 807) | buildCopy(value: NativeCompilerBuilderVariableID): NativeCompilerBuild...
    method buildException (line 816) | buildException(retVar?: NativeCompilerBuilderVariableID) {
    method buildLiteralInteger (line 826) | buildLiteralInteger(value: string): NativeCompilerBuilderVariableID {
    method buildLiteralLong (line 837) | buildLiteralLong(value: string): NativeCompilerBuilderVariableID {
    method buildLiteralDouble (line 848) | buildLiteralDouble(value: string): NativeCompilerBuilderVariableID {
    method buildLiteralString (line 859) | buildLiteralString(value: string): NativeCompilerBuilderVariableID {
    method buildLiteralBool (line 871) | buildLiteralBool(value: boolean): NativeCompilerBuilderVariableID {
    method buildGetException (line 882) | buildGetException(): NativeCompilerBuilderVariableID {
    method buildCheckException (line 892) | buildCheckException(jumpTarget: NativeCompilerBuilderJumpTargetID): vo...
    method buildGlobal (line 900) | buildGlobal(): NativeCompilerBuilderVariableID {
    method buildBinaryOp (line 913) | buildBinaryOp(
    method buildReturn (line 1017) | buildReturn(value: NativeCompilerBuilderVariableID): void {
    method buildNewObject (line 1023) | buildNewObject() {
    method buildNewArray (line 1034) | buildNewArray(): NativeCompilerBuilderVariableID {
    method buildLoop (line 1045) | buildLoop(): INativeCompilerLoopBuilder {
    method buildIterator (line 1069) | buildIterator(value: NativeCompilerBuilderVariableID): NativeCompilerB...
    method buildKeysIterator (line 1084) | buildKeysIterator(value: NativeCompilerBuilderVariableID): NativeCompi...
    method buildIteratorNext (line 1099) | buildIteratorNext(
    method buildKeysIteratorNext (line 1118) | buildKeysIteratorNext(
    method buildGenerator (line 1137) | buildGenerator(closure: NativeCompilerBuilderVariableID): NativeCompil...
    method buildResume (line 1150) | buildResume(): NativeCompilerBuilderVariableID {
    method buildSetResumePoint (line 1161) | buildSetResumePoint(resumePoint?: NativeCompilerBuilderJumpTargetID): ...
    method buildSuspend (line 1169) | buildSuspend(value: NativeCompilerBuilderVariableID, resumePoint: Nati...
    method buildTryCatch (line 1176) | buildTryCatch(hasCatchBlock: boolean, hasFinallyBlock: boolean): INati...
    method buildComments (line 1219) | buildComments(text: string): void {
    method buildProgramCounterInfo (line 1227) | buildProgramCounterInfo(lineNumber: number, columnNumber: number): void {
    method buildNewFunctionValue (line 1244) | buildNewFunctionValue(
    method buildNewClassValue (line 1264) | buildNewClassValue(
    method buildSetClassElement (line 1288) | buildSetClassElement(
    method buildSetClassElementValue (line 1310) | buildSetClassElementValue(
    method resolveClosureArguments (line 1333) | private resolveClosureArguments(
    method buildNewArrowFunctionValue (line 1351) | buildNewArrowFunctionValue(
    method buildAssignment (line 1371) | buildAssignment(left: NativeCompilerBuilderVariableID, right: NativeCo...
    method buildUnaryOp (line 1396) | buildUnaryOp(
    method registerExportsVariableRef (line 1439) | registerExportsVariableRef(variableRef: NativeCompilerBuilderVariableR...
    method resolveExportsVariableRef (line 1445) | resolveExportsVariableRef(): NativeCompilerBuilderVariableRef {
    method resolveExportsVariable (line 1454) | resolveExportsVariable(): NativeCompilerBuilderVariableID {
    method finalize (line 1459) | finalize(options: NativeCompilerOptions) {
  class NativeCompilerFunctionBuilder (line 1490) | class NativeCompilerFunctionBuilder implements INativeCompilerBlockBuild...
    method constructor (line 1498) | constructor(
    method onClosureVariableRequested (line 1537) | onClosureVariableRequested(
    method getBuilder (line 1545) | getBuilder(): INativeCompilerBlockBuilder {
    method finalizeReentryBlock (line 1549) | finalizeReentryBlock(irs: NativeCompilerIR.Base[]) {
    method finalizeYieldJumpTarget (line 1567) | finalizeYieldJumpTarget(irs: NativeCompilerIR.Base[]) {
    method finalize (line 1580) | finalize(options: NativeCompilerOptions, moduleBuilder: NativeCompiler...
  class NativeCompilerInitModuleBuilder (line 1645) | class NativeCompilerInitModuleBuilder {
    method registerAtom (line 1652) | registerAtom(identifierName: string): NativeCompilerBuilderAtomID {
    method registerStringConstant (line 1663) | registerStringConstant(value: string): number {
    method atomCount (line 1674) | get atomCount() {
    method atoms (line 1678) | get atoms(): NativeCompilerBuilderAtomID[] {
    method stringConstants (line 1682) | get stringConstants(): readonly string[] {
  class NativeCompilerModuleBuilder (line 1687) | class NativeCompilerModuleBuilder {
    method constructor (line 1693) | constructor(private moduleName: string, private modulePath: string) {
    method registerAtom (line 1697) | registerAtom(identifierName: string): NativeCompilerBuilderAtomID {
    method registerStringConstant (line 1701) | registerStringConstant(value: string): number {
    method stringConstants (line 1705) | get stringConstants(): readonly string[] {
    method buildFunction (line 1709) | buildFunction(
    method assignPropertyCacheSlots (line 1753) | private assignPropertyCacheSlots(irs: NativeCompilerIR.Base[]) {
    method finalize (line 1768) | finalize(moduleInitFunctionName: string, options: NativeCompilerOption...

FILE: compiler/companion/src/native/builder/NativeCompilerBuilderIR.ts
  type Kind (line 10) | enum Kind {
  type KeywordKind (line 97) | enum KeywordKind {
  type UnaryOperator (line 104) | enum UnaryOperator {
  type BinaryOperator (line 114) | enum BinaryOperator {
  type FunctionType (line 141) | enum FunctionType {
  type FunctionTypeArgs (line 146) | enum FunctionTypeArgs {
  type FunctionArgumentsType (line 156) | const enum FunctionArgumentsType {
  type ClassElementType (line 173) | enum ClassElementType {
  function getFunctionArgsFromType (line 198) | function getFunctionArgsFromType(type: NativeCompilerIR.FunctionType): A...
  type Base (line 202) | interface Base {
  type BaseWithReturn (line 206) | interface BaseWithReturn extends Base {
  type BaseWithExceptionTarget (line 210) | interface BaseWithExceptionTarget extends Base {
  type BaseWithReturnAndExceptionTarget (line 214) | interface BaseWithReturnAndExceptionTarget extends BaseWithReturn, BaseW...
  type LiteralBase (line 216) | interface LiteralBase extends BaseWithReturn {
  type UnaryOPBase (line 220) | interface UnaryOPBase extends BaseWithReturnAndExceptionTarget {
  type BinaryOpBase (line 224) | interface BinaryOpBase extends BaseWithReturnAndExceptionTarget {
  type Slot (line 229) | interface Slot extends Base {
  type Global (line 234) | interface Global extends BaseWithReturn {
  type SetProperty (line 238) | interface SetProperty extends BaseWithExceptionTarget {
  type SetPropertyValue (line 245) | interface SetPropertyValue extends BaseWithExceptionTarget {
  type SetPropertyIndex (line 252) | interface SetPropertyIndex extends BaseWithExceptionTarget {
  type CopyPropertiesFrom (line 259) | interface CopyPropertiesFrom extends BaseWithExceptionTarget {
  type Throw (line 267) | interface Throw extends Base {
  type Retain (line 273) | interface Retain extends Base {
  type Free (line 278) | interface Free extends Base {
  type FreeV (line 283) | interface FreeV extends Base {
  type NewVariableRef (line 292) | interface NewVariableRef extends BaseWithReturnAndExceptionTarget {
  type LoadVariableRef (line 301) | interface LoadVariableRef extends BaseWithReturnAndExceptionTarget {
  type SetVariableRef (line 309) | interface SetVariableRef extends Base {
  type GetProperty (line 315) | interface GetProperty extends BaseWithReturnAndExceptionTarget {
  type GetPropertyFree (line 324) | interface GetPropertyFree extends BaseWithReturnAndExceptionTarget {
  type GetPropertyValue (line 333) | interface GetPropertyValue extends BaseWithReturnAndExceptionTarget {
  type DeleteProperty (line 340) | interface DeleteProperty extends BaseWithReturnAndExceptionTarget {
  type DeletePropertyValue (line 347) | interface DeletePropertyValue extends BaseWithReturnAndExceptionTarget {
  type GetFunctionArg (line 353) | interface GetFunctionArg extends BaseWithReturn {
  type GetFunctionArgumentsObject (line 358) | interface GetFunctionArgumentsObject extends BaseWithReturnAndExceptionT...
  type GetSuper (line 363) | interface GetSuper extends BaseWithReturnAndExceptionTarget {
  type GetSuperConstructor (line 367) | interface GetSuperConstructor extends BaseWithReturnAndExceptionTarget {
  type GetClosureArg (line 371) | interface GetClosureArg extends BaseWithReturn {
  type GetModuleConst (line 377) | interface GetModuleConst extends BaseWithReturn {
  type GetException (line 382) | interface GetException extends BaseWithReturn {
  type CheckException (line 386) | interface CheckException extends BaseWithExceptionTarget {
  type Keyword (line 390) | interface Keyword extends BaseWithReturn {
  type Exception (line 395) | interface Exception extends BaseWithReturn {
  type LiteralInteger (line 399) | interface LiteralInteger extends LiteralBase {
  type LiteralLong (line 403) | interface LiteralLong extends LiteralBase {
  type LiteralDouble (line 407) | interface LiteralDouble extends LiteralBase {
  type LiteralString (line 411) | interface LiteralString extends LiteralBase, BaseWithExceptionTarget {
  type LiteralBool (line 415) | interface LiteralBool extends BaseWithReturn {
  type UnaryOp (line 420) | interface UnaryOp extends UnaryOPBase {
  type BinaryOp (line 425) | interface BinaryOp extends BinaryOpBase {
  type Assignment (line 430) | interface Assignment extends Base {
  type IntrinsicCall (line 436) | interface IntrinsicCall extends BaseWithReturnAndExceptionTarget {
  type FunctionInvocation (line 442) | interface FunctionInvocation extends BaseWithReturnAndExceptionTarget {
  type ConstructorInvocation (line 450) | interface ConstructorInvocation extends BaseWithReturnAndExceptionTarget {
  type NewObject (line 458) | interface NewObject extends BaseWithReturnAndExceptionTarget {
  type NewArray (line 462) | interface NewArray extends BaseWithReturnAndExceptionTarget {
  type NewFunctionValueBase (line 466) | interface NewFunctionValueBase extends BaseWithReturnAndExceptionTarget {
  type NewArrowFunctionValue (line 472) | interface NewArrowFunctionValue extends NewFunctionValueBase {
  type NewFunctionValue (line 477) | interface NewFunctionValue extends NewFunctionValueBase {
  type NewClassValue (line 482) | interface NewClassValue extends NewFunctionValueBase {
  type SetClassElement (line 488) | interface SetClassElement extends BaseWithExceptionTarget {
  type SetClassElementValue (line 497) | interface SetClassElementValue extends BaseWithExceptionTarget {
  type Iterator (line 506) | interface Iterator extends BaseWithReturnAndExceptionTarget {
  type IteratorNext (line 511) | interface IteratorNext extends BaseWithReturnAndExceptionTarget {
  type KeysIterator (line 516) | interface KeysIterator extends BaseWithReturnAndExceptionTarget {
  type KeysIteratorNext (line 521) | interface KeysIteratorNext extends BaseWithReturnAndExceptionTarget {
  type Generator (line 526) | interface Generator extends BaseWithReturnAndExceptionTarget {
  type Resume (line 531) | interface Resume extends BaseWithReturnAndExceptionTarget {
  type Reentry (line 535) | interface Reentry extends Base {
  type SetResumePoint (line 540) | interface SetResumePoint extends Base {
  type BindJumpTarget (line 545) | interface BindJumpTarget extends Base {
  type Jump (line 550) | interface Jump extends Base {
  type Branch (line 555) | interface Branch extends Base {
  type StartFunction (line 563) | interface StartFunction extends Base {
  type EndFunction (line 573) | interface EndFunction extends Base {
  type Comments (line 578) | interface Comments extends Base {
  type ProgramCounterInfo (line 583) | interface ProgramCounterInfo extends Base {
  type BoilerplateEpilogue (line 589) | interface BoilerplateEpilogue extends Base {
  type BoilerplatePrologue (line 599) | interface BoilerplatePrologue extends Base {
  type BuilderStub (line 604) | interface BuilderStub extends Base {

FILE: compiler/companion/src/native/builder/VariableContext.ts
  type LazyNativeCompilerBuilderVariableRef (line 9) | type LazyNativeCompilerBuilderVariableRef = () => NativeCompilerBuilderV...
  type VariableResolveResult (line 11) | type VariableResolveResult = NativeCompilerBuilderVariableRef | IVariabl...
  function variableResultIsVariableRef (line 13) | function variableResultIsVariableRef(result: VariableResolveResult): res...
  function variableResultIsVariableDelegate (line 17) | function variableResultIsVariableDelegate(result: VariableResolveResult)...
  type VariableResolvingMode (line 21) | const enum VariableResolvingMode {
  class VariableContext (line 35) | class VariableContext {
    method constructor (line 42) | constructor(
    method scoped (line 51) | scoped(): VariableContext {
    method detached (line 59) | detached(functionContext: INativeCompilerBlockBuilderFunctionContext):...
    method registerVariableRefInScope (line 63) | registerVariableRefInScope(variableRef: NativeCompilerBuilderVariableR...
    method registerVariableDelegate (line 71) | registerVariableDelegate(name: string, delegate: IVariableDelegate): v...
    method registerLazyVariableRef (line 78) | registerLazyVariableRef(name: string, lazy: LazyNativeCompilerBuilderV...
    method resolveVariable (line 85) | resolveVariable(variableName: string, mode: VariableResolvingMode): Va...
    method registerVariableRefAlias (line 140) | registerVariableRefAlias(
    method getVariableRefForAlias (line 147) | getVariableRefForAlias(

FILE: compiler/companion/src/native/builder/internal/NativeCompilerBlockBuilderContext.ts
  type INativeCompilerBlockBuilderFunctionContextListener (line 10) | interface INativeCompilerBlockBuilderFunctionContextListener {
  class NativeCompilerBlockBuilderFunctionContext (line 18) | class NativeCompilerBlockBuilderFunctionContext implements INativeCompil...
    method constructor (line 30) | constructor(
    method returnVariable (line 37) | get returnVariable(): NativeCompilerBuilderVariableID {
    method returnVariable (line 45) | set returnVariable(target: NativeCompilerBuilderVariableID) {
    method returnJumpTarget (line 53) | get returnJumpTarget(): NativeCompilerBuilderJumpTargetID {
    method returnJumpTarget (line 61) | set returnJumpTarget(target: NativeCompilerBuilderJumpTargetID) {
    method yieldJumpTarget (line 69) | get yieldJumpTarget(): NativeCompilerBuilderJumpTargetID {
    method yieldJumpTarget (line 77) | set yieldJumpTarget(target: NativeCompilerBuilderJumpTargetID) {
    method variableCount (line 84) | get variableCount() {
    method requestClosureArgument (line 88) | requestClosureArgument(
    method registerVariable (line 99) | registerVariable(
    method registerJumpTarget (line 109) | registerJumpTarget(tag: string): NativeCompilerBuilderJumpTargetID {
  class NativeCompilerBlockBuilderScopeContext (line 114) | class NativeCompilerBlockBuilderScopeContext {
    method constructor (line 120) | constructor(private readonly parentcontext: NativeCompilerBlockBuilder...
    method registerExitTargetInScope (line 122) | registerExitTargetInScope(exitTarget: NativeCompilerBuilderJumpTargetI...
    method resolveExitTargetInScope (line 126) | resolveExitTargetInScope(): NativeCompilerBuilderJumpTargetID | undefi...
    method registerContinueTargetInScope (line 133) | registerContinueTargetInScope(continueTarget: NativeCompilerBuilderJum...
    method resolveContinueTargetInScope (line 140) | resolveContinueTargetInScope(): NativeCompilerBuilderJumpTargetID | un...
    method registerExceptionTargetInScope (line 147) | registerExceptionTargetInScope(exitTarget: NativeCompilerBuilderJumpTa...
    method resolveExceptionTargetInScope (line 151) | resolveExceptionTargetInScope(): NativeCompilerBuilderJumpTargetID | u...
    method resolveExportsVariableRef (line 159) | resolveExportsVariableRef(): NativeCompilerBuilderVariableRef | undefi...
    method registerExportsVariableRef (line 167) | registerExportsVariableRef(exportsVariableRef: NativeCompilerBuilderVa...
    method createSubScopeContext (line 175) | createSubScopeContext(): NativeCompilerBlockBuilderScopeContext {

FILE: compiler/companion/src/native/builder/internal/transformers/NativeCompilerTransformerAutoRelease.ts
  function transform (line 11) | function transform(irs: NativeCompilerIR.Base[]): NativeCompilerIR.Base[] {

FILE: compiler/companion/src/native/builder/internal/transformers/NativeCompilerTransformerConstantFolding.ts
  type ConstantDef (line 7) | interface ConstantDef {
  function buildLiteralInteger (line 15) | function buildLiteralInteger(
  function buildLiteralLong (line 26) | function buildLiteralLong(variable: NativeCompilerBuilderVariableID, val...
  function buildLiteralDouble (line 33) | function buildLiteralDouble(
  function buildLiteralBool (line 43) | function buildLiteralBool(variable: NativeCompilerBuilderVariableID, val...
  type UnaryOp (line 51) | type UnaryOp = (variable: NativeCompilerBuilderVariableID, c: ConstantDe...
  type BinaryOp (line 52) | type BinaryOp = (
  function doNeg (line 59) | function doNeg(variable: NativeCompilerBuilderVariableID, c: ConstantDef...
  function doPlus (line 71) | function doPlus(variable: NativeCompilerBuilderVariableID, c: ConstantDe...
  function doBitwiseNot (line 83) | function doBitwiseNot(variable: NativeCompilerBuilderVariableID, c: Cons...
  function doLogicalNot (line 93) | function doLogicalNot(variable: NativeCompilerBuilderVariableID, c: Cons...
  function isSafeInt32 (line 105) | function isSafeInt32(x: number): boolean {
  function doBinary (line 109) | function doBinary(
  function doBand (line 150) | function doBand(
  function doBor (line 158) | function doBor(
  function doAdd (line 167) | function doAdd(
  function doMulti (line 187) | function doMulti(
  function doSub (line 196) | function doSub(
  function doDiv (line 205) | function doDiv(
  type TransformResult (line 214) | interface TransformResult {
  function addNewIR (line 219) | function addNewIR(output: TransformResult, newIR: NativeCompilerIR.Base) {
  function transform (line 224) | function transform(irs: NativeCompilerIR.Base[], moduleBuilder: NativeCo...

FILE: compiler/companion/src/native/builder/internal/transformers/NativeCompilerTransformerInsertRetainRelease.ts
  function insertFreeIfNeeded (line 6) | function insertFreeIfNeeded(
  function transform (line 29) | function transform(

FILE: compiler/companion/src/native/builder/internal/transformers/NativeCompilerTransformerMergeRelease.ts
  function emitFree (line 8) | function emitFree(output: NativeCompilerIR.Base[], vars: NativeCompilerB...
  function transform (line 26) | function transform(irs: NativeCompilerIR.Base[]): NativeCompilerIR.Base[] {

FILE: compiler/companion/src/native/builder/internal/transformers/NativeCompilerTransformerOptimizeAssignments.ts
  function transform (line 16) | function transform(irs: NativeCompilerIR.Base[]): NativeCompilerIR.Base[] {

FILE: compiler/companion/src/native/builder/internal/transformers/NativeCompilerTransformerOptimizeLoads.ts
  function transform (line 6) | function transform(irs: NativeCompilerIR.Base[]): NativeCompilerIR.Base[] {

FILE: compiler/companion/src/native/builder/internal/transformers/NativeCompilerTransformerOptimizeVarRefs.ts
  function transform (line 11) | function transform(irs: NativeCompilerIR.Base[]): NativeCompilerIR.Base[] {

FILE: compiler/companion/src/native/builder/internal/transformers/NativeCompilerTransformerResolveBuilderStubs.ts
  function transform (line 6) | function transform(

FILE: compiler/companion/src/native/builder/internal/transformers/NativeCompilerTransformerResolveSlots.ts
  type VariableLifetime (line 6) | interface VariableLifetime {
  type VariableLifetimeByID (line 12) | interface VariableLifetimeByID {
  class VariablesLifetimeTracker (line 16) | class VariablesLifetimeTracker {
    method allVariables (line 17) | get allVariables(): readonly NativeCompilerBuilderVariableID[] {
    method constructor (line 24) | constructor() {}
    method addVariable (line 26) | addVariable(variable: NativeCompilerBuilderVariableID, index: number) {
    method forEachVariableInRange (line 36) | forEachVariableInRange(
    method forEachVariableLifetime (line 51) | forEachVariableLifetime(cb: (variableLifetime: VariableLifetime) => vo...
  type AllocatedVariable (line 59) | interface AllocatedVariable {
  class VariableAllocator (line 63) | class VariableAllocator {
    method allVariables (line 64) | get allVariables(): readonly AllocatedVariable[] {
    method getAllocatedVariable (line 73) | getAllocatedVariable(variable: NativeCompilerBuilderVariableID): Alloc...
    method tryReuseAllocatedVariable (line 77) | tryReuseAllocatedVariable(variable: NativeCompilerBuilderVariableID): ...
    method allocateNewVariable (line 91) | allocateNewVariable(variable: NativeCompilerBuilderVariableID): Alloca...
    method freeAllocatedVariable (line 106) | freeAllocatedVariable(variable: NativeCompilerBuilderVariableID) {
  function transform (line 123) | function transform(

FILE: compiler/companion/src/native/builder/internal/transformers/utils/IRVisitors.ts
  function isBaseWithReturn (line 4) | function isBaseWithReturn(ir: NativeCompilerIR.Base): ir is NativeCompil...
  function isBaseWithExceptionTarget (line 69) | function isBaseWithExceptionTarget(ir: NativeCompilerIR.Base): ir is Nat...
  function visitVariableArray (line 76) | function visitVariableArray(
  function visitVariables (line 97) | function visitVariables(
  function visitJump (line 452) | function visitJump(ir: NativeCompilerIR.Base, visitor: (jump: NativeComp...

FILE: compiler/companion/src/native/builder/internal/transformers/utils/JumpIndexer.ts
  class JumpIndexer (line 4) | class JumpIndexer {
    method constructor (line 7) | constructor(readonly irs: NativeCompilerIR.Base[]) {
    method forEachBackwardJump (line 21) | forEachBackwardJump(cb: (jumpIRIndex: number, irIndex: number) => void) {

FILE: compiler/companion/src/native/emitter/CompilerNativeCEmitter.ts
  function getNativeCompilerFunctionArgToString (line 42) | function getNativeCompilerFunctionArgToString(arg: NativeCompilerIR.Func...
  function getJumpTargetName (line 46) | function getJumpTargetName(name: string, jumpTarget: NativeCompilerBuild...
  function convertFunctionArgsToString (line 50) | function convertFunctionArgsToString(type: NativeCompilerIR.FunctionType) {
  function getNativeFunctionArguementDeclarationString (line 55) | function getNativeFunctionArguementDeclarationString(arg: NativeCompiler...
  type CompilerNativeCEmitterFunctionContext (line 59) | interface CompilerNativeCEmitterFunctionContext {
  type VariadicCallArgumentType (line 67) | const enum VariadicCallArgumentType {
  function getVariadicCallArgumentTypeString (line 73) | function getVariadicCallArgumentTypeString(argumentType: VariadicCallArg...
  function generateVariadicCallArguments (line 84) | function generateVariadicCallArguments(argumentType: VariadicCallArgumen...
  class CompilerNativeCEmitter (line 92) | class CompilerNativeCEmitter implements INativeCompilerIREmitter {
    method functionContext (line 101) | private get functionContext(): CompilerNativeCEmitterFunctionContext {
    method functionPrototypeBlock (line 108) | private get functionPrototypeBlock(): NativeCodeWriter {
    method functionContext (line 115) | private set functionContext(context: CompilerNativeCEmitterFunctionCon...
    method getVariableName (line 119) | private getVariableName(variableID: NativeCompilerBuilderVariableID) {
    method constructor (line 127) | constructor(readonly options: NativeCompilerOptions) {
    method allocateAtom (line 131) | private allocateAtom(atom: NativeCompilerBuilderAtomID): string {
    method resolveAtomDefineName (line 146) | private resolveAtomDefineName(atom: NativeCompilerBuilderAtomID): stri...
    method resolveAtomString (line 155) | private resolveAtomString(atom: NativeCompilerBuilderAtomID): string {
    method emitPrologue (line 160) | private emitPrologue() {
    method emitBoilerplatePrologue (line 165) | emitBoilerplatePrologue(atoms: NativeCompilerBuilderAtomID[]) {
    method emitBoilerplateEpilogue (line 177) | emitBoilerplateEpilogue(
    method emitStartFunction (line 251) | emitStartFunction(
    method emitEndFunction (line 333) | emitEndFunction(returnVariable: NativeCompilerBuilderVariableID) {
    method emitSlot (line 340) | emitSlot(value: NativeCompilerBuilderVariableID) {
    method emitGlobal (line 372) | emitGlobal(variable: NativeCompilerBuilderVariableID) {
    method emitUndefined (line 378) | emitUndefined(variable: NativeCompilerBuilderVariableID) {
    method emitNull (line 385) | emitNull(variable: NativeCompilerBuilderVariableID): void {
    method emitThis (line 392) | emitThis(variable: NativeCompilerBuilderVariableID): void {
    method emitNewTarget (line 399) | emitNewTarget(variable: NativeCompilerBuilderVariableID): void {
    method emitException (line 406) | emitException(variable: NativeCompilerBuilderVariableID) {
    method emitGetException (line 413) | emitGetException(variable: NativeCompilerBuilderVariableID): void {
    method emitCheckException (line 419) | emitCheckException(exceptionTarget: NativeCompilerBuilderJumpTargetID)...
    method generateMonoOperandOp (line 427) | private generateMonoOperandOp(
    method generateUndefOrNullCheck (line 448) | private generateUndefOrNullCheck(
    method generateTwoOperandOp (line 457) | private generateTwoOperandOp(
    method appendCheckedInOutFunctionCall (line 482) | private appendCheckedInOutFunctionCall(
    method appendCheckedFunctionCall (line 522) | private appendCheckedFunctionCall(
    method emitSetProperty (line 536) | emitSetProperty(
    method emitSetPropertyValue (line 571) | emitSetPropertyValue(
    method emitSetPropertyIndex (line 589) | emitSetPropertyIndex(
    method emitCopyPropertiesFrom (line 607) | emitCopyPropertiesFrom(
    method emitGetProperty (line 633) | emitGetProperty(
    method emitGetPropertyFree (line 654) | emitGetPropertyFree(
    method emitGetPropertyValue (line 676) | emitGetPropertyValue(
    method emitDeleteProperty (line 696) | emitDeleteProperty(
    method emitDeletePropertyValue (line 714) | emitDeletePropertyValue(
    method emitGetFunctionArg (line 732) | emitGetFunctionArg(variable: NativeCompilerBuilderVariableID, index: n...
    method emitGetFunctionArgumentsObject (line 741) | emitGetFunctionArgumentsObject(
    method emitGetSuper (line 759) | emitGetSuper(
    method emitGetSuperConstructor (line 774) | emitGetSuperConstructor(
    method emitGetClosureArg (line 789) | emitGetClosureArg(variable: NativeCompilerBuilderVariableID, index: nu...
    method emitGetModuleConst (line 797) | emitGetModuleConst(variable: NativeCompilerBuilderVariableID, index: n...
    method emitLiteralInteger (line 805) | emitLiteralInteger(variable: NativeCompilerBuilderVariableID, value: s...
    method emitLiteralLong (line 812) | emitLiteralLong(variable: NativeCompilerBuilderVariableID, value: stri...
    method emitLiteralDouble (line 819) | emitLiteralDouble(variable: NativeCompilerBuilderVariableID, value: st...
    method emitLiteralString (line 828) | emitLiteralString(
    method emitLiteralBool (line 846) | emitLiteralBool(variable: NativeCompilerBuilderVariableID, value: bool...
    method emitUnaryOp (line 855) | emitUnaryOp(
    method emitBinaryOp (line 888) | emitBinaryOp(
    method emitNewObject (line 1020) | emitNewObject(variable: NativeCompilerBuilderVariableID, exceptionTarg...
    method emitNewArray (line 1029) | emitNewArray(variable: NativeCompilerBuilderVariableID, exceptionTarge...
    method emitNewArrowFunctionValue (line 1038) | emitNewArrowFunctionValue(
    method emitNewFunctionValue (line 1086) | emitNewFunctionValue(
    method emitNewClassValue (line 1121) | emitNewClassValue(
    method emitSetClassMethod (line 1160) | emitSetClassMethod(
    method emitSetClassMethodValue (line 1179) | emitSetClassMethodValue(
    method emitSetClassPropertyGetter (line 1198) | emitSetClassPropertyGetter(
    method emitSetClassPropertyGetterValue (line 1217) | emitSetClassPropertyGetterValue(
    method emitSetClassPropertySetter (line 1236) | emitSetClassPropertySetter(
    method emitSetClassPropertySetterValue (line 1255) | emitSetClassPropertySetterValue(
    method emitNewVariableRef (line 1274) | emitNewVariableRef(value: NativeCompilerBuilderVariableID, exceptionTa...
    method emitLoadVariableRef (line 1283) | emitLoadVariableRef(
    method emitSetVariableRef (line 1299) | emitSetVariableRef(value: NativeCompilerBuilderVariableID, variableRef...
    method emitIterator (line 1307) | emitIterator(
    method emitKeysIterator (line 1320) | emitKeysIterator(
    method emitIteratorNext (line 1333) | emitIteratorNext(
    method emitKeysIteratorNext (line 1349) | emitKeysIteratorNext(
    method emitGenerator (line 1365) | emitGenerator(
    method retainFunctionName (line 1378) | private retainFunctionName() {
    method releaseFunctionName (line 1381) | private releaseFunctionName() {
    method emitResume (line 1385) | emitResume(variable: NativeCompilerBuilderVariableID, exceptionTarget:...
    method emitReentry (line 1390) | emitReentry(resumePoints: NativeCompilerBuilderJumpTargetID[]): void {
    method emitSetResumePoint (line 1401) | emitSetResumePoint(resumePoint: NativeCompilerBuilderJumpTargetID): vo...
    method emitRetain (line 1405) | emitRetain(value: NativeCompilerBuilderVariableID) {
    method doEmitRetain (line 1410) | private doEmitRetain(variable: NativeCompilerBuilderVariableID, value:...
    method emitFree (line 1432) | emitFree(value: NativeCompilerBuilderVariableID) {
    method emitFreeV (line 1454) | emitFreeV(values: NativeCompilerBuilderVariableID[]) {
    method emitIntrinsicCall (line 1485) | emitIntrinsicCall(
    method emitFunctionInvocation (line 1518) | emitFunctionInvocation(
    method emitFunctionInvocationWithArgsArray (line 1535) | emitFunctionInvocationWithArgsArray(
    method emitFunctionInvocationWithForwardedArgs (line 1555) | emitFunctionInvocationWithForwardedArgs(
    method emitConstructorInvocation (line 1575) | emitConstructorInvocation(
    method emitConstructorInvocationWithArgsArray (line 1592) | emitConstructorInvocationWithArgsArray(
    method emitBindJumpTarget (line 1612) | emitBindJumpTarget(target: NativeCompilerBuilderJumpTargetID) {
    method emitJump (line 1617) | emitJump(target: NativeCompilerBuilderJumpTargetID) {
    method emitBranch (line 1622) | emitBranch(
    method writeAssign (line 1672) | private writeAssign(target: NativeCompilerBuilderVariableID, inputArgu...
    method emitAssignment (line 1676) | emitAssignment(left: NativeCompilerBuilderVariableID, right: NativeCom...
    method emitThrow (line 1684) | emitThrow(value: NativeCompilerBuilderVariableID, target: NativeCompil...
    method emitComments (line 1695) | emitComments(text: string): void {
    method emitProgramCounterInfo (line 1703) | emitProgramCounterInfo(lineNumber: number, columnNumber: number): void {
    method finalize (line 1715) | finalize(): NativeCompilerEmitterOutput {

FILE: compiler/companion/src/native/emitter/INativeCompilerEmitter.ts
  type INativeCompilerIREmitter (line 9) | interface INativeCompilerIREmitter {
  type NativeCompilerEmitterOutput (line 358) | interface NativeCompilerEmitterOutput {
  function emitterWalk (line 362) | function emitterWalk(emitter: INativeCompilerIREmitter, ir: Array<Native...

FILE: compiler/companion/src/native/utils/AssignmentTracker.ts
  type Assignment (line 3) | interface Assignment {
  class AssignmentTracker (line 8) | class AssignmentTracker {
    method assignments (line 9) | get assignments(): readonly Assignment[] {
    method onGetProperty (line 15) | onGetProperty(object: NativeCompilerBuilderVariableID, property: Nativ...
    method onGetPropertyValue (line 19) | onGetPropertyValue(object: NativeCompilerBuilderVariableID, property: ...

FILE: compiler/companion/src/native/utils/NameAllocator.ts
  class NameAllocator (line 1) | class NameAllocator {
    method allocate (line 4) | allocate(nameInitial: string): string {

FILE: compiler/companion/src/native/utils/NamePath.ts
  class NamePath (line 3) | class NamePath {
    method constructor (line 4) | constructor(readonly name: string, readonly parent?: NamePath) {}
    method appending (line 6) | appending(name: string): NamePath {
    method appendingTSNode (line 10) | appendingTSNode(node: ts.Node | undefined, prefix?: string | undefined...
    method toString (line 18) | toString(): string {

FILE: compiler/companion/src/native/utils/StringEscape.ts
  type CString (line 1) | interface CString {
  function toCString (line 6) | function toCString(str: string): CString {
  function escapeCComment (line 40) | function escapeCComment(str: string): string {

FILE: compiler/companion/src/native/utils/VariableIdMap.ts
  class VariableIdMap (line 3) | class VariableIdMap<V extends Object | undefined> {
    method size (line 4) | get size(): number {
    method has (line 10) | has(key: NativeCompilerBuilderVariableID): boolean {
    method set (line 14) | set(key: NativeCompilerBuilderVariableID, value: V): void {
    method get (line 18) | get(key: NativeCompilerBuilderVariableID): V | undefined {
    method delete (line 22) | delete(key: NativeCompilerBuilderVariableID): void {
    method toString (line 26) | toString(): string {

FILE: compiler/companion/src/project/FileManager.ts
  type FilePath (line 6) | interface FilePath {
  type File (line 12) | interface File {
  type IFileManagerListener (line 16) | interface IFileManagerListener {
  class FileManager (line 20) | class FileManager {
    method constructor (line 25) | constructor(rootPath: string, readonly listener?: IFileManagerListener) {
    method clear (line 29) | clear(): void {
    method getCurrentDirectory (line 33) | getCurrentDirectory(): string {
    method getRootPath (line 37) | getRootPath(): string {
    method resolvePath (line 41) | resolvePath(relativePath: string): FilePath {
    method getDirectories (line 60) | getDirectories(path: FilePath): FilePath[] {
    method fileExists (line 69) | fileExists(path: FilePath): boolean {
    method directoryExists (line 73) | directoryExists(path: FilePath): boolean {
    method addFileInMemory (line 77) | addFileInMemory(path: FilePath, fileContent: string): void {
    method addFileInDisk (line 85) | addFileInDisk(path: FilePath, absolutePathOnDisk: string, cacheAfterRe...
    method getFile (line 101) | getFile(path: FilePath): File {

FILE: compiler/companion/src/project/Project.spec.ts
  class TestProjectListener (line 5) | class TestProjectListener implements IProjectListener {
    method onProgramChanged (line 12) | onProgramChanged(): void {
    method onProgramWillChange (line 16) | onProgramWillChange(): void {}
    method onCompilerOptionsResolved (line 18) | onCompilerOptionsResolved(): void {
    method onFileContentLoaded (line 22) | onFileContentLoaded(path: string): void {
    method onSourceFileCreated (line 26) | onSourceFileCreated(path: string): void {
    method onSourceFileInvalidated (line 30) | onSourceFileInvalidated(path: string): void {
  function createDefaultCompilerOptions (line 35) | function createDefaultCompilerOptions(): ts.CompilerOptions {

FILE: compiler/companion/src/project/Project.ts
  type IProjectListener (line 8) | interface IProjectListener {
  class Project (line 17) | class Project implements ISourceFileManagerListener, IFileManagerListener {
    method typeChecker (line 18) | get typeChecker(): ts.TypeChecker {
    method program (line 22) | get program(): ts.Program {
    method compilerOptions (line 26) | get compilerOptions(): ts.CompilerOptions {
    method constructor (line 42) | constructor(readonly rootPath: string, compilerOptions?: ts.CompilerOp...
    method destroy (line 56) | destroy(): void {
    method fileExists (line 63) | fileExists(path: string): boolean {
    method createSourceFile (line 67) | createSourceFile(path: string, content: string): ts.SourceFile {
    method openSourceFile (line 72) | openSourceFile(path: string): ts.SourceFile {
    method getOpenedSourceFile (line 76) | getOpenedSourceFile(path: string): ts.SourceFile | undefined {
    method removeSourceFile (line 80) | removeSourceFile(path: string) {
    method resolvePath (line 84) | resolvePath(path: string): FilePath {
    method setFileContentAtPath (line 88) | setFileContentAtPath(path: string, content: string): void {
    method setFileFromDiskAtPath (line 92) | setFileFromDiskAtPath(path: string, absoluteDiskPath: string): void {
    method setFileContentAtResolvedPath (line 96) | setFileContentAtResolvedPath(resolvedPath: FilePath, content: string):...
    method setFileFromDiskAtResolvedPath (line 101) | setFileFromDiskAtResolvedPath(resolvedPath: FilePath, absoluteDiskPath...
    method formatDiagnostics (line 106) | formatDiagnostics(diagnostics: readonly ts.Diagnostic[]): string {
    method formatDiagnostic (line 110) | formatDiagnostic(diagnostic: ts.Diagnostic): string {
    method onSourceFileCreated (line 114) | onSourceFileCreated(path: FilePath): void {
    method onSourceFileInvalidated (line 119) | onSourceFileInvalidated(path: FilePath): void {
    method onFileLoaded (line 124) | onFileLoaded(path: FilePath): void {
    method loadProgramIfNeeded (line 128) | loadProgramIfNeeded(): ts.Program {
    method setProgramDirty (line 152) | private setProgramDirty(): void {
    method resolveCompilerOptions (line 158) | private resolveCompilerOptions(): ts.CompilerOptions {

FILE: compiler/companion/src/project/SourceFileManager.ts
  class SourceFileEntry (line 4) | class SourceFileEntry {
    method constructor (line 9) | constructor(readonly path: FilePath) {}
    method getVersion (line 11) | getVersion(): string {
    method getScriptKind (line 15) | getScriptKind(): ts.ScriptKind {
    method getSnapshot (line 30) | getSnapshot(fileManager: FileManager): ts.IScriptSnapshot {
    method getSourceFile (line 39) | getSourceFile(): ts.SourceFile | undefined {
    method createSourceFile (line 43) | createSourceFile(
    method invalidate (line 59) | invalidate(): boolean {
  type ISourceFileManagerListener (line 72) | interface ISourceFileManagerListener {
  class SourceFileManager (line 77) | class SourceFileManager {
    method constructor (line 81) | constructor(readonly fileManager: FileManager, readonly listener?: ISo...
    method clear (line 83) | clear(): void {
    method getVersion (line 87) | getVersion(): number {
    method getScriptFileNames (line 91) | getScriptFileNames(): string[] {
    method getScriptVersion (line 103) | getScriptVersion(filePath: string): string {
    method getScriptSnapshot (line 108) | getScriptSnapshot(filePath: string) {
    method getScriptKind (line 113) | getScriptKind(filePath: string): ts.ScriptKind {
    method getOrCreateSourceFile (line 118) | getOrCreateSourceFile(
    method getSourceFile (line 135) | getSourceFile(filePath: string): ts.SourceFile | undefined {
    method removeSourceFile (line 141) | removeSourceFile(filePath: string) {
    method invalidateSourceFile (line 147) | invalidateSourceFile(filePath: FilePath) {
    method getOrCreateEntry (line 158) | private getOrCreateEntry(filePath: FilePath): SourceFileEntry {

FILE: compiler/companion/src/project/TypeScriptHosts.ts
  constant TS_LIBS_VIRTUAL_DIRECTORY (line 7) | const TS_LIBS_VIRTUAL_DIRECTORY = '/__tslibs__';
  function throwUnimplemented (line 9) | function throwUnimplemented(parameters: any): never {
  function getFileSystemEntries (line 17) | function getFileSystemEntries(path: FilePath, fileManager: FileManager):...
  class HostBase (line 33) | class HostBase implements ts.FormatDiagnosticsHost {
    method constructor (line 34) | constructor(readonly fileManager: FileManager) {}
    method getCurrentDirectory (line 36) | getCurrentDirectory(): string {
    method getNewLine (line 40) | getNewLine(): string {
    method getCanonicalFileName (line 44) | getCanonicalFileName(fileName: string): string {
    method readDirectory (line 48) | readDirectory(
    method getDirectories (line 77) | getDirectories?(directoryName: string): string[] {
    method realpath (line 81) | realpath?(path: string): string {
    method directoryExists (line 85) | directoryExists?(directoryName: string): boolean {
    method fileExists (line 93) | fileExists(path: string): boolean {
    method readFile (line 97) | readFile(path: string): string | undefined {
  class SourceFileHostBase (line 107) | class SourceFileHostBase extends HostBase {
    method constructor (line 108) | constructor(fileManager: FileManager, readonly sourceFileManager: Sour...
    method getDefaultLibFileName (line 112) | getDefaultLibFileName(options: ts.CompilerOptions): string {
    method useCaseSensitiveFileNames (line 116) | useCaseSensitiveFileNames(): boolean {
  class ParseConfigHost (line 121) | class ParseConfigHost extends HostBase implements ts.ParseConfigHost {
  class CompilerHost (line 125) | class CompilerHost extends SourceFileHostBase implements ts.CompilerHost {
    method constructor (line 126) | constructor(fileManager: FileManager, sourceFileManager: SourceFileMan...
    method getSourceFile (line 129) | getSourceFile(
    method getEnvironmentVariable (line 149) | getEnvironmentVariable?(name: string): string | undefined {
  class FormatDiagnosticsHost (line 154) | class FormatDiagnosticsHost extends HostBase implements ts.FormatDiagnos...

FILE: compiler/companion/src/project/VirtualFileSystem.ts
  class VirtualFileSystemEntry (line 3) | class VirtualFileSystemEntry<T> {
    method constructor (line 10) | constructor(parent: VirtualFileSystemEntry<T> | undefined, name: strin...
    method clear (line 17) | clear(): void {
    method getAbsoluteName (line 25) | getAbsoluteName(): string {
    method emplaceNested (line 37) | emplaceNested(name: string): VirtualFileSystemEntry<T> {
    method setAsDirectory (line 49) | private setAsDirectory(): Map<string, VirtualFileSystemEntry<T>> {
    method getNested (line 61) | getNested(name: string): VirtualFileSystemEntry<T> | undefined {
    method remove (line 65) | remove(): void {
    method setFile (line 73) | setFile(file: T): void {
    method setDirectory (line 81) | setDirectory(): boolean {
    method getFile (line 89) | getFile(): T | undefined {
    method isFile (line 93) | isFile(): boolean {
    method isDirectory (line 97) | isDirectory(): boolean {
    method getEntryNames (line 101) | getEntryNames(): string[] | undefined {
  class VirtualFileSystem (line 111) | class VirtualFileSystem<T> {
    method clear (line 114) | clear(): void {
    method addFile (line 118) | addFile(pathComponents: readonly string[], file: T) {
    method addDirectory (line 124) | addDirectory(pathComponents: readonly string[]): boolean {
    method getFile (line 130) | getFile(pathComponent: readonly string[]): T | undefined {
    method remove (line 134) | remove(pathComponents: readonly string[]): boolean {
    method fileExists (line 145) | fileExists(pathComponents: readonly string[]): boolean {
    method directoryExists (line 149) | directoryExists(pathComponents: readonly string[]): boolean {
    method getDirectoryEntryNames (line 153) | getDirectoryEntryNames(pathComponents: readonly string[]): string[] | ...
    method getEntry (line 157) | private getEntry(pathComponents: readonly string[]): VirtualFileSystem...
    method emplaceEntry (line 172) | private emplaceEntry(pathComponents: readonly string[]): VirtualFileSy...

FILE: compiler/companion/src/project/tsInternals.ts
  function matchFiles (line 7) | function matchFiles(
  type FileSystemEntries (line 23) | interface FileSystemEntries {

FILE: compiler/companion/src/protocol.ts
  type Command (line 5) | enum Command {
  type Request (line 32) | interface Request {
  type SuccessPayload (line 38) | interface SuccessPayload {
  type ErrorPayload (line 43) | interface ErrorPayload {
  type EventBody (line 48) | interface EventBody {
  type EventPayload (line 53) | interface EventPayload {
  type TransportPayload (line 57) | type TransportPayload = SuccessPayload | ErrorPayload | EventPayload;
  type BatchMinifyJSRequestBody (line 59) | interface BatchMinifyJSRequestBody {
  type CreateWorkspaceRequestBody (line 65) | interface CreateWorkspaceRequestBody {}
  type DestroyWorkspaceRequestBody (line 67) | interface DestroyWorkspaceRequestBody {
  type WorkspaceScopedRequestBodyBase (line 71) | interface WorkspaceScopedRequestBodyBase {
  type InitializeWorkspaceRequestBody (line 75) | interface InitializeWorkspaceRequestBody extends WorkspaceScopedRequestB...
  type RegisterFileRequestBody (line 77) | interface RegisterFileRequestBody extends WorkspaceScopedRequestBodyBase {
  type OpenFileRequestBody (line 87) | interface OpenFileRequestBody extends WorkspaceScopedRequestBodyBase {
  type EmitFileRequestBody (line 91) | interface EmitFileRequestBody extends WorkspaceScopedRequestBodyBase {
  type AddCodeInstrumentationRequestBody (line 95) | interface AddCodeInstrumentationRequestBody {
  type GetDiagnosticsRequestBody (line 99) | interface GetDiagnosticsRequestBody extends WorkspaceScopedRequestBodyBa...
  type DumpSymbolsWithCommentsRequestBody (line 103) | interface DumpSymbolsWithCommentsRequestBody extends WorkspaceScopedRequ...
  type DumpInterfaceRequestBody (line 107) | interface DumpInterfaceRequestBody extends WorkspaceScopedRequestBodyBase {
  type DumpFunctionRequestBody (line 112) | interface DumpFunctionRequestBody extends WorkspaceScopedRequestBodyBase {
  type DumpEnumRequestBody (line 117) | interface DumpEnumRequestBody extends WorkspaceScopedRequestBodyBase {
  type UpdatedAndroidTargetsRequestBody (line 122) | interface UpdatedAndroidTargetsRequestBody {
  type GenerateIdsFilesRequestBody (line 126) | interface GenerateIdsFilesRequestBody {
  type ExportStringsFilesRequestBody (line 132) | interface ExportStringsFilesRequestBody {
  type ExportTranslationStringsRequestBody (line 139) | interface ExportTranslationStringsRequestBody {
  type ExportStringsFilesBatchRequestBody (line 150) | interface ExportStringsFilesBatchRequestBody {
  type StartDebuggingProxyRequestBody (line 154) | interface StartDebuggingProxyRequestBody {}
  type CompileNativeRequestBody (line 156) | interface CompileNativeRequestBody extends WorkspaceScopedRequestBodyBase {
  type UploadArtifactRequestBody (line 166) | interface UploadArtifactRequestBody {
  type UpdatedDebuggerPorts (line 172) | interface UpdatedDebuggerPorts {
  type GenerateGhostOwnershipMapRequestBody (line 176) | interface GenerateGhostOwnershipMapRequestBody {
  type RewriteImportsRequestBody (line 180) | interface RewriteImportsRequestBody {
  type RequestBody (line 188) | type RequestBody =
  type BatchMinifyJSResponseBody (line 209) | interface BatchMinifyJSResponseBody {
  type RegisterFileResponseBody (line 213) | interface RegisterFileResponseBody {}
  type OpenFileResponseBody (line 215) | interface OpenFileResponseBody {
  type EmittedFile (line 224) | interface EmittedFile {
  type EmitFileResponseBody (line 229) | interface EmitFileResponseBody {
  type Location (line 234) | interface Location {
  type Diagnostic (line 239) | interface Diagnostic {
  type GetDiagnosticsResponseBody (line 248) | interface GetDiagnosticsResponseBody {
  type DumpedSymbolsWithComments (line 255) | interface DumpedSymbolsWithComments {
  type DumpSymbolsWithCommentsResponseBody (line 264) | interface DumpSymbolsWithCommentsResponseBody {
  type DumpedInterface (line 268) | interface DumpedInterface {
  type DumpInterfaceResponseBody (line 273) | interface DumpInterfaceResponseBody {
  type DumpFunctionResponseBody (line 277) | interface DumpFunctionResponseBody {
  type DumpEnumResponseBody (line 282) | interface DumpEnumResponseBody {
  type CreateWorkspaceResponseBody (line 286) | interface CreateWorkspaceResponseBody {
  type DestroyWorkspaceResponseBody (line 290) | interface DestroyWorkspaceResponseBody {}
  type InitializeWorkspaceResponseBody (line 292) | interface InitializeWorkspaceResponseBody {}
  type UpdatedAndroidTargetsResponseBody (line 294) | interface UpdatedAndroidTargetsResponseBody {}
  type GenerateIdsFilesResponseBody (line 296) | interface GenerateIdsFilesResponseBody {
  type ExportStringsFilesResponseBody (line 304) | interface ExportStringsFilesResponseBody {}
  type ExportTranslationStringsResponseBody (line 306) | interface ExportTranslationStringsResponseBody {
  type ExportStringsFilesBatchResponseBody (line 322) | interface ExportStringsFilesBatchResponseBody {}
  type StartDebuggingProxyResponseBody (line 324) | interface StartDebuggingProxyResponseBody {
  type CompileNativeResponseBody (line 328) | interface CompileNativeResponseBody {
  type AddCodeInstrumentationResponseBody (line 332) | interface AddCodeInstrumentationResponseBody {
  type UploadArtifactResponseBody (line 336) | interface UploadArtifactResponseBody {
  type GenerateGhostOwnershipMapResponseBody (line 341) | interface GenerateGhostOwnershipMapResponseBody {}
  type RewriteImportsResponseBody (line 343) | interface RewriteImportsResponseBody {}
  type ResponseBody (line 345) | type ResponseBody =

FILE: compiler/companion/src/strings/GenerateStringsFiles.ts
  type StringsJSONRecord (line 10) | interface StringsJSONRecord {
  type GenerateStringsJSONResult (line 16) | interface GenerateStringsJSONResult {
  type LocalizationServiceDirectiveParsingMode (line 20) | enum LocalizationServiceDirectiveParsingMode {
  type _iOSKey (line 25) | type _iOSKey = string;
  type _AndroidKey (line 26) | type _AndroidKey = string;
  type LocalizableKeyPath (line 28) | interface LocalizableKeyPath {
  function parseStringsJSONAtPath (line 39) | async function parseStringsJSONAtPath(
  function parseStringsJSON (line 49) | function parseStringsJSON(
  function sortStringsJSON (line 75) | function sortStringsJSON(stringsJSON: GenerateStringsJSONResult): Genera...
  function generateAndroidStringsXMLFromStringsJSON (line 93) | async function generateAndroidStringsXMLFromStringsJSON(
  function generateIOSLocalizableStringsFromStringsJSON (line 181) | function generateIOSLocalizableStringsFromStringsJSON(
  function guardAgainstEmittingDuplicateKeys (line 257) | function guardAgainstEmittingDuplicateKeys(

FILE: compiler/companion/src/strings/exportStringsFiles.ts
  function exportStringsFiles (line 20) | async function exportStringsFiles(
  function exportStringsFile (line 68) | async function exportStringsFile(
  function stringsJSONName (line 131) | function stringsJSONName(locale: string): string {
  function inputJSONPath (line 135) | function inputJSONPath(inputStringsDir: string, inputLocale: string) {
  function iosLocalizableStringName (line 139) | function iosLocalizableStringName(moduleName: string, outputLocale: stri...
  function iosLocalizableStringsPath (line 143) | function iosLocalizableStringsPath(iosOutputPath: string, outputLocale: ...
  function androidStringsXMLName (line 147) | function androidStringsXMLName(moduleName: string, outputLocale: string) {
  function androidStringsXMLPath (line 155) | function androidStringsXMLPath(androidOutputPath: string, outputLocale: ...
  function exportTranslationStrings (line 159) | async function exportTranslationStrings(

FILE: compiler/companion/src/strings/utils.ts
  constant MESSAGE_PARAMS_REGEX (line 1) | const MESSAGE_PARAMS_REGEX = /({([a-zA-Z0-9_]+)(%.*?)?})/g;
  type LocalizableParamType (line 3) | enum LocalizableParamType {
  type LocalizableParam (line 7) | interface LocalizableParam {
  function parseMessageParams (line 13) | function parseMessageParams(message: string) {
  function messageToFormat (line 50) | function messageToFormat(baseEnglishMessage: string, localizedMessage: s...
  function compareKeys (line 68) | function compareKeys(l: string, r: string) {
  function formatForIOSLocalizableStrings (line 72) | function formatForIOSLocalizableStrings(string: string) {
  function hack_privateProfile_replaceXMLEntities (line 81) | function hack_privateProfile_replaceXMLEntities(input: string) {
  function escapeForAndroidXML (line 89) | async function escapeForAndroidXML(string: string, lang: string = 'en') {
  function _escapeForAndroidXML (line 115) | function _escapeForAndroidXML(c: string) {

FILE: compiler/companion/src/tslibs/GenerateTSLibs.ts
  constant INPUT_DIRECTORY (line 6) | const INPUT_DIRECTORY = path.resolve(__dirname, '../../node_modules/type...
  constant OUTPUT_DIRECTORY (line 7) | const OUTPUT_DIRECTORY = path.resolve(__dirname);
  constant OUTPUT_FILE (line 8) | const OUTPUT_FILE = path.join(OUTPUT_DIRECTORY, DB_FILENAME);
  function generateTSLibEntry (line 10) | async function generateTSLibEntry(inputDirectory: string, filePath: stri...
  function generateTSLibsFile (line 18) | async function generateTSLibsFile(): Promise<void> {

FILE: compiler/companion/src/tslibs/TSLibsDatabase.ts
  type TSLibEntry (line 1) | interface TSLibEntry {
  constant DB_FILENAME (line 6) | const DB_FILENAME = 'tslibs.json';
  class TSLibsDatabase (line 10) | class TSLibsDatabase {
    method constructor (line 11) | constructor(readonly entries: TSLibEntry[]) {}
    method get (line 13) | static get(): TSLibsDatabase {

FILE: compiler/companion/src/types/IstanbulLibInstrument.d.ts
  type InstrumenterOptions (line 8) | interface InstrumenterOptions {
  type InstrumenterCallback (line 21) | type InstrumenterCallback = (error: Error | null, code: string) => void;
  class Instrumenter (line 23) | class Instrumenter {
  type InitialCoverage (line 47) | interface InitialCoverage {
  type Visitor (line 56) | interface Visitor {
  type VisitorOptions (line 61) | interface VisitorOptions {

FILE: compiler/companion/src/utils/EmitResolver.ts
  type SymbolTracker (line 3) | interface SymbolTracker {}
  type EmitResolver (line 5) | interface EmitResolver {
  type EmitResolverProvider (line 96) | interface EmitResolverProvider {
  function getEmitResolver (line 100) | function getEmitResolver(

FILE: compiler/companion/src/utils/ImportPathResolver.ts
  function toAbsoluteImportPath (line 6) | function toAbsoluteImportPath(dirname: string, toPath: string): string {
  class ImportPathResolver (line 15) | class ImportPathResolver {
    method constructor (line 21) | constructor(getCompilerOptions: () => ts.CompilerOptions) {
    method resolveImportPath (line 25) | resolveImportPath(fromPath: string, toPath: string): string {
    method registerAlias (line 36) | registerAlias(filePath: FilePath): void {
    method getAlias (line 58) | getAlias(filePath: FilePath): FilePath | undefined {
    method updateAliasIfNeeded (line 62) | private updateAliasIfNeeded(resolvedAlias: string, filePath: FilePath)...
    method resolvePathsFromCompilerOptions (line 72) | private resolvePathsFromCompilerOptions(): void {

FILE: compiler/companion/src/utils/Lazy.ts
  class Lazy (line 1) | class Lazy<T> {
    method constructor (line 5) | constructor(work: () => T) {
    method target (line 9) | get target(): T {
    method loadIfNeeded (line 17) | loadIfNeeded(): boolean {

FILE: compiler/companion/src/utils/SerialTaskQueue.ts
  type PendingTask (line 1) | type PendingTask = (done: () => void) => void;
  class SerialTaskQueue (line 3) | class SerialTaskQueue {
    method enqueueTask (line 7) | enqueueTask<T>(operation: () => T): Promise<T> {
    method enqueueAsyncTask (line 22) | enqueueAsyncTask<T>(operation: () => Promise<T>): Promise<T> {
    method doEnqueueTask (line 37) | private doEnqueueTask(task: PendingTask) {
    method flushTasks (line 42) | private flushTasks() {

FILE: compiler/companion/src/utils/Stopwatch.ts
  class Stopwatch (line 1) | class Stopwatch {
    method elapsedSeconds (line 4) | get elapsedSeconds(): number {
    method elapsedMilliseconds (line 8) | get elapsedMilliseconds(): number {
    method elapsedString (line 12) | get elapsedString(): string {
    method constructor (line 25) | constructor() {
    method start (line 29) | start() {

FILE: compiler/companion/src/utils/StringUtils.ts
  function trimAllLines (line 1) | function trimAllLines(str: string): string {

FILE: compiler/companion/src/utils/TextParser.ts
  type CharCode (line 1) | const enum CharCode {
  class TextParser (line 11) | class TextParser {
    method constructor (line 16) | constructor(readonly text: string) {}
    method debugPositionString (line 18) | debugPositionString(): string {
    method onError (line 22) | private onError(message: string): never {
    method isAtEnd (line 26) | isAtEnd(): boolean {
    method parse (line 30) | parse(term: string): void {
    method parseQuotedString (line 36) | parseQuotedString(): string {
    method parseUntilCharCode (line 45) | parseUntilCharCode(charCode: number): string {
    method peek (line 64) | peek(term: string): boolean {
    method tryParse (line 75) | tryParse(term: string): boolean {
    method isIdentifier (line 88) | private isIdentifier(position: number): boolean {
    method isAtIdentifier (line 99) | isAtIdentifier(): boolean {
    method parseIdentifier (line 104) | parseIdentifier(): string {
    method skipCurrentLine (line 126) | skipCurrentLine(): void {
    method consumeWhitespaces (line 140) | private consumeWhitespaces() {

FILE: compiler/companion/src/utils/companionTransport.ts
  function send (line 3) | function send(payload: TransportPayload) {
  function sendResponse (line 12) | function sendResponse(id: string, body: ResponseBody) {
  function sendError (line 22) | function sendError(id: string, err: Error) {
  function sendEvent (line 35) | function sendEvent(type: string, message: string) {

FILE: compiler/companion/src/utils/fileUtils.ts
  function fileExists (line 5) | async function fileExists(path: string): Promise<boolean> {
  function forEachFile (line 21) | async function forEachFile(dir: string, cb: (filePath: string) => void):...

FILE: compiler/companion/src/utils/getArgumentValue.ts
  function getArgumentValue (line 1) | function getArgumentValue(name: string) {

FILE: compiler/companion/src/utils/rethrow.ts
  function rethrow (line 1) | function rethrow(messagePrefix: string, error: unknown): never {

FILE: compiler/companion/src/utils/sha256.ts
  function generateSHA256Hash (line 8) | function generateSHA256Hash(fileContent: Uint8Array): string {
  function generateSHA256HashFromString (line 17) | function generateSHA256HashFromString(data: string): string {
  function generateSHA256HashFromStrings (line 26) | function generateSHA256HashFromStrings(data: string[]): string {

FILE: compiler/companion/supported-locales/src/index.ts
  type LocaleMapRecord (line 9) | interface LocaleMapRecord {

FILE: compiler/companion/webpack.config.js
  constant DEFAULT_COMMIT_HASH (line 4) | const DEFAULT_COMMIT_HASH="develop"

FILE: compiler/compiler/Compiler/Vendors/Clibsass/Sources/MurmurHash2.hpp
  function MurmurHash2 (line 32) | inline uint32_t MurmurHash2 ( const void * key, int len, uint32_t seed )

FILE: compiler/compiler/Compiler/Vendors/Clibsass/Sources/ast.cpp
  type Sass (line 7) | namespace Sass {
    type Sass_OP (line 11) | enum Sass_OP
    type Sass_OP (line 32) | enum Sass_OP
    function Include (line 313) | Include Import_Stub::resource() { return resource_; }
    function Argument_Obj (line 681) | Argument_Obj Arguments::get_rest_argument()
    function Argument_Obj (line 693) | Argument_Obj Arguments::get_keyword_argument()

FILE: compiler/compiler/Compiler/Vendors/Clibsass/Sources/ast.hpp
  class Operand (line 26) | class Operand {
    method Operand (line 28) | Operand(Sass_OP operand, bool ws_before = false, bool ws_after = false)
    type Sass_OP (line 32) | enum Sass_OP
  function hash_combine (line 43) | void hash_combine (std::size_t& seed, const T& val)
  type Sass_OP (line 50) | enum Sass_OP
  type Sass_OP (line 52) | enum Sass_OP
  function namespace (line 57) | class AST_Node : public SharedObj {
  class Vectorized (line 210) | class Vectorized {
    method reset_hash (line 214) | void reset_hash() { hash_ = 0; }
    method adjust_after_pushing (line 215) | virtual void adjust_after_pushing(T element) { }
    method Vectorized (line 217) | Vectorized(size_t s = 0) : hash_(0)
    method Vectorized (line 219) | Vectorized(sass::vector<T> vec) :
    method length (line 224) | size_t length() const   { return elements_.size(); }
    method empty (line 225) | bool empty() const      { return elements_.empty(); }
    method clear (line 226) | void clear()            { return elements_.clear(); }
    method T (line 227) | T& last()               { return elements_.back(); }
    method T (line 228) | T& first()              { return elements_.front(); }
    method T (line 229) | const T& last() const   { return elements_.back(); }
    method T (line 230) | const T& first() const  { return elements_.front(); }
    method T (line 243) | T& operator[](size_t i) { return elements_[i]; }
    method T (line 244) | virtual const T& at(size_t i) const { return elements_.at(i); }
    method T (line 245) | virtual T& at(size_t i) { return elements_.at(i); }
    method T (line 246) | const T& get(size_t i) const { return elements_[i]; }
    method T (line 247) | const T& operator[](size_t i) const { return elements_[i]; }
    method concat (line 265) | void concat(const sass::vector<T>& v)
    method concat (line 272) | void concat(const Vectorized<T>* v)
    method unshift (line 280) | void unshift(T element)
    method T (line 288) | T shift() {
    method append (line 297) | void append(T element)
    method contains (line 309) | bool contains(const T& el) const {
    method elements (line 321) | void elements(sass::vector<T> e) {
    method hash (line 326) | virtual size_t hash() const
    method insert (line 337) | typename sass::vector<T>::iterator insert(P position, const V& val) {
    method end (line 342) | typename sass::vector<T>::iterator end() { return elements_.end(); }
    method begin (line 343) | typename sass::vector<T>::iterator begin() { return elements_.begin(); }
    method end (line 344) | typename sass::vector<T>::const_iterator end() const { return elements...
    method begin (line 345) | typename sass::vector<T>::const_iterator begin() const { return elemen...
    method erase (line 346) | typename sass::vector<T>::iterator erase(typename sass::vector<T>::ite...
    method erase (line 347) | typename sass::vector<T>::const_iterator erase(typename sass::vector<T...
  class Hashed (line 358) | class Hashed {
    method reset_hash (line 369) | void reset_hash() { hash_ = 0; }
    method reset_duplicate_key (line 370) | void reset_duplicate_key() { duplicate_key_ = {}; }
    method adjust_after_pushing (line 371) | virtual void adjust_after_pushing(std::pair<K, T> p) { }
    method Hashed (line 373) | Hashed(size_t s = 0)
    method length (line 384) | size_t length() const                  { return _keys.size(); }
    method empty (line 385) | bool empty() const                     { return _keys.empty(); }
    method has (line 386) | bool has(K k) const          {
    method T (line 389) | T at(K k) const {
    method has_duplicate_key (line 396) | bool has_duplicate_key() const         { return duplicate_key_ != null...
    method K (line 397) | K get_duplicate_key() const  { return duplicate_key_; }
    method Hashed (line 401) | Hashed& operator<<(std::pair<K, T> p)
    method Hashed (line 418) | Hashed& operator+=(Hashed* h)
  type Type (line 457) | enum Type {
  function adjust_after_pushing (line 504) | void adjust_after_pushing(Statement_Obj s) override {}
  class ParentStatement (line 516) | class ParentStatement : public Statement {
  type Type (line 768) | enum Type { MIXIN, FUNCTION }
  type Type (line 828) | enum Type { PLUS, MINUS, NOT, SLASH }
  function bubbles (line 888) | bool bubbles() override { return true; }
  function is_invisible (line 889) | bool is_invisible() const override { return false; }
  function bubbles (line 900) | bool bubbles() override { return true; }
  function isInvisible (line 901) | bool isInvisible() const { return empty(); }
  function is_invisible (line 902) | bool is_invisible() const override { return false; }
  function hash (line 906) | size_t hash() const override { return Vectorized::hash(); }
  function empty (line 947) | bool empty() const {
  function matchesAllTypes (line 954) | bool matchesAllTypes() const {
  class Parameters (line 1040) | class Parameters final : public AST_Node, public Vectorized<Parameter_Ob...

FILE: compiler/compiler/Compiler/Vendors/Clibsass/Sources/ast2c.cpp
  type Sass (line 8) | namespace Sass {

FILE: compiler/compiler/Compiler/Vendors/Clibsass/Sources/ast2c.hpp
  type Sass (line 8) | namespace Sass {
    class AST2C (line 10) | class AST2C : public Operation_CRTP<union Sass_Value*, AST2C> {
      method AST2C (line 14) | AST2C() { }

FILE: compiler/compiler/Compiler/Vendors/Clibsass/Sources/ast_def_macros.hpp
  class LocalOption (line 6) | class LocalOption {
    method LocalOption (line 11) | LocalOption(T& var)
    method LocalOption (line 16) | LocalOption(T& var, T orig)
    method reset (line 22) | void reset()

FILE: compiler/compiler/Compiler/Vendors/Clibsass/Sources/ast_fwd_decl.cpp
  type Sass (line 3) | namespace Sass {

FILE: compiler/compiler/Compiler/Vendors/Clibsass/Sources/ast_fwd_decl.hpp
  type Sass (line 13) | namespace Sass {
    class SourceData (line 15) | class SourceData
    class SourceFile (line 16) | class SourceFile
    class SynthFile (line 17) | class SynthFile
    class ItplFile (line 18) | class ItplFile
    class AST_Node (line 20) | class AST_Node
    class ParentStatement (line 22) | class ParentStatement
    class SimpleSelector (line 24) | class SimpleSelector
    class Parent_Reference (line 26) | class Parent_Reference
    class PreValue (line 28) | class PreValue
    class Block (line 29) | class Block
    class Expression (line 30) | class Expression
    class Statement (line 31) | class Statement
    class Value (line 32) | class Value
    class Declaration (line 33) | class Declaration
    class StyleRule (line 34) | class StyleRule
    class Bubble (line 35) | class Bubble
    class Trace (line 36) | class Trace
    class MediaRule (line 38) | class MediaRule
    class CssMediaRule (line 39) | class CssMediaRule
    class CssMediaQuery (line 40) | class CssMediaQuery
    class SupportsRule (line 42) | class SupportsRule
    class AtRule (line 43) | class AtRule
    class Keyframe_Rule (line 45) | class Keyframe_Rule
    class AtRootRule (line 46) | class AtRootRule
    class Assignment (line 47) | class Assignment
    class Import (line 49) | class Import
    class Import_Stub (line 50) | class Import_Stub
    class WarningRule (line 51) | class WarningRule
    class ErrorRule (line 53) | class ErrorRule
    class DebugRule (line 54) | class DebugRule
    class Comment (line 55) | class Comment
    class If (line 57) | class If
    class ForRule (line 58) | class ForRule
    class EachRule (line 59) | class EachRule
    class WhileRule (line 60) | class WhileRule
    class Return (line 61) | class Return
    class Content (line 62) | class Content
    class ExtendRule (line 63) | class ExtendRule
    class Definition (line 64) | class Definition
    class List (line 66) | class List
    class Map (line 67) | class Map
    class Function (line 68) | class Function
    class Mixin_Call (line 70) | class Mixin_Call
    class Binary_Expression (line 71) | class Binary_Expression
    class Unary_Expression (line 72) | class Unary_Expression
    class Function_Call (line 73) | class Function_Call
    class Custom_Warning (line 74) | class Custom_Warning
    class Custom_Error (line 75) | class Custom_Error
    class Variable (line 77) | class Variable
    class Number (line 78) | class Number
    class Color (line 79) | class Color
    class Color_RGBA (line 80) | class Color_RGBA
    class Color_HSLA (line 81) | class Color_HSLA
    class Boolean (line 82) | class Boolean
    class String (line 83) | class String
    class Null (line 84) | class Null
    class String_Schema (line 86) | class String_Schema
    class String_Constant (line 87) | class String_Constant
    class String_Quoted (line 88) | class String_Quoted
    class Media_Query (line 90) | class Media_Query
    class Media_Query_Expression (line 91) | class Media_Query_Expression
    class SupportsCondition (line 92) | class SupportsCondition
    class SupportsOperation (line 93) | class SupportsOperation
    class SupportsNegation (line 94) | class SupportsNegation
    class SupportsDeclaration (line 95) | class SupportsDeclaration
    class Supports_Interpolation (line 96) | class Supports_Interpolation
    class At_Root_Query (line 98) | class At_Root_Query
    class Parameter (line 99) | class Parameter
    class Parameters (line 100) | class Parameters
    class Argument (line 101) | class Argument
    class Arguments (line 102) | class Arguments
    class Selector (line 103) | class Selector
    class Selector_Schema (line 106) | class Selector_Schema
    class PlaceholderSelector (line 107) | class PlaceholderSelector
    class TypeSelector (line 108) | class TypeSelector
    class ClassSelector (line 109) | class ClassSelector
    class IDSelector (line 110) | class IDSelector
    class AttributeSelector (line 111) | class AttributeSelector
    class PseudoSelector (line 113) | class PseudoSelector
    class SelectorComponent (line 115) | class SelectorComponent
    class SelectorCombinator (line 116) | class SelectorCombinator
    class CompoundSelector (line 117) | class CompoundSelector
    class ComplexSelector (line 118) | class ComplexSelector
    class SelectorList (line 119) | class SelectorList
    class Context (line 122) | class Context
    class Expand (line 123) | class Expand
    class Eval (line 124) | class Eval
    class Extension (line 126) | class Extension

FILE: compiler/compiler/Compiler/Vendors/Clibsass/Sources/ast_helpers.hpp
  type Sass (line 11) | namespace Sass {
    function PtrHashFn (line 37) | size_t PtrHashFn(const T* ptr) {
    type PtrHash (line 41) | struct PtrHash {
    function PtrEqualityFn (line 49) | bool PtrEqualityFn(const T* lhs, const T* rhs) {
    type PtrEquality (line 53) | struct PtrEquality {
    function ObjPtrHashFn (line 68) | size_t ObjPtrHashFn(const T& obj) {
    type ObjPtrHash (line 72) | struct ObjPtrHash {
    function ObjHashFn (line 82) | size_t ObjHashFn(const T& obj) {
    type ObjHash (line 86) | struct ObjHash {
    function PtrObjHashFn (line 96) | size_t PtrObjHashFn(const T* obj) {
    type PtrObjHash (line 100) | struct PtrObjHash {
    function ObjPtrEqualityFn (line 110) | bool ObjPtrEqualityFn(const T& lhs, const T& rhs) {
    type ObjPtrEquality (line 114) | struct ObjPtrEquality {
    function PtrObjEqualityFn (line 124) | bool PtrObjEqualityFn(const T* lhs, const T* rhs) {
    type PtrObjEquality (line 130) | struct PtrObjEquality {
    function ObjEqualityFn (line 140) | bool ObjEqualityFn(const T& lhs, const T& rhs) {
    type ObjEquality (line 144) | struct ObjEquality {
    function ObjHashEqualityFn (line 162) | bool ObjHashEqualityFn(const T& lhs, const T& rhs) {
    type ObjHashEquality (line 167) | struct ObjHashEquality {
    function PtrObjLessThanFn (line 182) | bool PtrObjLessThanFn(const T* lhs, const T* rhs) {
    type PtrObjLessThan (line 188) | struct PtrObjLessThan {
    function ObjLessThanFn (line 198) | bool ObjLessThanFn(const T& lhs, const T& rhs) {
    type ObjLessThan (line 202) | struct ObjLessThan {
    function ListEquality (line 218) | bool ListEquality(const X& lhs, const Y& rhs,
    function listIsEmpty (line 228) | bool listIsEmpty(T* cnt) {
    function listEraseItemIf (line 234) | void listEraseItemIf(T& vec, UnaryPredicate* predicate)
    function listIsSubsetOrEqual (line 242) | bool listIsSubsetOrEqual(const T& lhs, const T& rhs) {
    function isFakePseudoElement (line 255) | inline bool isFakePseudoElement(const sass::string& name)
    function isSubselectorPseudo (line 268) | inline bool isSubselectorPseudo(const sass::string& norm)
    function isSelectorPseudoClass (line 280) | inline bool isSelectorPseudoClass(const sass::string& test)
    function isSelectorPseudoElement (line 295) | inline bool isSelectorPseudoElement(const sass::string& test)
    function isSelectorPseudoBinominal (line 304) | inline bool isSelectorPseudoBinominal(const sass::string& test)

FILE: compiler/compiler/Compiler/Vendors/Clibsass/Sources/ast_sel_cmp.cpp
  type Sass (line 7) | namespace Sass {

FILE: compiler/compiler/Compiler/Vendors/Clibsass/Sources/ast_sel_super.cpp
  type Sass (line 8) | namespace Sass {
    function selectorPseudoNamed (line 38) | sass::vector<PseudoSelectorObj> selectorPseudoNamed(
    function simpleIsSuperselector (line 60) | bool simpleIsSuperselector(
    function simpleIsSuperselectorOfCompound (line 96) | bool simpleIsSuperselectorOfCompound(
    function typeIsSuperselectorOfCompound (line 111) | bool typeIsSuperselectorOfCompound(
    function idIsSuperselectorOfCompound (line 126) | bool idIsSuperselectorOfCompound(
    function pseudoIsSuperselectorOfPseudo (line 141) | bool pseudoIsSuperselectorOfPseudo(
    function pseudoNotIsSuperselectorOfCompound (line 158) | bool pseudoNotIsSuperselectorOfCompound(
    function selectorPseudoIsSuperselector (line 191) | bool selectorPseudoIsSuperselector(
    function compoundIsSuperselector (line 275) | bool compoundIsSuperselector(
    function compoundIsSuperselector (line 317) | bool compoundIsSuperselector(
    function complexIsSuperselector (line 334) | bool complexIsSuperselector(
    function complexIsParentSuperselector (line 466) | bool complexIsParentSuperselector(
    function listHasSuperslectorForComplex (line 489) | bool listHasSuperslectorForComplex(
    function listIsSuperslector (line 509) | bool listIsSuperslector(

FILE: compiler/compiler/Compiler/Vendors/Clibsass/Sources/ast_sel_unify.cpp
  type Sass (line 7) | namespace Sass {
    function unifyComplex (line 16) | sass::vector<sass::vector<SelectorComponentObj>> unifyComplex(
    function CompoundSelector (line 61) | CompoundSelector* CompoundSelector::unifyWith(CompoundSelector* rhs)
    function CompoundSelector (line 82) | CompoundSelector* SimpleSelector::unifyWith(CompoundSelector* rhs)
    function CompoundSelector (line 123) | CompoundSelector* TypeSelector::unifyWith(CompoundSelector* rhs)
    function CompoundSelector (line 146) | CompoundSelector* IDSelector::unifyWith(CompoundSelector* rhs)
    function CompoundSelector (line 159) | CompoundSelector* PseudoSelector::unifyWith(CompoundSelector* compound)
    function SimpleSelector (line 209) | SimpleSelector* TypeSelector::unifyWith(const SimpleSelector* rhs)
    function SelectorList (line 238) | SelectorList* ComplexSelector::unifyWith(ComplexSelector* rhs)
    function SelectorList (line 255) | SelectorList* SelectorList::unifyWith(SelectorList* rhs)

FILE: compiler/compiler/Compiler/Vendors/Clibsass/Sources/ast_sel_weave.cpp
  type Sass (line 9) | namespace Sass {
    function hasRoot (line 14) | bool hasRoot(const CompoundSelector* compound)
    function isUnique (line 25) | bool isUnique(const SimpleSelector* simple)
    function mustUnify (line 40) | bool mustUnify(
    function cmpGroups (line 78) | bool cmpGroups(
    function checkForEmptyChild (line 125) | bool checkForEmptyChild(const T& item) {
    function cmpChunkForEmptySequence (line 133) | bool cmpChunkForEmptySequence(
    function cmpChunkForParentSuperselector (line 144) | bool cmpChunkForParentSuperselector(
    function getChunks (line 162) | sass::vector<sass::vector<T>> getChunks(
    function CompoundSelectorObj (line 196) | CompoundSelectorObj getFirstIfRoot(sass::vector<SelectorComponentObj>&...
    function groupSelectors (line 213) | sass::vector<sass::vector<SelectorComponentObj>> groupSelectors(
    function mergeInitialCombinators (line 246) | bool mergeInitialCombinators(
    function mergeFinalCombinators (line 290) | bool mergeFinalCombinators(
    function weave (line 466) | sass::vector<sass::vector<SelectorComponentObj>> weave(
    function weaveParents (line 522) | sass::vector<sass::vector<SelectorComponentObj>> weaveParents(

FILE: compiler/compiler/Compiler/Vendors/Clibsass/Sources/ast_selectors.cpp
  type Sass (line 9) | namespace Sass {
    function CompoundSelectorObj (line 159) | CompoundSelectorObj SimpleSelector::wrapInCompound()
    function ComplexSelectorObj (line 166) | ComplexSelectorObj SimpleSelector::wrapInComplex()
    function PseudoSelectorObj (line 315) | PseudoSelectorObj PseudoSelector::withSelector(SelectorListObj selector)
    function SelectorListObj (line 446) | SelectorListObj ComplexSelector::wrapInList()
    function ComplexSelector (line 503) | ComplexSelector* SelectorComponent::wrapInComplex()
    function CssMediaQuery_Obj (line 661) | CssMediaQuery_Obj CssMediaQuery::merge(CssMediaQuery_Obj& other)
    function cmpSimpleSelectors (line 951) | bool cmpSimpleSelectors(SimpleSelector* a, SimpleSelector* b)
    function SelectorList (line 979) | SelectorList* ComplexSelector::resolve_parent_refs(SelectorStack pstac...
    function SelectorList (line 1040) | SelectorList* SelectorList::resolve_parent_refs(SelectorStack pstack, ...

FILE: compiler/compiler/Compiler/Vendors/Clibsass/Sources/ast_selectors.hpp
  function maxSpecificity (line 53) | virtual size_t maxSpecificity() const { return specificity(); }
  function minSpecificity (line 54) | virtual size_t minSpecificity() const { return specificity(); }
  class SimpleSelector (line 85) | class SimpleSelector : public Selector {
    type Simple_Type (line 87) | enum Simple_Type {
    method IDSelector (line 122) | virtual IDSelector* getIdSelector() { return NULL; }
    method TypeSelector (line 123) | virtual TypeSelector* getTypeSelector() { return NULL; }
    method PseudoSelector (line 124) | virtual PseudoSelector* getPseudoSelector() { return NULL; }
    method isInvisible (line 129) | virtual bool isInvisible() const { return false; }
  function getSortOrder (line 152) | int getSortOrder() const override final { return 0; }
  function isInvisible (line 153) | bool isInvisible() const override { return true; }
  function getSortOrder (line 168) | int getSortOrder() const override final { return 1; }
  function TypeSelector (line 172) | TypeSelector* getTypeSelector() override { return this; }
  function getSortOrder (line 185) | int getSortOrder() const override final { return 2; }
  function getSortOrder (line 199) | int getSortOrder() const override final { return 2; }
  function IDSelector (line 202) | IDSelector* getIdSelector() final override { return this; }
  function getSortOrder (line 219) | int getSortOrder() const override final { return 2; }
  function getSortOrder (line 240) | int getSortOrder() const override final { return 3; }
  function isElement (line 250) | bool isElement() const { return !isClass(); }
  function isSyntacticElement (line 254) | bool isSyntacticElement() const { return !isSyntacticClass(); }
  function PseudoSelector (line 260) | PseudoSelector* getPseudoSelector() final override { return this; }
  class SelectorComponent (line 318) | class SelectorComponent : public Selector {
    method empty (line 328) | virtual bool empty() const { return false; }
    method maxSpecificity (line 335) | size_t maxSpecificity() const override { return 0; }
    method minSpecificity (line 336) | size_t minSpecificity() const override { return 0; }
    method isCompound (line 338) | virtual bool isCompound() const { return false; }
    method isCombinator (line 339) | virtual bool isCombinator() const { return false; }
    method CompoundSelector (line 342) | virtual CompoundSelector* getCompound() { return NULL; }
    method SelectorCombinator (line 343) | virtual SelectorCombinator* getCombinator() { return NULL; }
    method CompoundSelector (line 344) | virtual const CompoundSelector* getCompound() const { return NULL; }
    method SelectorCombinator (line 345) | virtual const SelectorCombinator* getCombinator() const { return NULL; }
  type Combinator (line 361) | enum Combinator { CHILD /* > */, GENERAL /* ~ */, ADJACENT /* + */}
  function has_real_parent_ref (line 371) | bool has_real_parent_ref() const override { return false; }
  function has_placeholder (line 372) | bool has_placeholder() const override { return false; }
  function SelectorCombinator (line 375) | SelectorCombinator* getCombinator() final override { return this; }
  function SelectorCombinator (line 376) | const SelectorCombinator* getCombinator() const final override { return ...
  fun
Copy disabled (too large) Download .json
Condensed preview — 5995 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (16,628K chars).
[
  {
    "path": ".bazelignore",
    "chars": 312,
    "preview": ".git\n.github\ncompiler/compiler/Compiler/.build\nnpm_modules\nnode_modules\nbzl/valdi/npm/node_modules\ncompiler/companion/no"
  },
  {
    "path": ".bazelrc",
    "chars": 3615,
    "preview": "try-import %workspace%/.bazelrc.internal\n\n# No bzlmod yet\ncommon --noenable_bzlmod\ncommon --enable_workspace\n\ncommon --b"
  },
  {
    "path": ".bazelversion",
    "chars": 5,
    "preview": "7.2.1"
  },
  {
    "path": ".cursorrules",
    "chars": 1686,
    "preview": "# Valdi Open Source - Cursor Rules\n\n## ⚠️ Open Source Project\n\nThis is an open source project. Never commit secrets, API"
  },
  {
    "path": ".editorconfig",
    "chars": 522,
    "preview": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n\n[*.{ts,ts"
  },
  {
    "path": ".gitattributes",
    "chars": 718,
    "preview": "third-party/** linguist-generated=true\n\n# Git LFS for open source\nbin/compiler/** filter=lfs diff=lfs merge=lfs -text\nbi"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 799,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: bug\nassignees: ''\n\n---\n\n**Describe the "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/documentation.md",
    "chars": 566,
    "preview": "---\nname: Documentation Improvement\nabout: Suggest improvements to documentation\ntitle: '[DOCS] '\nlabels: documentation\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 603,
    "preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: enhancement\nassignees: ''\n\n---\n\n**Is"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 1082,
    "preview": "## Description\n<!-- Provide a clear and concise description of your changes -->\n\n## Type of Change\n- [ ] Bug fix (non-br"
  },
  {
    "path": ".github/workflows/README.md",
    "chars": 8849,
    "preview": "# GitHub Workflows\n\n## Testing workflows locally\n\nYou can run GitHub Actions locally in two ways.\n\n### 1. Run the script"
  },
  {
    "path": ".github/workflows/bzl-changes.yml",
    "chars": 7184,
    "preview": "name: Bazel Config & CI Tools Tests\n\non:\n  pull_request:\n    paths:\n      - '**/*.bzl'\n      - '**/BUILD.bazel'\n      - "
  },
  {
    "path": ".github/workflows/comment-test-results.yml",
    "chars": 2936,
    "preview": "name: Comment Test Results\n\non:\n  workflow_call:\n    inputs:\n      workflow_name:\n        description: 'Name of the call"
  },
  {
    "path": ".github/workflows/pr-size-labeler.yml",
    "chars": 5685,
    "preview": "name: PR Size Labeler\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize]\n\npermissions:\n  contents: read\n  p"
  },
  {
    "path": ".github/workflows/publish-npm.yml",
    "chars": 3945,
    "preview": "name: Publish NPM Packages\n\non:\n  push:\n    branches:\n      - main\n      - master\n    paths:\n      - 'npm_modules/*/pack"
  },
  {
    "path": ".github/workflows/release-test.yml",
    "chars": 1575,
    "preview": "# Run before cutting a release: bootstrap an app from bleeding edge (main) of\n# the public GitHub Valdi/Valdi_Widgets, b"
  },
  {
    "path": ".github/workflows/test-cli-linux.yml",
    "chars": 15662,
    "preview": "name: Test CLI on Linux Distributions\n\non:\n  pull_request:\n    paths:\n      - 'npm_modules/cli/src/**'\n      - 'npm_modu"
  },
  {
    "path": ".github/workflows/welcome.yml",
    "chars": 1328,
    "preview": "name: Welcome\n\non:\n  pull_request_target:\n    types: [opened]\n  issues:\n    types: [opened]\n\njobs:\n  welcome:\n    runs-o"
  },
  {
    "path": ".gitignore",
    "chars": 133,
    "preview": "*.DS_Store\n\n/bazel-*\n\n**/archive-url\n\nscripts/valdi-swift-toolchain\n\n# Binaries\nscripts/mirroring/bin\n.nlo-venv\n**deploy"
  },
  {
    "path": ".prettierrc.json",
    "chars": 125,
    "preview": "{\n  \"printWidth\": 120,\n  \"singleQuote\": true,\n  \"jsxSingleQuote\": true,\n  \"arrowParens\": \"avoid\",\n  \"trailingComma\": \"al"
  },
  {
    "path": "AGENTS.md",
    "chars": 20907,
    "preview": "# AGENTS.md - Guide for AI Coding Assistants\n\nThis document provides context and guidelines for AI coding assistants wor"
  },
  {
    "path": "BUILD.bazel",
    "chars": 457,
    "preview": "load(\"@aspect_rules_js//npm:defs.bzl\", \"npm_link_package\")\n\n# tsc demands that these be defined in the root of the works"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 4935,
    "preview": "# Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders of the Valdi community pledge to make partici"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 3417,
    "preview": "# Contributing to Valdi\n\nThank you for your interest in Valdi. We welcome community contributions and appreciate your ti"
  },
  {
    "path": "LICENSE.md",
    "chars": 1569,
    "preview": "Copyright © 2025 Snap Inc.\n\nValdi is made available under the MIT License.\n\n**MIT License**\n\nPermission is hereby grante"
  },
  {
    "path": "MODULE.bazel",
    "chars": 15266,
    "preview": "module(name = \"valdi\", version = \"0.1\")\n\nhttp_archive = use_repo_rule(\"@bazel_tools//tools/build_defs/repo:http.bzl\", \"h"
  },
  {
    "path": "README.md",
    "chars": 6673,
    "preview": "# Valdi\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](./LICENSE.md)\n[![Platforms](https://img.sh"
  },
  {
    "path": "SECURITY.md",
    "chars": 190,
    "preview": "# Security Protocol\n\nIf you believe you've found a security vulnerability in this project, please report it to us via: ["
  },
  {
    "path": "WORKSPACE",
    "chars": 1510,
    "preview": "workspace(name = \"valdi\")\n\nload(\"//bzl:workspace_prepare.bzl\", \"valdi_prepare_workspace\")\n\nvaldi_prepare_workspace(__wor"
  },
  {
    "path": "WORKSPACE.bzlmod",
    "chars": 148,
    "preview": "android_sdk_repository(\n    name = \"androidsdk\",\n    api_level = 36,  # The API version for Android compileSdk\n    build"
  },
  {
    "path": "ai-skills/CONTRIBUTING_SKILLS.md",
    "chars": 2541,
    "preview": "# Contributing Skills\n\nSkills are neutral, agent-agnostic markdown files that teach AI assistants how to work with the V"
  },
  {
    "path": "ai-skills/registry.json",
    "chars": 3449,
    "preview": "{\n  \"version\": \"1.0.0\",\n  \"skills\": [\n    { \"name\": \"valdi-tsx\", \"description\": \"Valdi TSX component patterns, lifecycle"
  },
  {
    "path": "ai-skills/skills/valdi-android/skill.md",
    "chars": 1954,
    "preview": "# Android Runtime Rules\n\n**Applies to**: Kotlin/Java files in `/valdi/src/valdi/android/` and related Android runtime co"
  },
  {
    "path": "ai-skills/skills/valdi-async/skill.md",
    "chars": 7731,
    "preview": "# Valdi Async & Lifecycle Safety\n\nAsync operations that complete after a component is destroyed will call `setState()`\no"
  },
  {
    "path": "ai-skills/skills/valdi-async/tests/BUILD.bazel",
    "chars": 480,
    "preview": "load(\"//bzl/valdi:valdi_module.bzl\", \"valdi_module\")\n\nvaldi_module(\n    name = \"tests\",\n    srcs = glob([\n        \"src/*"
  },
  {
    "path": "ai-skills/skills/valdi-async/tests/README.md",
    "chars": 900,
    "preview": "# valdi-async skill tests\n\nCompile check for the async lifecycle safety patterns taught in `skill.md`.\n\n## What's tested"
  },
  {
    "path": "ai-skills/skills/valdi-async/tests/src/reference.tsx",
    "chars": 5601,
    "preview": "// valdi-async skill reference — compile check for async lifecycle safety patterns.\n// This file must compile cleanly ag"
  },
  {
    "path": "ai-skills/skills/valdi-async/tests/tsconfig.json",
    "chars": 83,
    "preview": "{\"extends\": \"../../../../src/valdi_modules/src/valdi/_configs/base.tsconfig.json\"}\n"
  },
  {
    "path": "ai-skills/skills/valdi-bazel/skill.md",
    "chars": 2582,
    "preview": "# Bazel Build System Rules\n\n**Applies to**: `BUILD.bazel`, `*.bzl` files in `/bzl/`, `WORKSPACE`, `MODULE.bazel`\n\n## Ove"
  },
  {
    "path": "ai-skills/skills/valdi-compiler/skill.md",
    "chars": 2868,
    "preview": "# Valdi Compiler Rules\n\n**Applies to**: Swift files in `/compiler/compiler/`\n\n## Overview\n\nThe Valdi compiler consists o"
  },
  {
    "path": "ai-skills/skills/valdi-component-tests/skill.md",
    "chars": 18535,
    "preview": "# Write Valdi Component Tests\n\nWrite unit tests for a Valdi component using standard Valdi test suite patterns.\n\n## Step"
  },
  {
    "path": "ai-skills/skills/valdi-component-tests/tests/BUILD.bazel",
    "chars": 680,
    "preview": "load(\"//bzl/valdi:valdi_module.bzl\", \"valdi_module\")\n\nvaldi_module(\n    name = \"tests\",\n    srcs = glob([\n        \"src/*"
  },
  {
    "path": "ai-skills/skills/valdi-component-tests/tests/README.md",
    "chars": 1282,
    "preview": "# valdi-component-tests skill tests\n\nReference spec file demonstrating all test utility patterns from `skill.md`.\n\n## Fi"
  },
  {
    "path": "ai-skills/skills/valdi-component-tests/tests/src/ProfileCard.tsx",
    "chars": 1173,
    "preview": "// Simple component used by the component-tests skill reference spec.\n// Exercises: elementKeyFind, elementTypeFind, com"
  },
  {
    "path": "ai-skills/skills/valdi-component-tests/tests/test/ProfileCardTest.spec.tsx",
    "chars": 4198,
    "preview": "// valdi-component-tests skill reference — demonstrates all test utility patterns.\n// Run: bzl test //ai-skills/skills/v"
  },
  {
    "path": "ai-skills/skills/valdi-component-tests/tests/tsconfig.json",
    "chars": 83,
    "preview": "{\"extends\": \"../../../../src/valdi_modules/src/valdi/_configs/base.tsconfig.json\"}\n"
  },
  {
    "path": "ai-skills/skills/valdi-cpp-runtime/skill.md",
    "chars": 2608,
    "preview": "# C++ Runtime Rules\n\n**Applies to**: C++ files in `/valdi/`, `/valdi_core/`, `/snap_drawing/`\n\n## Overview\n\nValdi's runt"
  },
  {
    "path": "ai-skills/skills/valdi-custom-view/skill.md",
    "chars": 2511,
    "preview": "# Custom View Rules\n\n**Applies to**: `**/*.tsx` files using `<custom-view>` elements.\n\n## `<custom-view>` Element\n\n`<cus"
  },
  {
    "path": "ai-skills/skills/valdi-ios/skill.md",
    "chars": 2169,
    "preview": "# iOS Runtime Rules\n\n**Applies to**: Objective-C/C++ files in `/valdi/src/valdi/ios/` and related iOS runtime code\n\n## O"
  },
  {
    "path": "ai-skills/skills/valdi-migrate/skill.md",
    "chars": 7917,
    "preview": "# Valdi Migration Assistant\n\nGuidance for migrating code from Flutter, React, or Jetpack Compose to Valdi.\n\n## When to u"
  },
  {
    "path": "ai-skills/skills/valdi-migrate/tests/.gitignore",
    "chars": 80,
    "preview": "# Generated by integration tests — run `bazel build` after regenerating\noutput/\n"
  },
  {
    "path": "ai-skills/skills/valdi-migrate/tests/BUILD.bazel",
    "chars": 640,
    "preview": "load(\"//bzl/valdi:valdi_module.bzl\", \"valdi_module\")\n\nvaldi_module(\n    name = \"tests\",\n    srcs = glob([\n        \"src/*"
  },
  {
    "path": "ai-skills/skills/valdi-migrate/tests/README.md",
    "chars": 2599,
    "preview": "# valdi-migrate skill tests\n\nValidates that code migrated to Valdi using the `valdi-migrate` skill is free of\nanti-patte"
  },
  {
    "path": "ai-skills/skills/valdi-migrate/tests/check_antipatterns.py",
    "chars": 3402,
    "preview": "#!/usr/bin/env python3\n\"\"\"\nValidates a Valdi TSX file for known anti-patterns.\nUsage: python3 check_antipatterns.py <fil"
  },
  {
    "path": "ai-skills/skills/valdi-migrate/tests/compose_example.kt",
    "chars": 2386,
    "preview": "// Jetpack Compose example — @Composable functions, remember, LaunchedEffect,\n// LazyColumn, navigation, CompositionLoca"
  },
  {
    "path": "ai-skills/skills/valdi-migrate/tests/flutter_example.dart",
    "chars": 3101,
    "preview": "// Flutter example — mix of StatelessWidget, StatefulWidget, ListView.builder,\n// navigation, SharedPreferences, and a P"
  },
  {
    "path": "ai-skills/skills/valdi-migrate/tests/react_example.tsx",
    "chars": 2518,
    "preview": "// React example — hooks, Context, FlatList, fetch, styled-components.\n// Goal: migrate this to Valdi.\n\nimport React, { "
  },
  {
    "path": "ai-skills/skills/valdi-migrate/tests/src/expected_valdi.tsx",
    "chars": 7840,
    "preview": "// Expected Valdi migrations — used to validate skill output correctness.\n// Each section corresponds to a source snippe"
  },
  {
    "path": "ai-skills/skills/valdi-migrate/tests/tsconfig.json",
    "chars": 89,
    "preview": "{\n    \"extends\": \"../../../../src/valdi_modules/src/valdi/_configs/base.tsconfig.json\"\n}\n"
  },
  {
    "path": "ai-skills/skills/valdi-overview/skill.md",
    "chars": 2109,
    "preview": "# Valdi Open Source - Cursor Rules\n\n## ⚠️ Open Source Project\n\nThis is an open source project. Never commit secrets, API"
  },
  {
    "path": "ai-skills/skills/valdi-perf/skill.md",
    "chars": 5767,
    "preview": "# Valdi Performance Patterns\n\nValdi re-renders a child component whenever its viewModel reference changes. Most\nunnecess"
  },
  {
    "path": "ai-skills/skills/valdi-perf/tests/BUILD.bazel",
    "chars": 478,
    "preview": "load(\"//bzl/valdi:valdi_module.bzl\", \"valdi_module\")\n\nvaldi_module(\n    name = \"tests\",\n    srcs = glob([\n        \"src/*"
  },
  {
    "path": "ai-skills/skills/valdi-perf/tests/README.md",
    "chars": 856,
    "preview": "# valdi-perf skill tests\n\nCompile check for the performance patterns taught in `skill.md`.\n\n## What's tested\n\n`src/refer"
  },
  {
    "path": "ai-skills/skills/valdi-perf/tests/src/reference.tsx",
    "chars": 5135,
    "preview": "// valdi-perf skill reference — compile check for performance patterns.\n// This file must compile cleanly against the Va"
  },
  {
    "path": "ai-skills/skills/valdi-perf/tests/tsconfig.json",
    "chars": 83,
    "preview": "{\"extends\": \"../../../../src/valdi_modules/src/valdi/_configs/base.tsconfig.json\"}\n"
  },
  {
    "path": "ai-skills/skills/valdi-polyglot-module/skill.md",
    "chars": 3240,
    "preview": "# Polyglot Module Rules\n\n**Applies to**: `**/BUILD.bazel` and source files in modules with platform-specific implementat"
  },
  {
    "path": "ai-skills/skills/valdi-setup/skill.md",
    "chars": 3621,
    "preview": "# Valdi Module Setup\n\n## BUILD.bazel — valdi_module()\n\n```python\nload(\"//bzl/valdi:valdi_module.bzl\", \"valdi_module\")\n\nv"
  },
  {
    "path": "ai-skills/skills/valdi-testing/skill.md",
    "chars": 1772,
    "preview": "# Valdi Testing\n\n## Component Tests (most common)\n\nUse `valdiIt` from `valdi_test/test/JSXTestUtils` as the test wrapper"
  },
  {
    "path": "ai-skills/skills/valdi-tsx/skill.md",
    "chars": 11833,
    "preview": "# Valdi TypeScript/TSX Component Rules\n\n**Applies to**: TypeScript and TSX files in `/src/valdi_modules/`, `/apps/`, `/m"
  },
  {
    "path": "ai-skills/skills/valdi-tsx/tests/BUILD.bazel",
    "chars": 477,
    "preview": "load(\"//bzl/valdi:valdi_module.bzl\", \"valdi_module\")\n\nvaldi_module(\n    name = \"tests\",\n    srcs = glob([\n        \"src/*"
  },
  {
    "path": "ai-skills/skills/valdi-tsx/tests/README.md",
    "chars": 993,
    "preview": "# valdi-tsx skill tests\n\nCompile check for the core TSX component patterns taught in `skill.md`.\n\n## What's tested\n\n`src"
  },
  {
    "path": "ai-skills/skills/valdi-tsx/tests/src/reference.tsx",
    "chars": 4632,
    "preview": "// valdi-tsx skill reference — compile check for core component patterns.\n// This file must compile cleanly against the "
  },
  {
    "path": "ai-skills/skills/valdi-tsx/tests/tsconfig.json",
    "chars": 83,
    "preview": "{\"extends\": \"../../../../src/valdi_modules/src/valdi/_configs/base.tsconfig.json\"}\n"
  },
  {
    "path": "apps/.prettierrc.json",
    "chars": 116,
    "preview": "{\n  \"printWidth\": 120,\n  \"singleQuote\": true,\n  \"trailingComma\": \"all\",\n  \"arrowParens\": \"avoid\",\n  \"tabWidth\": 2\n}\n"
  },
  {
    "path": "apps/benchmark/BUILD.bazel",
    "chars": 795,
    "preview": "load(\"//bzl/valdi:valdi_application.bzl\", \"valdi_application\")\nload(\"//bzl/valdi:valdi_cli_application.bzl\", \"valdi_cli_"
  },
  {
    "path": "apps/benchmark/app_assets/android/values/colors.xml",
    "chars": 108,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"splash_bg\">#FFFFFF</color>\n</resources>\n"
  },
  {
    "path": "apps/benchmark/app_assets/android/values/themes.xml",
    "chars": 228,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <style name=\"Theme.MyApp.Launch\" parent=\"Theme.AppCompat.Light.No"
  },
  {
    "path": "apps/benchmark/app_assets/ios/Icons.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 3508,
    "preview": "{\n  \"images\": [\n    {\n      \"size\": \"60x60\",\n      \"expected-size\": \"180\",\n      \"filename\": \"180.png\",\n      \"folder\": "
  },
  {
    "path": "apps/benchmark/src/android/BUILD.bazel",
    "chars": 346,
    "preview": "load(\"//bzl/valdi:valdi_android_library.bzl\", \"valdi_android_library\")\n\nvaldi_android_library(\n    name = \"native_module"
  },
  {
    "path": "apps/benchmark/src/android/MyNativeModuleFactory.kt",
    "chars": 1391,
    "preview": "package com.snap.valdi.benchmark\nimport com.snapchat.client.valdi_core.ModuleFactory\nimport com.snap.valdi.modules.Regis"
  },
  {
    "path": "apps/benchmark/src/cpp/BUILD.bazel",
    "chars": 207,
    "preview": "cc_library(\n    name = \"native_module_cpp\",\n    srcs = [\"CppModule.cpp\"],\n    hdrs = [],\n    includes = [],\n    visibili"
  },
  {
    "path": "apps/benchmark/src/cpp/CppModule.cpp",
    "chars": 2407,
    "preview": "#include \"valdi_core/cpp/JavaScript/ModuleFactoryRegistry.hpp\"\n#include \"valdi_core/cpp/Utils/ConsoleLogger.hpp\"\n#includ"
  },
  {
    "path": "apps/benchmark/src/ios/BUILD.bazel",
    "chars": 257,
    "preview": "objc_library(\n    name = \"native_module_ios\",\n    srcs = glob([\n        \"**/*.m\",\n    ]),\n    hdrs = [],\n    copts = [\"-"
  },
  {
    "path": "apps/benchmark/src/ios/SCMyNativeModuleFactory.m",
    "chars": 1598,
    "preview": "#import \"valdi_core/SCValdiModuleFactoryRegistry.h\"\n#import <BenchmarkTypes/BenchmarkTypes.h>\n#import <Foundation/Founda"
  },
  {
    "path": "apps/benchmark/src/valdi/benchmark/BUILD.bazel",
    "chars": 1249,
    "preview": "load(\"//bzl/valdi:valdi_module.bzl\", \"valdi_module\")\n\nvaldi_module(\n    name = \"benchmark\",\n    srcs = glob([\n        \"s"
  },
  {
    "path": "apps/benchmark/src/valdi/benchmark/src/BenchmarkApp.tsx",
    "chars": 2724,
    "preview": "import { Component } from 'valdi_core/src/Component';\nimport { ComponentConstructor, IComponent } from 'valdi_core/src/I"
  },
  {
    "path": "apps/benchmark/src/valdi/benchmark/src/BenchmarkSingleRunComponent.tsx",
    "chars": 4291,
    "preview": "import { StatefulComponent } from 'valdi_core/src/Component';\nimport { IComponent } from 'valdi_core/src/IComponent';\nim"
  },
  {
    "path": "apps/benchmark/src/valdi/benchmark/src/DrawFrameBenchmark.tsx",
    "chars": 21980,
    "preview": "import { NavigationPage } from 'valdi_navigation/src/NavigationPage';\nimport { NavigationPageStatefulComponent } from 'v"
  },
  {
    "path": "apps/benchmark/src/valdi/benchmark/src/MarshallingTest.tsx",
    "chars": 5264,
    "preview": "// TS call native and record\n// - TS enter time (1)\n// - native enter time (2)\n// - native leave time (3)\n// - TS leave "
  },
  {
    "path": "apps/benchmark/src/valdi/benchmark/src/MicroBenchTest.tsx",
    "chars": 2071,
    "preview": "import { NavigationPage } from 'valdi_navigation/src/NavigationPage';\nimport { NavigationPageStatefulComponent } from 'v"
  },
  {
    "path": "apps/benchmark/src/valdi/benchmark/src/NativeHelper.d.ts",
    "chars": 548,
    "preview": "import { StringMap } from 'coreutils/src/StringMap';\n\n/**\n * @ExportModule\n */\n\n// @ExportModel\nexport interface Functio"
  },
  {
    "path": "apps/benchmark/src/valdi/benchmark/src/ProtoImportTest.tsx",
    "chars": 1648,
    "preview": "import { NavigationPage } from 'valdi_navigation/src/NavigationPage';\nimport { NavigationPageStatefulComponent } from 'v"
  },
  {
    "path": "apps/benchmark/src/valdi/benchmark/src/RenderTest.tsx",
    "chars": 2377,
    "preview": "import { NavigationPage } from 'valdi_navigation/src/NavigationPage';\nimport { NavigationPageStatefulComponent } from 'v"
  },
  {
    "path": "apps/benchmark/src/valdi/benchmark/src/complex_test.proto",
    "chars": 852610,
    "preview": "// Auto-generated complex Protobuf schema for testing (no WKT imports; prefixed enum values)\n// Contains 200 enums and 1"
  },
  {
    "path": "apps/benchmark/src/valdi/benchmark/src/cpp.d.ts",
    "chars": 116,
    "preview": "export function question(q: string): string;\nexport function print(s: string): void;\nexport function now(): number;\n"
  },
  {
    "path": "apps/benchmark/src/valdi/benchmark/src/main.tsx",
    "chars": 1233,
    "preview": "import { question, print } from './cpp';\nimport { runProtoImport } from './ProtoImportTest';\n\nimport { RequireFunc } fro"
  },
  {
    "path": "apps/benchmark/src/valdi/benchmark/src/microbench.js",
    "chars": 29211,
    "preview": "/*\n * Javascript Micro benchmark\n *\n * Copyright (c) 2017-2019 Fabrice Bellard\n * Copyright (c) 2017-2019 Charlie Gordon"
  },
  {
    "path": "apps/benchmark/src/valdi/benchmark/tsconfig.json",
    "chars": 845,
    "preview": "{\n  \"extends\": \"../../../../../modules/_configs/base.tsconfig.json\",\n  \"compilerOptions\": {\n    \"types\": [\"../../../../."
  },
  {
    "path": "apps/cli_example/BUILD.bazel",
    "chars": 413,
    "preview": "load(\"//bzl/valdi:valdi_cli_application.bzl\", \"valdi_cli_application\")\nload(\"//bzl/valdi:valdi_module.bzl\", \"valdi_modul"
  },
  {
    "path": "apps/cli_example/index.tsx",
    "chars": 28,
    "preview": "console.log('Hello world!');"
  },
  {
    "path": "apps/helloworld/.eslintrc.js",
    "chars": 912,
    "preview": "\nmodule.exports = {\n  root: true,\n  parser: '@typescript-eslint/parser',\n  parserOptions: {\n    tsconfigRootDir: __dirna"
  },
  {
    "path": "apps/helloworld/BUILD.bazel",
    "chars": 861,
    "preview": "load(\"//bzl/valdi:valdi_application.bzl\", \"valdi_application\")\nload(\"//bzl/valdi:valdi_exported_library.bzl\", \"valdi_exp"
  },
  {
    "path": "apps/helloworld/app_assets/android/values/colors.xml",
    "chars": 108,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"splash_bg\">#FFFFFF</color>\n</resources>\n"
  },
  {
    "path": "apps/helloworld/app_assets/android/values/themes.xml",
    "chars": 228,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <style name=\"Theme.MyApp.Launch\" parent=\"Theme.AppCompat.Light.No"
  },
  {
    "path": "apps/helloworld/app_assets/ios/Icons.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 3508,
    "preview": "{\n  \"images\": [\n    {\n      \"size\": \"60x60\",\n      \"expected-size\": \"180\",\n      \"filename\": \"180.png\",\n      \"folder\": "
  },
  {
    "path": "apps/helloworld/package.json",
    "chars": 685,
    "preview": "{\n  \"name\": \"hello_world\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Valdi Helloworld app\",\n  \"license\": \"ISC\",\n  \"devDepe"
  },
  {
    "path": "apps/helloworld/src/android/BUILD.bazel",
    "chars": 351,
    "preview": "load(\"//bzl/valdi:valdi_android_library.bzl\", \"valdi_android_library\")\n\nvaldi_android_library(\n    name = \"native_module"
  },
  {
    "path": "apps/helloworld/src/android/MyNativeModuleFactory.kt",
    "chars": 515,
    "preview": "package com.snap.valdi.helloworld\n\nimport com.snapchat.client.valdi_core.ModuleFactory\nimport com.snap.valdi.modules.Reg"
  },
  {
    "path": "apps/helloworld/src/cpp/BUILD.bazel",
    "chars": 403,
    "preview": "cc_library(\n    name = \"native_module_cpp\",\n    srcs = [\"CppModule.cpp\"] + select({\n        \"@valdi//bzl/conditions:maco"
  },
  {
    "path": "apps/helloworld/src/cpp/CppModule.cpp",
    "chars": 1376,
    "preview": "#include \"valdi_core/cpp/JavaScript/ModuleFactoryRegistry.hpp\"\n#include \"valdi_core/cpp/Utils/ConsoleLogger.hpp\"\n#includ"
  },
  {
    "path": "apps/helloworld/src/cpp/DesktopMyNativeModule.cpp",
    "chars": 668,
    "preview": "#include \"valdi_core/cpp/JavaScript/ModuleFactoryRegistry.hpp\"\n\nnamespace snap::valdi::hello_world {\n\nclass DesktopMyNat"
  },
  {
    "path": "apps/helloworld/src/ios/BUILD.bazel",
    "chars": 262,
    "preview": "objc_library(\n    name = \"native_module_ios\",\n    srcs = glob([\n        \"**/*.m\",\n    ]),\n    hdrs = [],\n    copts = [\"-"
  },
  {
    "path": "apps/helloworld/src/ios/SCMyNativeModuleFactory.m",
    "chars": 599,
    "preview": "#import \"valdi_core/SCValdiModuleFactoryRegistry.h\"\n#import <SCCHelloWorldTypes/SCCHelloWorldTypes.h>\n#import <Foundatio"
  },
  {
    "path": "apps/helloworld/src/valdi/.terserrc.json",
    "chars": 228,
    "preview": "{\n  \"ecma\": \"ES2016\",\n  \"safari10\": true,\n  \"mangle\": {\n    \"toplevel\": true,\n    \"keep_classnames\": true\n  },\n  \"compre"
  },
  {
    "path": "apps/helloworld/src/valdi/_configs/base.tsconfig.json",
    "chars": 1040,
    "preview": "{\n  \"compilerOptions\": {\n    \"experimentalDecorators\": true,\n    \"target\": \"ES2016\",\n    \"module\": \"commonjs\",\n    \"base"
  },
  {
    "path": "apps/helloworld/src/valdi/_configs/eslint.tsconfig.json",
    "chars": 84,
    "preview": "{\n  \"extends\": \"./base.tsconfig.json\",\n  \"include\": [\"../**/*.ts\", \"../**/*.tsx\"]\n}\n"
  },
  {
    "path": "apps/helloworld/src/valdi/hello_world/BUILD.bazel",
    "chars": 899,
    "preview": "load(\"//bzl/valdi:valdi_module.bzl\", \"valdi_module\")\n\nvaldi_module(\n    name = \"hello_world\",\n    srcs = glob([\n        "
  },
  {
    "path": "apps/helloworld/src/valdi/hello_world/src/CppModule.d.ts",
    "chars": 65,
    "preview": "export function onRootComponentCreated(contextId: string): void;\n"
  },
  {
    "path": "apps/helloworld/src/valdi/hello_world/src/GettingStartedCodelab.tsx",
    "chars": 406,
    "preview": "import { Component } from 'valdi_core/src/Component';\nimport { systemBoldFont, systemFont } from 'valdi_core/src/SystemF"
  },
  {
    "path": "apps/helloworld/src/valdi/hello_world/src/HelloWorldApp.tsx",
    "chars": 1401,
    "preview": "import { Component } from 'valdi_core/src/Component';\nimport { Style } from 'valdi_core/src/Style';\nimport { systemFont "
  },
  {
    "path": "apps/helloworld/src/valdi/hello_world/src/NativeModule.d.ts",
    "chars": 206,
    "preview": "/**\n * @ExportModule\n */\n\n// Returns the name of the app suffixed with the platform\n// Used to show case how a native mo"
  },
  {
    "path": "apps/helloworld/src/valdi/hello_world/src/index.ts",
    "chars": 29,
    "preview": "console.log('Hello World!');\n"
  },
  {
    "path": "apps/helloworld/src/valdi/hello_world/tsconfig.json",
    "chars": 52,
    "preview": "{\n    \"extends\": \"../_configs/base.tsconfig.json\"\n}\n"
  },
  {
    "path": "apps/helloworld/src/valdi/tsconfig.json",
    "chars": 52,
    "preview": "{\n    \"extends\": \"./_configs/base.tsconfig.json\",\n}\n"
  },
  {
    "path": "apps/helloworld/standalone_app/BUILD.bazel",
    "chars": 2027,
    "preview": "# HelloWorld Standalone App - Integration Test for valdi_exported_library\n\nload(\"@rules_android//rules:rules.bzl\", \"aar_"
  },
  {
    "path": "apps/helloworld/standalone_app/README.md",
    "chars": 64,
    "preview": "# HelloWorld Standalone App\n\nApp to test valdi library export.\n\n"
  },
  {
    "path": "apps/helloworld/standalone_app/android/Main.kt",
    "chars": 1130,
    "preview": "package com.snap.helloworld\n\nimport android.app.Activity\nimport android.os.Bundle\nimport com.snap.valdi.ValdiRuntimeMana"
  },
  {
    "path": "apps/helloworld/standalone_app/androidTest/AndroidManifest.xml",
    "chars": 345,
    "preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.snap.helloworld.test\">\n\n    <uses-"
  },
  {
    "path": "apps/helloworld/standalone_app/androidTest/LaunchTest.kt",
    "chars": 2860,
    "preview": "package com.snap.helloworld.test\n\nimport androidx.test.ext.junit.rules.ActivityScenarioRule\nimport androidx.test.ext.jun"
  },
  {
    "path": "apps/managed_context_example/BUILD.bazel",
    "chars": 634,
    "preview": "load(\"//bzl/valdi:valdi_application.bzl\", \"valdi_application\")\nload(\"//bzl/valdi:valdi_module.bzl\", \"valdi_module\")\n\nval"
  },
  {
    "path": "apps/managed_context_example/ManagedContextExample.tsx",
    "chars": 5644,
    "preview": "import { Component, StatefulComponent } from 'valdi_core/src/Component';\nimport { systemBoldFont, systemFont } from 'val"
  },
  {
    "path": "apps/navigation_example/BUILD.bazel",
    "chars": 548,
    "preview": "load(\"//bzl/valdi:valdi_application.bzl\", \"valdi_application\")\nload(\"//bzl/valdi:valdi_module.bzl\", \"valdi_module\")\n\nval"
  },
  {
    "path": "apps/navigation_example/NavigationExample.tsx",
    "chars": 3817,
    "preview": "import { Component } from 'valdi_core/src/Component';\nimport { NavigationPage } from 'valdi_navigation/src/NavigationPag"
  },
  {
    "path": "apps/navigation_example/tsconfig.json",
    "chars": 588,
    "preview": "{\n  \"extends\": \"../../modules/_configs/base.tsconfig.json\",\n  \"compilerOptions\": {\n    \"types\": [\"../../modules/types/Lo"
  },
  {
    "path": "apps/valdi_gpt/.eslintrc.js",
    "chars": 912,
    "preview": "\nmodule.exports = {\n  root: true,\n  parser: '@typescript-eslint/parser',\n  parserOptions: {\n    tsconfigRootDir: __dirna"
  },
  {
    "path": "apps/valdi_gpt/BUILD.bazel",
    "chars": 557,
    "preview": "load(\"//bzl/valdi:valdi_application.bzl\", \"valdi_application\")\nload(\"//bzl/valdi:valdi_exported_library.bzl\", \"valdi_exp"
  },
  {
    "path": "apps/valdi_gpt/package.json",
    "chars": 685,
    "preview": "{\n  \"name\": \"hello_world\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Valdi Helloworld app\",\n  \"license\": \"ISC\",\n  \"devDepe"
  },
  {
    "path": "apps/valdi_gpt/src/valdi/.terserrc.json",
    "chars": 228,
    "preview": "{\n  \"ecma\": \"ES2016\",\n  \"safari10\": true,\n  \"mangle\": {\n    \"toplevel\": true,\n    \"keep_classnames\": true\n  },\n  \"compre"
  },
  {
    "path": "apps/valdi_gpt/src/valdi/_configs/base.tsconfig.json",
    "chars": 1073,
    "preview": "{\n  \"compilerOptions\": {\n    \"experimentalDecorators\": true,\n    \"target\": \"ES2016\",\n    \"module\": \"commonjs\",\n    \"base"
  },
  {
    "path": "apps/valdi_gpt/src/valdi/_configs/eslint.tsconfig.json",
    "chars": 84,
    "preview": "{\n  \"extends\": \"./base.tsconfig.json\",\n  \"include\": [\"../**/*.ts\", \"../**/*.tsx\"]\n}\n"
  },
  {
    "path": "apps/valdi_gpt/src/valdi/ai_service/BUILD.bazel",
    "chars": 679,
    "preview": "load(\"//bzl/valdi:valdi_module.bzl\", \"valdi_module\")\n\nvaldi_module(\n    name = \"ai_service\",\n    srcs = glob([\n        \""
  },
  {
    "path": "apps/valdi_gpt/src/valdi/ai_service/src/AiService.ts",
    "chars": 288,
    "preview": "export enum GptRole {\n  USER = 'user',\n  ASSISTANT = 'assistant',\n  SYSTEM = 'system',\n}\n\nexport interface GptMessage {\n"
  },
  {
    "path": "apps/valdi_gpt/src/valdi/ai_service/src/OpenAi.ts",
    "chars": 1772,
    "preview": "import { HTTPClient } from 'valdi_http/src/HTTPClient';\nimport { AiService, GptMessage, GptRole } from './AiService';\n\nc"
  },
  {
    "path": "apps/valdi_gpt/src/valdi/ai_service/tsconfig.json",
    "chars": 52,
    "preview": "{\n    \"extends\": \"../_configs/base.tsconfig.json\"\n}\n"
  },
  {
    "path": "apps/valdi_gpt/src/valdi/conversation/BUILD.bazel",
    "chars": 834,
    "preview": "load(\"//bzl/valdi:valdi_module.bzl\", \"valdi_module\")\n\nvaldi_module(\n    name = \"conversation\",\n    srcs = glob([\n       "
  },
  {
    "path": "apps/valdi_gpt/src/valdi/conversation/src/Conversation.tsx",
    "chars": 2002,
    "preview": "import { StatefulComponent } from 'valdi_core/src/Component';\nimport { OpenAi } from 'ai_service/src/OpenAi';\nimport { M"
  },
  {
    "path": "apps/valdi_gpt/src/valdi/conversation/src/InputBar.tsx",
    "chars": 984,
    "preview": "import { Component } from 'valdi_core/src/Component';\nimport { ElementRef } from 'valdi_core/src/ElementRef';\nimport { S"
  },
  {
    "path": "apps/valdi_gpt/src/valdi/conversation/src/Message.tsx",
    "chars": 1195,
    "preview": "import { Component } from 'valdi_core/src/Component';\nimport { Style } from 'valdi_core/src/Style';\nimport { systemFont "
  },
  {
    "path": "apps/valdi_gpt/src/valdi/conversation/src/index.ts",
    "chars": 29,
    "preview": "console.log('Hello World!');\n"
  },
  {
    "path": "apps/valdi_gpt/src/valdi/conversation/test/Conversation.spec.tsx",
    "chars": 3353,
    "preview": "import 'jasmine/src/jasmine';\nimport { IComponentTestDriver, withValdiRenderer } from 'valdi_test/test/JSXTestUtils';\nim"
  },
  {
    "path": "apps/valdi_gpt/src/valdi/conversation/tsconfig.json",
    "chars": 52,
    "preview": "{\n    \"extends\": \"../_configs/base.tsconfig.json\"\n}\n"
  },
  {
    "path": "apps/valdi_gpt/src/valdi/tsconfig.json",
    "chars": 52,
    "preview": "{\n    \"extends\": \"./_configs/base.tsconfig.json\",\n}\n"
  },
  {
    "path": "apps/valdi_gpt/src/valdi/valdi_gpt/BUILD.bazel",
    "chars": 828,
    "preview": "load(\"//bzl/valdi:valdi_module.bzl\", \"valdi_module\")\n\nvaldi_module(\n    name = \"valdi_gpt\",\n    srcs = glob([\n        \"s"
  },
  {
    "path": "apps/valdi_gpt/src/valdi/valdi_gpt/src/ValdiGptApp.tsx",
    "chars": 1009,
    "preview": "import { Component } from 'valdi_core/src/Component';\nimport { Conversation } from 'conversation/src/Conversation';\nimpo"
  },
  {
    "path": "apps/valdi_gpt/src/valdi/valdi_gpt/src/types/Long.d.ts",
    "chars": 9206,
    "preview": "/* eslint-disable */\n// Type definitions for long.js 4.0.0\n// Project: https://github.com/dcodeIO/long.js\n// Definitions"
  },
  {
    "path": "apps/valdi_gpt/src/valdi/valdi_gpt/src/types/globals.d.ts",
    "chars": 142,
    "preview": "// This is a global declarations file that's referenced by valdi_core/src/Valdi.ts\n\ndeclare const module: { path: string"
  },
  {
    "path": "apps/valdi_gpt/src/valdi/valdi_gpt/tsconfig.json",
    "chars": 52,
    "preview": "{\n    \"extends\": \"../_configs/base.tsconfig.json\"\n}\n"
  },
  {
    "path": "apps/valdi_gpt/web_demo/README.md",
    "chars": 532,
    "preview": "# Valdi GPT web demo\n\nThis demo app is for the ongoing development of Valdi Web.\n\n## Build the web dependencies\n\n```\nbaz"
  },
  {
    "path": "apps/valdi_gpt/web_demo/package.json",
    "chars": 797,
    "preview": "{\n  \"name\": \"react-webpack\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"serve\""
  },
  {
    "path": "apps/valdi_gpt/web_demo/src/App.js",
    "chars": 1034,
    "preview": "import React from \"react\";\n\n// Must be the first Valdi import, does a bunch of setup\nimport { ValdiWebRenderer } from 'v"
  },
  {
    "path": "apps/valdi_gpt/web_demo/src/App.scss",
    "chars": 20,
    "preview": "h1 {\n  color: red;\n}"
  },
  {
    "path": "apps/valdi_gpt/web_demo/src/RegisterNativeModules.js",
    "chars": 467,
    "preview": "/**\n * ALL NATIVE MODULES MUST BE REGISTERED\n * \n * Native module files get output to valdi_core/src/ModuleName\n * But c"
  },
  {
    "path": "apps/valdi_gpt/web_demo/src/index.html",
    "chars": 423,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta http-equiv=\"X-UA-Compatible\" content=\"I"
  },
  {
    "path": "apps/valdi_gpt/web_demo/src/index.js",
    "chars": 181,
    "preview": "import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport App from \"./App\";\nimport \"./App.scss\";\n\nconst el = d"
  },
  {
    "path": "apps/valdi_gpt/web_demo/webpack.config.js",
    "chars": 1732,
    "preview": "const path = require('path');\nconst HtmlWebpackPlugin = require(\"html-webpack-plugin\");\nconst webpack = require('webpack"
  },
  {
    "path": "bin/BUILD.bazel",
    "chars": 1837,
    "preview": "load(\"@aspect_rules_js//js:defs.bzl\", \"js_binary\")\nload(\"@bazel_skylib//rules:native_binary.bzl\", \"native_binary\")\nload("
  },
  {
    "path": "bin/MODULE.bazel",
    "chars": 636,
    "preview": "module(name = \"valdi_toolchain\")\n\nbazel_dep(name = \"valdi\", version = \"0.1\")\n\nbazel_dep(name = \"bazel_skylib\", version ="
  },
  {
    "path": "bin/WORKSPACE",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "bin/compiler/linux/valdi_compiler",
    "chars": 133,
    "preview": "version https://git-lfs.github.com/spec/v1\noid sha256:e1966217b779807d46df30f6371f08d0e003f602a33bd3a964a566ee17fface1\ns"
  },
  {
    "path": "bin/compiler/macos/valdi_compiler",
    "chars": 133,
    "preview": "version https://git-lfs.github.com/spec/v1\noid sha256:2c5a7738cec8f204d214fc05e5fa5b9b660b8527773bf58c5e93871433bcb839\ns"
  },
  {
    "path": "bin/pngquant/linux/pngquant",
    "chars": 132,
    "preview": "version https://git-lfs.github.com/spec/v1\noid sha256:a3dc681320002d23137aaddcd5ba9f76f225f0c574bfa3e51fa2ddf0b02d4508\ns"
  },
  {
    "path": "bin/pngquant/macos/pngquant",
    "chars": 132,
    "preview": "version https://git-lfs.github.com/spec/v1\noid sha256:1072cf0f9fcdda478fc10c81acce30394e41016ca2dc281ffb95d4b89266f9ef\ns"
  },
  {
    "path": "bzl/BUILD.bazel",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "bzl/additional_dependencies.bzl",
    "chars": 4351,
    "preview": "load(\"//bzl:nested_repository.bzl\", \"nested_repository\")\n\n# Additional Node.js download mirrors for internal Snap builds"
  },
  {
    "path": "bzl/android/BUILD.bazel",
    "chars": 306,
    "preview": "sh_binary(\n    name = \"zip_relative\",\n    srcs = [\"zip_relative.sh\"],\n    visibility = [\"//visibility:public\"],\n)\n\n# For"
  },
  {
    "path": "bzl/android/collect_android_assets.bzl",
    "chars": 4527,
    "preview": "load(\"//bzl/valdi:valdi_compiled.bzl\", \"ValdiModuleInfo\")\n\ndef _collect_valdimodules_from_valdi_deps(valdi_deps, output_"
  },
  {
    "path": "bzl/android/filter_jar.bzl",
    "chars": 2232,
    "preview": "# filter_jar.bzl\ndef _filter_jar_impl(ctx):\n    in_jar = ctx.file.jar\n    out_jar = ctx.actions.declare_file(ctx.label.n"
  },
  {
    "path": "bzl/android/package_aar.bzl",
    "chars": 12376,
    "preview": "# The design of the android_library aar target is not the same as buck's.\n# It doesn't create a monolithic package but i"
  },
  {
    "path": "bzl/android/platform_transition.bzl",
    "chars": 1134,
    "preview": "def android_aar_platforms():\n    return select({\n        \"@snap_platforms//conditions:client_repo_arm64\": [\"@snap_platfo"
  },
  {
    "path": "bzl/android/zip_relative.sh",
    "chars": 346,
    "preview": "#!/bin/bash\nset -eu\n\n# First argument is a path to the bazel zipper\nzipper=$1\n\n# Second argument is the prefix we want t"
  },
  {
    "path": "bzl/asset_package.bzl",
    "chars": 933,
    "preview": "# asset_package can be used to bundle arbitary assets as Valdi modules.\n# Package's `data` will be packaged as `clien/re"
  },
  {
    "path": "bzl/client_objc_library.bzl",
    "chars": 3868,
    "preview": "load(\"@build_bazel_rules_swift//swift:swift.bzl\", \"swift_interop_hint\")\nload(\"@rules_hdrs//hmap:hmap.bzl\", \"headermap\")\n"
  },
  {
    "path": "bzl/common/BUILD.bazel",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "bzl/common/application_names.bzl",
    "chars": 196,
    "preview": "# Replaced when running valdi bootstrap\n# This default exists to allow building in open_source without invoking bootstra"
  },
  {
    "path": "bzl/common/nodejs_info.bzl",
    "chars": 1926,
    "preview": "\"\"\"\nConstants for the current Node version and major version that is\nused by bazel in this WORKSPACE\n\"\"\"\n\nload(\"//bzl:ad"
  },
  {
    "path": "bzl/conditions/BUILD.bazel",
    "chars": 5053,
    "preview": "load(\"@bazel_skylib//lib:selects.bzl\", \"selects\")\nload(\"@build_bazel_rules_swift//swift/internal:feature_names.bzl\", \"SW"
  },
  {
    "path": "bzl/conditions/custom_selects.bzl",
    "chars": 455,
    "preview": "def _config_setting_inverse(name, inverse_of, visibility = None):\n    \"\"\"Returns the logical inverse of the provided con"
  },
  {
    "path": "bzl/conditions/selects.bzl",
    "chars": 5422,
    "preview": "load(\"@bazel_skylib//lib:selects.bzl\", bzl_selects = \"selects\")\nload(\":custom_selects.bzl\", \"custom_selects\")\n\ndef _conf"
  },
  {
    "path": "bzl/constants/BUILD.bazel",
    "chars": 711,
    "preview": "load(\"@bazel_skylib//lib:selects.bzl\", \"selects\")\n\n# config_setting which is always \"true\"\nselects.config_setting_group("
  },
  {
    "path": "bzl/dependencies.bzl",
    "chars": 21311,
    "preview": "load(\"@bazel_tools//tools/build_defs/repo:http.bzl\", \"http_archive\")\nload(\"//bzl:nested_repository.bzl\", \"nested_reposit"
  },
  {
    "path": "bzl/expand_template.bzl",
    "chars": 1766,
    "preview": "def _impl(ctx):\n    out = ctx.actions.declare_file(ctx.attr.output)\n    substitutions = dict(zip(ctx.attr.substitution_k"
  },
  {
    "path": "bzl/ide/open_source.bazelproject",
    "chars": 882,
    "preview": "directories:\n  # Add the directories you want added as source here\n  # By default, we've added your entire workspace ('."
  },
  {
    "path": "bzl/macros/BUILD.bazel",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "bzl/macros/MODULE.bazel",
    "chars": 86,
    "preview": "module(name = \"android_macros\")\n\nbazel_dep(name = \"rules_android\", version = \"0.5.1\")\n"
  },
  {
    "path": "bzl/macros/WORKSPACE",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "bzl/macros/android.bzl",
    "chars": 325,
    "preview": "load(\n    \"@rules_android//rules:rules.bzl\",\n    _aar_import = \"aar_import\",\n)\n\ndef aar_import(**kwargs):\n    patched_kw"
  },
  {
    "path": "bzl/modulemap.bzl",
    "chars": 2961,
    "preview": "def _modulemap_command(modulemap, module_name):\n    \"\"\" Generate a shell script to create modulemap.\n\n        The module"
  },
  {
    "path": "bzl/nested_repository.bzl",
    "chars": 3439,
    "preview": "def _nested_repository_impl(ctx):\n    # Try to resolve using relative path (works when source_repo is external)\n    rela"
  },
  {
    "path": "bzl/platforms/BUILD.bazel",
    "chars": 583,
    "preview": "platform(\n    name = \"ios_arm64\",\n    constraint_values = [\n        \"@platforms//os:ios\",\n        \"@platforms//cpu:aarch"
  },
  {
    "path": "bzl/platforms/MODULE.bazel",
    "chars": 134,
    "preview": "module(name = \"snap_platforms\")\n\nbazel_dep(name = \"bazel_skylib\", version = \"1.2.0\")\nbazel_dep(name = \"platforms\", versi"
  }
]

// ... and 5795 more files (download for full content)

About this extraction

This page contains the full source code of the Snapchat/Valdi GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 5995 files (34.3 MB), approximately 4.3M tokens, and a symbol index with 10519 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!