react_on_rails 8.0.2 → 9.0.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 (84) hide show
  1. checksums.yaml +4 -4
  2. data/.eslintignore +2 -0
  3. data/.gitignore +2 -2
  4. data/.rubocop.yml +5 -0
  5. data/.travis.yml +12 -1
  6. data/CHANGELOG.md +185 -6
  7. data/CONTRIBUTING.md +2 -2
  8. data/Gemfile +6 -2
  9. data/Gemfile.rails32 +74 -0
  10. data/KUDOS.md +5 -0
  11. data/README.md +200 -84
  12. data/Rakefile +11 -1
  13. data/app/helpers/react_on_rails_helper.rb +1 -1
  14. data/docs/additional-reading/asset-pipeline.md +20 -0
  15. data/docs/additional-reading/hot-reloading-rails-development.md +4 -75
  16. data/docs/additional-reading/node-server-rendering.md +2 -166
  17. data/docs/additional-reading/rails-assets-relative-paths.md +3 -1
  18. data/docs/additional-reading/rails-engine-integration.md +1 -1
  19. data/docs/additional-reading/rspec-configuration.md +7 -24
  20. data/docs/api/ruby-api-hot-reload-view-helpers.md +2 -2
  21. data/{lib/generators/react_on_rails/templates/base/base/config/initializers/react_on_rails.rb.tt → docs/basics/configuration.md} +80 -41
  22. data/docs/basics/generator.md +0 -5
  23. data/docs/basics/installation-overview.md +6 -5
  24. data/docs/contributor-info/generator-testing.md +0 -9
  25. data/docs/tutorial.md +31 -34
  26. data/lib/generators/USAGE +0 -4
  27. data/lib/generators/react_on_rails/base_generator.rb +43 -76
  28. data/lib/generators/react_on_rails/dev_tests_generator.rb +7 -5
  29. data/lib/generators/react_on_rails/install_generator.rb +5 -10
  30. data/lib/generators/react_on_rails/react_no_redux_generator.rb +10 -9
  31. data/lib/generators/react_on_rails/react_with_redux_generator.rb +27 -17
  32. data/lib/generators/react_on_rails/templates/.eslintrc +2 -0
  33. data/lib/generators/react_on_rails/templates/base/base/Procfile.dev +4 -0
  34. data/lib/generators/react_on_rails/templates/base/base/Procfile.dev-server +5 -0
  35. data/lib/generators/react_on_rails/templates/base/base/{client/app → app/javascript}/bundles/HelloWorld/components/HelloWorld.jsx +1 -2
  36. data/lib/generators/react_on_rails/templates/base/base/app/views/hello_world/index.html.erb.tt +0 -1
  37. data/lib/generators/react_on_rails/templates/base/base/app/views/layouts/hello_world.html.erb +12 -0
  38. data/lib/generators/react_on_rails/templates/base/base/config/initializers/react_on_rails.rb +41 -0
  39. data/lib/generators/react_on_rails/templates/dev_tests/.eslintrc +25 -0
  40. data/lib/generators/react_on_rails/templates/dev_tests/spec/rails_helper.rb +0 -1
  41. data/lib/generators/react_on_rails/templates/dev_tests/spec/simplecov_helper.rb +1 -1
  42. data/lib/generators/react_on_rails/templates/dev_tests/spec/spec_helper.rb +2 -0
  43. data/lib/generators/react_on_rails/templates/redux/base/{client/app → app/javascript}/bundles/HelloWorld/startup/HelloWorldApp.jsx +1 -3
  44. data/lib/react_on_rails/configuration.rb +21 -16
  45. data/lib/react_on_rails/git_utils.rb +9 -3
  46. data/lib/react_on_rails/prerender_error.rb +15 -9
  47. data/lib/react_on_rails/server_rendering_pool/exec.rb +21 -8
  48. data/lib/react_on_rails/test_helper/ensure_assets_compiled.rb +1 -1
  49. data/lib/react_on_rails/test_helper/webpack_assets_compiler.rb +3 -1
  50. data/lib/react_on_rails/test_helper/webpack_assets_status_checker.rb +12 -8
  51. data/lib/react_on_rails/test_helper.rb +7 -6
  52. data/lib/react_on_rails/utils.rb +77 -16
  53. data/lib/react_on_rails/version.rb +1 -1
  54. data/lib/react_on_rails/version_checker.rb +2 -1
  55. data/lib/tasks/assets.rake +12 -4
  56. data/package.json +25 -21
  57. data/rakelib/dummy_apps.rake +9 -0
  58. data/rakelib/example_type.rb +4 -70
  59. data/rakelib/examples.rake +5 -55
  60. data/rakelib/node_package.rake +1 -0
  61. data/rakelib/release.rake +9 -1
  62. data/rakelib/run_rspec.rake +24 -5
  63. data/react_on_rails.gemspec +2 -1
  64. data/webpackConfigLoader.js +45 -72
  65. data/yarn.lock +638 -252
  66. metadata +36 -26
  67. data/lib/generators/react_on_rails/node_generator.rb +0 -24
  68. data/lib/generators/react_on_rails/templates/base/base/Procfile.dev.tt +0 -2
  69. data/lib/generators/react_on_rails/templates/base/base/app/views/layouts/hello_world.html.erb.tt +0 -15
  70. data/lib/generators/react_on_rails/templates/base/base/client/.babelrc +0 -3
  71. data/lib/generators/react_on_rails/templates/base/base/client/REACT_ON_RAILS_CLIENT_README.md +0 -9
  72. data/lib/generators/react_on_rails/templates/base/base/client/package.json.tt +0 -36
  73. data/lib/generators/react_on_rails/templates/base/base/client/webpack.config.js +0 -77
  74. data/lib/generators/react_on_rails/templates/base/base/config/webpacker_lite.yml +0 -27
  75. data/lib/generators/react_on_rails/templates/base/base/package.json.tt +0 -8
  76. data/lib/generators/react_on_rails/templates/node/base/client/node/package.json +0 -10
  77. data/lib/generators/react_on_rails/templates/node/base/client/node/server.js +0 -105
  78. /data/lib/generators/react_on_rails/templates/base/base/{client/app/bundles/HelloWorld/startup/registration.jsx.tt → app/javascript/packs/registration.js.tt} +0 -0
  79. /data/lib/generators/react_on_rails/templates/redux/base/{client/app/bundles/HelloWorld/actions/helloWorldActionCreators.jsx → app/javascript/bundles/HelloWorld/actions/helloWorldActionCreators.js} +0 -0
  80. /data/lib/generators/react_on_rails/templates/redux/base/{client/app → app/javascript}/bundles/HelloWorld/components/HelloWorld.jsx +0 -0
  81. /data/lib/generators/react_on_rails/templates/redux/base/{client/app/bundles/HelloWorld/constants/helloWorldConstants.jsx → app/javascript/bundles/HelloWorld/constants/helloWorldConstants.js} +0 -0
  82. /data/lib/generators/react_on_rails/templates/redux/base/{client/app/bundles/HelloWorld/containers/HelloWorldContainer.jsx → app/javascript/bundles/HelloWorld/containers/HelloWorldContainer.js} +0 -0
  83. /data/lib/generators/react_on_rails/templates/redux/base/{client/app/bundles/HelloWorld/reducers/helloWorldReducer.jsx → app/javascript/bundles/HelloWorld/reducers/helloWorldReducer.js} +0 -0
  84. /data/lib/generators/react_on_rails/templates/redux/base/{client/app/bundles/HelloWorld/store/helloWorldStore.jsx → app/javascript/bundles/HelloWorld/store/helloWorldStore.js} +0 -0
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: react_on_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.0.2
4
+ version: 9.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Gordon
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-06-05 00:00:00.000000000 Z
11
+ date: 2017-09-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rainbow
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 5.1.1
89
+ version: 5.1.2
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 5.1.1
96
+ version: 5.1.2
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: bundler
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: '10.0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: listen
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: rspec
127
141
  requirement: !ruby/object:Gem::Requirement
@@ -311,6 +325,7 @@ files:
311
325
  - CHANGELOG.md
312
326
  - CONTRIBUTING.md
313
327
  - Gemfile
328
+ - Gemfile.rails32
314
329
  - KUDOS.md
315
330
  - NEWS.md
316
331
  - PROJECTS.md
@@ -321,6 +336,7 @@ files:
321
336
  - book.json
322
337
  - docs/LICENSE.md
323
338
  - docs/additional-reading/angular-js-integration-migration.md
339
+ - docs/additional-reading/asset-pipeline.md
324
340
  - docs/additional-reading/babel.md
325
341
  - docs/additional-reading/code-splitting.md
326
342
  - docs/additional-reading/elastic-beanstalk.md
@@ -349,6 +365,7 @@ files:
349
365
  - docs/api/javascript-api.md
350
366
  - docs/api/ruby-api-hot-reload-view-helpers.md
351
367
  - docs/api/ruby-api.md
368
+ - docs/basics/configuration.md
352
369
  - docs/basics/generator.md
353
370
  - docs/basics/i18n.md
354
371
  - docs/basics/installation-overview.md
@@ -367,37 +384,30 @@ files:
367
384
  - lib/generators/react_on_rails/generator_helper.rb
368
385
  - lib/generators/react_on_rails/generator_messages.rb
369
386
  - lib/generators/react_on_rails/install_generator.rb
370
- - lib/generators/react_on_rails/node_generator.rb
371
387
  - lib/generators/react_on_rails/react_no_redux_generator.rb
372
388
  - lib/generators/react_on_rails/react_with_redux_generator.rb
373
389
  - lib/generators/react_on_rails/templates/.eslintrc
374
- - lib/generators/react_on_rails/templates/base/base/Procfile.dev.tt
390
+ - lib/generators/react_on_rails/templates/base/base/Procfile.dev
391
+ - lib/generators/react_on_rails/templates/base/base/Procfile.dev-server
375
392
  - lib/generators/react_on_rails/templates/base/base/app/controllers/hello_world_controller.rb
393
+ - lib/generators/react_on_rails/templates/base/base/app/javascript/bundles/HelloWorld/components/HelloWorld.jsx
394
+ - lib/generators/react_on_rails/templates/base/base/app/javascript/packs/registration.js.tt
376
395
  - lib/generators/react_on_rails/templates/base/base/app/views/hello_world/index.html.erb.tt
377
- - lib/generators/react_on_rails/templates/base/base/app/views/layouts/hello_world.html.erb.tt
378
- - lib/generators/react_on_rails/templates/base/base/client/.babelrc
379
- - lib/generators/react_on_rails/templates/base/base/client/REACT_ON_RAILS_CLIENT_README.md
380
- - lib/generators/react_on_rails/templates/base/base/client/app/bundles/HelloWorld/components/HelloWorld.jsx
381
- - lib/generators/react_on_rails/templates/base/base/client/app/bundles/HelloWorld/startup/registration.jsx.tt
382
- - lib/generators/react_on_rails/templates/base/base/client/package.json.tt
383
- - lib/generators/react_on_rails/templates/base/base/client/webpack.config.js
384
- - lib/generators/react_on_rails/templates/base/base/config/initializers/react_on_rails.rb.tt
385
- - lib/generators/react_on_rails/templates/base/base/config/webpacker_lite.yml
386
- - lib/generators/react_on_rails/templates/base/base/package.json.tt
396
+ - lib/generators/react_on_rails/templates/base/base/app/views/layouts/hello_world.html.erb
397
+ - lib/generators/react_on_rails/templates/base/base/config/initializers/react_on_rails.rb
398
+ - lib/generators/react_on_rails/templates/dev_tests/.eslintrc
387
399
  - lib/generators/react_on_rails/templates/dev_tests/.rspec
388
400
  - lib/generators/react_on_rails/templates/dev_tests/spec/features/hello_world_spec.rb
389
401
  - lib/generators/react_on_rails/templates/dev_tests/spec/rails_helper.rb
390
402
  - lib/generators/react_on_rails/templates/dev_tests/spec/simplecov_helper.rb
391
403
  - lib/generators/react_on_rails/templates/dev_tests/spec/spec_helper.rb
392
- - lib/generators/react_on_rails/templates/node/base/client/node/package.json
393
- - lib/generators/react_on_rails/templates/node/base/client/node/server.js
394
- - lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/actions/helloWorldActionCreators.jsx
395
- - lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/components/HelloWorld.jsx
396
- - lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/constants/helloWorldConstants.jsx
397
- - lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/containers/HelloWorldContainer.jsx
398
- - lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/reducers/helloWorldReducer.jsx
399
- - lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/startup/HelloWorldApp.jsx
400
- - lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/store/helloWorldStore.jsx
404
+ - lib/generators/react_on_rails/templates/redux/base/app/javascript/bundles/HelloWorld/actions/helloWorldActionCreators.js
405
+ - lib/generators/react_on_rails/templates/redux/base/app/javascript/bundles/HelloWorld/components/HelloWorld.jsx
406
+ - lib/generators/react_on_rails/templates/redux/base/app/javascript/bundles/HelloWorld/constants/helloWorldConstants.js
407
+ - lib/generators/react_on_rails/templates/redux/base/app/javascript/bundles/HelloWorld/containers/HelloWorldContainer.js
408
+ - lib/generators/react_on_rails/templates/redux/base/app/javascript/bundles/HelloWorld/reducers/helloWorldReducer.js
409
+ - lib/generators/react_on_rails/templates/redux/base/app/javascript/bundles/HelloWorld/startup/HelloWorldApp.jsx
410
+ - lib/generators/react_on_rails/templates/redux/base/app/javascript/bundles/HelloWorld/store/helloWorldStore.js
401
411
  - lib/react_on_rails.rb
402
412
  - lib/react_on_rails/assets_precompile.rb
403
413
  - lib/react_on_rails/configuration.rb
@@ -461,7 +471,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
461
471
  version: '0'
462
472
  requirements: []
463
473
  rubyforge_project:
464
- rubygems_version: 2.6.11
474
+ rubygems_version: 2.6.12
465
475
  signing_key:
466
476
  specification_version: 4
467
477
  summary: Rails with react server rendering with webpack.
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "rails/generators"
4
-
5
- module ReactOnRails
6
- module Generators
7
- class NodeGenerator < Rails::Generators::Base
8
- Rails::Generators.hide_namespace(namespace)
9
- source_root(File.expand_path("../templates", __FILE__))
10
-
11
- def create_node_directory
12
- empty_directory("client/node")
13
- end
14
-
15
- def copy_base_redux_files
16
- base_path = "node/base/"
17
- %w[client/node/server.js
18
- client/node/package.json].each do |file|
19
- copy_file(base_path + file, file)
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,2 +0,0 @@
1
- web: rails s -p 3000
2
- client: sh -c 'rm -rf public/webpack/development/* || true && cd client && bundle exec rake react_on_rails:locale && yarn run build:development'
@@ -1,15 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>ReactOnRailsWithWebpacker</title>
5
- <%%= csrf_meta_tags %>
6
-
7
- <%%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
8
- <%%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
9
- <%%= javascript_pack_tag 'webpack-bundle' %>
10
- </head>
11
-
12
- <body>
13
- <%%= yield %>
14
- </body>
15
- </html>
@@ -1,3 +0,0 @@
1
- {
2
- "presets": ["es2015", "stage-2", "react"]
3
- }
@@ -1,9 +0,0 @@
1
- Client folder generated by the React on Rails gem.
2
-
3
- See documentation [at github.com/shakacode/react_on_rails](https://github.com/shakacode/react_on_rails) for details on how it is organized.
4
-
5
- If you need additional help, please consider:
6
-
7
- * [Our ShakaCode Forum for React on Rails](https://forum.shakacode.com/c/rails/reactonrails).
8
- * Joining our Slack discussion room by [emailing us a bit about you and your project](mailto:contact@shakacode.com).
9
- * [Hiring us](https://forum.shakacode.com/c/rails/reactonrails) for coaching and custom web application development for your project.
@@ -1,36 +0,0 @@
1
- <%- require "react_on_rails/version_syntax_converter" -%>
2
- {
3
- "name": "<%= app_name %>",
4
- "private": true,
5
- "scripts": {
6
- "build:test": "NODE_ENV=test webpack --config webpack.config.js",
7
- "build:production": "NODE_ENV=production webpack --config webpack.config.js",
8
- "build:development": "NODE_ENV=development webpack -w --config webpack.config.js"
9
- },
10
- "cacheDirectories": ["node_modules", "client/node_modules"],
11
- "dependencies": {
12
- "babel-cli": "^6.24.1",
13
- "babel-core": "^6.24.1",
14
- "babel-loader": "^6.3.2",
15
- "babel-runtime": "^6.23.0",
16
- "babel-polyfill": "^6.23.0",
17
- "babel-preset-es2015": "^6.24.1",
18
- "babel-preset-react": "^6.24.1",
19
- "babel-preset-stage-2": "^6.24.1",
20
- "es5-shim": "^4.5.9",
21
- "expose-loader": "^0.7.3",
22
- "imports-loader": "^0.7.1",
23
- "js-yaml": "^3.8.2",
24
- "react": "^15.5.4",
25
- "react-dom": "^15.5.4",
26
- "react-on-rails": "<%= VersionSyntaxConverter.new.rubygem_to_npm %>",
27
- <%- if options.redux? -%>
28
- "react-redux": "^5.0.4",
29
- "redux": "^3.6.0",
30
- <%- end -%>
31
- "webpack": "^2.3.3",
32
- "webpack-manifest-plugin": "^1.1.0"
33
- },
34
- "devDependencies": {
35
- }
36
- }
@@ -1,77 +0,0 @@
1
- // For inspiration on your webpack configuration, see:
2
- // https://github.com/shakacode/react_on_rails/tree/master/spec/dummy/client
3
- // https://github.com/shakacode/react-webpack-rails-tutorial/tree/master/client
4
-
5
- const webpack = require('webpack');
6
- const { resolve } = require('path');
7
-
8
- const ManifestPlugin = require('webpack-manifest-plugin');
9
- const webpackConfigLoader = require('react-on-rails/webpackConfigLoader');
10
-
11
- const configPath = resolve('..', 'config');
12
- const { devBuild, manifest, webpackOutputPath, webpackPublicOutputDir } =
13
- webpackConfigLoader(configPath);
14
-
15
- const config = {
16
-
17
- context: resolve(__dirname),
18
-
19
- entry: {
20
- 'webpack-bundle': [
21
- 'es5-shim/es5-shim',
22
- 'es5-shim/es5-sham',
23
- 'babel-polyfill',
24
- './app/bundles/HelloWorld/startup/registration',
25
- ],
26
- },
27
-
28
- output: {
29
- // Name comes from the entry section.
30
- filename: '[name]-[hash].js',
31
-
32
- // Leading slash is necessary
33
- publicPath: `/${webpackPublicOutputDir}`,
34
- path: webpackOutputPath,
35
- },
36
-
37
- resolve: {
38
- extensions: ['.js', '.jsx'],
39
- },
40
-
41
- plugins: [
42
- new webpack.EnvironmentPlugin({
43
- NODE_ENV: 'development', // use 'development' unless process.env.NODE_ENV is defined
44
- DEBUG: false,
45
- }),
46
- new ManifestPlugin({ fileName: manifest, writeToFileEmit: true }),
47
- ],
48
-
49
- module: {
50
- rules: [
51
- {
52
- test: require.resolve('react'),
53
- use: {
54
- loader: 'imports-loader',
55
- options: {
56
- shim: 'es5-shim/es5-shim',
57
- sham: 'es5-shim/es5-sham',
58
- },
59
- },
60
- },
61
- {
62
- test: /\.jsx?$/,
63
- use: 'babel-loader',
64
- exclude: /node_modules/,
65
- },
66
- ],
67
- },
68
- };
69
-
70
- module.exports = config;
71
-
72
- if (devBuild) {
73
- console.log('Webpack dev build for Rails'); // eslint-disable-line no-console
74
- module.exports.devtool = 'eval-source-map';
75
- } else {
76
- console.log('Webpack production build for Rails'); // eslint-disable-line no-console
77
- }
@@ -1,27 +0,0 @@
1
- # Note: Base output directory of /public is assumed for static files
2
- default: &default
3
- manifest: manifest.json
4
- # Used in your webpack configuration. Must be created in the
5
- # webpack_public_output_dir folder
6
-
7
- development:
8
- <<: *default
9
- # generated files for development, in /public/webpack/development
10
- webpack_public_output_dir: webpack/development
11
-
12
- # Default is localhost:3500
13
- hot_reloading_host: localhost:3500
14
-
15
- # Developer note: considering removing this option so it can ONLY be turned by using an ENV value.
16
- # Default is false, ENV 'HOT_RELOAD' will always override
17
- hot_reloading_enabled_by_default: false
18
-
19
- test:
20
- <<: *default
21
- # generated files for tests, in /public/webpack/test
22
- webpack_public_output_dir: webpack/test
23
-
24
- production:
25
- <<: *default
26
- # generated files for tests, in /public/webpack/production
27
- webpack_public_output_dir: webpack/production
@@ -1,8 +0,0 @@
1
- {
2
- "name": "<%= app_name %>",
3
- "private": true,
4
- "dependencies": {},
5
- "scripts": {
6
- "postinstall": "cd client && yarn install"
7
- }
8
- }
@@ -1,10 +0,0 @@
1
- {
2
- "name": "react_on_rails_node",
3
- "version": "0.0.0",
4
- "private": true,
5
- "scripts": {
6
- "start": "node ./server.js -s webpack-bundle.js"
7
- },
8
- "dependencies": {
9
- }
10
- }
@@ -1,105 +0,0 @@
1
- const net = require('net');
2
- const fs = require('fs');
3
-
4
- const bundlePath = '../../app/assets/webpack/';
5
- let bundleFileName = 'server-bundle.js';
6
-
7
- let currentArg;
8
-
9
- class Handler {
10
- constructor() {
11
- this.queue = [];
12
- this.initialized = false;
13
- }
14
-
15
- initialize() {
16
- console.log(`Processing ${this.queue.length} pending requests`);
17
- let callback;
18
-
19
- // eslint-disable-next-line no-cond-assign
20
- while (callback = this.queue.pop()) {
21
- callback();
22
- }
23
-
24
- this.initialized = true;
25
- }
26
-
27
- handle(connection) {
28
- const callback = () => {
29
- const terminator = '\r\n\0';
30
- let request = '';
31
- connection.setEncoding('utf8');
32
- connection.on('data', (data) => {
33
- console.log(`Processing chunk: ${data}`);
34
- request += data;
35
- if (data.slice(-terminator.length) === terminator) {
36
- request = request.slice(0, -terminator.length);
37
-
38
- // eslint-disable-next-line no-eval
39
- const response = eval(request);
40
- connection.write(`${response}${terminator}`);
41
- request = '';
42
- }
43
- });
44
- };
45
-
46
- if (this.initialized) {
47
- callback();
48
- } else {
49
- this.queue.push(callback);
50
- }
51
- }
52
- }
53
-
54
- const handler = new Handler();
55
-
56
- process.argv.forEach((val) => {
57
- if (val[0] === '-') {
58
- currentArg = val.slice(1);
59
- return;
60
- }
61
-
62
- if (currentArg === 's') {
63
- bundleFileName = val;
64
- }
65
- });
66
-
67
- function loadBundle() {
68
- if (handler.initialized) {
69
- console.log('Reloading server bundle must be implemented by restarting the node process!');
70
- return;
71
- }
72
-
73
- /* eslint-disable */
74
- require(bundlePath + bundleFileName);
75
- /* eslint-enable */
76
- console.log(`Loaded server bundle: ${bundlePath}${bundleFileName}`);
77
- handler.initialize();
78
- }
79
-
80
- try {
81
- fs.mkdirSync(bundlePath);
82
- } catch (e) {
83
- if (e.code !== 'EEXIST') {
84
- throw e;
85
- } else {
86
- loadBundle();
87
- }
88
- }
89
-
90
- fs.watchFile(bundlePath + bundleFileName, (curr) => {
91
- if (curr && curr.blocks && curr.blocks > 0) {
92
- loadBundle();
93
- }
94
- });
95
-
96
- const unixServer = net.createServer((connection) => {
97
- handler.handle(connection);
98
- });
99
-
100
- unixServer.listen('node.sock');
101
-
102
- process.on('SIGINT', () => {
103
- unixServer.close();
104
- process.exit();
105
- });