dart-sdk/pkg
Nicholas Shahan 2379cdc080 [ddc] Enforce more null safety on js interop
- Add a runtime flag to enable checks on non-nullable APIs that
  return values from non-static JavaScript interop.
- Call a new helper method at the call site when these APIs are
  detected to perform the null check.
- Add test file for the cases we can detect and enforce.

NOTE: This does not make non-static JavaScript interop sound.
This only adds more checks to enforce soundness with respect
to nullability in some cases. There are still holes that will
never be closed due to the permissive nature of this form of
JavaScript interop.

Change-Id: I2f88d1543a683fdc84d764e2b0eaafeb0ca73107
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/358581
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Reviewed-by: Mayank Patke <fishythefish@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
Reviewed-by: Srujan Gaddam <srujzs@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
2024-04-03 23:20:15 +00:00
..
_fe_analyzer_shared Augment. Parse 'augment' for enum declaration. 2024-04-03 15:59:49 +00:00
_js_interop_checks [dart:js_interop] Add ExternalDartReference 2024-03-26 15:43:19 +00:00
_macros Prep to release package:macros 2024-03-26 19:51:01 +00:00
analysis_server DAS: Move two CorrectionUtils methods to DartEditBuilder 2024-04-03 20:57:51 +00:00
analysis_server_client [analyzer]/[analyzer_plugin] Support change descriptions on SourceEdit 2024-03-08 18:54:05 +00:00
analyzer Replace constant with value in messages and docs 2024-04-03 20:02:40 +00:00
analyzer_cli revert dart:_macros, going with SDK vendored package 2024-03-21 02:40:58 +00:00
analyzer_plugin DAS: Move two CorrectionUtils methods to DartEditBuilder 2024-04-03 20:57:51 +00:00
analyzer_utilities Move the mock package support to analyzer_utilities 2024-04-01 17:04:06 +00:00
async_helper [tests] update await_for_test to test behavior variations. 2024-02-14 21:43:47 +00:00
bisect_dart [deps] Roll package:native_assets_builder 2024-03-14 18:06:13 +00:00
build_integration build_integration: prepare for stricter implementation_imports check 2024-02-20 18:47:41 +00:00
compiler Wrap field initializers copied by TFA in a FileUriExpression. 2024-04-02 19:55:19 +00:00
dart2js_info [dart2js] Assorted TODO cleanup, bump pubspecs to 3.3.0 2024-02-21 00:02:13 +00:00
dart2js_runtime_metrics [dart2js] Expose JS_TRUE and JS_FALSE via dart2js_runtime_metrics. 2024-02-09 18:38:55 +00:00
dart2js_tools
dart2native [ dart2native ] Remove unused constant 2024-02-08 19:51:11 +00:00
dart2wasm [dart2wasm] Fix typos, formatting in flutter_hhh_builds doc 2024-04-03 18:12:47 +00:00
dart_internal Bump dart_internal to allow Dart 3.3. 2024-02-14 19:49:32 +00:00
dart_service_protocol_shared
dartdev [CLI] Ensure that resident frontend compilers never try to compile kernel files or snapshots 2024-04-03 19:38:02 +00:00
dds Update DEPS 2024-04-02 19:32:22 +00:00
dds_service_extensions [ DDS ] Rework client resume permissions API 2024-03-21 21:09:42 +00:00
dev_compiler [ddc] Enforce more null safety on js interop 2024-04-03 23:20:15 +00:00
dtd Add getProjectRoots API to DTD 2024-03-25 19:52:21 +00:00
dtd_impl Add getProjectRoots API to DTD 2024-03-25 19:52:21 +00:00
expect [test] Disable regress_53519_test in obfuscated/dwarf mode 2024-03-07 00:56:33 +00:00
front_end [co19] Roll co19 to 74b618cc11ea65ced9e017f58893cf565b7b21b9 2024-04-03 16:03:29 +00:00
frontend_server [CFE] Fix test broken by introduction of package:macros. 2024-04-03 09:10:38 +00:00
heap_snapshot
js [pkg:js] Update README and prep for 0.7.1 publish 2024-02-16 18:40:22 +00:00
js_ast [dart2js] Convert some collections of const ints to enums 2024-02-23 19:52:50 +00:00
js_runtime [dart2js] Convert some collections of const ints to enums 2024-02-23 19:52:50 +00:00
js_shared
kernel [kernel] Clarify AssertStatement offset fields 2024-04-03 08:56:37 +00:00
language_versioning_2_12_test
linter [linter] Add unintended_html_in_doc_comment lint. 2024-04-02 21:09:51 +00:00
macros Prep to release package:macros 2024-03-26 19:51:01 +00:00
meta meta: Bump to 1.14.0 2024-04-03 20:53:38 +00:00
mmap Revert "[ffi]: Remove pointer elementAt method." 2024-01-22 12:20:48 +00:00
modular_test modular_test: prepare for curly_braces lint change 2024-02-20 17:56:29 +00:00
native_stack_traces
reload_test [reload_test] Adding scaffolding for additional runtime platforms. 2024-03-25 23:58:32 +00:00
scrape
server_plugin analyzer plugins: Move DartFixContext and Impl to server_plugin 2024-03-19 19:06:33 +00:00
smith [test_runner] Rename host-checked to host-asserts 2024-02-08 22:01:09 +00:00
sourcemap_testing
status_file [test_runner] Rename host-checked to host-asserts 2024-02-08 22:01:09 +00:00
telemetry
test_runner [ddc] Enforce more null safety on js interop 2024-04-03 23:20:15 +00:00
testing [package:testing] Proposed wildcard solution 2024-03-21 09:03:18 +00:00
vm Wrap field initializers copied by TFA in a FileUriExpression. 2024-04-02 19:55:19 +00:00
vm_service [ DDS ] Rework client resume permissions API 2024-03-21 21:09:42 +00:00
vm_service_interface [ package:vm_service* ] Prepare for release of package:vm_service 14.2.0 and package:vm_service_interface 1.1.0 2024-03-20 13:34:07 +00:00
vm_service_protos
vm_snapshot_analysis
wasm_builder [dart2wasm] Allow giving names to globals in the module globals section 2024-03-07 11:51:57 +00:00
.gitignore
analysis_options.yaml
BUILD.gn
OWNERS
pkg.dart
pkg.status [gardening] Mark test as slow 2024-02-19 10:21:38 +00:00
README.md typo fixes: its vs. it's 2024-02-29 11:07:40 +00:00

Package validation

The packages in pkg/ are automatically validated on the LUCI CI bots. The validation is largely done by the tools/package_deps package; it can be tested locally via:

dart tools/package_deps/bin/package_deps.dart

Packages which are published

There are several packages developed in pkg/ which are published to pub. Validation of these packages is particularly important because the pub tools are not used for these packages during development; we get our dependency versions from the DEPS file. It's very easy for the dependencies specified in a package's pubspec file to get out of date wrt the packages and versions actually used.

In order to better ensure we're publishing correct packages, we validate some properties of the pubspec files on our CI system. These validations include:

  • that the dependencies listed in the pubspec are used in the package
  • that all the packages used by the source are listed in the pubspec
  • that we don't use relative path deps to pkg/ or third_party/ packages

Packages which are not published

For packages in pkg/ which we do not intend to be published, we put the following comment in the pubspec.yaml file:

# This package is not intended for consumption on pub.dev. DO NOT publish.
publish_to: none

These pubspecs are still validated by the package validation tool. The contents are more informational as the pubspecs for these packages are not consumed by the pub tool or ecosystem.

We validate:

  • that the dependencies listed in the pubspec are used in the package
  • that all the packages used by the source are listed in the pubspec
  • that a reference to a pkg/ package is done via a relative path dependency