@es-joy/jsoe 0.9.0 → 0.10.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/CHANGES.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # CHANGES TO `@es-joy/jsoe`
2
2
 
3
+ ## 0.10.0
4
+
5
+ - feat: add `filelist` type
6
+
3
7
  ## 0.9.0
4
8
 
5
9
  - feat: add `blob` type
package/README.md CHANGED
@@ -34,6 +34,7 @@ Supported types include:
34
34
  - `TypeError`, `RangeError`, `SyntaxError`, `ReferenceError`, `EvalError`,
35
35
  `URIError`, `AggregateError`, `InternalError`
36
36
  - `File`
37
+ - `FileList`
37
38
  - `Map`
38
39
  - `null`
39
40
  - `Number` object
@@ -104,9 +105,13 @@ Supported supertypes include:
104
105
  1. bigint64arrayconstructor
105
106
  1. biguint64arrayconstructor
106
107
  1. Web/API types
107
- 1. filelist
108
108
  1. imagedata, imagebitmap
109
- 1. Our own custom derivative types (e.g., MIDI using TypedArray)
109
+ 1. cryptokey
110
+ 1. domexception
111
+ 1. domrect
112
+ 1. dompoint
113
+ 1. dommatrix
114
+ 1. Our own custom derivative types? (e.g., MIDI using TypedArray)
110
115
  1. Expand subtypes
111
116
  1. String
112
117
  1. As supported by Zod, JSON Schema, etc. (e.g., email addresses as
package/demo/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import {jml, body, $} from '../src/vendor-imports.js';
2
+ // import FileList from '../src/utils/FileList.js';
2
3
 
3
4
  import {
4
5
  typeChoices,
@@ -1 +1 @@
1
- {"version":3,"file":"structuredCloning.d.ts","sourceRoot":"","sources":["../../src/formats/structuredCloning.js"],"names":[],"mappings":";2CAcoB;IACnB,QAAY,EAAE,MAAM,CAAC;IACrB,IAAQ,EAAE,OAAO,aAAa,EAAE,aAAa,CAAC;IAC9C,KAAS,EAAE,OAAO,eAAe,EAAE,oBAAoB,CAAC;IACxD,cAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAe,CAAC,EAAE,OAAO,aAAa,EAAE,gCAAgC,CAAA;CACrE,KAAK,WAAW,GAAC,IAAI;kCAIZ,OAAO,kBAAkB,EAAE,mBAAmB;uCAkWhD,OAAO,eAAe,EAAE,oBAAoB,YAC5C,OAAO,aAAa,EAAE,WAAW,KAC/B,QAAQ,OAAO,CAAC;AAJ7B;;;;;GAKG;AAEH,6CAA6C;AAC7C,iCADW,OAAO,eAAe,EAAE,MAAM,CAkGvC"}
1
+ {"version":3,"file":"structuredCloning.d.ts","sourceRoot":"","sources":["../../src/formats/structuredCloning.js"],"names":[],"mappings":";2CAcoB;IACnB,QAAY,EAAE,MAAM,CAAC;IACrB,IAAQ,EAAE,OAAO,aAAa,EAAE,aAAa,CAAC;IAC9C,KAAS,EAAE,OAAO,eAAe,EAAE,oBAAoB,CAAC;IACxD,cAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAe,CAAC,EAAE,OAAO,aAAa,EAAE,gCAAgC,CAAA;CACrE,KAAK,WAAW,GAAC,IAAI;kCAIZ,OAAO,kBAAkB,EAAE,mBAAmB;uCA4VhD,OAAO,eAAe,EAAE,oBAAoB,YAC5C,OAAO,aAAa,EAAE,WAAW,KAC/B,QAAQ,OAAO,CAAC;AAJ7B;;;;;GAKG;AAEH,6CAA6C;AAC7C,iCADW,OAAO,eAAe,EAAE,MAAM,CA+GvC"}
@@ -1 +1 @@
1
- {"version":3,"file":"arrayType.d.ts","sourceRoot":"","sources":["../../src/fundamentalTypes/arrayType.js"],"names":[],"mappings":";sBAUa,MAAM;;oCAQN,MAAM,gBAAgB,EAAE;+BAGxB,MAAM,CAAC,iBAAiB,GAAG;IACvC,SAAa,EAAE,OAAO,mBAAmB,EAAE,QAAQ,CAAA;CAChD,CAAC,EAAE;6BAGM,MAAM,IAAI;sCAIV,gBAAgB,EAAE;qCAKlB,IAAI;4BAGJ,MAAM,cAAc,GAAG;IACnC,sBAA0B,EAAE,qBAAqB,CAAC;IAClD,kBAAsB,EAAE,iBAAiB,CAAC;IAC1C,iBAAqB,EAAE,gBAAgB,CAAC;IACxC,iBAAqB,EAAE,gBAAgB,CAAA;CACpC;uBAGS,MAAM,QAAQ,IAAI,CAAC;2BAKrB;IAAC,WAAW,CAAC,EAAE,IAAI,CAAA;CAAC,KAClB,IAAI;+BAIJ,MAAM,gBAAgB,GAAC,SAAS;uBAIhC,GAAG;AAmBhB;;GAEG;AACH,yBAFU,OAAO,aAAa,EAAE,UAAU,GAAG;IAAC,MAAM,CAAC,EAAE,OAAO,GAAC,SAAS,CAAA;CAAC,CAgmDvE"}
1
+ {"version":3,"file":"arrayType.d.ts","sourceRoot":"","sources":["../../src/fundamentalTypes/arrayType.js"],"names":[],"mappings":";sBAWa,MAAM;;oCAQN,MAAM,gBAAgB,EAAE;+BAGxB,MAAM,CAAC,iBAAiB,GAAG;IACvC,SAAa,EAAE,OAAO,mBAAmB,EAAE,QAAQ,CAAA;CAChD,CAAC,EAAE;6BAGM,MAAM,IAAI;sCAIV,gBAAgB,EAAE;qCAKlB,IAAI;4BAGJ,MAAM,cAAc,GAAG;IACnC,sBAA0B,EAAE,qBAAqB,CAAC;IAClD,kBAAsB,EAAE,iBAAiB,CAAC;IAC1C,iBAAqB,EAAE,gBAAgB,CAAC;IACxC,iBAAqB,EAAE,gBAAgB,CAAA;CACpC;uBAGS,MAAM,QAAQ,IAAI,CAAC;2BAKrB;IAAC,WAAW,CAAC,EAAE,IAAI,CAAA;CAAC,KAClB,IAAI;+BAIJ,MAAM,gBAAgB,GAAC,SAAS;uBAIhC,GAAG;AAmBhB;;GAEG;AACH,yBAFU,OAAO,aAAa,EAAE,UAAU,GAAG;IAAC,MAAM,CAAC,EAAE,OAAO,GAAC,SAAS,CAAA;CAAC,CAuoDvE"}
@@ -0,0 +1,11 @@
1
+ export default blobType;
2
+ export type BlobInfo = Blob | {
3
+ size: string;
4
+ type: string;
5
+ };
6
+ export type SetValue = (blob: BlobInfo) => void;
7
+ /**
8
+ * @type {import('../types.js').TypeObject}
9
+ */
10
+ declare const blobType: import('../types.js').TypeObject;
11
+ //# sourceMappingURL=blobType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blobType.d.ts","sourceRoot":"","sources":["../../src/fundamentalTypes/blobType.js"],"names":[],"mappings":";uBAMa,IAAI,GAAC;IACjB,IAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAC3B;8BAIgB,QAAQ,KAAK,IAAI;AAiIrC;;GAEG;AACH,wBAFU,OAAO,aAAa,EAAE,UAAU,CAw1BxC"}
@@ -1 +1 @@
1
- {"version":3,"file":"errorType.d.ts","sourceRoot":"","sources":["../../src/fundamentalTypes/errorType.js"],"names":[],"mappings":";AAIA;;GAEG;AACH,yBAFU,OAAO,aAAa,EAAE,UAAU,CAwZxC"}
1
+ {"version":3,"file":"errorType.d.ts","sourceRoot":"","sources":["../../src/fundamentalTypes/errorType.js"],"names":[],"mappings":";AAIA;;GAEG;AACH,yBAFU,OAAO,aAAa,EAAE,UAAU,CAyZxC"}
@@ -0,0 +1,13 @@
1
+ export default fileType;
2
+ export type FileInfo = File | {
3
+ name: string;
4
+ size: string;
5
+ type: string;
6
+ lastModified: string;
7
+ };
8
+ export type SetValue = (file: FileInfo) => void;
9
+ /**
10
+ * @type {import('../types.js').TypeObject}
11
+ */
12
+ declare const fileType: import('../types.js').TypeObject;
13
+ //# sourceMappingURL=fileType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileType.d.ts","sourceRoot":"","sources":["../../src/fundamentalTypes/fileType.js"],"names":[],"mappings":";uBAMa,IAAI,GAAC;IACjB,MAAU,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAC7C,YAAgB,EAAE,MAAM,CAAA;CACrB;8BAIgB,QAAQ,KAAK,IAAI;AAsJrC;;GAEG;AACH,wBAFU,OAAO,aAAa,EAAE,UAAU,CA+6BxC"}
@@ -0,0 +1,6 @@
1
+ export default filelistType;
2
+ /**
3
+ * @type {import('../types.js').TypeObject}
4
+ */
5
+ declare const filelistType: import('../types.js').TypeObject;
6
+ //# sourceMappingURL=filelistType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filelistType.d.ts","sourceRoot":"","sources":["../../src/fundamentalTypes/filelistType.js"],"names":[],"mappings":";AAEA;;GAEG;AACH,4BAFU,OAAO,aAAa,EAAE,UAAU,CA6BxC"}
package/dist/types.d.ts CHANGED
@@ -119,14 +119,19 @@ export type TypeObject = {
119
119
  array?: boolean | undefined;
120
120
  /**
121
121
  * Private context variable. Whether or not
122
- * it is a Map. Do not use in other types.
122
+ * it is a `Map`. Do not use in other types.
123
123
  */
124
124
  map?: boolean | undefined;
125
125
  /**
126
126
  * Private context variable. Whether or not
127
- * it is a set. Do not use in other types.
127
+ * it is a `Set`. Do not use in other types.
128
128
  */
129
129
  set?: boolean | undefined;
130
+ /**
131
+ * Private context variable. Whether or not
132
+ * it is a `FileList` type. Do not use in other types.
133
+ */
134
+ filelist?: boolean | undefined;
130
135
  /**
131
136
  * Private context variable. Whether or not
132
137
  * it is a sparse array. Do not use in other types.
@@ -250,7 +255,7 @@ export type TypeObject = {
250
255
  };
251
256
  } | undefined;
252
257
  };
253
- export type AvailableType = "null" | "true" | "false" | "number" | "bigint" | "string" | "arrayReference" | "objectReference" | "array" | "object" | "date" | "userObject" | "undef" | "SpecialRealNumber" | "SpecialNumber" | "regexp" | "BooleanObject" | "NumberObject" | "StringObject" | "map" | "set" | "file" | "filelist" | "blobHTML" | "arraybuffer" | "arraybufferview" | "dataview" | "imagedata" | "imagebitmap" | "int8array" | "uint8array" | "uint8clampedarray" | "int16array" | "uint16array" | "int32array" | "uint32array" | "float32array" | "float64array" | "IntlCollator" | "IntlDateTimeFormat" | "IntlNumberFormat" | "ValidDate" | "arrayNonindexKeys" | "error" | "errors";
258
+ export type AvailableType = "null" | "true" | "false" | "number" | "bigint" | "string" | "arrayReference" | "objectReference" | "array" | "object" | "date" | "userObject" | "undef" | "SpecialRealNumber" | "SpecialNumber" | "regexp" | "BooleanObject" | "NumberObject" | "StringObject" | "map" | "set" | "file" | "filelist" | "blobHTML" | "arraybuffer" | "arraybufferview" | "dataview" | "imagedata" | "imagebitmap" | "int8array" | "uint8array" | "uint8clampedarray" | "int16array" | "uint16array" | "int32array" | "uint32array" | "float32array" | "float64array" | "IntlCollator" | "IntlDateTimeFormat" | "IntlNumberFormat" | "ValidDate" | "arrayNonindexKeys" | "error" | "errors" | "blob";
254
259
  export type GetPossibleSchemasForPathAndType = (keypath: string, parentPath: string, arrayOrObjectPropertyName: string, valueType: string) => StateObject;
255
260
  export type StateObject = {
256
261
  typeNamespace?: string | undefined;
@@ -433,6 +438,7 @@ declare const Types: {
433
438
  error: string[] | Partial<TypeObject>;
434
439
  file: string[] | Partial<TypeObject>;
435
440
  arraybuffer: string[] | Partial<TypeObject>;
441
+ blob: string[] | Partial<TypeObject>;
436
442
  date: string[] | Partial<TypeObject>;
437
443
  null: string[] | Partial<TypeObject>;
438
444
  regexp: string[] | Partial<TypeObject>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export default FileList;
2
+ export type Integer = number;
3
+ /**
4
+ * @typedef {number} Integer
5
+ */
6
+ /**
7
+ * `FileList` polyfill.
8
+ */
9
+ declare class FileList {
10
+ /**
11
+ * Set private properties and length.
12
+ */
13
+ constructor(...args: any[]);
14
+ _files: any;
15
+ length: any;
16
+ /**
17
+ * @param {Integer} index
18
+ * @returns {File}
19
+ */
20
+ item(index: Integer): File;
21
+ /**
22
+ * @returns {"FileList"}
23
+ */
24
+ get [Symbol.toStringTag](): "FileList";
25
+ }
26
+ //# sourceMappingURL=FileList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileList.d.ts","sourceRoot":"","sources":["../../src/utils/FileList.js"],"names":[],"mappings":";sBACa,MAAM;AADnB;;GAEG;AACH;;GAEG;AACH;IACE;;OAEG;IACH,4BAIC;IAFC,YAA0B;IAC1B,YAAgC;IAElC;;;OAGG;IACH,YAHW,OAAO,GACL,IAAI,CAIhB;IAED;;OAEG;IACH,uCAGC;CACF"}
@@ -56,15 +56,17 @@ declare namespace dialogs {
56
56
  /**
57
57
  * @param {object} cfg
58
58
  * @param {(info: {e: Event, dialog: HTMLDialogElement}) => void} cfg.submit
59
+ * @param {string} [cfg.submitText]
59
60
  * @param {string} [cfg.submitClass]
60
61
  * @param {MakeCancelArgs} [cfg.args]
61
62
  * @returns {HTMLDialogElement}
62
63
  */
63
- function makeSubmitDialog({ submit, submitClass, ...args }: {
64
+ function makeSubmitDialog({ submit, submitText, submitClass, ...args }: {
64
65
  submit: (info: {
65
66
  e: Event;
66
67
  dialog: HTMLDialogElement;
67
68
  }) => void;
69
+ submitText?: string | undefined;
68
70
  submitClass?: string | undefined;
69
71
  args?: {
70
72
  cancel?: ((info: {
@@ -1 +1 @@
1
- {"version":3,"file":"dialogs.d.ts","sourceRoot":"","sources":["../../src/utils/dialogs.js"],"names":[],"mappings":";;;;;uBAiBa,MAAM;IAEjB;;;OAGG;IACH,sDAEC;IAED;;;;;;OAMG;IACH;;;OAGG;IACH;;;;;0BAmBC;IACD;;;;;;;;OAQG;IACH;;;OAGG;IACH;;;;;;;;;;;;;0BA0BC;IACD;;;;;;OAMG;IACH;;;;;;;;;;;;;;;;;;;;0BAiBC;IACD;;;;;;OAMG;IACH;;;sBAiBC;IACD;;;;;OAKG;IACH;;;;;;qBAwBC"}
1
+ {"version":3,"file":"dialogs.d.ts","sourceRoot":"","sources":["../../src/utils/dialogs.js"],"names":[],"mappings":";;;;;uBAiBa,MAAM;IAEjB;;;OAGG;IACH,sDAEC;IAED;;;;;;OAMG;IACH;;;OAGG;IACH;;;;;0BAmBC;IACD;;;;;;;;OAQG;IACH;;;OAGG;IACH;;;;;;;;;;;;;0BA0BC;IACD;;;;;;;OAOG;IACH;;;;;;;;;;;;;;;;;;;;;0BAiBC;IACD;;;;;;OAMG;IACH;;;sBAiBC;IACD;;;;;OAKG;IACH;;;;;;qBAwBC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @param {MediaStream} stream
3
+ * @param {HTMLCanvasElement} canvas
4
+ * @see Adapted from {@link https://mdn.github.io/dom-examples/media/web-dictaphone/}
5
+ * @returns {void}
6
+ */
7
+ export function visualize(stream: MediaStream, canvas: HTMLCanvasElement): void;
8
+ /**
9
+ * @param {MediaStreamConstraints} constraints
10
+ * @returns {Promise<MediaStream|null>}
11
+ */
12
+ export function getUserMedia(constraints: MediaStreamConstraints): Promise<MediaStream | null>;
13
+ /**
14
+ * @param {DisplayMediaStreamOptions|undefined} displayMediaOptions
15
+ * @returns {Promise<MediaStream|null>}
16
+ */
17
+ export function startScreenCapture(displayMediaOptions: DisplayMediaStreamOptions | undefined): Promise<MediaStream | null>;
18
+ //# sourceMappingURL=media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/utils/media.js"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,kCALW,WAAW,UACX,iBAAiB,GAEf,IAAI,CA4DhB;AAGD;;;GAGG;AACH,0CAHW,sBAAsB,GACpB,QAAQ,WAAW,GAAC,IAAI,CAAC,CAYrC;AAED;;;GAGG;AACH,wDAHW,yBAAyB,GAAC,SAAS,GACjC,QAAQ,WAAW,GAAC,IAAI,CAAC,CAarC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@es-joy/jsoe",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "type": "module",
5
5
  "types": "./dist/index.d.ts",
6
6
  "main": "./src/index.js",
@@ -68,7 +68,7 @@ const encapsulateObserver = (stateObj) => {
68
68
  if (cyclic === 'readonly' && !Array.isArray(observerObj.value)) {
69
69
  return;
70
70
  }
71
- if (cyclic === 'readonly' && type === 'set') {
71
+ if (cyclic === 'readonly' && (type === 'set' || type === 'filelist')) {
72
72
  return;
73
73
  }
74
74
  if (endIterateIn || endIterateOwn) {
@@ -419,6 +419,9 @@ const structuredCloning = {
419
419
  if (state === 'errorsArray') {
420
420
  return ['error', 'errors'];
421
421
  }
422
+ if (state === 'filelistArray') {
423
+ return ['file'];
424
+ }
422
425
  return this.types();
423
426
  /*
424
427
  // Todo (low): These need to specify their own inner contexts
@@ -458,11 +461,19 @@ const structuredCloning = {
458
461
  'blob',
459
462
  'file',
460
463
  'set',
461
- 'map'
462
- // Ok, but will need some work
463
- // 'filelist',
464
- // 'arraybuffer',
465
- // 'dataview', 'imagedata', 'imagebitmap',
464
+ 'map',
465
+ 'filelist'
466
+ // Ok:
467
+ // 'domexception',
468
+ // 'domrect',
469
+ // 'dompoint',
470
+ // 'dommatrix',
471
+
472
+ // Ok, but will need some work and/or decisions on how to present:
473
+ // 'cryptokey',
474
+
475
+ // 'arraybuffer',
476
+ // 'dataview', 'imagedata', 'imagebitmap',
466
477
  /*
467
478
  // Typed Arrays
468
479
  'int8array',
@@ -6,6 +6,7 @@ import dialogs from '../utils/dialogs.js';
6
6
  import {
7
7
  resolveJSONPointer, getJSONPointerParts, reduceJSONPointerParts
8
8
  } from '../utils/jsonPointer.js';
9
+ import FileList from '../utils/FileList.js';
9
10
 
10
11
  /**
11
12
  * @typedef {number} Integer
@@ -177,7 +178,9 @@ const arrayType = {
177
178
  ? new Set(retObj)
178
179
  : this.map
179
180
  ? new Map(/** @type {Array<any>} */ (retObj))
180
- : retObj,
181
+ : this.filelist
182
+ ? new FileList(retObj)
183
+ : retObj,
181
184
  remnant: stringVal
182
185
  };
183
186
  }
@@ -330,14 +333,16 @@ const arrayType = {
330
333
  }
331
334
  );
332
335
  }
333
- return this.set && Array.isArray(ret)
334
- ? new Set(ret)
335
- : this.map
336
- ? new Map(arrayItems.$getMapKeySelects().map((select, idx) => {
337
- const key = select.$getValue();
338
- return [key, /** @type {any[]} */ (ret)[idx]];
339
- }))
340
- : ret;
336
+ return this.filelist
337
+ ? new FileList(ret)
338
+ : this.set && Array.isArray(ret)
339
+ ? new Set(ret)
340
+ : this.map
341
+ ? new Map(arrayItems.$getMapKeySelects().map((select, idx) => {
342
+ const key = select.$getValue();
343
+ return [key, /** @type {any[]} */ (ret)[idx]];
344
+ }))
345
+ : ret;
341
346
  },
342
347
 
343
348
  // Try to keep in sync with basic structure of `editUI`
@@ -508,11 +513,13 @@ const arrayType = {
508
513
  ['div', {class: 'arrayContents'}, [
509
514
  this.array
510
515
  ? ['div', [
511
- type === 'set'
512
- ? 'Set size: '
513
- : type === 'map'
514
- ? 'Map size: '
515
- : 'Array length: ',
516
+ type === 'filelist'
517
+ ? 'FileList length: '
518
+ : type === 'set'
519
+ ? 'Set size: '
520
+ : type === 'map'
521
+ ? 'Map size: '
522
+ : 'Array length: ',
516
523
  ['span', [
517
524
  (value && (type === 'set' || type === 'map')
518
525
  ? value.size
@@ -545,7 +552,7 @@ const arrayType = {
545
552
  const itemAdjust = type === 'object' ? 1 : 0;
546
553
  let itemIndex = itemAdjust - 1;
547
554
  const editableProperties = type !== 'array' &&
548
- type !== 'set' && type !== 'map';
555
+ type !== 'set' && type !== 'map' && type !== 'filelist';
549
556
  const mapProperties = type === 'map';
550
557
 
551
558
  /**
@@ -1223,7 +1230,9 @@ const arrayType = {
1223
1230
  topRoot: /** @type {HTMLDivElement} */ (topRoot),
1224
1231
  // eslint-disable-next-line object-shorthand, @stylistic/max-len -- TS
1225
1232
  format: /** @type {import('../formats.js').AvailableFormat} */ (format),
1226
- state: arrayState ?? type,
1233
+ state: parentTypeObject.filelist
1234
+ ? 'filelistArray'
1235
+ : arrayState ?? type,
1227
1236
  // itemIndex,
1228
1237
  typeNamespace
1229
1238
  }).domArray),
@@ -1588,7 +1597,8 @@ const arrayType = {
1588
1597
 
1589
1598
  const parentType = type;
1590
1599
 
1591
- const div = /** @type {HTMLDivElement} */ (
1600
+ // eslint-disable-next-line @stylistic/max-len -- Long
1601
+ const div = /** @type {HTMLDivElement & {$addAndSetArrayElement: import('../formats/structuredCloning.js').AddAndSetArrayElement}} */ (
1592
1602
  jml('div', /** @type {import('jamilih').JamilihAttributes} */ ({
1593
1603
  dataset: {type},
1594
1604
  // is: 'array-or-object-editor',
@@ -1629,7 +1639,7 @@ const arrayType = {
1629
1639
  // If run for all, causes problems with running `Error.cause`
1630
1640
  // type twice and is inefficient;
1631
1641
  // currently put behind `setAValue` as we need to set a value
1632
- // from `errorsSpecialType`
1642
+ // from `errorsSpecialType` (and `filelistType`)
1633
1643
  if (setAValue) {
1634
1644
  const typeObj = /** @type {import('../types.js').TypeObject} */ (
1635
1645
  Types.availableTypes[type]
@@ -1704,6 +1714,35 @@ const arrayType = {
1704
1714
  /** @type {import('../types.js').AvailableType} */
1705
1715
  (type)
1706
1716
  ).replace(/s$/u, ''), nbsp.repeat(2),
1717
+ type === 'filelist'
1718
+ ? ['input', {
1719
+ name: typeNamespace + '-filelist',
1720
+ multiple: true,
1721
+ type: 'file',
1722
+ $on: {
1723
+ /**
1724
+ * @this {HTMLInputElement}
1725
+ */
1726
+ change () {
1727
+ /* c8 ignore next 3 */
1728
+ if (!this.files) {
1729
+ return;
1730
+ }
1731
+ for (let i = 0; i < this.files.length; i++) {
1732
+ const file = this.files.item(i);
1733
+
1734
+ div.$addAndSetArrayElement({
1735
+ propName: String(i),
1736
+ type: 'file',
1737
+ value: file,
1738
+ bringIntoFocus: false,
1739
+ setAValue: true
1740
+ });
1741
+ }
1742
+ }
1743
+ }
1744
+ }]
1745
+ : '',
1707
1746
  minusButton,
1708
1747
  arrayContents
1709
1748
  ]))
@@ -0,0 +1,35 @@
1
+ import arrayType from './arrayType.js';
2
+
3
+ /**
4
+ * @type {import('../types.js').TypeObject}
5
+ */
6
+ const filelistType = {
7
+ option: ['FileList'],
8
+ array: true,
9
+ filelist: true,
10
+ regexEndings: [',', ')'],
11
+ stringRegexBegin: /^FileList\(/u,
12
+ stringRegexEnd: /^\)/u,
13
+
14
+ toValue (...args) {
15
+ return arrayType.toValue.apply(this, args);
16
+ },
17
+ getValue (...args) {
18
+ return arrayType.getValue.apply(this, args);
19
+ },
20
+ getInput (...args) {
21
+ return arrayType.getInput.apply(this, args);
22
+ },
23
+ viewUI ({...args}) {
24
+ return arrayType.viewUI.call(this, {
25
+ ...args, type: 'filelist'
26
+ });
27
+ },
28
+ editUI ({...args}) {
29
+ return arrayType.editUI.call(this, {
30
+ ...args, type: 'filelist'
31
+ });
32
+ }
33
+ };
34
+
35
+ export default filelistType;
package/src/jsoe.css CHANGED
@@ -97,6 +97,10 @@ video.recordedMedia {
97
97
  background-color: beige;
98
98
  }
99
99
 
100
+ [data-type="filelist"] {
101
+ background-color: bisque;
102
+ }
103
+
100
104
  [data-type="blob"] {
101
105
  background-color: lightgray;
102
106
  }
package/src/types.js CHANGED
@@ -35,6 +35,7 @@ import SpecialNumberSuperType from './superTypes/SpecialNumberType.js';
35
35
  import errorType from './fundamentalTypes/errorType.js';
36
36
  import errorsSpecialType from './superTypes/errorsSpecialType.js';
37
37
  import fileType from './fundamentalTypes/fileType.js';
38
+ import filelistType from './fundamentalTypes/filelistType.js';
38
39
  import blobType from './fundamentalTypes/blobType.js';
39
40
 
40
41
  /**
@@ -270,9 +271,11 @@ const Types = {};
270
271
  * @property {boolean} [array] Private context variable. Whether or not
271
272
  * it is an array. Do not use in other types.
272
273
  * @property {boolean} [map] Private context variable. Whether or not
273
- * it is a Map. Do not use in other types.
274
+ * it is a `Map`. Do not use in other types.
274
275
  * @property {boolean} [set] Private context variable. Whether or not
275
- * it is a set. Do not use in other types.
276
+ * it is a `Set`. Do not use in other types.
277
+ * @property {boolean} [filelist] Private context variable. Whether or not
278
+ * it is a `FileList` type. Do not use in other types.
276
279
  * @property {boolean} [sparse] Private context variable. Whether or not
277
280
  * it is a sparse array. Do not use in other types.
278
281
  * @property {boolean} [valid] Private context variable. Whether or not
@@ -386,9 +389,7 @@ Types.availableTypes = {
386
389
  set: setType,
387
390
 
388
391
  file: fileType,
389
- filelist: {
390
- option: ['FileList']
391
- },
392
+ filelist: filelistType,
392
393
  blob: blobType,
393
394
  blobHTML: blobHTMLType,
394
395
  arraybuffer: {
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @typedef {number} Integer
3
+ */
4
+ /**
5
+ * `FileList` polyfill.
6
+ */
7
+ class FileList {
8
+ /**
9
+ * Set private properties and length.
10
+ */
11
+ constructor () {
12
+ // eslint-disable-next-line prefer-rest-params
13
+ this._files = arguments[0];
14
+ this.length = this._files.length;
15
+ }
16
+ /**
17
+ * @param {Integer} index
18
+ * @returns {File}
19
+ */
20
+ item (index) {
21
+ return this._files[index];
22
+ }
23
+ /* eslint-disable class-methods-use-this */
24
+ /**
25
+ * @returns {"FileList"}
26
+ */
27
+ get [Symbol.toStringTag] () {
28
+ /* eslint-enable class-methods-use-this */
29
+ return 'FileList';
30
+ }
31
+ }
32
+ export default FileList;