@es-joy/jsoe 0.30.0 → 0.31.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.
@@ -127,12 +127,15 @@ export type QueryTypeOfLeaf = {
127
127
  };
128
128
  /**
129
129
  * XPath/CSS-selector/full-text/raw-HTML-regex; no Mongo equivalent.
130
+ * `$options`, mirroring `QueryRegexLeaf`'s field of the same name, is only
131
+ * ever populated for `mode: 'rawHTMLRegex'`.
130
132
  */
131
133
  export type QueryBlobHTMLLeaf = {
132
134
  kind: "blobHTML";
133
135
  path: string;
134
136
  mode: "xpath" | "cssSelector" | "fullText" | "rawHTMLRegex";
135
137
  value: string;
138
+ $options?: string;
136
139
  };
137
140
  /**
138
141
  * Per-dimension ranges for DOMRect/Point/Matrix, each dimension itself a
@@ -1 +1 @@
1
- {"version":3,"file":"queryTree.d.ts","sourceRoot":"","sources":["../../src/search/queryTree.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queryTree.d.ts","sourceRoot":"","sources":["../../src/search/queryTree.js"],"names":[],"mappings":"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"}
@@ -130,9 +130,10 @@ export function makeTypeOfLeaf(path: string, searchType: string, discriminatorVa
130
130
  * @param {string} path
131
131
  * @param {import('./queryTree.js').QueryBlobHTMLLeaf['mode']} mode
132
132
  * @param {string} value
133
+ * @param {string} [$options]
133
134
  * @returns {import('./queryTree.js').QueryBlobHTMLLeaf}
134
135
  */
135
- export function makeBlobHTMLLeaf(path: string, mode: import("./queryTree.js").QueryBlobHTMLLeaf["mode"], value: string): import("./queryTree.js").QueryBlobHTMLLeaf;
136
+ export function makeBlobHTMLLeaf(path: string, mode: import("./queryTree.js").QueryBlobHTMLLeaf["mode"], value: string, $options?: string): import("./queryTree.js").QueryBlobHTMLLeaf;
136
137
  /**
137
138
  * @param {string} path
138
139
  * @param {{[dimension: string]: import('./queryTree.js').QueryRangeLeaf}} dimensions
@@ -1 +1 @@
1
- {"version":3,"file":"queryTreeBuilders.d.ts","sourceRoot":"","sources":["../../src/search/queryTreeBuilders.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queryTreeBuilders.d.ts","sourceRoot":"","sources":["../../src/search/queryTreeBuilders.js"],"names":[],"mappings":"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"}
@@ -323,16 +323,23 @@ export function readCheckbox(el: HTMLElement): boolean;
323
323
  * "Matches regex" is the chosen mode.
324
324
  *
325
325
  * `flagOptions`, when given, adds a Flags multi-select (options passed in
326
- * by the caller - `stringSearchType.js` passes `regexpType.js`'s own
327
- * `allowedFlags`, the same list `regexpSearchType.js` uses for the actual
328
- * regexp's own flags - kept out of this generic module to avoid it
329
- * depending on a specific fundamental type), shown only while "Matches
330
- * regex" is the chosen mode, the same `$options` a Mongo-flavored `$regex`
331
- * accepts alongside it - a plain literal/substring match has no regex to
332
- * apply flags to, so it stays hidden otherwise. Every other caller
333
- * (`errorSearchType.js`'s props, `fileSearchType.js`'s name/type,
334
- * `domexceptionSearchType.js`'s message) leaves this unset, matching the
335
- * README's flags-for-regexp-only-plus-string bullet.
326
+ * by the caller - most callers pass `regexpType.js`'s own `allowedFlags`,
327
+ * the same list `regexpSearchType.js` uses for the actual regexp's own
328
+ * flags - kept out of this generic module to avoid it depending on a
329
+ * specific fundamental type), shown only while "Matches regex" is the
330
+ * chosen mode, the same `$options` a Mongo-flavored `$regex` accepts
331
+ * alongside it - a plain literal/substring match has no regex to apply
332
+ * flags to, so it stays hidden otherwise. `regexpSearchType.js`'s own call
333
+ * (matching against the regexp's `.source` text, not to be confused with
334
+ * its separate, bespoke Flags control for the regexp's *actual* flags)
335
+ * leaves this unset, since a flag there would have no real regex of its own
336
+ * to apply to.
337
+ *
338
+ * While "Matches regex" is chosen, the Value input is also live syntax-
339
+ * checked (`syncLiteralRegexValidity`, below) against
340
+ * `new RegExp(value, flags)` - an unparsable pattern (or one only invalid
341
+ * for the currently-selected flags, e.g. `u`/`v`'s stricter escape rules)
342
+ * sets a custom validity message rather than silently accepting it.
336
343
  * @param {{
337
344
  * name: string, key?: string, onModeChange?: (this: HTMLElement) => void,
338
345
  * flagOptions?: string[]
@@ -1 +1 @@
1
- {"version":3,"file":"searchUtils.d.ts","sourceRoot":"","sources":["../../src/search/searchUtils.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"searchUtils.d.ts","sourceRoot":"","sources":["../../src/search/searchUtils.js"],"names":[],"mappings":"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"}
@@ -1,8 +1,5 @@
1
1
  export default blobHTMLSearchType;
2
2
  export type SearchTypeObject = import("../searchDispatch.js").SearchTypeObject;
3
- /**
4
- * @typedef {import('../searchDispatch.js').SearchTypeObject} SearchTypeObject
5
- */
6
3
  /**
7
4
  * Blob HTML: XPath, CSS selectors, full text search, regex search of raw
8
5
  * HTML (README) - a mode `<select>` plus one value control, the same
@@ -18,7 +15,8 @@ export type SearchTypeObject = import("../searchDispatch.js").SearchTypeObject;
18
15
  * of the pair is ever `required` (toggled alongside `hidden` by the mode
19
16
  * `change` handler): a `required` field that's merely hidden, rather than
20
17
  * also un-required, still blocks the form's validity even though the user
21
- * has no way to see or fill it.
18
+ * has no way to see or fill it. "CSS selector" is listed ahead of "XPath"
19
+ * (and is the default mode) as the option most jsoe users will recognize.
22
20
  *
23
21
  * The `change` handler also checks `isExemptedByAncestorHasProperty` before
24
22
  * (re-)asserting `required` on the now-visible control: nested as an
@@ -30,6 +28,15 @@ export type SearchTypeObject = import("../searchDispatch.js").SearchTypeObject;
30
28
  * check, that synthetic event would immediately reassert `required` on
31
29
  * whichever control the current mode makes visible, undoing the exemption
32
30
  * `setDescendantsRequired` had just granted.
31
+ *
32
+ * "Regex search of raw HTML" gets its own Flags multi-select (the same
33
+ * `regexpType.js` `allowedFlags` list `stringSearchType.js`'s literal/regex
34
+ * control passes as `buildLiteralRegexControls`'s `flagOptions`), shown only
35
+ * while that mode is chosen, folded into the `blobHTML` leaf's own
36
+ * `$options` (mirroring `QueryRegexLeaf`'s field of the same name) - and,
37
+ * via `syncBlobHTMLValueValidity`, included when syntax-checking the Value
38
+ * itself, since the chosen flags can affect whether a given pattern is
39
+ * actually valid.
33
40
  * @type {SearchTypeObject}
34
41
  */
35
42
  declare const blobHTMLSearchType: SearchTypeObject;
@@ -1 +1 @@
1
- {"version":3,"file":"blobHTMLSearchType.d.ts","sourceRoot":"","sources":["../../../src/search/subTypes/blobHTMLSearchType.js"],"names":[],"mappings":";+BAOa,OAAO,sBAAsB,EAAE,gBAAgB;AAD5D;;GAEG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,kCAFU,gBAAgB,CAkFxB"}
1
+ {"version":3,"file":"blobHTMLSearchType.d.ts","sourceRoot":"","sources":["../../../src/search/subTypes/blobHTMLSearchType.js"],"names":[],"mappings":";+BAQa,OAAO,sBAAsB,EAAE,gBAAgB;AA8F5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,kCAFU,gBAAgB,CAoHxB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@es-joy/jsoe",
3
- "version": "0.30.0",
3
+ "version": "0.31.0",
4
4
  "type": "module",
5
5
  "types": "./dist/index.d.ts",
6
6
  "main": "./src/index.js",
@@ -53,7 +53,7 @@
53
53
  "style-mod": "^4.1.3",
54
54
  "typeson-registry": "14.6.1",
55
55
  "w3c-keyname": "^2.2.8",
56
- "zod": "^4.6.4",
56
+ "zod": "^4.6.5",
57
57
  "zodexy": "^0.32.0"
58
58
  },
59
59
  "devDependencies": {
@@ -85,7 +85,7 @@
85
85
  "nyc": "^18.0.0",
86
86
  "open-cli": "^9.0.0",
87
87
  "rimraf": "^6.1.3",
88
- "rollup": "4.63.2",
88
+ "rollup": "4.63.3",
89
89
  "rollup-plugin-istanbul": "^5.0.0",
90
90
  "rollup-plugin-node-builtins": "^2.1.2",
91
91
  "typescript": "^6.0.3",
@@ -16,33 +16,33 @@ minimumReleaseAgeExclude:
16
16
  - zodexy@0.21.1 || 0.21.2 || 0.22.0 || 0.23.0 || 0.24.0 || 0.24.1 || 0.25.0 || 0.26.0 || 0.26.1 || 0.27.0 || 0.30.0 || 0.30.1 || 0.31.0 || 0.31.1 || 0.32.0
17
17
  - typeson-registry@13.0.1 || 13.1.0 || 14.4.0 || 14.5.0
18
18
  - typeson@10.1.1 || 10.2.0 || 10.3.0
19
- - '@rollup/rollup-android-arm-eabi@4.63.1 || 4.63.2'
20
- - '@rollup/rollup-android-arm64@4.63.1 || 4.63.2'
21
- - '@rollup/rollup-darwin-arm64@4.63.1 || 4.63.2'
22
- - '@rollup/rollup-darwin-x64@4.63.1 || 4.63.2'
23
- - '@rollup/rollup-freebsd-arm64@4.63.1 || 4.63.2'
24
- - '@rollup/rollup-freebsd-x64@4.63.1 || 4.63.2'
25
- - '@rollup/rollup-linux-arm-gnueabihf@4.63.1 || 4.63.2'
26
- - '@rollup/rollup-linux-arm-musleabihf@4.63.1 || 4.63.2'
27
- - '@rollup/rollup-linux-arm64-gnu@4.63.1 || 4.63.2'
28
- - '@rollup/rollup-linux-arm64-musl@4.63.1 || 4.63.2'
29
- - '@rollup/rollup-linux-loong64-gnu@4.63.1 || 4.63.2'
30
- - '@rollup/rollup-linux-loong64-musl@4.63.1 || 4.63.2'
31
- - '@rollup/rollup-linux-ppc64-gnu@4.63.1 || 4.63.2'
32
- - '@rollup/rollup-linux-ppc64-musl@4.63.1 || 4.63.2'
33
- - '@rollup/rollup-linux-riscv64-gnu@4.63.1 || 4.63.2'
34
- - '@rollup/rollup-linux-riscv64-musl@4.63.1 || 4.63.2'
35
- - '@rollup/rollup-linux-s390x-gnu@4.63.1 || 4.63.2'
36
- - '@rollup/rollup-linux-x64-gnu@4.63.1 || 4.63.2'
37
- - '@rollup/rollup-linux-x64-musl@4.63.1 || 4.63.2'
38
- - '@rollup/rollup-openbsd-x64@4.63.1 || 4.63.2'
39
- - '@rollup/rollup-openharmony-arm64@4.63.1 || 4.63.2'
40
- - '@rollup/rollup-win32-arm64-msvc@4.63.1 || 4.63.2'
41
- - '@rollup/rollup-win32-ia32-msvc@4.63.1 || 4.63.2'
42
- - '@rollup/rollup-win32-x64-gnu@4.63.1 || 4.63.2'
43
- - '@rollup/rollup-win32-x64-msvc@4.63.1 || 4.63.2'
19
+ - '@rollup/rollup-android-arm-eabi@4.63.1 || 4.63.2 || 4.63.3'
20
+ - '@rollup/rollup-android-arm64@4.63.1 || 4.63.2 || 4.63.3'
21
+ - '@rollup/rollup-darwin-arm64@4.63.1 || 4.63.2 || 4.63.3'
22
+ - '@rollup/rollup-darwin-x64@4.63.1 || 4.63.2 || 4.63.3'
23
+ - '@rollup/rollup-freebsd-arm64@4.63.1 || 4.63.2 || 4.63.3'
24
+ - '@rollup/rollup-freebsd-x64@4.63.1 || 4.63.2 || 4.63.3'
25
+ - '@rollup/rollup-linux-arm-gnueabihf@4.63.1 || 4.63.2 || 4.63.3'
26
+ - '@rollup/rollup-linux-arm-musleabihf@4.63.1 || 4.63.2 || 4.63.3'
27
+ - '@rollup/rollup-linux-arm64-gnu@4.63.1 || 4.63.2 || 4.63.3'
28
+ - '@rollup/rollup-linux-arm64-musl@4.63.1 || 4.63.2 || 4.63.3'
29
+ - '@rollup/rollup-linux-loong64-gnu@4.63.1 || 4.63.2 || 4.63.3'
30
+ - '@rollup/rollup-linux-loong64-musl@4.63.1 || 4.63.2 || 4.63.3'
31
+ - '@rollup/rollup-linux-ppc64-gnu@4.63.1 || 4.63.2 || 4.63.3'
32
+ - '@rollup/rollup-linux-ppc64-musl@4.63.1 || 4.63.2 || 4.63.3'
33
+ - '@rollup/rollup-linux-riscv64-gnu@4.63.1 || 4.63.2 || 4.63.3'
34
+ - '@rollup/rollup-linux-riscv64-musl@4.63.1 || 4.63.2 || 4.63.3'
35
+ - '@rollup/rollup-linux-s390x-gnu@4.63.1 || 4.63.2 || 4.63.3'
36
+ - '@rollup/rollup-linux-x64-gnu@4.63.1 || 4.63.2 || 4.63.3'
37
+ - '@rollup/rollup-linux-x64-musl@4.63.1 || 4.63.2 || 4.63.3'
38
+ - '@rollup/rollup-openbsd-x64@4.63.1 || 4.63.2 || 4.63.3'
39
+ - '@rollup/rollup-openharmony-arm64@4.63.1 || 4.63.2 || 4.63.3'
40
+ - '@rollup/rollup-win32-arm64-msvc@4.63.1 || 4.63.2 || 4.63.3'
41
+ - '@rollup/rollup-win32-ia32-msvc@4.63.1 || 4.63.2 || 4.63.3'
42
+ - '@rollup/rollup-win32-x64-gnu@4.63.1 || 4.63.2 || 4.63.3'
43
+ - '@rollup/rollup-win32-x64-msvc@4.63.1 || 4.63.2 || 4.63.3'
44
44
  - eslint-plugin-escompat@3.11.6 || 3.12.0
45
- - rollup@4.63.1 || 4.63.2
45
+ - rollup@4.63.1 || 4.63.2 || 4.63.3
46
46
  - zod@4.5.2 || 4.5.4 || 4.6.1 || 4.6.3 || 4.6.4
47
47
  - '@typescript-eslint/eslint-plugin@8.69.0'
48
48
  - '@typescript-eslint/parser@8.69.0'
@@ -167,11 +167,14 @@
167
167
 
168
168
  /**
169
169
  * XPath/CSS-selector/full-text/raw-HTML-regex; no Mongo equivalent.
170
+ * `$options`, mirroring `QueryRegexLeaf`'s field of the same name, is only
171
+ * ever populated for `mode: 'rawHTMLRegex'`.
170
172
  * @typedef {{
171
173
  * kind: 'blobHTML',
172
174
  * path: string,
173
175
  * mode: 'xpath'|'cssSelector'|'fullText'|'rawHTMLRegex',
174
- * value: string
176
+ * value: string,
177
+ * $options?: string
175
178
  * }} QueryBlobHTMLLeaf
176
179
  */
177
180
 
@@ -172,10 +172,11 @@ export function makeTypeOfLeaf (path, searchType, discriminatorValue) {
172
172
  * @param {string} path
173
173
  * @param {import('./queryTree.js').QueryBlobHTMLLeaf['mode']} mode
174
174
  * @param {string} value
175
+ * @param {string} [$options]
175
176
  * @returns {import('./queryTree.js').QueryBlobHTMLLeaf}
176
177
  */
177
- export function makeBlobHTMLLeaf (path, mode, value) {
178
- return {kind: 'blobHTML', path, mode, value};
178
+ export function makeBlobHTMLLeaf (path, mode, value, $options) {
179
+ return {kind: 'blobHTML', path, mode, value, ...($options ? {$options} : {})};
179
180
  }
180
181
 
181
182
  /**
@@ -453,16 +453,23 @@ export function readCheckbox (el) {
453
453
  * "Matches regex" is the chosen mode.
454
454
  *
455
455
  * `flagOptions`, when given, adds a Flags multi-select (options passed in
456
- * by the caller - `stringSearchType.js` passes `regexpType.js`'s own
457
- * `allowedFlags`, the same list `regexpSearchType.js` uses for the actual
458
- * regexp's own flags - kept out of this generic module to avoid it
459
- * depending on a specific fundamental type), shown only while "Matches
460
- * regex" is the chosen mode, the same `$options` a Mongo-flavored `$regex`
461
- * accepts alongside it - a plain literal/substring match has no regex to
462
- * apply flags to, so it stays hidden otherwise. Every other caller
463
- * (`errorSearchType.js`'s props, `fileSearchType.js`'s name/type,
464
- * `domexceptionSearchType.js`'s message) leaves this unset, matching the
465
- * README's flags-for-regexp-only-plus-string bullet.
456
+ * by the caller - most callers pass `regexpType.js`'s own `allowedFlags`,
457
+ * the same list `regexpSearchType.js` uses for the actual regexp's own
458
+ * flags - kept out of this generic module to avoid it depending on a
459
+ * specific fundamental type), shown only while "Matches regex" is the
460
+ * chosen mode, the same `$options` a Mongo-flavored `$regex` accepts
461
+ * alongside it - a plain literal/substring match has no regex to apply
462
+ * flags to, so it stays hidden otherwise. `regexpSearchType.js`'s own call
463
+ * (matching against the regexp's `.source` text, not to be confused with
464
+ * its separate, bespoke Flags control for the regexp's *actual* flags)
465
+ * leaves this unset, since a flag there would have no real regex of its own
466
+ * to apply to.
467
+ *
468
+ * While "Matches regex" is chosen, the Value input is also live syntax-
469
+ * checked (`syncLiteralRegexValidity`, below) against
470
+ * `new RegExp(value, flags)` - an unparsable pattern (or one only invalid
471
+ * for the currently-selected flags, e.g. `u`/`v`'s stricter escape rules)
472
+ * sets a custom validity message rather than silently accepting it.
466
473
  * @param {{
467
474
  * name: string, key?: string, onModeChange?: (this: HTMLElement) => void,
468
475
  * flagOptions?: string[]
@@ -470,6 +477,46 @@ export function readCheckbox (el) {
470
477
  * @returns {JamilihArray}
471
478
  */
472
479
  export function buildLiteralRegexControls ({name, key = '', onModeChange, flagOptions}) {
480
+ /**
481
+ * Live syntax-checks the Value input against `new RegExp(value, flags)`
482
+ * whenever the current Mode is "Matches regex" - a literal/does-not-
483
+ * contain Value is a plain string with no format to violate, so this only
484
+ * has anything to say once "regex" is chosen, and clears back to valid
485
+ * the moment it isn't. Flags are folded in (read fresh off the Flags
486
+ * multi-select, when this call has one) because they can themselves flip
487
+ * a pattern between valid and invalid - the `u`/`v` flags' stricter escape
488
+ * rules being the main example - so a Flags `change` needs to re-run this
489
+ * exactly like a Value `input` or a Mode `change` does.
490
+ * @param {HTMLElement} el - any one of the Mode/Value/Flags controls
491
+ * @returns {void}
492
+ */
493
+ function syncLiteralRegexValidity (el) {
494
+ const root = el.closest('[data-search-path]');
495
+ const modeEl = /** @type {HTMLSelectElement|undefined} */ (
496
+ root ? findOwnControl(root, `select.jsoeSearchMode--${key}`) : undefined
497
+ );
498
+ const valueEl = /** @type {HTMLInputElement|undefined} */ (
499
+ root ? findOwnControl(root, `input.jsoeSearchValue--${key}`) : undefined
500
+ );
501
+ if (!modeEl || !valueEl) {
502
+ return;
503
+ }
504
+ if (modeEl.value !== 'regex' || !valueEl.value) {
505
+ valueEl.setCustomValidity('');
506
+ return;
507
+ }
508
+ const flagsEl = /** @type {HTMLSelectElement|undefined} */ (
509
+ root ? findOwnControl(root, `select.jsoeSearchRegexFlags--${key}`) : undefined
510
+ );
511
+ const flags = [...(flagsEl?.selectedOptions ?? [])].map((opt) => opt.value).join('');
512
+ try {
513
+ // eslint-disable-next-line no-new -- Testing
514
+ new RegExp(valueEl.value, flags);
515
+ valueEl.setCustomValidity('');
516
+ } catch {
517
+ valueEl.setCustomValidity('Enter a valid regular expression.');
518
+ }
519
+ }
473
520
  /**
474
521
  * @this {HTMLElement}
475
522
  * @returns {void}
@@ -482,6 +529,7 @@ export function buildLiteralRegexControls ({name, key = '', onModeChange, flagOp
482
529
  /** @type {HTMLElement} */ (flagsLabel).hidden =
483
530
  /** @type {HTMLSelectElement} */ (this).value !== 'regex';
484
531
  }
532
+ syncLiteralRegexValidity(this);
485
533
  onModeChange?.call(this);
486
534
  }
487
535
  /** @type {JamilihArray[]} */
@@ -490,7 +538,13 @@ export function buildLiteralRegexControls ({name, key = '', onModeChange, flagOp
490
538
  flagsChildren.push(['label', {class: `jsoeSearchRegexFlagsLabel--${key}`, hidden: true}, [
491
539
  'Flags: ',
492
540
  ['select', {
493
- name: `${name}-flags`, multiple: true, class: `jsoeSearchRegexFlags--${key}`
541
+ name: `${name}-flags`, multiple: true, class: `jsoeSearchRegexFlags--${key}`,
542
+ $on: {
543
+ /** @this {HTMLElement} */
544
+ change () {
545
+ syncLiteralRegexValidity(this);
546
+ }
547
+ }
494
548
  }, flagOptions.map((flag) => ['option', {value: flag}, [flag]])]
495
549
  ]]);
496
550
  }
@@ -510,7 +564,13 @@ export function buildLiteralRegexControls ({name, key = '', onModeChange, flagOp
510
564
  'Value: ',
511
565
  ['input', {
512
566
  type: 'text', name: `${name}-value`, class: `jsoeSearchValue--${key}`,
513
- required: true
567
+ required: true,
568
+ $on: {
569
+ /** @this {HTMLElement} */
570
+ input () {
571
+ syncLiteralRegexValidity(this);
572
+ }
573
+ }
514
574
  }]
515
575
  ]],
516
576
  ...flagsChildren
@@ -3,11 +3,103 @@ import {
3
3
  } from '../searchUtils.js';
4
4
  import {makeBlobHTMLLeaf} from '../queryTreeBuilders.js';
5
5
  import {getQueryViaElement} from '../searchElementUtils.js';
6
+ import regexpType from '../../fundamentalTypes/regexpType.js';
6
7
 
7
8
  /**
8
9
  * @typedef {import('../searchDispatch.js').SearchTypeObject} SearchTypeObject
9
10
  */
10
11
 
12
+ /**
13
+ * Live syntax-checks a blobHTML Value against its currently-chosen Mode -
14
+ * a CSS selector and an XPath expression are each tried against a detached,
15
+ * inert target (a fragment for the selector, the live `document` itself,
16
+ * required by `Element.prototype.evaluate`'s own contract, for the XPath -
17
+ * neither actually has to *match* anything, only parse without throwing),
18
+ * and a regex is tried via the same `new RegExp(value, flags)` constructor
19
+ * `readLiteralRegexQuery` relies on elsewhere - a "Full text search" value
20
+ * is a plain phrase with no format to violate, so it always passes.
21
+ * @param {string} mode
22
+ * @param {string} value
23
+ * @param {string} flags
24
+ * @returns {string}
25
+ */
26
+ function computeBlobHTMLValueMessage (mode, value, flags) {
27
+ if (!value) {
28
+ return '';
29
+ }
30
+ try {
31
+ switch (mode) {
32
+ case 'cssSelector':
33
+ document.createDocumentFragment().querySelector(value);
34
+ break;
35
+ case 'xpath':
36
+ document.evaluate(value, document, null, XPathResult.ANY_TYPE, null);
37
+ break;
38
+ case 'rawHTMLRegex':
39
+ // eslint-disable-next-line no-new -- Testing
40
+ new RegExp(value, flags);
41
+ break;
42
+ default:
43
+ break;
44
+ }
45
+ return '';
46
+ } catch {
47
+ switch (mode) {
48
+ case 'cssSelector':
49
+ return 'Enter a valid CSS selector.';
50
+ case 'xpath':
51
+ return 'Enter a valid XPath expression.';
52
+ case 'rawHTMLRegex':
53
+ return 'Enter a valid regular expression.';
54
+ default:
55
+ return '';
56
+ }
57
+ }
58
+ }
59
+
60
+ /**
61
+ * Re-runs `computeBlobHTMLValueMessage` against whichever of the input/
62
+ * textarea pair the current Mode makes active, clearing the other one's
63
+ * custom validity (a hidden-but-still-`required` control would otherwise
64
+ * keep blocking the form, the same reasoning `buildUI`'s own doc gives for
65
+ * toggling `required` alongside `hidden`) - call on every `input` on either
66
+ * value control, `change` on the Mode `<select>`, and `change` on the Flags
67
+ * multi-select (changing flags can itself flip a regex between valid and
68
+ * invalid, e.g. the `u`/`v` flags' stricter escape rules).
69
+ * @param {Element|null} container
70
+ * @returns {void}
71
+ */
72
+ function syncBlobHTMLValueValidity (container) {
73
+ if (!container) {
74
+ return;
75
+ }
76
+ const mode = /** @type {HTMLSelectElement|undefined} */ (
77
+ findOwnControl(container, 'select.jsoeSearchBlobHTMLMode')
78
+ )?.value ?? '';
79
+ const input = /** @type {HTMLInputElement|undefined} */ (
80
+ findOwnControl(container, 'input.jsoeSearchBlobHTMLValue')
81
+ );
82
+ const textarea = /** @type {HTMLTextAreaElement|undefined} */ (
83
+ findOwnControl(container, 'textarea.jsoeSearchBlobHTMLValue')
84
+ );
85
+ const flagsSelect = /** @type {HTMLSelectElement|undefined} */ (
86
+ findOwnControl(container, 'select.jsoeSearchBlobHTMLFlags')
87
+ );
88
+ const flags = mode === 'rawHTMLRegex'
89
+ ? [...(flagsSelect?.selectedOptions ?? [])].map((opt) => opt.value).join('')
90
+ : '';
91
+ const active = mode === 'fullText' ? textarea : input;
92
+ if (input && input !== active) {
93
+ input.setCustomValidity('');
94
+ }
95
+ if (textarea && textarea !== active) {
96
+ textarea.setCustomValidity('');
97
+ }
98
+ if (active) {
99
+ active.setCustomValidity(computeBlobHTMLValueMessage(mode, active.value, flags));
100
+ }
101
+ }
102
+
11
103
  /**
12
104
  * Blob HTML: XPath, CSS selectors, full text search, regex search of raw
13
105
  * HTML (README) - a mode `<select>` plus one value control, the same
@@ -23,7 +115,8 @@ import {getQueryViaElement} from '../searchElementUtils.js';
23
115
  * of the pair is ever `required` (toggled alongside `hidden` by the mode
24
116
  * `change` handler): a `required` field that's merely hidden, rather than
25
117
  * also un-required, still blocks the form's validity even though the user
26
- * has no way to see or fill it.
118
+ * has no way to see or fill it. "CSS selector" is listed ahead of "XPath"
119
+ * (and is the default mode) as the option most jsoe users will recognize.
27
120
  *
28
121
  * The `change` handler also checks `isExemptedByAncestorHasProperty` before
29
122
  * (re-)asserting `required` on the now-visible control: nested as an
@@ -35,6 +128,15 @@ import {getQueryViaElement} from '../searchElementUtils.js';
35
128
  * check, that synthetic event would immediately reassert `required` on
36
129
  * whichever control the current mode makes visible, undoing the exemption
37
130
  * `setDescendantsRequired` had just granted.
131
+ *
132
+ * "Regex search of raw HTML" gets its own Flags multi-select (the same
133
+ * `regexpType.js` `allowedFlags` list `stringSearchType.js`'s literal/regex
134
+ * control passes as `buildLiteralRegexControls`'s `flagOptions`), shown only
135
+ * while that mode is chosen, folded into the `blobHTML` leaf's own
136
+ * `$options` (mirroring `QueryRegexLeaf`'s field of the same name) - and,
137
+ * via `syncBlobHTMLValueValidity`, included when syntax-checking the Value
138
+ * itself, since the chosen flags can affect whether a given pattern is
139
+ * actually valid.
38
140
  * @type {SearchTypeObject}
39
141
  */
40
142
  const blobHTMLSearchType = {
@@ -60,10 +162,16 @@ const blobHTMLSearchType = {
60
162
  if (!value || !mode) {
61
163
  return undefined;
62
164
  }
165
+ const flags = mode === 'rawHTMLRegex'
166
+ ? [...(/** @type {HTMLSelectElement|undefined} */ (
167
+ findOwnControl(this, 'select.jsoeSearchBlobHTMLFlags')
168
+ )?.selectedOptions ?? [])].map((opt) => opt.value).join('')
169
+ : '';
63
170
  return makeBlobHTMLLeaf(
64
171
  searchPath,
65
172
  /** @type {import('../queryTree.js').QueryBlobHTMLLeaf['mode']} */ (mode),
66
- value
173
+ value,
174
+ flags || undefined
67
175
  );
68
176
  }
69
177
  }
@@ -83,8 +191,11 @@ const blobHTMLSearchType = {
83
191
  const textarea = /** @type {HTMLTextAreaElement|null|undefined} */ (
84
192
  container?.querySelector('textarea.jsoeSearchBlobHTMLValue')
85
193
  );
86
- const isFullText = /** @type {HTMLSelectElement} */ (this).value ===
87
- 'fullText';
194
+ const flagsLabel = /** @type {HTMLElement|null|undefined} */ (
195
+ container?.querySelector('.jsoeSearchBlobHTMLFlagsLabel')
196
+ );
197
+ const mode = /** @type {HTMLSelectElement} */ (this).value;
198
+ const isFullText = mode === 'fullText';
88
199
  const exempted = container !== null &&
89
200
  isExemptedByAncestorHasProperty(container);
90
201
  if (input) {
@@ -95,11 +206,15 @@ const blobHTMLSearchType = {
95
206
  textarea.hidden = !isFullText;
96
207
  textarea.required = isFullText && !exempted;
97
208
  }
209
+ if (flagsLabel) {
210
+ flagsLabel.hidden = mode !== 'rawHTMLRegex';
211
+ }
212
+ syncBlobHTMLValueValidity(container);
98
213
  }
99
214
  }
100
215
  }, [
101
- ['option', {value: 'xpath'}, ['XPath']],
102
216
  ['option', {value: 'cssSelector'}, ['CSS selector']],
217
+ ['option', {value: 'xpath'}, ['XPath']],
103
218
  ['option', {value: 'fullText'}, ['Full text search']],
104
219
  ['option', {value: 'rawHTMLRegex'}, ['Regex search of raw HTML']]
105
220
  ]]
@@ -108,11 +223,32 @@ const blobHTMLSearchType = {
108
223
  'Value: ',
109
224
  ['input', {
110
225
  type: 'text', name: `${name}-value`, class: 'jsoeSearchBlobHTMLValue',
111
- required: true
226
+ required: true,
227
+ $on: {
228
+ input () {
229
+ syncBlobHTMLValueValidity(this.closest('jsoe-search-blob-html'));
230
+ }
231
+ }
112
232
  }],
113
233
  ['textarea', {
114
- name: `${name}-value`, class: 'jsoeSearchBlobHTMLValue', hidden: true
234
+ name: `${name}-value`, class: 'jsoeSearchBlobHTMLValue', hidden: true,
235
+ $on: {
236
+ input () {
237
+ syncBlobHTMLValueValidity(this.closest('jsoe-search-blob-html'));
238
+ }
239
+ }
115
240
  }]
241
+ ]],
242
+ ['label', {class: 'jsoeSearchBlobHTMLFlagsLabel', hidden: true}, [
243
+ 'Flags: ',
244
+ ['select', {
245
+ name: `${name}-flags`, multiple: true, class: 'jsoeSearchBlobHTMLFlags',
246
+ $on: {
247
+ change () {
248
+ syncBlobHTMLValueValidity(this.closest('jsoe-search-blob-html'));
249
+ }
250
+ }
251
+ }, regexpType.allowedFlags.map((flag) => ['option', {value: flag}, [flag]])]
116
252
  ]]
117
253
  ]];
118
254
  },
@@ -788,7 +788,9 @@ export declare const describe: typeof core.describe;
788
788
  export declare const meta: typeof core.meta;
789
789
  type ZodInstanceOfParams = core.Params<ZodCustom, core.$ZodIssueCustom, "type" | "check" | "checks" | "fn" | "abort" | "error" | "params" | "path">;
790
790
  export interface ZodInstanceOf<T = unknown> extends ZodCustom<T, T> {
791
- properties<Shape extends core.$ZodShape>(shape: Shape, params?: string | core.$ZodCheckPropertiesParams): ZodInstanceOf<T & core.$InferObjectInput<Shape, {}>>;
791
+ properties<Shape extends {
792
+ [k in keyof T as T[k] extends Function ? never : k]?: core.$ZodType<unknown, T[k]>;
793
+ }>(shape: Shape, params?: string | core.$ZodCheckPropertiesParams): ZodInstanceOf<T & core.$InferObjectInput<Shape, {}>>;
792
794
  }
793
795
  export declare const ZodInstanceOf: core.$constructor<ZodInstanceOf>;
794
796
  declare function _instanceof<T extends typeof util.Class>(cls: T, params?: ZodInstanceOfParams): ZodInstanceOf<InstanceType<T>>;
@@ -1,5 +1,5 @@
1
1
  export const version = {
2
2
  major: 4,
3
3
  minor: 6,
4
- patch: 4,
4
+ patch: 5,
5
5
  };