rubyjs-vite 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/app/arguments.rb +49 -0
- data/app/main.rb +48 -0
- data/app/signals.rb +4 -0
- data/bin/rjsv +5 -0
- data/lib/json_parser.rb +96 -0
- data/lib/option_parser.rb +91 -0
- data/lib/ruby_js/constants.rb +6 -0
- data/lib/ruby_js/helper.rb +46 -0
- data/lib/ruby_js/scaffold.rb +31 -0
- data/lib/ruby_js/version.rb +3 -0
- data/lib/ruby_js.rb +46 -0
- data/share/template/bin/server +4 -0
- data/share/template/index.html +13 -0
- data/share/template/package.json +11 -0
- data/share/template/public/vite.svg +1 -0
- data/share/template/src/css/style.css +0 -0
- data/share/template/src/rjs/main.rjs +3 -0
- metadata +61 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f15333a2010c7a42765b915656d0040c0d120408eb3f7ce6ea0c498ac39cc000
|
4
|
+
data.tar.gz: 07dd8234ee0d93c7f6fd6f1fa40d5e29eb2ef7097b29ad6e483472e5db680fd9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 62f535fbaa1312c1e81e695e8ec7a638b0e8e65ce1da78a908d4530697cf86345034af65da8f1ac25dad9cb8994365c84c29405331925147f61e272292cbc797
|
7
|
+
data.tar.gz: 31e34aee73407d887d66f2fe7667e72f1b22be80f1d1b25a363eed4b44ed6683cb527e0225ee04d02a02330bbd84e50bae080c51583b6469fdacd9bfa8998b56
|
data/app/arguments.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require "option_parser"
|
2
|
+
|
3
|
+
@options = {
|
4
|
+
compile: false,
|
5
|
+
watch: false,
|
6
|
+
output: Dir.pwd,
|
7
|
+
source: Dir.pwd,
|
8
|
+
eslevel: "2021".to_i
|
9
|
+
}
|
10
|
+
|
11
|
+
OptionParser.parse do |parser|
|
12
|
+
parser.banner(
|
13
|
+
"Converts the syntax of ruby into javascript.\n" +
|
14
|
+
"Usage: #{RubyJS::Constants::APP_NAME} [options]\n" +
|
15
|
+
"\nOptions:"
|
16
|
+
)
|
17
|
+
parser.on( "-h", "--help", "Show help" ) do
|
18
|
+
puts parser
|
19
|
+
exit
|
20
|
+
end
|
21
|
+
parser.on( "-v", "--version", "Show version" ) do
|
22
|
+
puts "Version is #{RubyJS::VERSION}"
|
23
|
+
exit
|
24
|
+
end
|
25
|
+
parser.on( "-c", "--compile", "Compile to JavaScript and save as .js files." ) do
|
26
|
+
@options[:compile] = true
|
27
|
+
end
|
28
|
+
parser.on( "-w", "--watch", "Watch scripts for changes and rerun commands." ) do
|
29
|
+
@options[:watch] = true
|
30
|
+
end
|
31
|
+
parser.on("-o DIR", "--output DIR", "Set the output path or path/filename\n" +
|
32
|
+
"for compiled JavaScript." ) do |dir|
|
33
|
+
@options[:output] = dir
|
34
|
+
end
|
35
|
+
parser.on("-s DIR", "--source DIR", "Set the source path or path/filename\n" +
|
36
|
+
"for RubyJS." ) do |dir|
|
37
|
+
@options[:source] = dir
|
38
|
+
end
|
39
|
+
parser.on("-es LEVEL", "--eslevel LEVEL", "ECMAScript versions for compilation.\n" +
|
40
|
+
"The default: #{@options[:eslevel]}\n" +
|
41
|
+
"(Accepted level ranges 2015...2022.)") do |level|
|
42
|
+
|
43
|
+
@options[:eslevel] = level.to_i
|
44
|
+
end
|
45
|
+
parser.on("--create PROJECT", nil, "Creates a new project using scaffolding." ) do |project|
|
46
|
+
RubyJS::Scaffold.create project
|
47
|
+
exit
|
48
|
+
end
|
49
|
+
end
|
data/app/main.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
require "ruby_js"
|
2
|
+
require_relative "arguments"
|
3
|
+
require_relative "signals"
|
4
|
+
|
5
|
+
def compile_fun path_f
|
6
|
+
RubyJS.compile path_f, {
|
7
|
+
eslevel: @options[:eslevel],
|
8
|
+
path_s: @options[:source],
|
9
|
+
path_o: @options[:output]
|
10
|
+
}
|
11
|
+
end
|
12
|
+
|
13
|
+
def compile path_f
|
14
|
+
if @options[:compile]
|
15
|
+
compile_fun(path_f)
|
16
|
+
else
|
17
|
+
puts "This '#{path_f}' file was edited, but it wasn't made into a js file."
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
if @options[:compile]
|
22
|
+
RubyJS.get_files(@options[:source]).each do |path_f|
|
23
|
+
compile_fun(path_f)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
if @options[:watch]
|
28
|
+
puts "There is now a watch for edited files."
|
29
|
+
path_s = @options[:source]
|
30
|
+
|
31
|
+
RubyJS::Helper.create_dir(path_s)
|
32
|
+
RubyJS.watch path_s do |modified, added, removed|
|
33
|
+
unless added.empty?
|
34
|
+
compile(added.last)
|
35
|
+
end
|
36
|
+
|
37
|
+
unless modified.empty?
|
38
|
+
compile(modified.last)
|
39
|
+
end
|
40
|
+
|
41
|
+
unless removed.empty?
|
42
|
+
RubyJS.free removed.last, {
|
43
|
+
path_s: @options[:source],
|
44
|
+
path_o: @options[:output]
|
45
|
+
}
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/app/signals.rb
ADDED
data/bin/rjsv
ADDED
data/lib/json_parser.rb
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
require "json"
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
class JsonParser
|
5
|
+
attr_reader :db
|
6
|
+
|
7
|
+
def initialize path, auto_write = true
|
8
|
+
@path = path
|
9
|
+
@db = open @path
|
10
|
+
@auto_write = auto_write
|
11
|
+
end
|
12
|
+
|
13
|
+
def on symbol, value
|
14
|
+
if exist?
|
15
|
+
parse symbol, value
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def parse symbols, value = nil, delete = nil
|
20
|
+
symbols_join = ""
|
21
|
+
if symbols.class.name == "Array"
|
22
|
+
symbols_join = symbols.join("\"][\"")
|
23
|
+
else
|
24
|
+
symbols_join = symbols.to_s
|
25
|
+
end
|
26
|
+
symbols_join = "[\"#{symbols_join}\"]"
|
27
|
+
|
28
|
+
unless delete
|
29
|
+
unless value
|
30
|
+
eval "@db#{ symbols_join }"
|
31
|
+
else
|
32
|
+
eval "@db#{ symbols_join } = value"
|
33
|
+
|
34
|
+
if @auto_write
|
35
|
+
write @path, @db
|
36
|
+
end
|
37
|
+
end
|
38
|
+
else
|
39
|
+
if symbols
|
40
|
+
eval "@db#{ symbols_join }.delete('#{delete}')"
|
41
|
+
else
|
42
|
+
eval "@db.delete('#{delete}')"
|
43
|
+
end
|
44
|
+
|
45
|
+
if @auto_write
|
46
|
+
write @path, @db
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def exist?
|
52
|
+
@db.empty?
|
53
|
+
end
|
54
|
+
|
55
|
+
def delete key, symbols = nil
|
56
|
+
parse(symbols, nil, key)
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
def open path
|
61
|
+
begin
|
62
|
+
result = String.new
|
63
|
+
File.open path do |f|
|
64
|
+
result = JSON.parse f.read
|
65
|
+
end
|
66
|
+
|
67
|
+
return result
|
68
|
+
rescue
|
69
|
+
return Hash.new
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def write path, db
|
74
|
+
begin
|
75
|
+
create_dir path do
|
76
|
+
|
77
|
+
f = File.new path, "w"
|
78
|
+
f.write JSON.pretty_generate db
|
79
|
+
f.close
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def create_dir path, &callback
|
85
|
+
begin
|
86
|
+
dir_path = File.dirname path
|
87
|
+
unless Dir.exist? dir_path
|
88
|
+
FileUtils.mkpath dir_path
|
89
|
+
end
|
90
|
+
|
91
|
+
callback.call
|
92
|
+
rescue
|
93
|
+
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
class OptionParser
|
2
|
+
|
3
|
+
LEFT = 2
|
4
|
+
MIDDLE = 28
|
5
|
+
|
6
|
+
attr_reader :args
|
7
|
+
|
8
|
+
def self.parse(args = ARGV)
|
9
|
+
parser = OptionParser.new
|
10
|
+
yield parser
|
11
|
+
parser.process args
|
12
|
+
parser
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.last_arg(args = ARGV)
|
16
|
+
args.length >= 1 ? args[args.length - 1] : nil
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize(args = ARGV)
|
20
|
+
@args = args
|
21
|
+
@banner = nil
|
22
|
+
@flags = Array.new
|
23
|
+
end
|
24
|
+
|
25
|
+
def banner(banner)
|
26
|
+
@banner = banner
|
27
|
+
end
|
28
|
+
|
29
|
+
def on(short_flag, long_flag, description, &block)
|
30
|
+
@flags << { short_flag: short_flag || '', long_flag: long_flag || '',
|
31
|
+
description: description || '', block: block }
|
32
|
+
end
|
33
|
+
|
34
|
+
def process( args = ARGV )
|
35
|
+
unless args.length == 0
|
36
|
+
args.each_with_index do |arg, i|
|
37
|
+
@flags.each do |flag|
|
38
|
+
name = -> (type_flag) do
|
39
|
+
flag[type_flag].gsub( /[a-z -]/, '' )
|
40
|
+
end
|
41
|
+
|
42
|
+
flag_strip = -> (type_flag) do
|
43
|
+
flag[type_flag].sub( name.(type_flag), '' ).strip()
|
44
|
+
end
|
45
|
+
has_flag = -> (type_flag) { arg == flag_strip.(type_flag) }
|
46
|
+
|
47
|
+
if has_flag.(:short_flag) or
|
48
|
+
has_flag.(:long_flag)
|
49
|
+
|
50
|
+
has_name = -> (type_flag) do
|
51
|
+
name.(type_flag) != ""
|
52
|
+
end
|
53
|
+
value = nil
|
54
|
+
|
55
|
+
if has_name.(:short_flag) or
|
56
|
+
has_name.(:long_flag)
|
57
|
+
value = args[i + 1]
|
58
|
+
end
|
59
|
+
|
60
|
+
flag[:block].call( value )
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
else
|
65
|
+
flag = @flags[0]
|
66
|
+
flag[:block].call
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.get_empty_spaces
|
71
|
+
" " * (MIDDLE + LEFT)
|
72
|
+
end
|
73
|
+
|
74
|
+
def to_s()
|
75
|
+
io = Array.new
|
76
|
+
if banner = @banner
|
77
|
+
io << banner
|
78
|
+
io << "\n"
|
79
|
+
end
|
80
|
+
|
81
|
+
@flags.each do |flag|
|
82
|
+
l_flag = !flag[:long_flag].empty? ? ", #{flag[:long_flag]}" : ""
|
83
|
+
flags = "#{flag[:short_flag]}#{l_flag}".ljust(MIDDLE)
|
84
|
+
desc = flag[:description].gsub("\n", "\n#{OptionParser.get_empty_spaces}")
|
85
|
+
io << "".ljust(LEFT) + flags + desc
|
86
|
+
io << "\n"
|
87
|
+
end
|
88
|
+
|
89
|
+
io.join
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module RubyJS
|
2
|
+
module Helper
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
def self.open path
|
6
|
+
result = ""
|
7
|
+
|
8
|
+
if File.exist? path
|
9
|
+
File.open path do |f|
|
10
|
+
result = f.read
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
result
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.write path_o, content
|
18
|
+
path_od = File.dirname(path_o)
|
19
|
+
create_dir(path_od)
|
20
|
+
|
21
|
+
file = File.new(path_o, "w+")
|
22
|
+
file.write content
|
23
|
+
file.close
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.free path_o
|
27
|
+
File.delete(path_o) if File.exists? path_o
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.event_p event, path_f
|
31
|
+
"#{Time.now.strftime("%l:%M:%S %p").lstrip} [#{Constants::APP_NAME}] #{event} #{path_f}"
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.absolute_path path_f, path_options, prefix = "js"
|
35
|
+
path_ffr = path_f.sub("#{Dir.pwd}/", '').sub(path_options[:path_s], '').sub(Constants::FILE_TYPE, prefix)
|
36
|
+
path_ffa = File.join(path_options[:path_o], path_ffr)
|
37
|
+
path_ffa
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.create_dir path
|
41
|
+
unless Dir.exist? path
|
42
|
+
FileUtils.mkdir_p path
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module RubyJS
|
2
|
+
module Scaffold
|
3
|
+
require "json_parser"
|
4
|
+
|
5
|
+
def self.create project
|
6
|
+
path_as = File.expand_path("./share/template", ROOT)
|
7
|
+
path_ao = File.join(Dir.pwd, project)
|
8
|
+
|
9
|
+
puts "Scaffolding project in #{path_ao}..."
|
10
|
+
FileUtils.copy_entry path_as, path_ao
|
11
|
+
|
12
|
+
json_oc = JsonParser.new File.join(path_ao, "package.json")
|
13
|
+
json_oc.parse :name, project.downcase
|
14
|
+
|
15
|
+
change_server_f(path_ao)
|
16
|
+
install_vite(project, path_ao)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.change_server_f path_ao
|
20
|
+
path_bin_ao = "#{path_ao}/bin/server"
|
21
|
+
content = Helper.open(path_bin_ao)
|
22
|
+
content_ch = content.sub("APP_NAME", Constants::APP_NAME)
|
23
|
+
Helper.write(path_bin_ao, content_ch)
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.install_vite project, path_ao
|
27
|
+
%x(cd #{path_ao} && npm install -D vite)
|
28
|
+
puts "\nDone. Now run:\n\n cd #{project}\n bin/server\n\n"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/ruby_js.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'ruby2js'
|
2
|
+
require "ruby2js/filter/esm"
|
3
|
+
require "listen"
|
4
|
+
require "option_parser"
|
5
|
+
|
6
|
+
module RubyJS
|
7
|
+
require "ruby_js/version"
|
8
|
+
require "ruby_js/helper"
|
9
|
+
require "ruby_js/constants"
|
10
|
+
require "ruby_js/scaffold"
|
11
|
+
|
12
|
+
def self.watch path
|
13
|
+
listener = Listen.to(path, only: /\.#{Constants::FILE_TYPE}$/) do |modified, added, removed|
|
14
|
+
yield modified, added, removed
|
15
|
+
end
|
16
|
+
listener.start
|
17
|
+
sleep
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.compile path_f, options
|
21
|
+
path_o = Helper.absolute_path path_f, { path_s: options[:path_s], path_o: options[:path_o] }
|
22
|
+
|
23
|
+
begin
|
24
|
+
content_rb = Helper.open(path_f)
|
25
|
+
content_js = Ruby2JS.convert(content_rb, eslevel: options[:eslevel]) unless content_rb.empty?
|
26
|
+
|
27
|
+
path_write = Helper.write(path_o, content_js)
|
28
|
+
puts Helper.event_p("compiled", path_o)
|
29
|
+
rescue => exception
|
30
|
+
# p exception.inspect
|
31
|
+
puts Helper.event_p("error", "#{path_o} #{exception}")
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.free path_f, options
|
36
|
+
path_o = Helper.absolute_path path_f, options
|
37
|
+
Helper.free path_o
|
38
|
+
|
39
|
+
puts Helper.event_p("deleted", path_o)
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.get_files(path_s)
|
43
|
+
path = "#{path_s}/**/*.#{Constants::FILE_TYPE}"
|
44
|
+
Dir.glob(path)
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="UTF-8" />
|
5
|
+
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
7
|
+
<title>Vite App</title>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
<div id="app"></div>
|
11
|
+
<script type="module" src="/src/.js/main.js"></script>
|
12
|
+
</body>
|
13
|
+
</html>
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
|
File without changes
|
metadata
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rubyjs-vite
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Filip Vrba
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-11-02 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: ''
|
14
|
+
email: filipvrbaxi@gmail.com
|
15
|
+
executables:
|
16
|
+
- rjsv
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- app/arguments.rb
|
21
|
+
- app/main.rb
|
22
|
+
- app/signals.rb
|
23
|
+
- bin/rjsv
|
24
|
+
- lib/json_parser.rb
|
25
|
+
- lib/option_parser.rb
|
26
|
+
- lib/ruby_js.rb
|
27
|
+
- lib/ruby_js/constants.rb
|
28
|
+
- lib/ruby_js/helper.rb
|
29
|
+
- lib/ruby_js/scaffold.rb
|
30
|
+
- lib/ruby_js/version.rb
|
31
|
+
- share/template/bin/server
|
32
|
+
- share/template/index.html
|
33
|
+
- share/template/package.json
|
34
|
+
- share/template/public/vite.svg
|
35
|
+
- share/template/src/css/style.css
|
36
|
+
- share/template/src/rjs/main.rjs
|
37
|
+
homepage: https://rubygems.org/gems/rubyjs-vite
|
38
|
+
licenses:
|
39
|
+
- MIT
|
40
|
+
metadata:
|
41
|
+
source_code_uri: https://github.com/filipvrba/ruby-js
|
42
|
+
post_install_message:
|
43
|
+
rdoc_options: []
|
44
|
+
require_paths:
|
45
|
+
- lib
|
46
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '0'
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
requirements: []
|
57
|
+
rubygems_version: 3.3.7
|
58
|
+
signing_key:
|
59
|
+
specification_version: 4
|
60
|
+
summary: Converts the syntax of ruby into javascript.
|
61
|
+
test_files: []
|