Security News
Fluent Assertions Faces Backlash After Abandoning Open Source Licensing
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
Tsickle converts TypeScript code into a form acceptable to the Closure Compiler. This allows using TypeScript to transpile your sources, and then using Closure Compiler to bundle and optimize them, while taking advantage of type information in Closure Compiler.
A (non-exhaustive) list of the sorts of transformations Tsickle applies:
goog.module
modulesdeclare
, see below)export * from ...
into a form Closure acceptsIn general the goal is that you write valid TypeScript and Tsickle handles making it valid Closure Compiler code.
We already use tsickle within Google to minify our apps (including those using Angular), but we have less experience using tsickle with the various JavaScript builds that are seen outside of Google.
We would like to make tsickle usable for everyone but right now if you'd like to try it you should expect to spend some time debugging and reporting bugs.
Tsickle is a library, designed to be used by a larger program that interacts with TypeScript and the Closure compiler.
Some known clients are:
demo/
subdirectory.Tsickle is designed to do whatever is necessary to make the code acceptable by Closure compiler. We view its output as a necessary intermediate form for communicating to the Closure compiler, and not something for humans. This means the tsickle output may be kind of ugly to read. Its only real use is to pass it on to the compiler.
For one example, the syntax of types tsickle produces are specific to Closure.
The type {!Foo}
means "Foo, excluding null" and a type alias becomes a var
statement that is tagged with @typedef
.
Tsickle emits modules using Closure's goog.module
module system. This system
is similar to but different from ES modules, and was supported by Closure before
the ES module system was finalized.
Closure and TypeScript are not identical. Tsickle hides most of the differences, but users must still be aware of some differences.
declare
Any declaration in a .d.ts
file, as well as any declaration tagged with
declare ...
, is intepreted by Tsickle as a name that should be preserved
through Closure compilation (i.e. not renamed into something shorter). Use it
any time the specific string names of your fields are significant. That would
most often happen when the object either coming from outside your program, or
being passed out of the program.
Example:
declare interface JSONResult {
username: string;
}
let r = JSON.parse(input) as JSONResult;
console.log(r.username);
By adding declare
to the interface (or if it were in a .d.ts
file), Tsickle
will inform Closure that it must use exactly the field name .username
(and not
e.g. .a
) in the output JS. This matters for this example because the input
JSON probably uses the string 'username'
and not whatever name Closure would
invent for it. (Note: declare
on an interface has no additional meaning in
pure TypeScript.)
An exporting decorator is a decorator that has @ExportDecoratedItems
in its
JSDoc.
The names of elements that have an exporting decorator are preserved through
the Closure compilation process by applying an @export
tag to them.
Example:
/** @ExportDecoratedItems */
function myDecorator() {
// ...
}
@myDecorator()
class DoNotRenameThisClass { ... }
Run yarn
to install dependencies.
yarn build
builds the code base.tsc --watch
for an interactive, incremental, and continuous build.yarn lint
checks for lint.yarn test
runs unit tests, e2e tests and checks for lint (but make sure to
yarn build
first or run tsc!). Set the TEST_FILTER
environment variable
to filter what golden tests to run.https://astexplorer.net/ and https://ts-ast-viewer.com/ are convenient tools to visualize and inspect a TypeScript AST.
You can debug tests by passing --node_options=--inspect
or
--node_options=--inspect-brk
(to suspend execution directly after startup).
For example, to debug a specific golden test:
TEST_FILTER=my_golden_test node --inspect-brk=4332 ./node_modules/.bin/jasmine out/test/*.js
Then open [about:inspect] in Chrome and choose "about:inspect". Chrome will
launch a debugging session on any node process that starts with a debugger
listening on one of the listed ports. The tsickle tests and Chrome both default
to localhost:9229
, so things should work out of the box.
The break in specific code locations you can add debugger;
statements in the
source code.
Run UPDATE_GOLDENS=y yarn test
to have the test suite update the goldens in
test_files/...
.
Set the environment variable TEST_FILTER=<REGEX>
to limit the golden tests
(found in test_files/...
) to only run tests with a name matching the regex.
On a new branch, run:
# tsickle releases are all minor releases for now, see npm help version.
$ npm version minor
This will update the version in package.json
, commit the changes, and
create a git tag.
Push the branch, open a pull request, get it reviewed, and wait for it to be merged.
Checkout and pull the latest version from master:
$ git checkout master && git pull
Check if the tag exists. If not, re-tag the commit and push the tag.
$ git tag
# Does this show the tag already? If not, proceed with:
$ git tag v0.32.0 && git push origin v0.32.0 # but use correct version
Once the versioned tag is pushed to GitHub the release (as found on https://github.com/angular/tsickle/releases) will be implicitly created.
From the master branch run:
npm config set registry https://wombat-dressing-room.appspot.com
npm login
npm publish # runs a clean build & test automatically
FAQs
Transpile TypeScript code to JavaScript with Closure annotations.
The npm package tsickle receives a total of 83,047 weekly downloads. As such, tsickle popularity was classified as popular.
We found that tsickle demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
Research
Security News
Socket researchers uncover the risks of a malicious Python package targeting Discord developers.
Security News
The UK is proposing a bold ban on ransomware payments by public entities to disrupt cybercrime, protect critical services, and lead global cybersecurity efforts.