cloudcmd 19.18.1 → 19.19.1

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 CHANGED
@@ -1,3 +1,15 @@
1
+ 2026.06.15, v19.19.1
2
+
3
+ feature:
4
+ - 78b206e0 client: key: Ctrl + L -> Ctrl + Shift + L: Log out (#466)
5
+ - b1492885 docker: io: NPM_CONFIG_PACKAGE_LOCK=false
6
+ - 76d7bf4d docker: typos, shellcheck: add
7
+
8
+ 2026.05.26, v19.19.0
9
+
10
+ feature:
11
+ - 4ee38db6 client: view: flac: add support
12
+
1
13
  2026.05.26, v19.18.1
2
14
 
3
15
  feature:
package/HELP.md CHANGED
@@ -1,6 +1,6 @@
1
- # Cloud Commander v19.18.1
1
+ # Cloud Commander v19.19.1
2
2
 
3
- ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL]
3
+ ### [Main][MainURL] [Blog][BlogURL] [Demo][DemoURL] [Deploy](#deploy)
4
4
 
5
5
  [MainURL]: https://cloudcmd.io "Main"
6
6
  [BlogURL]: https://blog.cloudcmd.io "Blog"
@@ -14,6 +14,9 @@
14
14
  [TERMUX]: https://termux.com "Termux"
15
15
  [INLY]: https://github.com/coderaiser/node-inly "Extract archive"
16
16
 
17
+ [DeployInstaPodsIMG]: https://img.shields.io/badge/deploy%20on-InstaPods-blue
18
+ [DeployInstaPodsURL]: https://app.instapods.com/dashboard/pods/create?app=cloudcmd&ref=cloudcmd
19
+
17
20
  **Cloud Commander** is a file manager for the web. It includes a command-line console and a text editor. Cloud Commander helps you manage your server and work with files, directories and programs in a web browser from any computer, mobile or tablet.
18
21
 
19
22
  ![Cloud Commander](https://cloudcmd.io/img/logo/cloudcmd.png "Cloud Commander")
@@ -187,12 +190,12 @@ Then, start the server again with `cloudcmd` and reload the page.
187
190
  | `Ctrl + R` | refresh
188
191
  | `Ctrl + D` | clear local storage
189
192
  | `Ctrl + A` | select all files in a panel
190
- | `Ctrl + L` | logout
191
193
  | `Ctrl + M` | [rename selected files](https://github.com/coderaiser/cloudcmd/releases/tag/v12.1.0) in editor
192
194
  | `Ctrl + U` | swap panels
193
195
  | `Ctrl + F3` | sort by name
194
196
  | `Ctrl + F5` | sort by date
195
197
  | `Ctrl + F6` | sort by size
198
+ | `Ctrl + Shift + L` | logout
196
199
  | `Ctrl + Command + .` | show/hide dot files
197
200
  | `Up` | move cursor up
198
201
  | `Down` | move cursor down
@@ -930,9 +933,9 @@ ln -s ./sites-available/io.cloudcmd.io ./sites-enabled
930
933
 
931
934
  ## Deploy
932
935
 
933
- `Cloud Commander` can be easily deployed to [Heroku](https://heroku.com/deploy?template=https://github.com/coderaiser/cloudcmd "Deploy to Heroku").
936
+ `Cloud Commander` can be easily deployed to [InstaPods][DeployInstaPodsURL]. After deploy you receive email with credentials.
934
937
 
935
- [![Deploy to Heroku](https://www.herokucdn.com/deploy/button.png "Deploy to Heroku")](https://heroku.com/deploy?template=https://github.com/coderaiser/cloudcmd)
938
+ [![Deploy on InstaPods](https://instapods.com/deploy-button.svg)](https://app.instapods.com/dashboard/pods/create?app=cloudcmd&ref=cloudcmd)
936
939
 
937
940
  ## Docker
938
941
 
@@ -1119,6 +1122,8 @@ There are a lot of ways to be involved in `Cloud Commander` development:
1119
1122
 
1120
1123
  ## Version history
1121
1124
 
1125
+ - *2026.06.15*, **[v19.19.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.19.1)**
1126
+ - *2026.05.26*, **[v19.19.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.19.0)**
1122
1127
  - *2026.05.26*, **[v19.18.1](//github.com/coderaiser/cloudcmd/releases/tag/v19.18.1)**
1123
1128
  - *2026.05.26*, **[v19.18.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.18.0)**
1124
1129
  - *2026.05.17*, **[v19.17.0](//github.com/coderaiser/cloudcmd/releases/tag/v19.17.0)**
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Cloud Commander v19.18.1 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL]
1
+ # Cloud Commander v19.19.1 [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Codacy][CodacyIMG]][CodacyURL] [![Gitter][GitterIMGURL]][GitterURL] [![Deploy on InstaPods][DeployInstaPodsIMG]][DeployInstaPodsURL]
2
2
 
3
3
  ### [Main][MainURL] [Blog][BlogURL] [Support][SupportURL] [Demo][DemoURL]
4
4
 
@@ -15,6 +15,8 @@
15
15
  [GitterIMGURL]: https://img.shields.io/gitter/room/coderaiser/cloudcmd.js.svg
16
16
  [DeployURL]: https://heroku.com/deploy?template=https://github.com/coderaiser/cloudcmd "Deploy"
17
17
  [DeployIMG]: https://www.herokucdn.com/deploy/button.png
18
+ [DeployInstaPodsIMG]: https://img.shields.io/badge/deploy%20on-InstaPods-blue
19
+ [DeployInstaPodsURL]: https://app.instapods.com/dashboard/pods/create?app=cloudcmd&ref=cloudcmd
18
20
 
19
21
  **Cloud Commander** a file manager for the web with console and editor.
20
22
 
@@ -5148,6 +5148,9 @@ var typedArrays = availableTypedArrays();
5148
5148
 
5149
5149
  var $slice = callBound('String.prototype.slice');
5150
5150
 
5151
+ /** @import { BoundSet, BoundSlice, Cache, Getter } from './types' */
5152
+ /** @import { TypedArrayName } from '.' */
5153
+
5151
5154
  /** @type {<T = unknown>(array: readonly T[], value: unknown) => number} */
5152
5155
  var $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {
5153
5156
  for (var i = 0; i < array.length; i += 1) {
@@ -5158,8 +5161,7 @@ var $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(ar
5158
5161
  return -1;
5159
5162
  };
5160
5163
 
5161
- /** @typedef {import('./types').Getter} Getter */
5162
- /** @type {import('./types').Cache} */
5164
+ /** @type {Cache} */
5163
5165
  var cache = { __proto__: null };
5164
5166
  if (hasToStringTag && gOPD && getProto) {
5165
5167
  forEach(typedArrays, function (typedArray) {
@@ -5176,7 +5178,8 @@ if (hasToStringTag && gOPD && getProto) {
5176
5178
  if (descriptor && descriptor.get) {
5177
5179
  var bound = callBind(descriptor.get);
5178
5180
  cache[
5179
- /** @type {`$${import('.').TypedArrayName}`} */ ('$' + typedArray)
5181
+ /** @type {`$${TypedArrayName}`} */
5182
+ ('$' + typedArray)
5180
5183
  ] = bound;
5181
5184
  }
5182
5185
  }
@@ -5186,62 +5189,72 @@ if (hasToStringTag && gOPD && getProto) {
5186
5189
  var arr = new g[typedArray]();
5187
5190
  var fn = arr.slice || arr.set;
5188
5191
  if (fn) {
5189
- var bound = /** @type {import('./types').BoundSlice | import('./types').BoundSet} */ (
5192
+ var bound = /** @type {BoundSlice | BoundSet} */ (
5190
5193
  // @ts-expect-error TODO FIXME
5191
5194
  callBind(fn)
5192
5195
  );
5193
5196
  cache[
5194
- /** @type {`$${import('.').TypedArrayName}`} */ ('$' + typedArray)
5197
+ /** @type {`$${TypedArrayName}`} */
5198
+ ('$' + typedArray)
5195
5199
  ] = bound;
5196
5200
  }
5197
5201
  });
5198
5202
  }
5199
5203
 
5200
- /** @type {(value: object) => false | import('.').TypedArrayName} */
5201
- var tryTypedArrays = function tryAllTypedArrays(value) {
5202
- /** @type {ReturnType<typeof tryAllTypedArrays>} */ var found = false;
5204
+ /** @type {(value: object) => false | TypedArrayName} */
5205
+ function tryTypedArrays(value) {
5206
+ /** @type {ReturnType<typeof tryTypedArrays>} */ var found = false;
5203
5207
  forEach(
5204
- /** @type {Record<`\$${import('.').TypedArrayName}`, Getter>} */ (cache),
5205
- /** @type {(getter: Getter, name: `\$${import('.').TypedArrayName}`) => void} */
5208
+ /** @type {Record<`$${TypedArrayName}`, Getter>} */ (cache),
5209
+ /** @param {Getter} getter @param {`$${TypedArrayName}`} typedArray */
5206
5210
  function (getter, typedArray) {
5207
5211
  if (!found) {
5208
5212
  try {
5209
5213
  // @ts-expect-error a throw is fine here
5210
5214
  if ('$' + getter(value) === typedArray) {
5211
- found = /** @type {import('.').TypedArrayName} */ ($slice(typedArray, 1));
5215
+ found = /** @type {TypedArrayName} */ ($slice(typedArray, 1));
5212
5216
  }
5213
5217
  } catch (e) { /**/ }
5214
5218
  }
5215
5219
  }
5216
5220
  );
5217
5221
  return found;
5218
- };
5222
+ }
5219
5223
 
5220
- /** @type {(value: object) => false | import('.').TypedArrayName} */
5221
- var trySlices = function tryAllSlices(value) {
5222
- /** @type {ReturnType<typeof tryAllSlices>} */ var found = false;
5224
+ /** @type {(value: object) => false | TypedArrayName} */
5225
+ function trySlices(value) {
5226
+ /** @type {ReturnType<typeof trySlices>} */ var found = false;
5223
5227
  forEach(
5224
- /** @type {Record<`\$${import('.').TypedArrayName}`, Getter>} */(cache),
5225
- /** @type {(getter: Getter, name: `\$${import('.').TypedArrayName}`) => void} */ function (getter, name) {
5228
+ /** @type {Record<`$${TypedArrayName}`, Getter>} */(cache),
5229
+ /** @param {Getter} getter @param {`$${TypedArrayName}`} name */ function (getter, name) {
5226
5230
  if (!found) {
5227
5231
  try {
5228
5232
  // @ts-expect-error a throw is fine here
5229
5233
  getter(value);
5230
- found = /** @type {import('.').TypedArrayName} */ ($slice(name, 1));
5234
+ found = /** @type {TypedArrayName} */ ($slice(name, 1));
5231
5235
  } catch (e) { /**/ }
5232
5236
  }
5233
5237
  }
5234
5238
  );
5235
5239
  return found;
5236
- };
5240
+ }
5237
5241
 
5238
- /** @type {import('.')} */
5242
+ /** @type {(tag: unknown) => tag is typeof typedArrays[number]} */
5243
+ function isTATag(tag) {
5244
+ return $indexOf(typedArrays, tag) > -1;
5245
+ }
5246
+
5247
+ /**
5248
+ * @type {import('.')}
5249
+ * @param {unknown} value
5250
+ */
5239
5251
  module.exports = function whichTypedArray(value) {
5240
- if (!value || typeof value !== 'object') { return false; }
5252
+ if (!value || typeof value !== 'object') {
5253
+ return false;
5254
+ }
5241
5255
  if (!hasToStringTag) {
5242
- /** @type {string} */
5243
5256
  var tag = $slice($toString(value), 8, -1);
5244
- if ($indexOf(typedArrays, tag) > -1) {
5257
+ if (isTATag(tag)) {
5245
5258
  return tag;
5246
5259
  }
5247
5260
  if (tag !== 'Object') {
@@ -6827,7 +6840,7 @@ async function _switchKey(event) {
6827
6840
  }
6828
6841
  break;
6829
6842
  case key.L:
6830
- if (ctrlMeta) {
6843
+ if (ctrlMeta && shift) {
6831
6844
  CloudCmd.logOut();
6832
6845
  event.preventDefault();
6833
6846
  }
@@ -13817,7 +13830,7 @@ var path_browserify = __webpack_require__(7975);
13817
13830
  ;// ./client/modules/view/types.js
13818
13831
 
13819
13832
 
13820
- const isAudio = name => /\.(mp3|ogg|m4a)$/i.test(name);
13833
+ const isAudio = name => /\.(mp3|ogg|m4a|flac)$/i.test(name);
13821
13834
  const testRegExp = currify((name, reg) => reg.test(name));
13822
13835
  const getRegExp = ext => RegExp(`\\.${ext}$`, 'i');
13823
13836
  const isPDF = a => /\.pdf$/i.test(a);