cloudcmd 18.2.1 → 18.4.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.
- package/ChangeLog +10 -0
- package/HELP.md +3 -1
- package/README.md +1 -1
- package/dist/index.html +1 -1
- package/dist/sw.js +1 -1
- package/dist-dev/index.html +1 -0
- package/dist-dev/sw.js +1 -1
- package/img/favicon/favicon-256.png +0 -0
- package/package.json +1 -1
- package/public/manifest.json +11 -0
- package/server/auth.js +2 -1
- package/server/cloudcmd.spec.mjs +17 -0
package/ChangeLog
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
2024.11.22, v18.4.0
|
|
2
|
+
|
|
3
|
+
fix:
|
|
4
|
+
- dff02672 cloudcmd: make manifest.json accessible when authentication is enabled (#428)
|
|
5
|
+
|
|
6
|
+
2024.11.14, v18.3.0
|
|
7
|
+
|
|
8
|
+
feature:
|
|
9
|
+
- 71dc8dd6 cloudcmd: Add support for Progressive Web App (#426)
|
|
10
|
+
|
|
1
11
|
2024.11.06, v18.2.1
|
|
2
12
|
|
|
3
13
|
feature:
|
package/HELP.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Cloud Commander v18.
|
|
1
|
+
# Cloud Commander v18.4.0
|
|
2
2
|
|
|
3
3
|
### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL]
|
|
4
4
|
|
|
@@ -1098,6 +1098,8 @@ There are a lot of ways to be involved in `Cloud Commander` development:
|
|
|
1098
1098
|
|
|
1099
1099
|
## Version history
|
|
1100
1100
|
|
|
1101
|
+
- *2024.11.22*, **[v18.4.0](//github.com/coderaiser/cloudcmd/releases/tag/v18.4.0)**
|
|
1102
|
+
- *2024.11.14*, **[v18.3.0](//github.com/coderaiser/cloudcmd/releases/tag/v18.3.0)**
|
|
1101
1103
|
- *2024.11.06*, **[v18.2.1](//github.com/coderaiser/cloudcmd/releases/tag/v18.2.1)**
|
|
1102
1104
|
- *2024.10.27*, **[v18.2.0](//github.com/coderaiser/cloudcmd/releases/tag/v18.2.0)**
|
|
1103
1105
|
- *2024.08.17*, **[v18.1.0](//github.com/coderaiser/cloudcmd/releases/tag/v18.1.0)**
|
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Cloud Commander v18.
|
|
1
|
+
# Cloud Commander v18.4.0 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL]
|
|
2
2
|
|
|
3
3
|
### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL]
|
|
4
4
|
|
package/dist/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!doctype html><meta charset=utf-8><meta name=robots content=noindex,nofollow><meta name=theme-color content=rgb(49,123,249)><meta content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no" name=viewport><link rel=icon href="{{ prefix }}/favicon.ico"><link rel=stylesheet href="{{ prefix }}/dist/cloudcmd.css"><noscript><link rel=stylesheet href="{{ prefix }}/dist/nojs.css"></noscript><style data-name=columns>{{ columns }}</style><style data-name=themes>{{ themes }}</style><div class=fm>{{ fm }}</div><div id=js-keyspanel class=keyspanel><button id=f1 class="cmd-button reduce-text icon-help" title=Help>F1</button> <button id=f2 class="cmd-button reduce-text icon-user-menu" title="User Menu">F2</button> <button id=f3 class="cmd-button reduce-text icon-view" title=View>F3</button> <button id=f4 class="cmd-button reduce-text icon-edit" title=Edit>F4</button> <button id=f5 class="cmd-button reduce-text icon-copy" title=Copy>F5</button> <button id=f6 class="cmd-button reduce-text icon-move" title=Move>F6</button> <button id=f7 class="cmd-button reduce-text icon-directory" title="New Directory">F7</button> <button id=f8 class="cmd-button reduce-text icon-delete" title=Delete>F8</button> <button id=f9 class="cmd-button reduce-text icon-menu" title=Menu>F9</button> <button id=f10 class="cmd-button reduce-text icon-config" title=Config>F10</button> <button id=~ class="cmd-button reduce-text icon-console" title=Console>~</button> <button id=shift~ class="cmd-button reduce-text icon-terminal" title=Terminal>⇧ ~</button> <button id=contact class="cmd-button reduce-text icon-contact" title=Contact></button></div><script src="{{ prefix }}/dist/cloudcmd.common.js"></script><script src="{{ prefix }}/dist/cloudcmd.js"></script><script>CloudCmd({{ config }});</script>
|
|
1
|
+
<!doctype html><meta charset=utf-8><meta name=robots content=noindex,nofollow><meta name=theme-color content=rgb(49,123,249)><meta content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no" name=viewport><link rel=icon href="{{ prefix }}/favicon.ico"><link rel=stylesheet href="{{ prefix }}/dist/cloudcmd.css"><link rel=manifest href="{{ prefix }}/public/manifest.json"><noscript><link rel=stylesheet href="{{ prefix }}/dist/nojs.css"></noscript><style data-name=columns>{{ columns }}</style><style data-name=themes>{{ themes }}</style><div class=fm>{{ fm }}</div><div id=js-keyspanel class=keyspanel><button id=f1 class="cmd-button reduce-text icon-help" title=Help>F1</button> <button id=f2 class="cmd-button reduce-text icon-user-menu" title="User Menu">F2</button> <button id=f3 class="cmd-button reduce-text icon-view" title=View>F3</button> <button id=f4 class="cmd-button reduce-text icon-edit" title=Edit>F4</button> <button id=f5 class="cmd-button reduce-text icon-copy" title=Copy>F5</button> <button id=f6 class="cmd-button reduce-text icon-move" title=Move>F6</button> <button id=f7 class="cmd-button reduce-text icon-directory" title="New Directory">F7</button> <button id=f8 class="cmd-button reduce-text icon-delete" title=Delete>F8</button> <button id=f9 class="cmd-button reduce-text icon-menu" title=Menu>F9</button> <button id=f10 class="cmd-button reduce-text icon-config" title=Config>F10</button> <button id=~ class="cmd-button reduce-text icon-console" title=Console>~</button> <button id=shift~ class="cmd-button reduce-text icon-terminal" title=Terminal>⇧ ~</button> <button id=contact class="cmd-button reduce-text icon-contact" title=Contact></button></div><script src="{{ prefix }}/dist/cloudcmd.common.js"></script><script src="{{ prefix }}/dist/cloudcmd.js"></script><script>CloudCmd({{ config }});</script>
|
package/dist/sw.js
CHANGED
|
@@ -7,5 +7,5 @@ var serviceWorkerOption = {
|
|
|
7
7
|
]
|
|
8
8
|
};
|
|
9
9
|
|
|
10
|
-
!function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="/dist/",n(n.s=0)}([function(t,e,n){"use strict";const r=n(1),o=n(2),i=n(3),u="development"===r.env.NODE_ENV,c=i((t,e)=>e.waitUntil(t())),s=i((t,e)=>{const{request:n}=e,{url:r}=n,o=a(r);r.endsWith("/")||/\^\/fs/.test(o)||"GET"===n.method&&(t=>"basic"===t.type)(n)&&(o.startsWith("/api")||/^socket.io/.test(o)||e.respondWith(t(e)))}),a=t=>new URL(t).pathname,f="cloudcmd:
|
|
10
|
+
!function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="/dist/",n(n.s=0)}([function(t,e,n){"use strict";const r=n(1),o=n(2),i=n(3),u="development"===r.env.NODE_ENV,c=i((t,e)=>e.waitUntil(t())),s=i((t,e)=>{const{request:n}=e,{url:r}=n,o=a(r);r.endsWith("/")||/\^\/fs/.test(o)||"GET"===n.method&&(t=>"basic"===t.type)(n)&&(o.startsWith("/api")||/^socket.io/.test(o)||e.respondWith(t(e)))}),a=t=>new URL(t).pathname,f="cloudcmd: Fri Nov 22 2024 12:19:28 GMT+0200 (Eastern European Standard Time)",l=(t,e)=>"/"!==t?e:(t=>new Request(t,{credentials:"same-origin"}))("/");self.addEventListener("install",c((async function(){console.info("cloudcmd: sw: install: "+f),await self.skipWaiting()}))),self.addEventListener("fetch",s((async function(t){const{request:e}=t,{url:n}=e,r=a(n),i=l(r,t.request),c=await caches.open(f),s=await c.match(e);if(!u&&s)return s;const[d,h]=await o(fetch,i,{credentials:"same-origin"});return d?new Response(d.message):(await async function(t,e){return(await caches.open(f)).put(t,e)}(e,h.clone()),h)}))),self.addEventListener("activate",c((async function(){console.info("cloudcmd: sw: activate: "+f),await self.clients.claim();const t=await caches.keys(),e=caches.delete.bind(caches);await Promise.all(t.map(e))})))},function(t,e){var n,r,o=t.exports={};function i(){throw new Error("setTimeout has not been defined")}function u(){throw new Error("clearTimeout has not been defined")}function c(t){if(n===setTimeout)return setTimeout(t,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(t){n=i}try{r="function"==typeof clearTimeout?clearTimeout:u}catch(t){r=u}}();var s,a=[],f=!1,l=-1;function d(){f&&s&&(f=!1,s.length?a=s.concat(a):l=-1,a.length&&h())}function h(){if(!f){var t=c(d);f=!0;for(var e=a.length;e;){for(s=a,a=[];++l<e;)s&&s[l].run();l=-1,e=a.length}s=null,f=!1,function(t){if(r===clearTimeout)return clearTimeout(t);if((r===u||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(t);try{r(t)}catch(e){try{return r.call(null,t)}catch(e){return r.call(this,t)}}}(t)}}function p(t,e){this.fun=t,this.array=e}function m(){}o.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];a.push(new p(t,e)),1!==a.length||f||c(h)},p.prototype.run=function(){this.fun.apply(null,this.array)},o.title="browser",o.browser=!0,o.env={},o.argv=[],o.version="",o.versions={},o.on=m,o.addListener=m,o.once=m,o.off=m,o.removeListener=m,o.removeAllListeners=m,o.emit=m,o.prependListener=m,o.prependOnceListener=m,o.listeners=function(t){return[]},o.binding=function(t){throw new Error("process.binding is not supported")},o.cwd=function(){return"/"},o.chdir=function(t){throw new Error("process.chdir is not supported")},o.umask=function(){return 0}},function(t,e,n){"use strict";t.exports=async(t,...e)=>{!function(t){if("function"!=typeof t)throw Error("fn should be a function!")}(t);try{return[null,await t(...e)]}catch(t){return[t]}}},function(t,e,n){"use strict";const r=(t,...e)=>{if(function(t){if("function"!=typeof t)throw Error("fn should be function!")}(t),e.length>=t.length)return t(...e);const n=(...n)=>r(t,...e,...n),o=t.length-e.length-1;return(t=>[function(e){return t(...arguments)},function(e,n){return t(...arguments)},function(e,n,r){return t(...arguments)},function(e,n,r,o){return t(...arguments)},function(e,n,r,o,i){return t(...arguments)}])(n)[o]||n};t.exports=r}]);
|
|
11
11
|
//# sourceMappingURL=sw.js.map
|
package/dist-dev/index.html
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
<link rel="icon" href="{{ prefix }}/favicon.ico">
|
|
10
10
|
|
|
11
11
|
<link rel=stylesheet href="{{ prefix }}/dist/cloudcmd.css">
|
|
12
|
+
<link rel="manifest" href="{{ prefix }}/public/manifest.json">
|
|
12
13
|
<noscript>
|
|
13
14
|
<link rel=stylesheet href="{{ prefix }}/dist/nojs.css">
|
|
14
15
|
</noscript>
|
package/dist-dev/sw.js
CHANGED
|
@@ -103,7 +103,7 @@ var serviceWorkerOption = {
|
|
|
103
103
|
/***/ (function(module, exports, __webpack_require__) {
|
|
104
104
|
|
|
105
105
|
"use strict";
|
|
106
|
-
eval("\n\nconst process = __webpack_require__(/*! node:process */ \"./node_modules/process/browser.js\");\nconst tryToCatch = __webpack_require__(/*! try-to-catch */ \"./node_modules/try-to-catch/lib/try-to-catch.js\");\nconst currify = __webpack_require__(/*! currify */ \"./node_modules/currify/lib/currify.js\");\nconst isDev = process.env.NODE_ENV === 'development';\nconst isGet = a => a.method === 'GET';\nconst isBasic = a => a.type === 'basic';\nconst wait = currify((f, e) => e.waitUntil(f()));\nconst respondWith = currify((f, e) => {\n const {\n request\n } = e;\n const {\n url\n } = request;\n const pathname = getPathName(url);\n if (url.endsWith('/') || /\\^\\/fs/.test(pathname)) return;\n if (!isGet(request)) return;\n if (!isBasic(request)) return;\n if (pathname.startsWith('/api')) return;\n if (/^socket.io/.test(pathname)) return;\n e.respondWith(f(e));\n});\nconst getPathName = url => new URL(url).pathname;\nconst date = \"
|
|
106
|
+
eval("\n\nconst process = __webpack_require__(/*! node:process */ \"./node_modules/process/browser.js\");\nconst tryToCatch = __webpack_require__(/*! try-to-catch */ \"./node_modules/try-to-catch/lib/try-to-catch.js\");\nconst currify = __webpack_require__(/*! currify */ \"./node_modules/currify/lib/currify.js\");\nconst isDev = process.env.NODE_ENV === 'development';\nconst isGet = a => a.method === 'GET';\nconst isBasic = a => a.type === 'basic';\nconst wait = currify((f, e) => e.waitUntil(f()));\nconst respondWith = currify((f, e) => {\n const {\n request\n } = e;\n const {\n url\n } = request;\n const pathname = getPathName(url);\n if (url.endsWith('/') || /\\^\\/fs/.test(pathname)) return;\n if (!isGet(request)) return;\n if (!isBasic(request)) return;\n if (pathname.startsWith('/api')) return;\n if (/^socket.io/.test(pathname)) return;\n e.respondWith(f(e));\n});\nconst getPathName = url => new URL(url).pathname;\nconst date = \"Fri Nov 22 2024 12:19:29 GMT+0200 (Eastern European Standard Time)\";\nconst NAME = `cloudcmd: ${date}`;\nconst createRequest = a => new Request(a, {\n credentials: 'same-origin'\n});\nconst getRequest = (a, request) => {\n if (a !== '/') return request;\n return createRequest('/');\n};\nself.addEventListener('install', wait(onInstall));\nself.addEventListener('fetch', respondWith(onFetch));\nself.addEventListener('activate', wait(onActivate));\nasync function onActivate() {\n console.info(`cloudcmd: sw: activate: ${NAME}`);\n await self.clients.claim();\n const keys = await caches.keys();\n const deleteCache = caches.delete.bind(caches);\n await Promise.all(keys.map(deleteCache));\n}\nasync function onInstall() {\n console.info(`cloudcmd: sw: install: ${NAME}`);\n await self.skipWaiting();\n}\nasync function onFetch(event) {\n const {\n request\n } = event;\n const {\n url\n } = request;\n const pathname = getPathName(url);\n const newRequest = getRequest(pathname, event.request);\n const cache = await caches.open(NAME);\n const response = await cache.match(request);\n if (!isDev && response) return response;\n const [e, resp] = await tryToCatch(fetch, newRequest, {\n credentials: 'same-origin'\n });\n if (e) return new Response(e.message);\n await addToCache(request, resp.clone());\n return resp;\n}\nasync function addToCache(request, response) {\n const cache = await caches.open(NAME);\n return cache.put(request, response);\n}\n\n//# sourceURL=file://cloudcmd/client/sw/sw.js");
|
|
107
107
|
|
|
108
108
|
/***/ }),
|
|
109
109
|
|
|
Binary file
|
package/package.json
CHANGED
package/server/auth.js
CHANGED
|
@@ -16,8 +16,9 @@ module.exports = (config) => {
|
|
|
16
16
|
|
|
17
17
|
function _middle(config, authentication, req, res, next) {
|
|
18
18
|
const is = config('auth');
|
|
19
|
+
const {originalUrl} = req;
|
|
19
20
|
|
|
20
|
-
if (!is)
|
|
21
|
+
if (!is || originalUrl.startsWith('/public/'))
|
|
21
22
|
return next();
|
|
22
23
|
|
|
23
24
|
const success = () => next();
|
package/server/cloudcmd.spec.mjs
CHANGED
|
@@ -178,3 +178,20 @@ test('cloudcmd: sw', async (t) => {
|
|
|
178
178
|
t.equal(status, 200, 'should return sw');
|
|
179
179
|
t.end();
|
|
180
180
|
});
|
|
181
|
+
|
|
182
|
+
test('cloudcmd: manifest.json', async (t) => {
|
|
183
|
+
const config = {
|
|
184
|
+
auth: true,
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
const options = {
|
|
188
|
+
config,
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
const {status} = await request.get('/public/manifest.json', {
|
|
192
|
+
options,
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
t.equal(status, 200, 'should return manifest.json even when authentication is enabled');
|
|
196
|
+
t.end();
|
|
197
|
+
});
|