-
-
Notifications
You must be signed in to change notification settings - Fork 20
/
export_plugin.lua
73 lines (66 loc) · 2.99 KB
/
export_plugin.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
-- @file plugin/export_plugin.lua EditorExportPlugin for minifying Lua scripts on release exports
-- This file is part of Godot Lua PluginScript: https://github.com/gilzoide/godot-lua-pluginscript
--
-- Copyright (C) 2021-2023 Gil Barbosa Reis.
--
-- Permission is hereby granted, free of charge, to any person obtaining a copy
-- of this software and associated documentation files (the “Software”), to
-- deal in the Software without restriction, including without limitation the
-- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-- sell copies of the Software, and to permit persons to whom the Software is
-- furnished to do so, subject to the following conditions:
--
-- The above copyright notice and this permission notice shall be included in
-- all copies or substantial portions of the Software.
--
-- THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-- IN THE SOFTWARE.
local package_path = package.path
package.path = 'res://addons/godot-lua-pluginscript/plugin/?.lua;res://addons/godot-lua-pluginscript/plugin/?/init.lua;' .. package_path
local luasrcdiet = require 'luasrcdiet'
package.path = package_path
local LuaExportPlugin = {
is_tool = true,
extends = 'EditorExportPlugin',
}
local SHOULD_MINIFY_RELEASE_SETTING = 'lua_pluginscript/export/minify_on_release_export'
local function add_project_setting(name, initial_value)
if not ProjectSettings:has_setting(name) then
ProjectSettings:set_setting(name, initial_value)
end
ProjectSettings:set_initial_value(name, initial_value)
end
add_project_setting(SHOULD_MINIFY_RELEASE_SETTING, true)
function LuaExportPlugin:_export_begin(features, is_debug, path, flags)
self.ignore_path = self:get_script().resource_path:get_base_dir()
self.should_minify = not is_debug and ProjectSettings:get_setting(SHOULD_MINIFY_RELEASE_SETTING)
self.file = File:new()
end
function LuaExportPlugin:_export_file(path, type, features)
if path:begins_with(self.ignore_path) then
self:skip()
elseif self.should_minify and path:ends_with('.lua') then
if self.file:open(path, File.READ) == GD.OK then
local source = tostring(self.file:get_as_text())
self.file:close()
local optsource = luasrcdiet.optimize(luasrcdiet.MAXIMUM_OPTS, source)
print(string.format('[LuaPluginScript] Minified %s: %s -> %s (%d%% reduction)',
path,
String.humanize_size(#source),
String.humanize_size(#optsource),
100 - math.floor(#optsource / #source * 100))
)
self:add_file(path, PoolByteArray.from(optsource), false)
end
end
end
function LuaExportPlugin:_export_end()
self.ignore_path = nil
self.file = nil
end
return LuaExportPlugin