pinokiod 3.51.0 → 3.52.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 (103) hide show
  1. package/3 +1 -0
  2. package/kernel/gitconfig_template +3 -1
  3. package/kernel/scripts/git/create +1 -2
  4. package/kernel/scripts/git/push +1 -1
  5. package/package.json +6 -2
  6. package/server/index.js +42 -17
  7. package/server/public/common.js +0 -4
  8. package/server/public/serve/directory.html +106 -0
  9. package/server/public/serve/icons/application_xp.png +0 -0
  10. package/server/public/serve/icons/application_xp_terminal.png +0 -0
  11. package/server/public/serve/icons/box.png +0 -0
  12. package/server/public/serve/icons/cd.png +0 -0
  13. package/server/public/serve/icons/controller.png +0 -0
  14. package/server/public/serve/icons/drive.png +0 -0
  15. package/server/public/serve/icons/film.png +0 -0
  16. package/server/public/serve/icons/folder.png +0 -0
  17. package/server/public/serve/icons/font.png +0 -0
  18. package/server/public/serve/icons/image.png +0 -0
  19. package/server/public/serve/icons/map.png +0 -0
  20. package/server/public/serve/icons/page.png +0 -0
  21. package/server/public/serve/icons/page_add.png +0 -0
  22. package/server/public/serve/icons/page_attach.png +0 -0
  23. package/server/public/serve/icons/page_code.png +0 -0
  24. package/server/public/serve/icons/page_copy.png +0 -0
  25. package/server/public/serve/icons/page_delete.png +0 -0
  26. package/server/public/serve/icons/page_edit.png +0 -0
  27. package/server/public/serve/icons/page_error.png +0 -0
  28. package/server/public/serve/icons/page_excel.png +0 -0
  29. package/server/public/serve/icons/page_find.png +0 -0
  30. package/server/public/serve/icons/page_gear.png +0 -0
  31. package/server/public/serve/icons/page_go.png +0 -0
  32. package/server/public/serve/icons/page_green.png +0 -0
  33. package/server/public/serve/icons/page_key.png +0 -0
  34. package/server/public/serve/icons/page_lightning.png +0 -0
  35. package/server/public/serve/icons/page_link.png +0 -0
  36. package/server/public/serve/icons/page_paintbrush.png +0 -0
  37. package/server/public/serve/icons/page_paste.png +0 -0
  38. package/server/public/serve/icons/page_red.png +0 -0
  39. package/server/public/serve/icons/page_refresh.png +0 -0
  40. package/server/public/serve/icons/page_save.png +0 -0
  41. package/server/public/serve/icons/page_white.png +0 -0
  42. package/server/public/serve/icons/page_white_acrobat.png +0 -0
  43. package/server/public/serve/icons/page_white_actionscript.png +0 -0
  44. package/server/public/serve/icons/page_white_add.png +0 -0
  45. package/server/public/serve/icons/page_white_c.png +0 -0
  46. package/server/public/serve/icons/page_white_camera.png +0 -0
  47. package/server/public/serve/icons/page_white_cd.png +0 -0
  48. package/server/public/serve/icons/page_white_code.png +0 -0
  49. package/server/public/serve/icons/page_white_code_red.png +0 -0
  50. package/server/public/serve/icons/page_white_coldfusion.png +0 -0
  51. package/server/public/serve/icons/page_white_compressed.png +0 -0
  52. package/server/public/serve/icons/page_white_copy.png +0 -0
  53. package/server/public/serve/icons/page_white_cplusplus.png +0 -0
  54. package/server/public/serve/icons/page_white_csharp.png +0 -0
  55. package/server/public/serve/icons/page_white_cup.png +0 -0
  56. package/server/public/serve/icons/page_white_database.png +0 -0
  57. package/server/public/serve/icons/page_white_delete.png +0 -0
  58. package/server/public/serve/icons/page_white_dvd.png +0 -0
  59. package/server/public/serve/icons/page_white_edit.png +0 -0
  60. package/server/public/serve/icons/page_white_error.png +0 -0
  61. package/server/public/serve/icons/page_white_excel.png +0 -0
  62. package/server/public/serve/icons/page_white_find.png +0 -0
  63. package/server/public/serve/icons/page_white_flash.png +0 -0
  64. package/server/public/serve/icons/page_white_freehand.png +0 -0
  65. package/server/public/serve/icons/page_white_gear.png +0 -0
  66. package/server/public/serve/icons/page_white_get.png +0 -0
  67. package/server/public/serve/icons/page_white_go.png +0 -0
  68. package/server/public/serve/icons/page_white_h.png +0 -0
  69. package/server/public/serve/icons/page_white_horizontal.png +0 -0
  70. package/server/public/serve/icons/page_white_key.png +0 -0
  71. package/server/public/serve/icons/page_white_lightning.png +0 -0
  72. package/server/public/serve/icons/page_white_link.png +0 -0
  73. package/server/public/serve/icons/page_white_magnify.png +0 -0
  74. package/server/public/serve/icons/page_white_medal.png +0 -0
  75. package/server/public/serve/icons/page_white_office.png +0 -0
  76. package/server/public/serve/icons/page_white_paint.png +0 -0
  77. package/server/public/serve/icons/page_white_paintbrush.png +0 -0
  78. package/server/public/serve/icons/page_white_paste.png +0 -0
  79. package/server/public/serve/icons/page_white_php.png +0 -0
  80. package/server/public/serve/icons/page_white_picture.png +0 -0
  81. package/server/public/serve/icons/page_white_powerpoint.png +0 -0
  82. package/server/public/serve/icons/page_white_put.png +0 -0
  83. package/server/public/serve/icons/page_white_ruby.png +0 -0
  84. package/server/public/serve/icons/page_white_stack.png +0 -0
  85. package/server/public/serve/icons/page_white_star.png +0 -0
  86. package/server/public/serve/icons/page_white_swoosh.png +0 -0
  87. package/server/public/serve/icons/page_white_text.png +0 -0
  88. package/server/public/serve/icons/page_white_text_width.png +0 -0
  89. package/server/public/serve/icons/page_white_tux.png +0 -0
  90. package/server/public/serve/icons/page_white_vector.png +0 -0
  91. package/server/public/serve/icons/page_white_visualstudio.png +0 -0
  92. package/server/public/serve/icons/page_white_width.png +0 -0
  93. package/server/public/serve/icons/page_white_word.png +0 -0
  94. package/server/public/serve/icons/page_white_world.png +0 -0
  95. package/server/public/serve/icons/page_white_wrench.png +0 -0
  96. package/server/public/serve/icons/page_white_zip.png +0 -0
  97. package/server/public/serve/icons/page_word.png +0 -0
  98. package/server/public/serve/icons/page_world.png +0 -0
  99. package/server/public/serve/style.css +308 -0
  100. package/server/public/style.css +9 -2
  101. package/server/serveIndex.js +691 -0
  102. package/server/views/app.ejs +305 -87
  103. package/server/views/network.ejs +114 -17
package/3 ADDED
@@ -0,0 +1 @@
1
+ ack: No regular expression found.
@@ -13,4 +13,6 @@
13
13
  name = pinokio
14
14
  email = pinokio
15
15
  [init]
16
- defaultBranch = main
16
+ defaultBranch = main
17
+ [push]
18
+ autoSetupRemote = true
@@ -3,9 +3,8 @@
3
3
  "method": "shell.run",
4
4
  "params": {
5
5
  "path": "{{args.cwd}}",
6
- "input": true,
7
6
  "message": [
8
- "gh repo create"
7
+ "gh repo create {{args.name}} --{{args.visibility}} --source {{args.cwd}}"
9
8
  ]
10
9
  }
11
10
  }]
@@ -5,7 +5,7 @@
5
5
  "chain": "*",
6
6
  "path": "{{args.cwd}}",
7
7
  "message": [
8
- "git push"
8
+ "git push -u"
9
9
  ]
10
10
  }
11
11
  }]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pinokiod",
3
- "version": "3.51.0",
3
+ "version": "3.52.0",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -13,8 +13,10 @@
13
13
  "@homebridge/node-pty-prebuilt-multiarch": "0.12.0-beta.5",
14
14
  "@xterm/headless": "^5.5.0",
15
15
  "7zip-min-win-asar-support": "^1.4.4",
16
+ "accepts": "^1.3.8",
16
17
  "async-retry": "^1.3.3",
17
18
  "axios": "^1.4.0",
19
+ "batch": "^0.6.1",
18
20
  "clear-module": "^4.1.2",
19
21
  "compressing": "^1.10.0",
20
22
  "cookie-parser": "^1.4.6",
@@ -27,6 +29,7 @@
27
29
  "dotenv": "^16.4.5",
28
30
  "ejs": "^3.1.9",
29
31
  "eol": "^0.9.1",
32
+ "escape-html": "^1.0.3",
30
33
  "express": "^4.18.2",
31
34
  "express-http-proxy-cp": "^2.0.3",
32
35
  "express-session": "^1.17.3",
@@ -38,6 +41,7 @@
38
41
  "glob-gitignore": "^1.0.14",
39
42
  "go-get-folder-size": "^0.5.5",
40
43
  "gray-matter": "^4.0.3",
44
+ "http-errors": "^2.0.0",
41
45
  "http-proxy": "^1.18.1",
42
46
  "http-proxy-middleware": "^3.0.0",
43
47
  "http-terminator": "^3.2.0",
@@ -59,6 +63,7 @@
59
63
  "node-notifier": "^10.0.1",
60
64
  "normalize-path": "^3.0.0",
61
65
  "p-limit": "^3.1.0",
66
+ "parseurl": "^1.3.3",
62
67
  "pdrive": "^0.0.27",
63
68
  "portfinder-cp": "^1.0.34",
64
69
  "proxy-agent": "^6.5.0",
@@ -67,7 +72,6 @@
67
72
  "rimraf": "^5.0.0",
68
73
  "sanitize-filename": "^1.6.3",
69
74
  "semver": "^7.5.4",
70
- "serve-index": "^1.9.1",
71
75
  "shell-path": "^2.0.0",
72
76
  "sudo-prompt-programfiles-x86": "^9.2.10",
73
77
  "symlink-dir": "^5.2.1",
package/server/index.js CHANGED
@@ -23,7 +23,7 @@ const fse = require('fs-extra')
23
23
  const QRCode = require('qrcode')
24
24
  const axios = require('axios')
25
25
  const crypto = require('crypto')
26
- const serveIndex = require('serve-index')
26
+ const serveIndex = require('./serveIndex')
27
27
 
28
28
  const git = require('isomorphic-git')
29
29
  const http = require('isomorphic-git/http/node')
@@ -310,6 +310,14 @@ class Server {
310
310
  remote = config["remote \"origin\""].url
311
311
  }
312
312
 
313
+ // Get all remotes
314
+ let remotes = []
315
+ try {
316
+ remotes = await git.listRemotes({ fs, dir, verbose: true })
317
+ } catch (e) {
318
+ console.log("Remotes error", e)
319
+ }
320
+
313
321
  let branch = await git.currentBranch({ fs, dir, fullname: false });
314
322
 
315
323
  const remote2 = await git.getConfig({
@@ -350,7 +358,7 @@ class Server {
350
358
  }
351
359
  })
352
360
  }
353
- return { ref, config, remote, connected, log, branch, branches, dir }
361
+ return { ref, config, remote, remotes, connected, log, branch, branches, dir }
354
362
  }
355
363
  async init_env(env_dir_path, options) {
356
364
  let current = this.kernel.path(env_dir_path, "ENVIRONMENT")
@@ -612,11 +620,14 @@ class Server {
612
620
  theme: this.theme,
613
621
  agent: this.agent,
614
622
  src: "/_api/" + name,
615
- asset: "/asset/api/" + name,
623
+ //asset: "/asset/api/" + name,
624
+ asset: "/files/api/" + name,
616
625
  logs: "/_api/" + name + "/logs",
617
626
  execUrl: "/api/" + name,
618
627
  git_monitor_url: `/gitcommit/HEAD/${name}`,
619
628
  git_history_url: `/info/git/HEAD/${name}`,
629
+ git_push_url: `/run/scripts/git/push.json?cwd=${encodeURIComponent(this.kernel.path('api', name))}`,
630
+ git_create_url: `/run/scripts/git/create.json?cwd=${encodeURIComponent(this.kernel.path('api', name))}`
620
631
  // rawpath,
621
632
  }
622
633
  // if (!this.kernel.proto.config) {
@@ -2916,14 +2927,26 @@ class Server {
2916
2927
  this.kernel.path("web/views"),
2917
2928
  path.resolve(__dirname, "views")
2918
2929
  ])
2919
- let serve = express.static(this.kernel.homedir, { fallthrough: true })
2930
+ let serve = express.static(this.kernel.homedir, { fallthrough: true, })
2931
+ let serve2 = express.static(this.kernel.homedir, { index: false, fallthrough: true, })
2920
2932
  let http_serve = express.static(this.kernel.homedir, {
2921
2933
  redirect: true,
2922
2934
  })
2923
2935
  let https_serve = express.static(this.kernel.homedir, {
2924
2936
  redirect: false,
2925
2937
  })
2926
- this.app.use('/asset', serve, serveIndex(this.kernel.homedir, {icons: true, hidden: true}))
2938
+ this.app.use('/asset', serve, serveIndex(this.kernel.homedir, {icons: true, hidden: true, theme: this.theme }))
2939
+ // this.app.use("/asset", async (req, res, next) => {
2940
+ // let asset_path = this.kernel.path(req.path.slice(1), "index.html")
2941
+ // let exists = await this.exists(asset_path)
2942
+ // if (exists) {
2943
+ // return res.sendFile(asset_path)
2944
+ // } else {
2945
+ // let chunks = req.path.slice(1).split("/")
2946
+ // let parent_path = chunks.slice(0, -1).join("/")
2947
+ // res.redirect("/asset/" + parent_path)
2948
+ // }
2949
+ // })
2927
2950
  this.app.use('/asset', (req, res, next) => {
2928
2951
  if (req.path.match(/\.(png|jpg|jpeg|gif|ico|svg)$/)) {
2929
2952
  res.sendFile(path.resolve(__dirname, 'public', 'pinokio-black.png'));
@@ -2931,17 +2954,7 @@ class Server {
2931
2954
  next();
2932
2955
  }
2933
2956
  });
2934
- this.app.use("/asset", async (req, res, next) => {
2935
- let asset_path = this.kernel.path(req.path.slice(1), "index.html")
2936
- let exists = await this.exists(asset_path)
2937
- if (exists) {
2938
- return res.sendFile(asset_path)
2939
- } else {
2940
- let chunks = req.path.slice(1).split("/")
2941
- let parent_path = chunks.slice(0, -1).join("/")
2942
- res.redirect("/asset/" + parent_path)
2943
- }
2944
- })
2957
+ this.app.use('/files', serve2, serveIndex(this.kernel.homedir, {icons: true, hidden: true, theme: this.theme }))
2945
2958
  } else {
2946
2959
  this.app.set("views", [
2947
2960
  path.resolve(__dirname, "views")
@@ -3617,7 +3630,19 @@ class Server {
3617
3630
  }))
3618
3631
  this.app.post("/openfs", ex(async (req, res) => {
3619
3632
  //Util.openfs(req.body.path, req.body.mode)
3620
- Util.openfs(req.body.path, req.body, this.kernel)
3633
+ if (req.body.name) {
3634
+ let filepath = this.kernel.path("api", req.body.name)
3635
+ Util.openfs(filepath, req.body, this.kernel)
3636
+ } else if (req.body.asset_path) {
3637
+ // asset_path : /asset/...
3638
+ // relpath : ...
3639
+ let relpath = req.body.asset_path.split("/").filter((x) => { return x }).slice(1).join("/")
3640
+ let filepath = this.kernel.path(relpath)
3641
+ console.log({ filepath, relpath })
3642
+ Util.openfs(filepath, req.body, this.kernel)
3643
+ } else if (req.body.path) {
3644
+ Util.openfs(req.body.path, req.body, this.kernel)
3645
+ }
3621
3646
  res.json({ success: true })
3622
3647
  }))
3623
3648
  this.app.post("/keys", ex(async (req, res) => {
@@ -319,7 +319,6 @@ function initTippy() {
319
319
  }
320
320
  });
321
321
  } catch(e) {
322
- console.log(e);
323
322
  }
324
323
  }
325
324
 
@@ -331,13 +330,10 @@ function updateTippyPlacement(instance) {
331
330
 
332
331
  //if (isHeaderElement && isMobileOrMinimized) {
333
332
  if (isMinimized) {
334
- console.log(">1")
335
333
  instance.setProps({ placement: 'right' });
336
334
  } else if (isSidebarTab) {
337
- console.log(">2")
338
335
  instance.setProps({ placement: 'left' });
339
336
  } else {
340
- console.log(">3")
341
337
  instance.setProps({ placement: 'top' });
342
338
  }
343
339
  }
@@ -0,0 +1,106 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset='utf-8'>
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
6
+ <title>listing directory {directory}</title>
7
+ <style>{style}</style>
8
+ <script>
9
+ function $(id){
10
+ var el = 'string' == typeof id
11
+ ? document.getElementById(id)
12
+ : id;
13
+
14
+ el.on = function(event, fn){
15
+ if ('content loaded' == event) {
16
+ event = window.attachEvent ? "load" : "DOMContentLoaded";
17
+ }
18
+ el.addEventListener
19
+ ? el.addEventListener(event, fn, false)
20
+ : el.attachEvent("on" + event, fn);
21
+ };
22
+
23
+ el.all = function(selector){
24
+ return $(el.querySelectorAll(selector));
25
+ };
26
+
27
+ el.each = function(fn){
28
+ for (var i = 0, len = el.length; i < len; ++i) {
29
+ fn($(el[i]), i);
30
+ }
31
+ };
32
+
33
+ el.getClasses = function(){
34
+ return this.getAttribute('class').split(/\s+/);
35
+ };
36
+
37
+ el.addClass = function(name){
38
+ var classes = this.getAttribute('class');
39
+ el.setAttribute('class', classes
40
+ ? classes + ' ' + name
41
+ : name);
42
+ };
43
+
44
+ el.removeClass = function(name){
45
+ var classes = this.getClasses().filter(function(curr){
46
+ return curr != name;
47
+ });
48
+ this.setAttribute('class', classes.join(' '));
49
+ };
50
+
51
+ return el;
52
+ }
53
+
54
+ function search() {
55
+ var str = $('search').value.toLowerCase();
56
+ var links = $('files').all('a');
57
+
58
+ if (str.length > 0) {
59
+ $('files').addClass("searching")
60
+ } else {
61
+ $('files').removeClass("searching")
62
+ }
63
+
64
+ links.each(function(link){
65
+ var text = link.textContent.toLowerCase();
66
+
67
+ if ('..' == text) return;
68
+ if (str.length && ~text.indexOf(str)) {
69
+ link.addClass('highlight');
70
+ } else {
71
+ link.removeClass('highlight');
72
+ }
73
+ });
74
+ }
75
+
76
+ $(window).on('content loaded', function(){
77
+ $('search').on('keyup', search);
78
+ $("open").on("click", async (e) => {
79
+ console.log("location", location)
80
+ await fetch("/openfs", {
81
+ method: "post",
82
+ headers: {
83
+ "Content-Type": "application/json"
84
+ },
85
+ body: JSON.stringify({
86
+ asset_path: location.pathname,
87
+ mode: "open",
88
+ })
89
+ }).then((res) => {
90
+ return res.json()
91
+ })
92
+ })
93
+ });
94
+
95
+
96
+ </script>
97
+ </head>
98
+ <body class="directory {theme}">
99
+ <button id='open'>Open File Explorer</button>
100
+ <input id="search" type="text" placeholder="Search" autocomplete="off" />
101
+ <div id="wrapper">
102
+ <h1><a href="/">~</a>{linked-path}</h1>
103
+ {files}
104
+ </div>
105
+ </body>
106
+ </html>
Binary file