fix: do not return empty struct if there is no compile action

Currently if there is no action for a `ts_library` that just declares
`.d.ts` files, the `replay_params` will be set to an empty struct.
Design-wise this does not make any sense because there is nothing to be
"replayed".

This fixes an issue where the Angular Bazel rules throw an exception if
there are "replay_params", but are referring to a struct that does not
include the "outputs" property.

```
  target.typescript.replay_params.outputs
struct' object has no attribute 'outputs'
```

Closes #326

PiperOrigin-RevId: 223888797
diff --git a/internal/build_defs.bzl b/internal/build_defs.bzl
index 7602db6..51d15b1 100644
--- a/internal/build_defs.bzl
+++ b/internal/build_defs.bzl
@@ -94,7 +94,7 @@
     # A ts_library that has only .d.ts inputs will have no outputs,
     # therefore there are no actions to execute
     if not action_outputs:
-        return struct()
+        return None
 
     action_inputs.extend(_filter_ts_inputs(ctx.files.node_modules))
 
diff --git a/package.bzl b/package.bzl
index 2cb87c2..34dbd52 100644
--- a/package.bzl
+++ b/package.bzl
@@ -24,7 +24,7 @@
 # It will be automatically synced via the npm "version" script
 # that is run when running `npm version` during the release
 # process. See `Releasing` section in README.md.
-VERSION = "0.20.3"
+VERSION = "0.21.0"
 
 def rules_typescript_dependencies():
     """
@@ -38,8 +38,8 @@
     _maybe(
         http_archive,
         name = "build_bazel_rules_nodejs",
-        urls = ["https://github.com/bazelbuild/rules_nodejs/archive/0.16.0.zip"],
-        strip_prefix = "rules_nodejs-0.16.0",
+        urls = ["https://github.com/bazelbuild/rules_nodejs/archive/0.16.1.zip"],
+        strip_prefix = "rules_nodejs-0.16.1",
     )
 
     # ts_web_test depends on the web testing rules to provision browsers.
diff --git a/package.json b/package.json
index 641b98f..703eed8 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
     "description": "Monorepo for TypeScript Bazel support. Published packages are in subdirectories under internal/",
     "private": true,
-    "version": "0.20.3",
+    "version": "0.21.0",
     "dependencies": {
         "jasmine-core": "2.8.0",
         "karma": "alexeagle/karma#fa1a84ac881485b5657cb669e9b4e5da77b79f0a",