@es-joy/jsoe 0.28.1 → 0.29.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 +23 -0
- package/README.md +2 -0
- package/badges/coverage-badge.svg +1 -1
- package/badges/tests-badge.svg +1 -1
- package/dist/deepEqual.d.ts +3 -0
- package/dist/deepEqual.d.ts.map +1 -0
- package/dist/formatAndTypeChoices.d.ts +6 -6
- package/dist/formatAndTypeChoices.d.ts.map +1 -1
- package/dist/formats/schema.d.ts +5 -0
- package/dist/formats/schema.d.ts.map +1 -1
- package/dist/formats.d.ts +2 -2
- package/dist/formats.d.ts.map +1 -1
- package/dist/fundamentalTypes/dateType.d.ts +21 -2
- package/dist/fundamentalTypes/dateType.d.ts.map +1 -1
- package/dist/fundamentalTypes/domexceptionType.d.ts +7 -0
- package/dist/fundamentalTypes/domexceptionType.d.ts.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/jtltExtensions.d.ts +112 -0
- package/dist/jtltExtensions.d.ts.map +1 -0
- package/dist/search/fundamentalTypes/arraySearchType.d.ts +15 -0
- package/dist/search/fundamentalTypes/arraySearchType.d.ts.map +1 -0
- package/dist/search/fundamentalTypes/bigintSearchType.d.ts +10 -0
- package/dist/search/fundamentalTypes/bigintSearchType.d.ts.map +1 -0
- package/dist/search/fundamentalTypes/blobSearchType.d.ts +19 -0
- package/dist/search/fundamentalTypes/blobSearchType.d.ts.map +1 -0
- package/dist/search/fundamentalTypes/booleanSearchType.d.ts +11 -0
- package/dist/search/fundamentalTypes/booleanSearchType.d.ts.map +1 -0
- package/dist/search/fundamentalTypes/catchSearchType.d.ts +18 -0
- package/dist/search/fundamentalTypes/catchSearchType.d.ts.map +1 -0
- package/dist/search/fundamentalTypes/dateSearchType.d.ts +10 -0
- package/dist/search/fundamentalTypes/dateSearchType.d.ts.map +1 -0
- package/dist/search/fundamentalTypes/domexceptionSearchType.d.ts +16 -0
- package/dist/search/fundamentalTypes/domexceptionSearchType.d.ts.map +1 -0
- package/dist/search/fundamentalTypes/enumSearchType.d.ts +22 -0
- package/dist/search/fundamentalTypes/enumSearchType.d.ts.map +1 -0
- package/dist/search/fundamentalTypes/errorSearchType.d.ts +9 -0
- package/dist/search/fundamentalTypes/errorSearchType.d.ts.map +1 -0
- package/dist/search/fundamentalTypes/fileSearchType.d.ts +19 -0
- package/dist/search/fundamentalTypes/fileSearchType.d.ts.map +1 -0
- package/dist/search/fundamentalTypes/filelistSearchType.d.ts +32 -0
- package/dist/search/fundamentalTypes/filelistSearchType.d.ts.map +1 -0
- package/dist/search/fundamentalTypes/functionSearchType.d.ts +18 -0
- package/dist/search/fundamentalTypes/functionSearchType.d.ts.map +1 -0
- package/dist/search/fundamentalTypes/mapSearchType.d.ts +18 -0
- package/dist/search/fundamentalTypes/mapSearchType.d.ts.map +1 -0
- package/dist/search/fundamentalTypes/nanSearchType.d.ts +7 -0
- package/dist/search/fundamentalTypes/nanSearchType.d.ts.map +1 -0
- package/dist/search/fundamentalTypes/nullSearchType.d.ts +7 -0
- package/dist/search/fundamentalTypes/nullSearchType.d.ts.map +1 -0
- package/dist/search/fundamentalTypes/numberSearchType.d.ts +11 -0
- package/dist/search/fundamentalTypes/numberSearchType.d.ts.map +1 -0
- package/dist/search/fundamentalTypes/objectSearchType.d.ts +15 -0
- package/dist/search/fundamentalTypes/objectSearchType.d.ts.map +1 -0
- package/dist/search/fundamentalTypes/promiseSearchType.d.ts +20 -0
- package/dist/search/fundamentalTypes/promiseSearchType.d.ts.map +1 -0
- package/dist/search/fundamentalTypes/regexpSearchType.d.ts +14 -0
- package/dist/search/fundamentalTypes/regexpSearchType.d.ts.map +1 -0
- package/dist/search/fundamentalTypes/setSearchType.d.ts +14 -0
- package/dist/search/fundamentalTypes/setSearchType.d.ts.map +1 -0
- package/dist/search/fundamentalTypes/stringSearchType.d.ts +13 -0
- package/dist/search/fundamentalTypes/stringSearchType.d.ts.map +1 -0
- package/dist/search/fundamentalTypes/symbolSearchType.d.ts +16 -0
- package/dist/search/fundamentalTypes/symbolSearchType.d.ts.map +1 -0
- package/dist/search/fundamentalTypes/undefinedSearchType.d.ts +7 -0
- package/dist/search/fundamentalTypes/undefinedSearchType.d.ts.map +1 -0
- package/dist/search/index.d.ts +60 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/queryTree.d.ts +180 -0
- package/dist/search/queryTree.d.ts.map +1 -0
- package/dist/search/queryTreeBuilders.d.ts +168 -0
- package/dist/search/queryTreeBuilders.d.ts.map +1 -0
- package/dist/search/searchDispatch.d.ts +121 -0
- package/dist/search/searchDispatch.d.ts.map +1 -0
- package/dist/search/searchElementUtils.d.ts +97 -0
- package/dist/search/searchElementUtils.d.ts.map +1 -0
- package/dist/search/searchUtils.d.ts +225 -0
- package/dist/search/searchUtils.d.ts.map +1 -0
- package/dist/search/subTypes/blobHTMLSearchType.d.ts +16 -0
- package/dist/search/subTypes/blobHTMLSearchType.d.ts.map +1 -0
- package/dist/search/subTypes/recordSearchType.d.ts +18 -0
- package/dist/search/subTypes/recordSearchType.d.ts.map +1 -0
- package/dist/search/subTypes/tupleSearchType.d.ts +21 -0
- package/dist/search/subTypes/tupleSearchType.d.ts.map +1 -0
- package/dist/search/superTypes/SpecialRealNumberSearchType.d.ts +14 -0
- package/dist/search/superTypes/SpecialRealNumberSearchType.d.ts.map +1 -0
- package/dist/search/superTypes/buffersourceSearchType.d.ts +17 -0
- package/dist/search/superTypes/buffersourceSearchType.d.ts.map +1 -0
- package/dist/search/superTypes/dommatrixSearchType.d.ts +11 -0
- package/dist/search/superTypes/dommatrixSearchType.d.ts.map +1 -0
- package/dist/search/superTypes/dompointSearchType.d.ts +9 -0
- package/dist/search/superTypes/dompointSearchType.d.ts.map +1 -0
- package/dist/search/superTypes/domrectSearchType.d.ts +9 -0
- package/dist/search/superTypes/domrectSearchType.d.ts.map +1 -0
- package/dist/search/superTypes/errorsSpecialSearchType.d.ts +11 -0
- package/dist/search/superTypes/errorsSpecialSearchType.d.ts.map +1 -0
- package/dist/search/unions/discriminatedUnionSearchType.d.ts +12 -0
- package/dist/search/unions/discriminatedUnionSearchType.d.ts.map +1 -0
- package/dist/search/unions/unionFamilySearchType.d.ts +36 -0
- package/dist/search/unions/unionFamilySearchType.d.ts.map +1 -0
- package/dist/search/unions/unionSearchType.d.ts +8 -0
- package/dist/search/unions/unionSearchType.d.ts.map +1 -0
- package/dist/search/unions/xorSearchType.d.ts +12 -0
- package/dist/search/unions/xorSearchType.d.ts.map +1 -0
- package/dist/superTypes/buffersourceType.d.ts.map +1 -1
- package/dist/typeChoices.d.ts +3 -3
- package/dist/typeChoices.d.ts.map +1 -1
- package/dist/types.d.ts +3 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/rawTypesonEditor.d.ts.map +1 -1
- package/docs/proposals/search-plan.md +166 -0
- package/package.json +5 -4
- package/pnpm-workspace.yaml +1 -1
- package/rollup.config.js +12 -0
- package/src/formatAndTypeChoices.js +4 -4
- package/src/formats/schema.js +2 -1
- package/src/formats.js +1 -1
- package/src/fundamentalTypes/dateType.js +35 -14
- package/src/fundamentalTypes/domexceptionType.js +41 -33
- package/src/index.js +6 -0
- package/src/jtltExtensions.js +103 -0
- package/src/search/fundamentalTypes/arraySearchType.js +66 -0
- package/src/search/fundamentalTypes/bigintSearchType.js +62 -0
- package/src/search/fundamentalTypes/blobSearchType.js +41 -0
- package/src/search/fundamentalTypes/booleanSearchType.js +40 -0
- package/src/search/fundamentalTypes/catchSearchType.js +59 -0
- package/src/search/fundamentalTypes/dateSearchType.js +73 -0
- package/src/search/fundamentalTypes/domexceptionSearchType.js +55 -0
- package/src/search/fundamentalTypes/enumSearchType.js +58 -0
- package/src/search/fundamentalTypes/errorSearchType.js +11 -0
- package/src/search/fundamentalTypes/fileSearchType.js +41 -0
- package/src/search/fundamentalTypes/filelistSearchType.js +78 -0
- package/src/search/fundamentalTypes/functionSearchType.js +78 -0
- package/src/search/fundamentalTypes/mapSearchType.js +87 -0
- package/src/search/fundamentalTypes/nanSearchType.js +11 -0
- package/src/search/fundamentalTypes/nullSearchType.js +11 -0
- package/src/search/fundamentalTypes/numberSearchType.js +52 -0
- package/src/search/fundamentalTypes/objectSearchType.js +148 -0
- package/src/search/fundamentalTypes/promiseSearchType.js +61 -0
- package/src/search/fundamentalTypes/regexpSearchType.js +48 -0
- package/src/search/fundamentalTypes/setSearchType.js +65 -0
- package/src/search/fundamentalTypes/stringSearchType.js +35 -0
- package/src/search/fundamentalTypes/symbolSearchType.js +38 -0
- package/src/search/fundamentalTypes/undefinedSearchType.js +11 -0
- package/src/search/index.js +79 -0
- package/src/search/queryTree.js +235 -0
- package/src/search/queryTreeBuilders.js +224 -0
- package/src/search/searchDispatch.js +291 -0
- package/src/search/searchElementUtils.js +289 -0
- package/src/search/searchUtils.js +355 -0
- package/src/search/subTypes/blobHTMLSearchType.js +65 -0
- package/src/search/subTypes/recordSearchType.js +84 -0
- package/src/search/subTypes/tupleSearchType.js +111 -0
- package/src/search/superTypes/SpecialRealNumberSearchType.js +42 -0
- package/src/search/superTypes/buffersourceSearchType.js +47 -0
- package/src/search/superTypes/dommatrixSearchType.js +24 -0
- package/src/search/superTypes/dompointSearchType.js +15 -0
- package/src/search/superTypes/domrectSearchType.js +15 -0
- package/src/search/superTypes/errorsSpecialSearchType.js +15 -0
- package/src/search/unions/discriminatedUnionSearchType.js +16 -0
- package/src/search/unions/unionFamilySearchType.js +160 -0
- package/src/search/unions/unionSearchType.js +12 -0
- package/src/search/unions/xorSearchType.js +16 -0
- package/src/superTypes/buffersourceType.js +13 -15
- package/src/typeChoices.js +2 -2
- package/src/types.js +2 -2
- package/src/utils/rawTypesonEditor.js +12 -2
- package/tsconfig-prod.json +12 -0
- package/tsconfig.json +5 -10
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import {buildPathLabel, buildRangeInputsPair, readRangeInputsPair} from '../searchUtils.js';
|
|
2
|
+
import {makeRangeLeaf} from '../queryTreeBuilders.js';
|
|
3
|
+
import {getQueryViaElement} from '../searchElementUtils.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @typedef {import('../searchDispatch.js').SearchTypeObject} SearchTypeObject
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* BufferSource: OR Range/Is Not Range (README) - a byte-length range, per
|
|
11
|
+
* the build order's own note that `buffersource` (like `function`) is
|
|
12
|
+
* "fuzzy" enough in the README to ship as a minimal, honest stub rather
|
|
13
|
+
* than over-build past what the spec defines. `buffersource` is one of
|
|
14
|
+
* jsoe's "checked" types (`{type: 'any', checks: [{name: 'buffersource'}]}`)
|
|
15
|
+
* with no schema-level byte-length bounds to read `min`/`max` HTML
|
|
16
|
+
* attributes from, unlike `array`'s `minLength`/`maxLength`.
|
|
17
|
+
* @type {SearchTypeObject}
|
|
18
|
+
*/
|
|
19
|
+
const buffersourceSearchType = {
|
|
20
|
+
buildUI ({schemaObject, path, typeNamespace}) {
|
|
21
|
+
const label = buildPathLabel(schemaObject, path);
|
|
22
|
+
const name = `${typeNamespace}-buffersource`;
|
|
23
|
+
return ['jsoe-search-buffersource', {
|
|
24
|
+
dataset: {searchPath: path, searchKind: 'buffersource'},
|
|
25
|
+
title: label,
|
|
26
|
+
$define: {
|
|
27
|
+
/** @this {HTMLElement} */
|
|
28
|
+
getQuery () {
|
|
29
|
+
const {gte, lte} = readRangeInputsPair(this);
|
|
30
|
+
if (gte === '' && lte === '') {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
return makeRangeLeaf(this.dataset.searchPath ?? '', 'buffersource', {
|
|
34
|
+
...(gte === '' ? {} : {$gte: Number(gte)}),
|
|
35
|
+
...(lte === '' ? {} : {$lte: Number(lte)})
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}, [
|
|
40
|
+
['span', {class: 'searchLabel'}, [`${label} (byte length)`]],
|
|
41
|
+
...buildRangeInputsPair({name, min: 0})
|
|
42
|
+
]];
|
|
43
|
+
},
|
|
44
|
+
getQuery: getQueryViaElement
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export default buffersourceSearchType;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import {makeDomShapeSearchType} from '../searchElementUtils.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* DOMMatrix: numeric search ranges for children; "Is/Is not Readonly";
|
|
5
|
+
* "Is/Is not 3d" (README) - see `searchElementUtils.js`'s
|
|
6
|
+
* `makeDomShapeSearchType` for the shared implementation. `dimensionKeys`
|
|
7
|
+
* covers both the 2D (`a`-`f`) and 3D (`m11`-`m44`) property sets at once;
|
|
8
|
+
* see that factory's doc for why.
|
|
9
|
+
* @type {import('../searchDispatch.js').SearchTypeObject}
|
|
10
|
+
*/
|
|
11
|
+
const dommatrixSearchType = makeDomShapeSearchType({
|
|
12
|
+
tagName: 'jsoe-search-dommatrix',
|
|
13
|
+
dimensionKeys: [
|
|
14
|
+
'a', 'b', 'c', 'd', 'e', 'f',
|
|
15
|
+
'm11', 'm12', 'm13', 'm14',
|
|
16
|
+
'm21', 'm22', 'm23', 'm24',
|
|
17
|
+
'm31', 'm32', 'm33', 'm34',
|
|
18
|
+
'm41', 'm42', 'm43', 'm44'
|
|
19
|
+
],
|
|
20
|
+
includeReadonly: true,
|
|
21
|
+
includeDimensionCheck: true
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
export default dommatrixSearchType;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import {makeDomShapeSearchType} from '../searchElementUtils.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* DOMPoint: numeric search ranges for children; "Is/Is not Readonly"
|
|
5
|
+
* (README) - see `searchElementUtils.js`'s `makeDomShapeSearchType` for the
|
|
6
|
+
* shared implementation.
|
|
7
|
+
* @type {import('../searchDispatch.js').SearchTypeObject}
|
|
8
|
+
*/
|
|
9
|
+
const dompointSearchType = makeDomShapeSearchType({
|
|
10
|
+
tagName: 'jsoe-search-dompoint',
|
|
11
|
+
dimensionKeys: ['x', 'y', 'z', 'w'],
|
|
12
|
+
includeReadonly: true
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
export default dompointSearchType;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import {makeDomShapeSearchType} from '../searchElementUtils.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* DOMRect: numeric search ranges for children; "Is/Is not Readonly"
|
|
5
|
+
* (README) - see `searchElementUtils.js`'s `makeDomShapeSearchType` for the
|
|
6
|
+
* shared implementation.
|
|
7
|
+
* @type {import('../searchDispatch.js').SearchTypeObject}
|
|
8
|
+
*/
|
|
9
|
+
const domrectSearchType = makeDomShapeSearchType({
|
|
10
|
+
tagName: 'jsoe-search-domrect',
|
|
11
|
+
dimensionKeys: ['x', 'y', 'width', 'height'],
|
|
12
|
+
includeReadonly: true
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
export default domrectSearchType;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import {makeErrorFamilySearchType} from '../searchElementUtils.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Special Errors (RangeError/TypeError/SyntaxError/AggregateError/etc.):
|
|
5
|
+
* Literal/Regex search of child string properties, numeric of number
|
|
6
|
+
* children (README, same bullet as plain `Error`) - see
|
|
7
|
+
* `searchElementUtils.js`'s `makeErrorFamilySearchType` for the shared
|
|
8
|
+
* implementation.
|
|
9
|
+
* @type {import('../searchDispatch.js').SearchTypeObject}
|
|
10
|
+
*/
|
|
11
|
+
const errorsSpecialSearchType = makeErrorFamilySearchType({
|
|
12
|
+
tagName: 'jsoe-search-errors-special'
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
export default errorsSpecialSearchType;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import {makeUnionFamilySearchType} from './unionFamilySearchType.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Discriminated Union: "Has type <type pull-down>", using the
|
|
5
|
+
* discriminator of discriminated union (README) - the type pull-down's
|
|
6
|
+
* options are labelled by each branch's discriminator value (e.g.
|
|
7
|
+
* `'circle'`/`'square'`) rather than a generic type name, and the resulting
|
|
8
|
+
* `typeOf` leaf carries that value too (`queryTree.js`). See
|
|
9
|
+
* `unionFamilySearchType.js` for the shared implementation.
|
|
10
|
+
* @type {import('../searchDispatch.js').SearchTypeObject}
|
|
11
|
+
*/
|
|
12
|
+
const discriminatedUnionSearchType = makeUnionFamilySearchType({
|
|
13
|
+
tagName: 'jsoe-search-discriminated-union', discriminated: true
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
export default discriminatedUnionSearchType;
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import {jml} from '../../vendor-imports.js';
|
|
2
|
+
import {buildPathLabel, findOwnControl} from '../searchUtils.js';
|
|
3
|
+
import {makeTypeOfLeaf, combineAnd} from '../queryTreeBuilders.js';
|
|
4
|
+
import {findSearchElement, getQueryViaElement, hasGetQuery} from '../searchElementUtils.js';
|
|
5
|
+
import {getSearchSchemaType, buildSearchWidget} from '../searchDispatch.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @typedef {import('../searchDispatch.js').SearchTypeObject} SearchTypeObject
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @param {HTMLElement} el
|
|
13
|
+
* @returns {el is HTMLSelectElement}
|
|
14
|
+
*/
|
|
15
|
+
function isSelectElement (el) {
|
|
16
|
+
return el.nodeName.toLowerCase() === 'select';
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @typedef {{
|
|
21
|
+
* discriminator?: string,
|
|
22
|
+
* options: import('../../formats/schema.js').ZodexSchema[]
|
|
23
|
+
* }} UnionLikeSchemaObject
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Shared implementation behind `unionSearchType.js`, `xorSearchType.js` and
|
|
28
|
+
* `discriminatedUnionSearchType.js`: all three share the exact same
|
|
29
|
+
* "has type <type pull-down>" shape (README) - `SzUnion`/`SzXor` carry
|
|
30
|
+
* only `options`, `SzDiscriminatedUnion` additionally carries a
|
|
31
|
+
* `discriminator` field name (`zodexy`'s schema types), so `discriminated`
|
|
32
|
+
* is the only behavioral difference. Picking a branch also renders that
|
|
33
|
+
* branch's own recursively-built search widget below the pull-down (not
|
|
34
|
+
* just "is type X" - "X matches Y" too), matching every other composite
|
|
35
|
+
* built so far.
|
|
36
|
+
*
|
|
37
|
+
* Each `<option>` carries its branch's search-dispatch key and (for a
|
|
38
|
+
* discriminated union) its discriminator value as `data-*` attributes,
|
|
39
|
+
* since `getQuery()` runs as a `$define` mixin method installed once on the
|
|
40
|
+
* tag's shared prototype - the branch metadata needs to be read back off
|
|
41
|
+
* the currently-selected `<option>` itself at query time, not closed over
|
|
42
|
+
* from this factory's one-time call.
|
|
43
|
+
* @param {{tagName: string, discriminated: boolean}} cfg
|
|
44
|
+
* @returns {SearchTypeObject}
|
|
45
|
+
*/
|
|
46
|
+
export function makeUnionFamilySearchType ({tagName, discriminated}) {
|
|
47
|
+
return {
|
|
48
|
+
buildUI ({schemaObject, path, typeNamespace, topRoot, types, originalJSON}) {
|
|
49
|
+
const label = buildPathLabel(schemaObject, path);
|
|
50
|
+
const name = `${typeNamespace}-${tagName}`;
|
|
51
|
+
const unionLikeSchemaObject = /** @type {UnionLikeSchemaObject} */ (
|
|
52
|
+
/** @type {unknown} */ (schemaObject)
|
|
53
|
+
);
|
|
54
|
+
const {options} = unionLikeSchemaObject;
|
|
55
|
+
const discriminator = discriminated
|
|
56
|
+
? unionLikeSchemaObject.discriminator
|
|
57
|
+
: undefined;
|
|
58
|
+
|
|
59
|
+
const branches = options.map((option, idx) => {
|
|
60
|
+
const searchType = getSearchSchemaType(option);
|
|
61
|
+
let discriminatorValue;
|
|
62
|
+
if (discriminator) {
|
|
63
|
+
const discSchema = /** @type {{properties?: {[key: string]: any}}} */ (
|
|
64
|
+
option
|
|
65
|
+
).properties?.[discriminator];
|
|
66
|
+
if (discSchema?.type === 'literal') {
|
|
67
|
+
[discriminatorValue] = discSchema.values;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const optLabel = discriminatorValue === undefined
|
|
71
|
+
? (buildPathLabel(option, `${path}/${idx}`) || searchType)
|
|
72
|
+
: String(discriminatorValue);
|
|
73
|
+
return {idx, option, searchType, discriminatorValue, optLabel};
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
return [tagName, {
|
|
77
|
+
dataset: {searchPath: path, searchKind: tagName},
|
|
78
|
+
title: label,
|
|
79
|
+
$define: {
|
|
80
|
+
/** @this {HTMLElement} */
|
|
81
|
+
getQuery () {
|
|
82
|
+
const searchPath = this.dataset.searchPath ?? '';
|
|
83
|
+
const select = /** @type {HTMLSelectElement|undefined} */ (
|
|
84
|
+
findOwnControl(this, 'select.jsoeSearchTypeOf')
|
|
85
|
+
);
|
|
86
|
+
if (!select || select.value === '') {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
const selectedOption = select.selectedOptions[0];
|
|
90
|
+
const searchType = selectedOption?.dataset.searchType ?? '';
|
|
91
|
+
const rawDiscriminatorValue = selectedOption?.dataset.discriminatorValue;
|
|
92
|
+
const typeOfLeaf = makeTypeOfLeaf(
|
|
93
|
+
searchPath,
|
|
94
|
+
searchType,
|
|
95
|
+
rawDiscriminatorValue === undefined
|
|
96
|
+
? undefined
|
|
97
|
+
: JSON.parse(rawDiscriminatorValue)
|
|
98
|
+
);
|
|
99
|
+
const branchEl = findSearchElement(this, searchPath);
|
|
100
|
+
const branchQuery = branchEl && hasGetQuery(branchEl)
|
|
101
|
+
? branchEl.getQuery()
|
|
102
|
+
: undefined;
|
|
103
|
+
return combineAnd([typeOfLeaf, branchQuery]);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}, [
|
|
107
|
+
['span', {class: 'searchLabel'}, [label]],
|
|
108
|
+
['label', [
|
|
109
|
+
'Has type: ',
|
|
110
|
+
['select', {
|
|
111
|
+
name,
|
|
112
|
+
class: 'jsoeSearchTypeOf',
|
|
113
|
+
$on: {
|
|
114
|
+
change () {
|
|
115
|
+
if (!isSelectElement(this)) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const container = this.closest(tagName)?.querySelector(
|
|
119
|
+
'.searchUnionBranch'
|
|
120
|
+
);
|
|
121
|
+
if (!container) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
container.textContent = '';
|
|
125
|
+
if (this.value === '') {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const branch = branches[Number(this.value)];
|
|
129
|
+
const branchArr = buildSearchWidget({
|
|
130
|
+
schemaObject: branch.option,
|
|
131
|
+
path,
|
|
132
|
+
typeNamespace,
|
|
133
|
+
topRoot,
|
|
134
|
+
types,
|
|
135
|
+
originalJSON
|
|
136
|
+
});
|
|
137
|
+
container.append(/** @type {HTMLElement} */ (jml(...branchArr)));
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}, [
|
|
141
|
+
['option', {value: ''}, ['(any)']],
|
|
142
|
+
...branches.map(({idx, searchType, discriminatorValue, optLabel}) => (
|
|
143
|
+
['option', {
|
|
144
|
+
value: String(idx),
|
|
145
|
+
dataset: {
|
|
146
|
+
searchType,
|
|
147
|
+
...(discriminatorValue === undefined
|
|
148
|
+
? {}
|
|
149
|
+
: {discriminatorValue: JSON.stringify(discriminatorValue)})
|
|
150
|
+
}
|
|
151
|
+
}, [optLabel]]
|
|
152
|
+
))
|
|
153
|
+
]]
|
|
154
|
+
]],
|
|
155
|
+
['div', {class: 'searchUnionBranch'}]
|
|
156
|
+
]];
|
|
157
|
+
},
|
|
158
|
+
getQuery: getQueryViaElement
|
|
159
|
+
};
|
|
160
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import {makeUnionFamilySearchType} from './unionFamilySearchType.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Union: "Has type <type pull-down>" (README) - see
|
|
5
|
+
* `unionFamilySearchType.js` for the shared implementation.
|
|
6
|
+
* @type {import('../searchDispatch.js').SearchTypeObject}
|
|
7
|
+
*/
|
|
8
|
+
const unionSearchType = makeUnionFamilySearchType({
|
|
9
|
+
tagName: 'jsoe-search-union', discriminated: false
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
export default unionSearchType;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import {makeUnionFamilySearchType} from './unionFamilySearchType.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Xor (exclusive union): "Has type <type pull-down>" (README) - see
|
|
5
|
+
* `unionFamilySearchType.js` for the shared implementation.
|
|
6
|
+
* `getXorBranchMatchInfo` (`src/formats/schema.js`) is deliberately not
|
|
7
|
+
* reused here, same as the search plan already rules out for xor generally
|
|
8
|
+
* (§4): it requires a concrete value to test branch match, which the search
|
|
9
|
+
* side never has.
|
|
10
|
+
* @type {import('../searchDispatch.js').SearchTypeObject}
|
|
11
|
+
*/
|
|
12
|
+
const xorSearchType = makeUnionFamilySearchType({
|
|
13
|
+
tagName: 'jsoe-search-xor', discriminated: false
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
export default xorSearchType;
|
|
@@ -72,26 +72,26 @@ const getMinMaxForTypedArray = (typedArray) => {
|
|
|
72
72
|
};
|
|
73
73
|
|
|
74
74
|
/**
|
|
75
|
-
* @typedef {"Int8Array"|"Uint8Array"|"Uint8ClampedArray"
|
|
76
|
-
* "Int16Array"|"Uint16Array"|"Int32Array"|"Uint32Array"
|
|
77
|
-
* "Float32Array"|"Float64Array"|"BigInt64Array"
|
|
78
|
-
* "BigUint64Array"} TypedArray
|
|
75
|
+
* @typedef {"Int8Array"|"Uint8Array"|"Uint8ClampedArray"
|
|
76
|
+
* |"Int16Array"|"Uint16Array"|"Int32Array"|"Uint32Array"
|
|
77
|
+
* |"Float32Array"|"Float64Array"|"BigInt64Array"
|
|
78
|
+
* |"BigUint64Array"} TypedArray
|
|
79
79
|
*/
|
|
80
80
|
|
|
81
81
|
/**
|
|
82
|
-
* @typedef {Int8Array|Uint8Array|Uint8ClampedArray
|
|
83
|
-
* Int16Array|Uint16Array|Int32Array|Uint32Array
|
|
84
|
-
* Float32Array|Float64Array|BigInt64Array
|
|
85
|
-
* BigUint64Array} TypedArrayInstance
|
|
82
|
+
* @typedef {Int8Array|Uint8Array|Uint8ClampedArray
|
|
83
|
+
* |Int16Array|Uint16Array|Int32Array|Uint32Array
|
|
84
|
+
* |Float32Array|Float64Array|BigInt64Array
|
|
85
|
+
* |BigUint64Array} TypedArrayInstance
|
|
86
86
|
*/
|
|
87
87
|
|
|
88
88
|
/**
|
|
89
89
|
* @param {TypedArray} prop
|
|
90
|
-
* @returns {Int8ArrayConstructor|Uint8ArrayConstructor
|
|
91
|
-
* Uint8ClampedArrayConstructor|Int16ArrayConstructor
|
|
92
|
-
* Uint16ArrayConstructor|Int32ArrayConstructor|Uint32ArrayConstructor
|
|
93
|
-
* Float32ArrayConstructor|Float64ArrayConstructor
|
|
94
|
-
* BigInt64ArrayConstructor|BigUint64ArrayConstructor}
|
|
90
|
+
* @returns {Int8ArrayConstructor|Uint8ArrayConstructor
|
|
91
|
+
* |Uint8ClampedArrayConstructor|Int16ArrayConstructor
|
|
92
|
+
* |Uint16ArrayConstructor|Int32ArrayConstructor|Uint32ArrayConstructor
|
|
93
|
+
* |Float32ArrayConstructor|Float64ArrayConstructor
|
|
94
|
+
* |BigInt64ArrayConstructor|BigUint64ArrayConstructor}
|
|
95
95
|
*/
|
|
96
96
|
const getTypedArray = (prop) => {
|
|
97
97
|
switch (prop) {
|
|
@@ -164,7 +164,6 @@ const buffersourceType = {
|
|
|
164
164
|
dataViewByteOffset,
|
|
165
165
|
dataViewByteLength, length
|
|
166
166
|
} = o;
|
|
167
|
-
// @ts-expect-error Ok
|
|
168
167
|
const buffer = new ArrayBuffer(byteLength, {maxByteLength});
|
|
169
168
|
|
|
170
169
|
let typedArray, TypedArray;
|
|
@@ -471,7 +470,6 @@ const buffersourceType = {
|
|
|
471
470
|
);
|
|
472
471
|
|
|
473
472
|
const buffer = new ArrayBuffer(
|
|
474
|
-
// @ts-expect-error New ArrayBuffer argument
|
|
475
473
|
byteLengthVal, maxByteLength ? {maxByteLength} : undefined
|
|
476
474
|
);
|
|
477
475
|
|
package/src/typeChoices.js
CHANGED
|
@@ -29,7 +29,7 @@ import deepEqual from 'fast-deep-equal/es6/index.js';
|
|
|
29
29
|
*/
|
|
30
30
|
/**
|
|
31
31
|
* @callback Validate
|
|
32
|
-
* @param {{avoidReport?: boolean}} cfg
|
|
32
|
+
* @param {{avoidReport?: boolean}} [cfg]
|
|
33
33
|
* @returns {boolean}
|
|
34
34
|
*/
|
|
35
35
|
/**
|
|
@@ -127,7 +127,7 @@ import deepEqual from 'fast-deep-equal/es6/index.js';
|
|
|
127
127
|
/**
|
|
128
128
|
* @callback SetValue
|
|
129
129
|
* @param {import('./formats.js').StructuredCloneValue} value
|
|
130
|
-
* @param {import('./types.js').StateObject} stateObj
|
|
130
|
+
* @param {import('./types.js').StateObject} [stateObj]
|
|
131
131
|
* @returns {Promise<void>}
|
|
132
132
|
*/
|
|
133
133
|
|
package/src/types.js
CHANGED
|
@@ -641,8 +641,8 @@ class Types {
|
|
|
641
641
|
/**
|
|
642
642
|
* @param {import('./formats.js').AvailableFormat} format
|
|
643
643
|
* @param {StructuredCloneValue} record
|
|
644
|
-
* @param {StateObject} stateObj
|
|
645
|
-
* @returns {Promise<
|
|
644
|
+
* @param {StateObject} [stateObj]
|
|
645
|
+
* @returns {Promise<HTMLElement>}
|
|
646
646
|
*/
|
|
647
647
|
async getControlsForFormatAndValue (
|
|
648
648
|
format, record, stateObj
|
|
@@ -613,11 +613,22 @@ export async function openRawEditorDialog ({
|
|
|
613
613
|
['div', {class: editorClass}]
|
|
614
614
|
];
|
|
615
615
|
|
|
616
|
+
// `dialogs.js`'s default `remove` behavior detaches the `<dialog>` from
|
|
617
|
+
// the document on close, but never tears down the `EditorView` mounted
|
|
618
|
+
// into it; left as-is, every "Edit raw"/"View raw" use leaks a live
|
|
619
|
+
// `EditorView` (and its internal `ResizeObserver`/DOM observers) bound
|
|
620
|
+
// to an already-detached subtree. Destroy it alongside the dialog.
|
|
621
|
+
const close = () => {
|
|
622
|
+
view.destroy();
|
|
623
|
+
};
|
|
624
|
+
|
|
616
625
|
const dialog = readonly
|
|
617
626
|
// @ts-expect-error TS bug
|
|
618
|
-
? dialogs.makeCancelDialog({children})
|
|
627
|
+
? dialogs.makeCancelDialog({children, close})
|
|
619
628
|
: dialogs.makeSubmitDialog({
|
|
620
629
|
submitText: 'Save',
|
|
630
|
+
// @ts-expect-error TS bug
|
|
631
|
+
close,
|
|
621
632
|
async submit ({dialog: dlg}) {
|
|
622
633
|
const text = view.state.doc.toString();
|
|
623
634
|
showError(dlg, '');
|
|
@@ -652,7 +663,6 @@ export async function openRawEditorDialog ({
|
|
|
652
663
|
}
|
|
653
664
|
dlg.close();
|
|
654
665
|
},
|
|
655
|
-
// @ts-expect-error TS bug
|
|
656
666
|
children
|
|
657
667
|
});
|
|
658
668
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "./tsconfig.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"noEmit": false,
|
|
5
|
+
"declaration": true,
|
|
6
|
+
"declarationMap": true,
|
|
7
|
+
"emitDeclarationOnly": true,
|
|
8
|
+
"rootDir": "src",
|
|
9
|
+
"outDir": "dist"
|
|
10
|
+
},
|
|
11
|
+
"include": ["src/**/*.js", "typings/sceditor.d.ts", "typings/json-6.d.ts"]
|
|
12
|
+
}
|
package/tsconfig.json
CHANGED
|
@@ -1,20 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"compilerOptions": {
|
|
3
|
-
"lib": ["
|
|
4
|
-
"skipLibCheck": true,
|
|
3
|
+
"lib": ["ESNext", "dom"],
|
|
5
4
|
"moduleResolution": "nodenext",
|
|
6
5
|
"module": "NodeNext",
|
|
7
6
|
"allowJs": true,
|
|
8
7
|
"checkJs": true,
|
|
9
|
-
"noEmit": false,
|
|
10
|
-
"declaration": true,
|
|
11
|
-
"declarationMap": true,
|
|
12
|
-
"emitDeclarationOnly": true,
|
|
13
8
|
"strict": true,
|
|
9
|
+
"noEmit": true,
|
|
14
10
|
"target": "es2020",
|
|
15
|
-
"
|
|
16
|
-
"outDir": "dist"
|
|
11
|
+
"types": ["node"]
|
|
17
12
|
},
|
|
18
|
-
"include": ["
|
|
19
|
-
"exclude": ["
|
|
13
|
+
"include": ["**/*.ts", "**/*.js", "../typings/CypressPlugins.d.ts", "../typings/sceditor.d.ts", "../typings/json-6.d.ts"],
|
|
14
|
+
"exclude": ["rollup.config.js", ".agents", "vendor", "coverage", "instrumented", "node_modules", "dist", "src/deepEqual.js"]
|
|
20
15
|
}
|