Some major changes:

- Enhance the error report system
- The SDK now allows to create sub-directory when building and releasing
This commit is contained in:
Xuan Sang LE
2020-05-22 18:31:06 +02:00
parent 0abb49dadc
commit 9f184fc19b
17 changed files with 253 additions and 180 deletions

View File

@ -5,8 +5,8 @@ class CodePad.BaseExtension
preload: () ->
Ant.OS.API.require @dependencies()
import: (lib) ->
Ant.OS.API.requires lib
import: (libs) ->
Ant.OS.API.require libs
basedir: () ->
"#{@app.meta().path}/extensions"
@ -30,56 +30,96 @@ class CodePad.BaseExtension
data = data + "\n" + text
@cat list, data
.then (d) -> resolve d
.catch (e) -> reject e
.catch (e) -> reject e
.catch (e) -> reject __e e
.catch (e) -> reject __e e
copy: (files, to) ->
new Promise (resolve, reject) =>
return resolve() if files.length is 0
file = (files.splice 0, 1)[0].asFileHandle()
tof = "#{to}/#{file.basename}".asFileHandle()
file.read("binary")
.then (data) =>
tof.setCache(new Blob [data], { type: file.info.mime })
.write(file.info.mime)
.then (d) =>
@copy files, to
.then () -> resolve()
.catch (e) -> reject e
.catch (e) -> reject e
file.onready().then (meta) =>
if meta.type is "dir"
# copy directory
desdir = to.asFileHandle()
desdir.mk(file.basename).then () =>
# read the dir content
file.read().then (data) =>
list = (v.path for v in data.result)
@copy list, "#{desdir.path}/#{file.basename}"
.then () =>
@copy files, to
.then () -> resolve()
.catch (e) -> reject __e e
.catch (e) ->
reject __e e
.catch (e) -> reject __e e
.catch (e) ->
reject __e e
else
# copy file
file.read("binary")
.then (data) =>
tof.setCache(new Blob [data], { type: file.info.mime })
.write(file.info.mime)
.then (d) =>
@copy files, to
.then () -> resolve()
.catch (e) -> reject __e e
.catch (e) -> reject __e e
.catch (e) ->
reject __e e
aradd: (list, zip, base) ->
new Promise (resolve, reject) =>
return resolve(zip) if list.length is 0
path = (list.splice 0, 1)[0]
file = path.asFileHandle()
file.onready().then (meta) =>
if meta.type is "dir"
file.read().then (d) =>
l = (v.path for v in d.result)
@aradd l, zip, "#{base}#{file.basename}/"
.then () =>
@aradd list, zip, base
.then () -> resolve(zip)
.catch (e) -> reject __e e
.catch (e) -> reject __e e
.catch (e) -> reject __e e
else
file.read("binary").then (d) =>
zpath = "#{base}#{file.basename}".replace(/^\/+|\/+$/g, '')
zip.file zpath, d, { binary: true }
@aradd list, zip, base
.then () -> resolve(zip)
.catch (e) -> reject __e e
.catch (e) -> reject __e e
.catch (e) -> reject __e e
mkar: (src, dest) ->
@notify __("Preparing for release")
new Promise (resolve, reject) =>
new Promise (r, e) =>
@import("os://scripts/jszip.min.js").then () ->
@import(["os://scripts/jszip.min.js"]).then () ->
src.asFileHandle()
.read().then (d) ->
return e d.error if d.error
r d.result
.catch (ex) -> e ex
.catch (ex) -> e ex
.catch (ex) -> e __e ex
.catch (ex) -> e __e ex
.then (files) =>
new Promise (r, e) =>
zip = new JSZip()
fn = (list) =>
return r zip if list.length is 0
f = (list.splice 0, 1)[0].path.asFileHandle()
return fn list if f.type is "dir"
f.read("binary").then (d) =>
zip.file f.basename, d, { binary: true }
@notify __("add {0} to zip", f.basename)
fn list
.catch (ex) -> e ex
fn files
@aradd (v.path for v in files), zip, "/"
.then (z) -> r(z)
.catch (ex) -> e __e ex
.then (zip) =>
zip.generateAsync({ type: "base64" }).then (data) =>
dest.asFileHandle()
.setCache('data:application/zip;base64,' + data)
.write("base64").then (r) =>
@notify __("Package is generated in release folder")
.catch (e) -> reject e
.catch (e) -> reject e
@notify __("Archive is generated at: {0}", dest)
.catch (e) -> reject __e e
.catch (e) -> reject __e e
mkdirAll: (list) ->
new Promise (resolve, reject) =>
@ -90,8 +130,8 @@ class CodePad.BaseExtension
@app.trigger "filechange", { file: path.parent(), type: "dir" }
@mkdirAll list
.then () -> resolve()
.catch (e) -> reject e
.catch (e) -> reject e
.catch (e) -> reject __e e
.catch (e) -> reject __e e
mkfileAll: (list, path, name) ->
new Promise (resolve, reject) =>
@ -109,9 +149,9 @@ class CodePad.BaseExtension
@app.trigger "filechange", { file: file, type: "file" }
@mkfileAll list, path, name
.then () -> resolve()
.catch (e) -> reject e
.catch (e) -> reject e
.catch (e) -> reject e
.catch (e) -> reject __e e
.catch (e) -> reject __e e
.catch (e) -> reject __e e
metadata: (file) ->
new Promise (resolve, reject) =>

View File

@ -26,7 +26,7 @@ class App.extensions.AntOSDK extends App.BaseExtension
buildnrun: () ->
@metadata("project.json").then (meta) =>
@build(meta).then () =>
@build(meta, true).then () =>
@run(meta).catch (e) => @error __("Unable to run project"), e
.catch (e) =>
@error __("Unable to build project"), e
@ -34,7 +34,7 @@ class App.extensions.AntOSDK extends App.BaseExtension
release: () ->
@metadata("project.json").then (meta) =>
@build(meta).then () =>
@build(meta, false).then () =>
@mkar("#{meta.root}/build/debug", "#{meta.root}/build/release/#{meta.name}.zip")
.then () ->
.catch (e) => @error __("Unable to create package archive"), e
@ -80,25 +80,28 @@ class App.extensions.AntOSDK extends App.BaseExtension
CoffeeScript.nodes data
@verify list
.then () -> resolve()
.catch (e) -> reject e
.catch (e) -> reject __e e
catch ex
reject ex
.catch (e) -> reject e
reject __e ex
.catch (e) -> reject __e e
compile: (meta) ->
new Promise (resolve, reject) =>
@import("#{@basedir()}/coffeescript.js").then () =>
@import([
"#{@basedir()}/coffeescript.js",
"#{@basedir()}/terser.min.js"
]).then () =>
list = ("#{meta.root}/#{v}" for v in meta.coffees)
@verify((f for f in list)).then () =>
@cat(list).then (code) =>
jsrc = CoffeeScript.compile code
@notify __("Compiled successful")
resolve jsrc
.catch (e) -> reject e
.catch (e) -> reject e
.catch (e) -> reject e
.catch (e) -> reject __e e
.catch (e) -> reject __e e
.catch (e) -> reject __e e
build: (meta) ->
build: (meta, debug) ->
dirs = [
"#{meta.root}/build",
"#{meta.root}/build/debug",
@ -110,13 +113,32 @@ class App.extensions.AntOSDK extends App.BaseExtension
@cat ("#{meta.root}/#{v}" for v in meta.javascripts), src
.then (jsrc) ->
new Promise (r, e) ->
code = jsrc
if not debug
options = {
toplevel: true,
compress: {
passes: 3,
#pure_getters: true,
#unsafe: true,
},
mangle: true,
output: {
#beautify: true,
},
}
result = Terser.minify(jsrc, options)
if result.error
@notify __("Unable to minify code: {0}", result.error)
else
code = result.code
"#{meta.root}/build/debug/main.js"
.asFileHandle()
.setCache jsrc
.setCache code
.write("text/plain")
.then (d) ->
r()
.catch (ex) -> e ex
.catch (ex) -> e __e ex
.then () =>
new Promise (r, e) =>
@cat ("#{meta.root}/#{v}" for v in meta.css), ""
@ -128,13 +150,13 @@ class App.extensions.AntOSDK extends App.BaseExtension
.write("text/plain")
.then (d) ->
r()
.catch (ex) -> e ex
.catch (ex) -> e __e ex
.then () =>
@copy ("#{meta.root}/#{v}" for v in meta.copies), "#{meta.root}/build/debug"
.then () -> resolve()
.catch (e) -> reject e
.catch (e) -> reject e
.catch (e) -> reject e
.catch (e) -> reject __e e
.catch (e) -> reject __e e
.catch (e) -> reject __e e
run: (meta) ->
"#{meta.root}/build/debug/package.json"

View File

@ -78,23 +78,23 @@ class App.extensions.ExtensionMaker extends App.BaseExtension
CoffeeScript.nodes data
@verify list
.then () -> resolve()
.catch (e) -> reject e
.catch (e) -> reject __e e
catch ex
reject ex
.catch (e) -> reject e
reject __e ex
.catch (e) -> reject __e e
compile: (meta) ->
new Promise (resolve, reject) =>
@import("#{@basedir()}/coffeescript.js").then () =>
@import(["#{@basedir()}/coffeescript.js"]).then () =>
list = ("#{meta.root}/#{v}" for v in meta.coffees)
@verify((f for f in list)).then () =>
@cat(list).then (code) =>
jsrc = CoffeeScript.compile code
@notify __("Compiled successful")
resolve jsrc
.catch (e) -> reject e
.catch (e) -> reject e
.catch (e) -> reject e
.catch (e) -> reject __e e
.catch (e) -> reject __e e
.catch (e) -> reject __e e
build: (meta) ->
new Promise (resolve, reject) =>
@ -108,7 +108,7 @@ class App.extensions.ExtensionMaker extends App.BaseExtension
.write("text/plain")
.then (d) ->
r()
.catch (ex) -> e ex
.catch (ex) -> e __e ex
.then () ->
new Promise (r, e) ->
"#{meta.root}/build/debug/extension.json"
@ -117,12 +117,12 @@ class App.extensions.ExtensionMaker extends App.BaseExtension
.write("object")
.then (data) ->
r data
.catch (ex) -> e ex
.catch (ex) -> e __e ex
.then () =>
@copy ("#{meta.root}/#{v}" for v in meta.copies), "#{meta.root}/build/debug"
.then () -> resolve()
.catch (e) -> reject e
.catch (e) -> reject e
.catch (e) -> reject __e e
.catch (e) -> reject __e e
run: (meta) ->
new Promise (resolve, reject) =>
@ -142,7 +142,7 @@ class App.extensions.ExtensionMaker extends App.BaseExtension
@app.loadAndRunExtensionAction e.data.item.get "data"
@app.spotlight.run @app
resolve()
.catch (e) -> reject e
.catch (e) -> reject __e e
installExtension: (files, zip) ->
@ -155,8 +155,8 @@ class App.extensions.ExtensionMaker extends App.BaseExtension
meta = JSON.parse(new TextDecoder("utf-8").decode(d))
@installFiles files, zip, meta
.then () -> resolve()
.catch (e) -> reject e
.catch (e) -> reject e
.catch (e) -> reject __e e
.catch (e) -> reject __e e
installFiles: (files, zip, meta) ->
return @installMeta(meta) if files.length is 0
@ -170,9 +170,9 @@ class App.extensions.ExtensionMaker extends App.BaseExtension
return reject r.error if r.error
@installFiles files, zip, meta
.then () -> resolve()
.catch (e) -> reject e
.catch (e) -> reject e
.catch (e) -> reject e
.catch (e) -> reject __e e
.catch (e) -> reject __e e
.catch (e) -> reject __e e
installMeta: (meta) ->
new Promise (resolve, reject) =>
@ -185,12 +185,12 @@ class App.extensions.ExtensionMaker extends App.BaseExtension
file.setCache data
.write("object")
.then () -> resolve()
.catch (e) -> reject e
.catch (e) -> reject e
.catch (e) -> reject __e e
.catch (e) -> reject __e e
installZip: (path) ->
new Promise (resolve, reject) =>
@import("os://scripts/jszip.min.js").then () =>
@import(["os://scripts/jszip.min.js"]).then () =>
path.asFileHandle().read("binary").then (data) =>
JSZip.loadAsync(data).then (zip) =>
pth = @basedir()
@ -206,12 +206,12 @@ class App.extensions.ExtensionMaker extends App.BaseExtension
.then () =>
@installExtension files, zip
.then () -> resolve()
.catch(e) -> reject(e)
.catch (e) -> reject e
.catch(e) -> reject(__e e)
.catch (e) -> reject __e e
else
@installExtension files, zip
.then () -> resolve()
.catch (e) -> reject(e)
.catch (e) -> reject e
.catch (e) -> reject e
.catch (e) -> reject e
.catch (e) -> reject(__e e)
.catch (e) -> reject __e e
.catch (e) -> reject __e e
.catch (e) -> reject __e e

File diff suppressed because one or more lines are too long

View File

@ -27,7 +27,7 @@ class CodePad extends this.OS.GUI.BaseApplication
dir.read().then (d) ->
return reject d.error if d.error
resolve d.result
.catch (e) -> reject e
.catch (e) -> reject __e e
@setup()
setup: () ->

View File

@ -93,7 +93,7 @@ class Files extends this.OS.GUI.BaseApplication
@currdir = dir
($ @navinput).val dir.path
resolve d.result
.catch (e) -> reject e
.catch (e) -> reject __e e
@vfs_event_flag = true
@view.set "ondragndrop", (e) =>

View File

@ -211,8 +211,8 @@ class MarketPlace extends this.OS.GUI.BaseApplication
.then (data) =>
@install data, app
.then (n) -> resolve(n)
.catch (e) -> reject(e)
.catch (e) -> reject e
.catch (e) -> reject(__e e)
.catch (e) -> reject __e e
localInstall: () ->
new Promise (resolve, reject) =>
@ -230,9 +230,9 @@ class MarketPlace extends this.OS.GUI.BaseApplication
if idx >= 0
@applist.set "selected", idx
resolve(n)
.catch (e) -> reject(e)
.catch (e) -> reject e
.catch (e) -> reject e
.catch (e) -> reject(__e e)
.catch (e) -> reject __e e
.catch (e) -> reject __e e
install: (data, meta) ->
new Promise (resolve, reject) =>
@ -271,10 +271,10 @@ class MarketPlace extends this.OS.GUI.BaseApplication
@systemsetting.system.packages[v.app] = v
@appDetail app_meta
resolve(v.name)
.catch (e) -> reject e
.catch (e) -> reject e
.catch (err) -> reject err
.catch (e) -> reject e
.catch (e) -> reject __e e
.catch (e) -> reject __e e
.catch (err) -> reject __e err
.catch (e) -> reject __e e
uninstall: () ->
new Promise (resolve, reject) =>
@ -307,16 +307,16 @@ class MarketPlace extends this.OS.GUI.BaseApplication
@applist.remove el
($ @container).css "visibility", "hidden"
resolve()
.catch (e) -> reject e
.catch (e) -> reject e
.catch (e) -> reject __e e
.catch (e) -> reject __e e
updatePackage: () ->
new Promise (resolve, reject) =>
@uninstall().then () =>
@remoteInstall()
.then () -> resolve()
.catch (e) -> reject e
.catch (e) -> reject e
.catch (e) -> reject __e e
.catch (e) -> reject __e e
mkdirs: (list) ->
new Promise (resolve, reject) =>
@ -329,8 +329,8 @@ class MarketPlace extends this.OS.GUI.BaseApplication
return reject(@_api.throwe __("Cannot create {0}", "#{path}/#{dir}")) if r.error
@mkdirs list
.then () -> resolve()
.catch (e) -> reject e
.catch (e) -> reject e
.catch (e) -> reject __e e
.catch (e) -> reject __e e
installFile: (n, zip, files) ->
new Promise (resolve, reject) =>
@ -345,9 +345,9 @@ class MarketPlace extends this.OS.GUI.BaseApplication
return reject @_api.throwe(__("Cannot install {0}", path)) if r.error
@installFile n, zip, files
.then () -> resolve()
.catch (e) -> reject()
.catch (e) -> reject e
.catch (e) -> reject e
.catch (e) -> reject( __e e)
.catch (e) -> reject __e e
.catch (e) -> reject __e e
MarketPlace.dependencies = [
"os://scripts/jszip.min.js",