typescript-monkey 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.editorconfig +27 -0
  4. data/.gitignore +52 -0
  5. data/.ruby-gemset +1 -0
  6. data/.ruby-version +1 -0
  7. data/.travis.yml +27 -0
  8. data/.vscode/tasks.json +40 -0
  9. data/CHANGES.md +48 -0
  10. data/Gemfile +16 -0
  11. data/LICENSE.txt +22 -0
  12. data/README.md +351 -0
  13. data/Rakefile +13 -0
  14. data/contrib/example_package.json +10 -0
  15. data/contrib/example_typescript.rb +14 -0
  16. data/gulpfile.js +67 -0
  17. data/lib/assets/javascripts/transpiler.ts.erb +1 -0
  18. data/lib/assets/javascripts/transpiler_pkg.js.erb +2 -0
  19. data/lib/assets/javascripts/typescript.js.erb +1 -0
  20. data/lib/assets/typescripts/transpile_once.ts +13 -0
  21. data/lib/assets/typescripts/transpiler.ts +203 -0
  22. data/lib/rails/generators/typescript/assets/assets_generator.rb +13 -0
  23. data/lib/rails/generators/typescript/assets/templates/javascript.ts +3 -0
  24. data/lib/typescript-monkey.rb +8 -0
  25. data/lib/typescript/monkey.rb +9 -0
  26. data/lib/typescript/monkey/cli.rb +22 -0
  27. data/lib/typescript/monkey/compiler.rb +177 -0
  28. data/lib/typescript/monkey/configuration.rb +49 -0
  29. data/lib/typescript/monkey/engine.rb +18 -0
  30. data/lib/typescript/monkey/js_hook.rb +15 -0
  31. data/lib/typescript/monkey/package.rb +239 -0
  32. data/lib/typescript/monkey/railtie.rb +20 -0
  33. data/lib/typescript/monkey/template.rb +32 -0
  34. data/lib/typescript/monkey/template_handler.rb +24 -0
  35. data/lib/typescript/monkey/transformer.rb +20 -0
  36. data/lib/typescript/monkey/transpiler.rb +256 -0
  37. data/lib/typescript/monkey/version.rb +3 -0
  38. data/package.json +32 -0
  39. data/test/assets_generator_test.rb +15 -0
  40. data/test/assets_test.rb +41 -0
  41. data/test/controller_generator_test.rb +19 -0
  42. data/test/fixtures/assets/javascripts/hello.js.ts +3 -0
  43. data/test/fixtures/assets/javascripts/included.ts +4 -0
  44. data/test/fixtures/assets/javascripts/reference.ts +2 -0
  45. data/test/fixtures/references/ref1_1.js.ts +3 -0
  46. data/test/fixtures/references/ref1_2.js.ts +3 -0
  47. data/test/fixtures/references/ref2_1.d.ts +1 -0
  48. data/test/fixtures/references/ref2_2.js.ts +3 -0
  49. data/test/fixtures/references/ref3_1.js.ts +5 -0
  50. data/test/fixtures/references/ref3_2.ts +3 -0
  51. data/test/fixtures/references/ref3_3.ts +3 -0
  52. data/test/fixtures/routes.rb +0 -0
  53. data/test/fixtures/site/es5.js.ts +7 -0
  54. data/test/fixtures/site/index.js.ts +1 -0
  55. data/test/fixtures/site/script_tags.html.erb +23 -0
  56. data/test/fixtures/sprockets/ref1_1.js.ts +3 -0
  57. data/test/fixtures/sprockets/ref1_2.js.ts +3 -0
  58. data/test/fixtures/sprockets/ref1_manifest.js.ts +2 -0
  59. data/test/references_test.rb +48 -0
  60. data/test/scaffold_generator_test.rb +19 -0
  61. data/test/sprockets_test.rb +36 -0
  62. data/test/support/routes.rb +1 -0
  63. data/test/template_handler_test.rb +35 -0
  64. data/test/test_helper.rb +111 -0
  65. data/tsconfig.json +23 -0
  66. data/typescript-monkey.gemspec +34 -0
  67. metadata +175 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 427a6a30bc837fb2b3600d1f6540bcdffd3573b4
4
+ data.tar.gz: ede7bb0989b12ff88229f928d3a088bc028089a0
5
+ SHA512:
6
+ metadata.gz: d93b9f102f8b58147d15dc905bf62cbefd588661b4a73a0d35d6439a1e7737f0c5536807f98edab0ba02ce9f5d0d3b7ce3fe9c34b5c76763f31fe5eebfd73b66
7
+ data.tar.gz: e17b79826473486f468a140d4448d0d47423efdc19b24cc34219c64868f1643e63a92659349b63ce3eae28d027a22f9f492e2d460e4f1716c3d0940a307d1c21
@@ -0,0 +1 @@
1
+ service_name: travis-ci
@@ -0,0 +1,27 @@
1
+ root = true
2
+
3
+ [*]
4
+ indent_style = space
5
+ indent_size = 4
6
+ insert_final_newline = true
7
+
8
+ [*.{js,json}]
9
+ indent_size = 2
10
+
11
+ [*.{ts}]
12
+ indent_size = 4
13
+
14
+ [*.{rb,rake}]
15
+ indent_size = 2
16
+
17
+ [*.html]
18
+ indent_size = 2
19
+
20
+ [*.{css,scss}]
21
+ indent_size = 2
22
+
23
+ [{Gemfile}]
24
+ indent_size = 2
25
+
26
+ [*.yml]
27
+ indent_size = 2
@@ -0,0 +1,52 @@
1
+ # See http://help.github.com/ignore-files/ for more about ignoring files.
2
+ #
3
+ # If you find yourself ignoring temporary files generated by your text editor
4
+ # or operating system, you probably want to add a global ignore instead:
5
+ # git config --global core.excludesfile ~/.gitignore_global
6
+
7
+ # Ignore bundler config
8
+ /.bundle
9
+
10
+ # Ignore secret environment configs
11
+ .env
12
+
13
+ # Ignore all logfiles and tempfiles.
14
+ /log/*.log
15
+ /tmp
16
+ /test/tmp
17
+
18
+ # Ignore some ruby files
19
+ .rvmrc
20
+ Gemfile.lock
21
+
22
+ # Ignore yardoc object cache and generated docs
23
+ .yardopts
24
+ .yardoc
25
+
26
+ # Ignore ydoc output files
27
+ doc/yard
28
+
29
+ # Ignore rdoc output files
30
+ doc/rdoc_converted
31
+ doc/rdoc
32
+
33
+ # Ignore generated gem files
34
+ /*.gem
35
+
36
+ # Ignore generated assets
37
+ /lib/assets/javascripts/dyrt*.js
38
+ /lib/assets/javascripts/transpile*.js
39
+
40
+ # Ignore coveralls output
41
+ /coverage
42
+
43
+ # Ignore local node packages
44
+ /node_modules
45
+
46
+ # Ignore other unneeded files
47
+ database.yml
48
+ *.swp
49
+ *~
50
+ .project
51
+ .DS_Store
52
+ .byebug_history
@@ -0,0 +1 @@
1
+ typescript-monkey
@@ -0,0 +1 @@
1
+ ruby-2.3.0
@@ -0,0 +1,27 @@
1
+ language: ruby
2
+
3
+ before_install:
4
+ - "npm install"
5
+ - "gem update --system 2.6.12"
6
+ - "gem update bundler"
7
+
8
+ script:
9
+ - bundle exec rake test
10
+
11
+ rvm:
12
+ - 2.0.0
13
+ - 2.3.4
14
+ - 2.4.1
15
+ - ruby-head
16
+
17
+ sudo: false
18
+
19
+ cache: bundler
20
+
21
+ matrix:
22
+ allow_failures:
23
+ - rvm: ruby-head
24
+ fast_finish: true
25
+
26
+ notifications:
27
+ email: false
@@ -0,0 +1,40 @@
1
+ {
2
+ // See https://go.microsoft.com/fwlink/?LinkId=733558
3
+ // for the documentation about the tasks.json format
4
+ "version": "0.1.0",
5
+ "command": "node_modules/.bin/gulp",
6
+ "isShellCommand": true,
7
+ "args": ["--no-color"],
8
+ "tasks": [
9
+ {
10
+ "taskName": "all",
11
+ "isBuildCommand": true,
12
+ "showOutput": "always"
13
+ },
14
+ {
15
+ "taskName": "transpile",
16
+ "isBuildCommand": true,
17
+ "showOutput": "always"
18
+ },
19
+ {
20
+ "taskName": "transpile-min",
21
+ "isBuildCommand": true,
22
+ "showOutput": "always"
23
+ },
24
+ {
25
+ "taskName": "transpile-once",
26
+ "isBuildCommand": true,
27
+ "showOutput": "always"
28
+ },
29
+ {
30
+ "taskName": "transpile-once-min",
31
+ "isBuildCommand": true,
32
+ "showOutput": "always"
33
+ },
34
+ {
35
+ "taskName": "watch",
36
+ "isBuildCommand": true,
37
+ "showOutput": "always"
38
+ }
39
+ ]
40
+ }
@@ -0,0 +1,48 @@
1
+ ## v0.6.2.4 2016-09-12 13:48:00+0300
2
+
3
+ * Add typescript template generator (not defaulted). Thanks to @mjfaga
4
+
5
+ ## v0.6.2.3 2016-07-27 17:25:00+0300
6
+
7
+ * Fixed incorrect value of register_mime_type (@mihai-dinculescu)
8
+
9
+ ## v0.6.2.1 2016-07-26 18:27:00+0300
10
+
11
+ * Added Sprockets 4 support. Thanks to @mihai-dinculescu
12
+
13
+ ## v0.6.2 2015-07-27 21:52:50+0300
14
+
15
+ * Updated to TS v1.6.2
16
+
17
+ ## v0.6.1 2015-07-27 21:52:50+0300
18
+
19
+ * Now code raises exception with correct file name when TS compilation error occurs
20
+
21
+ ## v0.6.0 2015-07-06 22:36:25+0300
22
+
23
+ * Updated version to 0.6.0 for using Typescript source 1.4.1.3
24
+
25
+ ## v0.5.0 2015-03-25 10:46:29+0900
26
+
27
+ * Expire root TS cache in response to change in referenced `.ts` files (#24)
28
+
29
+ ## v0.4.2 2014-11-26 07:30:12+0900
30
+
31
+ * Fix newlines (#15)
32
+ * Mention to `default_options` in README (#18)
33
+
34
+ ## v0.4.1 2014-08-12 00:05:17+0900
35
+
36
+ * Fix a runtime error
37
+
38
+ ## v0.4.0 2014-08-11 23:04:20+0900
39
+
40
+ * Set `--noImplicitAny` by default to tsc compiler
41
+ * Typescript::Rails::Compiler.default_options to provide tsc compiler with otpions
42
+ * default values: `--target ES5 --noImplicitAny`
43
+ * A lot of refactoring
44
+
45
+ ## v0.3.0 2014-08-09 10:27:54+0900
46
+
47
+ * Compiles TypeScript files in ES5 mode
48
+
data/Gemfile ADDED
@@ -0,0 +1,16 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in typescript-monkey.gemspec
4
+ gemspec
5
+
6
+ group :test do
7
+ gem 'rails', '~> 4.0'
8
+ gem 'sprockets-rails', '> 2.0'
9
+ gem 'minitest-power_assert'
10
+ gem 'coveralls'
11
+ gem 'simplecov'
12
+ gem 'thor', '0.19.1'
13
+ gem 'tzinfo-data', platforms: [:mingw, :mswin]
14
+ gem "byebug", '~> 9.0.6'
15
+ end
16
+
@@ -0,0 +1,22 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (C) 2017 Mark Eissler. All rights reserved.
4
+ Portions Copyright (C) 2012-2016 Klaus Zanders et al.
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
@@ -0,0 +1,351 @@
1
+ # TypeScript Monkey [![Build Status](https://api.travis-ci.org/markeissler/typescript-monkey.svg?branch=feature/typescript-monkey)](https://travis-ci.org/markeissler/typescript-monkey) [![Coverage Status](https://coveralls.io/repos/github/markeissler/typescript-monkey/badge.svg?branch=feature%2Ftypescript-monkey)](https://coveralls.io/github/markeissler/typescript-monkey?branch=feature%2Ftypescript-monkey)
2
+
3
+ This is a TypeScript transpiler engine for the Rails asset pipeline.
4
+
5
+ >BETA: TypeScript Monkey is currently in pre-release. That doesn't mean it's not ready for production, it just means it
6
+ hasn't been tested by a large audience yet. The more the merrier and the faster we get to v1.0. Install it, open issues
7
+ if you find bugs.
8
+
9
+ ## Overview
10
+
11
+ TypeScript Monkey let's you use TypeScript (files with a `.ts` extension) wherever you can use JavaScript (`.js`) files.
12
+ This includes support for pre-processing other template formats. For instance, you can also create `.ts.erb` files. In
13
+ essence, TypeScript is a first class citizen on Rails!
14
+
15
+ For more information on TypeScript visit the [TypeScript](http://www.typescriptlang.org/) homepage.
16
+
17
+ ## Requirements
18
+
19
+ ### Node.js
20
+
21
+ One of the goals of __TypeScript Monkey__ is to reduce the dependence on third-party gems which aren't under active
22
+ development. This gem does require that [Node.js](https://nodejs.org/) has been installed either globally or locally. Specifically,
23
+ TypeScript support (language and compiler) is provided by the TypeScript package for Node. <u>If installed locally,
24
+ it is not recommended that you commit your `node_modules` directory to source control.</u>
25
+
26
+ If you're not familiar with Node.js don't worry, it's not that scary.
27
+
28
+ To install Node.js support, our recommendation is to use an appropriate package manager:
29
+
30
+ [Installing Node.js via package manager](https://nodejs.org/en/download/package-manager/)
31
+
32
+ #### Recommended package managers
33
+
34
+ For MacOS, our recommendation is [Homebrew](https://brew.sh/); for Windows your best bet is probably [Chocolatey](http://chocolatey.org/).
35
+ Go and install a package manager first, then install node, then come back here. If you're on Linux, well, the assumption
36
+ is that you probably know what you're doing already!
37
+
38
+ >NOTE: Another obvious choice for Windows is [NuGet](https://www.nuget.org/) but it appears that the Node package there is stale.
39
+
40
+ ## Installation
41
+
42
+ ### Adding a Node Package Definition (package.json) File
43
+
44
+ The first step is to create a Node.js `package.json` file at the root of your Rails project. You may have created this
45
+ file already for other uses, if so, then you will need to merge in the following dependencies:
46
+
47
+ ```json
48
+ "dependencies": {
49
+ "@types/jquery": "^2.0.41",
50
+ "@types/node": "^7.0.14",
51
+ "typescript": "^2.3.1"
52
+ }
53
+ ```
54
+
55
+ If you don't have an existing `package.json` you can use the `example_package.json` file in the [contrib](./contrib/)
56
+ directory as a starting point. Copy the file to the `root` of your Rails project. __Be sure to rename the file as simply
57
+ "package.json".__
58
+
59
+ The second step is to install some TypeScript dependencies with the Node.js package manager (`npm`):
60
+
61
+ ```sh
62
+ >npm install
63
+ ```
64
+
65
+ The package manager will determine and install the dependencies noted above by reading the `package.json` file.
66
+
67
+ ### Adding the Gem to your Rails Project's Gemfile
68
+
69
+ Update your Gemfile to include the following statement:
70
+
71
+ ```ruby
72
+ # typescript support in the asset pipeline!
73
+ gem 'typescript-monkey', '~> 0.9.0'
74
+ ```
75
+
76
+ Then run bundler:
77
+
78
+ ```sh
79
+ >bundle install
80
+ ```
81
+
82
+ Finally, restart your Rails server to load the __Typescript Monkey__ gem.
83
+
84
+ ## Usage
85
+
86
+ ### TypeScript Triple-Slash Directives
87
+
88
+ __Typescript Monkey__ parses Typescript files and examines __Triple-Slash__ directives (also known as __reference__ tags
89
+ or comments). For each directive, a Sprockets dependency relationship will be created so that a change in a dependency
90
+ will trigger Sprockets to re-process the dependent file as well.
91
+
92
+ >NOTE: __TypeScript Monkey__ does not currently support _import_ directives. See [Features Not Yet Implemented (but on the way)](#pending-features)
93
+ for more information.
94
+
95
+ Learn more about __Triple-Slash__ directives by referring to the following secction of the __Typescript Spec__:
96
+
97
+ [Source Files Dependencies](https://github.com/teppeis/typescript-spec-md/blob/master/en/ch11.md#1111-source-files-dependencies)
98
+
99
+ ### In the Asset Pipeline (Sprockets)
100
+
101
+ Typical usage is the same as with JavaScript. That is, you will need to add your TypeScript files to `.js` manifest
102
+ files just like you would with JavaScript. For instance, in the below example let's pretend that you have created the
103
+ following:
104
+
105
+ ```sh
106
+ app/assets/javascripts/
107
+ ├── application.js
108
+ ├── my-typescript-files
109
+ └── superduper.ts
110
+ ```
111
+
112
+ #### File example: superduper.ts
113
+
114
+ ```ts
115
+ class SuperDuper {
116
+ public message(message: string): void {
117
+ const body: HTMLBodyElement = document.getElementsByTagName("body")[0];
118
+ const element = document.createElement("p");
119
+ element.innerHTML = `${message}`;
120
+ body.appendChild(element);
121
+ }
122
+ }
123
+
124
+ $(() => {
125
+ const superduper = new SuperDuper();
126
+ superduper.message("TypeScript at work.");
127
+ });
128
+ ```
129
+
130
+ Then, your `application.js` file might look like this:
131
+
132
+ #### File example: application.js
133
+
134
+ ```js
135
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
136
+ // listed below.
137
+ //
138
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
139
+ // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
140
+ //
141
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
142
+ // compiled file.
143
+ //
144
+ // Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
145
+ // about supported directives.
146
+ //
147
+ //= require jquery
148
+ //= require jquery_ujs
149
+ //= require jquery-ui/core
150
+ //= require bootstrap-sprockets
151
+ //= require my-typescript-files/superduper
152
+
153
+ ```
154
+
155
+ ### Embedded in \<script\> tags
156
+
157
+ Yes, you can embeded TypeScript in your templates just like JavaScript! All that's required is __TypeScript Monkey__
158
+ DYnamic Runtime Transpiler (aka __"dyrt"__). For example, let's say you had the following snippet in your template:
159
+
160
+ ```erb
161
+ <script type="text/typescript">
162
+ class Alert {
163
+ public alert(message: string): void {
164
+ alert(`An important message: ${message}`);
165
+ return;
166
+ }
167
+ }
168
+ let myAlert = new Alert();
169
+ myAlert.alert("TypeScript is awesome!");
170
+ </script>
171
+ ```
172
+
173
+ The key is making sure your `<script>` tag type is set appropriately as above.
174
+
175
+ To transpile this script at runtime you will have to make __dyrt__ available at runtime. You will also need to make the
176
+ TypeScript library avaialable at runtime. Both of these dependencies can be resolved by adding the following to the end
177
+ of your `<body>` section:
178
+
179
+ ```erb
180
+ <%= javascript_include_tag 'transpiler_pkg' %>
181
+ ```
182
+
183
+ After the page loads, __dyrt__ will parse all `<script>` tags, transpile the TypeScript objects and then append them
184
+ to the end of the page.
185
+
186
+ #### Loading the transpiler with other scripts
187
+
188
+ Yes, you could (theoretically) load the __Typescript Monkey__ transpiler along with you other script assets. If you
189
+ were to do that, you would then have to make the following call to trigger transpilation after DOM load:
190
+
191
+ ```js
192
+ $(function() {
193
+ var transpiler = new TypeScript::Monkey::Transpiler();
194
+ transpiler.transpile();
195
+ );
196
+ ```
197
+
198
+ The `transpile()` method will parse the page, remove all previous transpiled scripts, transpile each TypeScript object
199
+ and then append these scripts to the end of the page.
200
+
201
+ Pretty neat right? __BUT__ it's important to state that using __TypeScript Monkey__ this way may not offer the best
202
+ peformance. Also, you're inline scripts will not benefit from compression or minification. (The `transpiler_pkg` will,
203
+ however, be minified by Sprockets as usual).
204
+
205
+ ### Updating Files and Clearing the Sprockets Cache
206
+
207
+ You've updated some of your TypeScript files and for some reason the changes aren't appearing. Hate it when that
208
+ happens, right? Do this:
209
+
210
+ ```sh
211
+ >rake tmp:clear
212
+ ```
213
+
214
+ Then re-load your website. Sprockets will re-compile all of your TypeScript assets.
215
+
216
+ ## Configuration
217
+
218
+ ### App-level Configuration
219
+
220
+ The common application level configuration options that affect the __TypeScript Monkey__ gem are:
221
+
222
+ ```txt
223
+ #
224
+ # Rails options...
225
+ #
226
+ config.app_generators.javascript_engine :typescript
227
+ #
228
+ # Sprockets options...
229
+ #
230
+ config.assets.enabled = true
231
+ config.assets.js_compressor = :uglifier
232
+ # set to "true" to disable Sprockets concatenation
233
+ config.assets.debug = false
234
+ # set to "true" to generate digests
235
+ config.assets.digest = true
236
+ ```
237
+
238
+ Since the above configuration options appear at the "app" level, changing these settings can affect gems in addition to
239
+ the __Typescript Monkey__ gem.
240
+
241
+ #### Setting Typescript as the Default Javascript Engine
242
+
243
+ If you plan on using TypeScript in your project exclusively (instead of plain `.js` or `.coffee` files), then you might
244
+ want to configure rails so that generators produce TypeScript template files by default. Add the following lines to
245
+ your `config/application.rb` file.
246
+
247
+ ```ruby
248
+ module MyRailsApp
249
+ class Application < Rails::Application
250
+ ...
251
+ # enable typescript in the asset pipeline
252
+ config.app_generators.javascript_engine :typescript
253
+ # enable the asset pipeline (!! Make sure assets are enabled !!)
254
+ config.assets.enabled = true
255
+ ...
256
+ end
257
+ end
258
+ ```
259
+
260
+ Alternatively, you can specify the JavaScript engine as a parameter to the rails generator command line:
261
+
262
+ ```sh
263
+ >rails generate controller MyController --javascript_engine=typescript
264
+ ```
265
+
266
+ ### Gem-level Configuration
267
+
268
+ The __TypeScript Monkey__ gem offers some level of configuration. These settings should be configured from within an
269
+ appropriate initializer. An `example_typescript.rb` initialization file can be found in the [contrib](./contrib/)
270
+ directory. Copy the file to the `app/config/initializers` directory of your Rails project. __Be sure to rename the file
271
+ as simply "typescript.rb".__
272
+
273
+ <a name="typescript-concatenation"></a>
274
+
275
+ #### Setting Traditional TypeScript Concatenation
276
+
277
+ During TypeScript transpilation (conversion of TypeScript to JavaScript), the TypeScript compiler will resolve
278
+ triple-slash directives (dependencies) and as a result transpile and concatenate the dependencies to each file as
279
+ needed. The upside is that each indivual file will contain its dependencies; the downside is that this usually results
280
+ in code duplication in a Rails environment.
281
+
282
+ __Typescript Monkey__ procedes with transpilation under the notion that all dependencies will be met at runtime. That
283
+ should be the case if you have setup your manifest files correctly (either the single `application.js` manifest file or
284
+ your own additional manifest files).
285
+
286
+ Still, if you have a reason to revert back to TypeScript's concatenation scheme then you can do so by enabling the
287
+ following __Typescript Monkey__ configuration in an initializer:
288
+
289
+ ```ruby
290
+ Typescript::Monkey.configure do |config|
291
+ # Configure Typescript::Monkey concatenated compilation
292
+ config.compile = true
293
+ end
294
+ ```
295
+
296
+ ### Configuring a Logger
297
+
298
+ Adding a logger config is really only useful for debugging. Don't configure logging unless you fully understand the
299
+ paragraph that follows the configuraiton snippet:
300
+
301
+ ```ruby
302
+ Typescript::Monkey.configure do |config|
303
+ # Configure Typescript::Monkey logging (for debugging your app build)
304
+ config.logger = Rails.logger
305
+ end
306
+ ```
307
+
308
+ In general, you will see a lot of dependency "errors" generated by the logger. These "errors" (again, in quotes) are
309
+ passed through from the TypeScript compiler which doesn't understand that we're building a web site and that all of the
310
+ "missing" (also, in quotes) dependencies will be resolved at runtime!
311
+
312
+ <a name="pending-features"></a>
313
+
314
+ ## Features Not Yet Implemented (but on the way)
315
+
316
+ This is a short-list of planned features:
317
+
318
+ 1. Support for specifying compiler options from initializer.
319
+ 2. Support for reading compiler options from `tsconfig.json`.
320
+ 3. Support for "import" syntax.
321
+ 4. Features I forgot to write down and can't think of right now...
322
+
323
+ ## Contributing
324
+
325
+ 1. Fork it
326
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
327
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
328
+ 4. Push to the branch (`git push origin my-new-feature`)
329
+ 5. Create new Pull Request
330
+
331
+ ## Authors
332
+
333
+ __TypeScript Monkey__ is the work of __Mark Eissler__ based on the original work of others as noted in the
334
+ [Attributions](#attributions) section below.
335
+
336
+ <a name=attributions></a>
337
+
338
+ ## Attributions
339
+
340
+ __TypeScript Monkey__ is a fork of [typescript-rails](https://github.com/typescript-ruby/typescript-rails). A lot of
341
+ work has gone into producing __Typescript Monkey__ which offers better support for Sprockets and the way that Rails
342
+ works with assets to provide a more native and familiar experience. Still, without the prior work of __Klaus Zanders__
343
+ ([klaus.zanders@gmail.com](klaus.zanders@gmail.com)) and __FUJI Goro__ ([gfuji@cpan.org](gfuji@cpan.org)) and also the
344
+ [coffee-rails](https://github.com/rails/coffee-rails) project, this gem would probably not exist.
345
+
346
+ ## License
347
+
348
+ __Typescript Monkey__ is licensed under the MIT open source license.
349
+
350
+ ---
351
+ Without open source, there would be no Internet as we know it today.