ag-grid-url-sync 0.5.0 → 0.5.2
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/README.md +339 -66
- package/dist/core/ag-grid-url-sync.d.ts +16 -9
- package/dist/core/ag-grid-url-sync.js +23 -19
- package/dist/core/ag-grid-url-sync.js.map +1 -1
- package/dist/core/codecs.d.ts +28 -0
- package/dist/core/codecs.js +39 -0
- package/dist/core/codecs.js.map +1 -0
- package/dist/core/data-issue-codes.d.ts +3 -0
- package/dist/core/data-issue-codes.js +10 -0
- package/dist/core/data-issue-codes.js.map +1 -0
- package/dist/core/grid-integration.d.ts +38 -2
- package/dist/core/grid-integration.js +169 -128
- package/dist/core/grid-integration.js.map +1 -1
- package/dist/core/grid-url-sync.d.ts +62 -0
- package/dist/core/grid-url-sync.js +738 -0
- package/dist/core/grid-url-sync.js.map +1 -0
- package/dist/core/index.d.ts +4 -1
- package/dist/core/index.js +4 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/individual-params.d.ts +12 -5
- package/dist/core/individual-params.js +38 -62
- package/dist/core/individual-params.js.map +1 -1
- package/dist/core/issue-columns.d.ts +2 -0
- package/dist/core/issue-columns.js +11 -0
- package/dist/core/issue-columns.js.map +1 -0
- package/dist/core/issues.d.ts +34 -0
- package/dist/core/issues.js +51 -0
- package/dist/core/issues.js.map +1 -0
- package/dist/core/operators.d.ts +189 -0
- package/dist/core/operators.js +60 -0
- package/dist/core/operators.js.map +1 -0
- package/dist/core/options.d.ts +21 -0
- package/dist/core/options.js +21 -0
- package/dist/core/options.js.map +1 -0
- package/dist/core/own-write.d.ts +138 -0
- package/dist/core/own-write.js +133 -0
- package/dist/core/own-write.js.map +1 -0
- package/dist/core/schemas.d.ts +51 -0
- package/dist/core/schemas.js +59 -0
- package/dist/core/schemas.js.map +1 -0
- package/dist/core/serialization/formats.d.ts +7 -7
- package/dist/core/serialization/formats.js +34 -28
- package/dist/core/serialization/formats.js.map +1 -1
- package/dist/core/serialization/grouped.d.ts +9 -12
- package/dist/core/serialization/grouped.js +24 -17
- package/dist/core/serialization/grouped.js.map +1 -1
- package/dist/core/to-error.d.ts +5 -0
- package/dist/core/to-error.js +4 -0
- package/dist/core/to-error.js.map +1 -0
- package/dist/core/types.d.ts +296 -43
- package/dist/core/types.js +39 -108
- package/dist/core/types.js.map +1 -1
- package/dist/core/url-generator.d.ts +4 -4
- package/dist/core/url-generator.js +9 -7
- package/dist/core/url-generator.js.map +1 -1
- package/dist/core/url-parser.d.ts +4 -4
- package/dist/core/url-parser.js +6 -4
- package/dist/core/url-parser.js.map +1 -1
- package/dist/core/validation.d.ts +21 -14
- package/dist/core/validation.js +58 -54
- package/dist/core/validation.js.map +1 -1
- package/dist/core/view-storage.js +21 -19
- package/dist/core/view-storage.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/react/index.d.ts +3 -2
- package/dist/react/index.js +1 -0
- package/dist/react/index.js.map +1 -1
- package/dist/react/sync-holder.d.ts +22 -0
- package/dist/react/sync-holder.js +68 -0
- package/dist/react/sync-holder.js.map +1 -0
- package/dist/react/sync-options.d.ts +17 -0
- package/dist/react/sync-options.js +22 -0
- package/dist/react/sync-options.js.map +1 -0
- package/dist/react/types.d.ts +101 -14
- package/dist/react/use-ag-grid-url-sync.d.ts +3 -0
- package/dist/react/use-ag-grid-url-sync.js +344 -499
- package/dist/react/use-ag-grid-url-sync.js.map +1 -1
- package/dist/react/use-grid-url-sync.d.ts +14 -0
- package/dist/react/use-grid-url-sync.js +206 -0
- package/dist/react/use-grid-url-sync.js.map +1 -0
- package/package.json +35 -15
package/dist/core/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EACL,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,YAAY,EAGb,MAAM,gBAAgB,CAAA;AAgKvB,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAA;AAK7D,MAAM,CAAC,MAAM,sBAAsB,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;AAKjE,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAA;AAK7D,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,EAAE,CAAA;AAUnD,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;AAK3D,MAAM,CAAC,MAAM,wBAAwB,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAA;AAK/D,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;AAsG3D,MAAM,UAAU,qBAAqB,CACnC,EAAmB;IAEnB,OAAO,cAAc,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;AACnC,CAAC;AAKD,MAAM,UAAU,uBAAuB,CACrC,EAAmB;IAEnB,OAAO,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;AACrC,CAAC;AAKD,MAAM,UAAU,qBAAqB,CACnC,EAAmB;IAEnB,OAAO,cAAc,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;AACnC,CAAC;AAKD,MAAM,UAAU,gBAAgB,CAAC,EAAmB;IAClD,OAAO,YAAY,CAAC,EAAE,CAAC,EAAE,KAAK,KAAK,CAAC,CAAA;AACtC,CAAC;AAKD,MAAM,UAAU,gBAAgB,CAAC,EAAmB;IAClD,OAAO,YAAY,CAAC,EAAE,CAAC,EAAE,KAAK,KAAK,CAAC,CAAA;AACtC,CAAC;AAKD,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,OAAO,MAAM,CAAC,UAAU,KAAK,MAAM,CAAA;AACrC,CAAC;AAKD,MAAM,UAAU,cAAc,CAC5B,MAAoB;IAEpB,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAA;AACvC,CAAC;AAKD,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,OAAO,MAAM,CAAC,UAAU,KAAK,MAAM,CAAA;AACrC,CAAC;AA8CD,MAAM,OAAO,YAAa,SAAQ,KAAK;IASV,KAAK;IAPvB,IAAI,CAAW;IAKxB,YACE,OAAe,EACU,KAAa,EACtC,OAAO,GAAiB,EAAE;QAE1B,KAAK,CAAC,OAAO,CAAC,CAAA;qBAHW,KAAK;QAI9B,IAAI,CAAC,IAAI,GAAG,cAAc,CAAA;QAC1B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,SAAS,CAAA;QAErC,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;YAAE,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;IACtE,CAAC;IAMD,IAAI,QAAQ;QACV,OAAO,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAA;IAC9D,CAAC;CACF;AAKD,MAAM,OAAO,kBAAmB,SAAQ,YAAY;IAClD,YAAY,OAAe,EAAE,KAAa,EAAE,OAAO,GAAiB,EAAE;QACpE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,eAAe,EAAE,CAAC,CAAA;QAC5E,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;IAClC,CAAC;CACF;AAKD,MAAM,OAAO,eAAgB,SAAQ,YAAY;IAC/C,YAAY,OAAe,EAAE,KAAa,EAAE,OAAO,GAAiB,EAAE;QACpE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,aAAa,EAAE,CAAC,CAAA;QAC1E,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAA;IAC/B,CAAC;CACF;AAKD,MAAM,OAAO,gBAAiB,SAAQ,kBAAkB;IACtD,YAAY,OAAe,EAAE,KAAa,EAAE,OAAO,GAAiB,EAAE;QACpE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,cAAc,EAAE,CAAC,CAAA;QAC3E,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAA;IAChC,CAAC;CACF;AAUD,MAAM,OAAO,yBAA0B,SAAQ,YAAY;IAEhD,MAAM,CAAQ;IAEvB,YAAY,MAAc,EAAE,KAAY;QACtC,KAAK,CACH,WAAW,MAAM,mBAAmB,KAAK,CAAC,OAAO,EAAE,EACnD,KAAK,EACL,KAAK,YAAY,YAAY;YAC3B,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;YAC5C,CAAC,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAChC,CAAA;QACD,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAA;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;CACF;AAqID,MAAM,CAAC,MAAM,aAAa,GACxB,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AAM1D,MAAM,CAAC,MAAM,6BAA6B,GAGxC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAGtD,CAAA;AAMH,MAAM,CAAC,MAAM,uBAAuB,GAClC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAU7D,MAAM,CAAC,MAAM,+BAA+B,GAC1C,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AGGridUrlSyncConfig, FilterState } from './types.js';
|
|
2
2
|
import { serializeFilters } from './individual-params.js';
|
|
3
3
|
export { serializeFilters };
|
|
4
4
|
/**
|
|
5
5
|
* Generates a URL with the current filter state.
|
|
6
|
-
* This function does not
|
|
7
|
-
*
|
|
6
|
+
* This function does not need a grid. An option that the config leaves out
|
|
7
|
+
* gets its default.
|
|
8
8
|
*
|
|
9
9
|
* The host app's own params are kept, including repeated keys. Filter params
|
|
10
10
|
* from either mode are replaced.
|
|
11
11
|
*/
|
|
12
|
-
export declare function generateUrl(baseUrl: string, filterState: FilterState, config
|
|
12
|
+
export declare function generateUrl(baseUrl: string, filterState: FilterState, config?: AGGridUrlSyncConfig): string;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { serializeFilters } from './individual-params.js';
|
|
1
|
+
import { serializeFilters, resolveParamPrefix } from './individual-params.js';
|
|
2
2
|
import { serializeGrouped } from './serialization/grouped.js';
|
|
3
|
+
import { resolveOptions } from './options.js';
|
|
3
4
|
export { serializeFilters };
|
|
4
5
|
function isFilterParam(key, config) {
|
|
5
6
|
return (key === config.groupedParam ||
|
|
6
|
-
|
|
7
|
+
key.startsWith(resolveParamPrefix(config.paramPrefix)));
|
|
7
8
|
}
|
|
8
9
|
function getHostParams(url, config) {
|
|
9
10
|
return [...url.searchParams].filter(([key]) => !isFilterParam(key, config));
|
|
@@ -18,18 +19,19 @@ function toUrlString(url, params) {
|
|
|
18
19
|
const result = url.toString();
|
|
19
20
|
return result === `${url.origin}/` ? result.slice(0, -1) : result;
|
|
20
21
|
}
|
|
21
|
-
export function generateUrl(baseUrl, filterState, config) {
|
|
22
|
+
export function generateUrl(baseUrl, filterState, config = {}) {
|
|
23
|
+
const options = resolveOptions(config);
|
|
22
24
|
const url = new URL(baseUrl);
|
|
23
|
-
const hostParams = getHostParams(url,
|
|
24
|
-
if (
|
|
25
|
+
const hostParams = getHostParams(url, options);
|
|
26
|
+
if (options.serialization === 'grouped') {
|
|
25
27
|
const params = new URLSearchParams(hostParams);
|
|
26
|
-
const groupedResult = serializeGrouped(filterState,
|
|
28
|
+
const groupedResult = serializeGrouped(filterState, options);
|
|
27
29
|
if (groupedResult.value) {
|
|
28
30
|
params.append(groupedResult.paramName, groupedResult.value);
|
|
29
31
|
}
|
|
30
32
|
return toUrlString(url, params);
|
|
31
33
|
}
|
|
32
|
-
const params = serializeFilters(filterState,
|
|
34
|
+
const params = serializeFilters(filterState, options);
|
|
33
35
|
for (const [key, value] of hostParams) {
|
|
34
36
|
params.append(key, value);
|
|
35
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url-generator.js","sourceRoot":"","sources":["../../src/core/url-generator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"url-generator.js","sourceRoot":"","sources":["../../src/core/url-generator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAQ3B,SAAS,aAAa,CAAC,GAAW,EAAE,MAAuB;IACzD,OAAO,CACL,GAAG,KAAK,MAAM,CAAC,YAAY;QAC3B,GAAG,CAAC,UAAU,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CACvD,CAAA;AACH,CAAC;AAMD,SAAS,aAAa,CAAC,GAAQ,EAAE,MAAuB;IACtD,OAAO,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAA;AAC7E,CAAC;AAMD,SAAS,WAAW,CAAC,GAAQ,EAAE,MAAuB;IACpD,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAA;IAErC,IAAI,WAAW,EAAE,CAAC;QAChB,GAAG,CAAC,MAAM,GAAG,WAAW,CAAA;QAExB,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAA;IACvB,CAAC;IAED,GAAG,CAAC,MAAM,GAAG,EAAE,CAAA;IACf,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAA;IAE7B,OAAO,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;AACnE,CAAC;AAUD,MAAM,UAAU,WAAW,CACzB,OAAe,EACf,WAAwB,EACxB,MAAM,GAAwB,EAAE;IAEhC,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;IACtC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAA;IAC5B,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAE9C,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QAExC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,UAAU,CAAC,CAAA;QAC9C,MAAM,aAAa,GAAG,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QAE5D,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;YACxB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,KAAK,CAAC,CAAA;QAC7D,CAAC;QAED,OAAO,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IACjC,CAAC;IAGD,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IAErD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,UAAU,EAAE,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC3B,CAAC;IAED,OAAO,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;AACjC,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AGGridUrlSyncConfig, FilterState } from './types.js';
|
|
2
2
|
import { parseFilterParam } from './individual-params.js';
|
|
3
3
|
export { parseFilterParam };
|
|
4
4
|
/**
|
|
5
5
|
* Converts URL search params into a filter state object.
|
|
6
|
-
* This function does not
|
|
7
|
-
*
|
|
6
|
+
* This function does not need a grid. An option that the config leaves out
|
|
7
|
+
* gets its default.
|
|
8
8
|
*
|
|
9
9
|
* Accepts an absolute URL, a relative path, a query string or a raw query
|
|
10
10
|
* string (see {@link toUrl}). A param that is not valid is skipped and reported
|
|
@@ -18,4 +18,4 @@ export { parseFilterParam };
|
|
|
18
18
|
* @throws InvalidURLError if the input is an absolute URL that is not valid,
|
|
19
19
|
* or a host with no scheme
|
|
20
20
|
*/
|
|
21
|
-
export declare function parseUrlFilters(url: string, config
|
|
21
|
+
export declare function parseUrlFilters(url: string, config?: AGGridUrlSyncConfig): FilterState;
|
package/dist/core/url-parser.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { InvalidURLError } from './types.js';
|
|
2
2
|
import { parseFilterParam, parseIndividualParams } from './individual-params.js';
|
|
3
3
|
import { deserializeGrouped } from './serialization/grouped.js';
|
|
4
|
+
import { resolveOptions } from './options.js';
|
|
4
5
|
export { parseFilterParam };
|
|
5
6
|
const PARSE_BASE = 'http://localhost';
|
|
6
7
|
const HAS_SCHEME = /^[a-z][a-z\d+.-]*:/i;
|
|
@@ -25,15 +26,16 @@ function toUrl(input) {
|
|
|
25
26
|
throw new InvalidURLError(`Failed to parse URL: ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
|
|
26
27
|
}
|
|
27
28
|
}
|
|
28
|
-
export function parseUrlFilters(url, config) {
|
|
29
|
+
export function parseUrlFilters(url, config = {}) {
|
|
29
30
|
if (!url || url.trim() === '') {
|
|
30
31
|
return {};
|
|
31
32
|
}
|
|
32
33
|
const urlObj = toUrl(url.trim());
|
|
33
|
-
const
|
|
34
|
+
const options = resolveOptions(config);
|
|
35
|
+
const groupedValue = urlObj.searchParams.get(options.groupedParam);
|
|
34
36
|
if (groupedValue) {
|
|
35
|
-
return deserializeGrouped(groupedValue,
|
|
37
|
+
return deserializeGrouped(groupedValue, options.format, options);
|
|
36
38
|
}
|
|
37
|
-
return parseIndividualParams(urlObj.searchParams,
|
|
39
|
+
return parseIndividualParams(urlObj.searchParams, options);
|
|
38
40
|
}
|
|
39
41
|
//# sourceMappingURL=url-parser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url-parser.js","sourceRoot":"","sources":["../../src/core/url-parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"url-parser.js","sourceRoot":"","sources":["../../src/core/url-parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAM3B,MAAM,UAAU,GAAG,kBAAkB,CAAA;AAGrC,MAAM,UAAU,GAAG,qBAAqB,CAAA;AAcxC,MAAM,eAAe,GACnB,oEAAoE,CAAA;AAqBtE,SAAS,KAAK,CAAC,KAAa;IAC1B,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,eAAe,CACvB,yBAAyB,KAAK,8BAA8B;YAC1D,+DAA+D,CAClE,CAAA;IACH,CAAC;IAED,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAA;QACvB,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;QACnC,CAAC;QAID,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAA;QAC/B,GAAG,CAAC,MAAM,GAAG,KAAK,CAAA;QAElB,OAAO,GAAG,CAAA;IACZ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,eAAe,CACvB,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,EAClF,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAA;IACH,CAAC;AACH,CAAC;AAmBD,MAAM,UAAU,eAAe,CAC7B,GAAW,EACX,MAAM,GAAwB,EAAE;IAGhC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;IAChC,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;IAMtC,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;IAElE,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,kBAAkB,CAAC,YAAY,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClE,CAAC;IAGD,OAAO,qBAAqB,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;AAC5D,CAAC"}
|
|
@@ -1,15 +1,6 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*/
|
|
5
|
-
export declare const DEFAULT_CONFIG: {
|
|
6
|
-
readonly paramPrefix: 'f_';
|
|
7
|
-
readonly maxValueLength: 200;
|
|
8
|
-
readonly serialization: 'individual';
|
|
9
|
-
readonly groupedParam: 'grid_filters';
|
|
10
|
-
readonly format: 'querystring';
|
|
11
|
-
readonly onParseError: () => void;
|
|
12
|
-
};
|
|
1
|
+
import type { AGGridUrlSyncConfig, FilterOperation, DateFilterOperation, ColumnFilter } from './types.js';
|
|
2
|
+
import { InvalidFilterError } from './types.js';
|
|
3
|
+
export { DEFAULT_CONFIG } from './options.js';
|
|
13
4
|
/**
|
|
14
5
|
* Validation result interface
|
|
15
6
|
*/
|
|
@@ -23,12 +14,13 @@ export type ValidationResult = {
|
|
|
23
14
|
* Validates a text filter value against configuration constraints
|
|
24
15
|
*
|
|
25
16
|
* @param value - The filter value to validate
|
|
26
|
-
* @param config -
|
|
17
|
+
* @param config - Options with the validation rules. An option that is left
|
|
18
|
+
* out gets its default.
|
|
27
19
|
* @param operation - Optional filter operation type. Blank operations (blank/notBlank) bypass value validation
|
|
28
20
|
* @returns The validated filter value (empty string for blank operations)
|
|
29
21
|
* @throws InvalidFilterError if value exceeds maximum length
|
|
30
22
|
*/
|
|
31
|
-
export declare function validateFilterValue(value: string, config
|
|
23
|
+
export declare function validateFilterValue(value: string, config?: AGGridUrlSyncConfig, operation?: FilterOperation): string;
|
|
32
24
|
/**
|
|
33
25
|
* Validates a number filter value
|
|
34
26
|
*
|
|
@@ -44,6 +36,21 @@ export declare function validateNumberFilter(value: number): ValidationResult;
|
|
|
44
36
|
* @returns Validation result
|
|
45
37
|
*/
|
|
46
38
|
export declare function validateNumberRange(min: number, max: number): ValidationResult;
|
|
39
|
+
/**
|
|
40
|
+
* Reads the value as a number, or gives the error that says why it is not
|
|
41
|
+
* one. The one rule for every number in a URL or a grid input (#238): the
|
|
42
|
+
* whole value must be a number, it must be finite, and it must not be rounded
|
|
43
|
+
* when it is stored as a double.
|
|
44
|
+
*
|
|
45
|
+
* The form does not matter: "1e21", "1E+21" and "1000000000000000000000" are
|
|
46
|
+
* all 1e21, and "1.50" and "007" are 1.5 and 7.
|
|
47
|
+
*/
|
|
48
|
+
export declare function readNumber(value: string): number | InvalidFilterError;
|
|
49
|
+
/**
|
|
50
|
+
* The number in the value, or null when readNumber gives an error. The type
|
|
51
|
+
* guess for shared operations uses this, so such a value stays text.
|
|
52
|
+
*/
|
|
53
|
+
export declare function parseExactNumber(value: string): number | null;
|
|
47
54
|
/**
|
|
48
55
|
* Validates a parsed number from string input
|
|
49
56
|
*
|
package/dist/core/validation.js
CHANGED
|
@@ -1,18 +1,15 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
format: 'querystring',
|
|
8
|
-
onParseError: () => { }
|
|
9
|
-
};
|
|
10
|
-
export function validateFilterValue(value, config, operation) {
|
|
1
|
+
import * as v from 'valibot';
|
|
2
|
+
import { InvalidFilterError, InvalidDateError } from './types.js';
|
|
3
|
+
import { ColumnFilterSchema } from './schemas.js';
|
|
4
|
+
import { resolveOptions } from './options.js';
|
|
5
|
+
export { DEFAULT_CONFIG } from './options.js';
|
|
6
|
+
export function validateFilterValue(value, config = {}, operation) {
|
|
11
7
|
if (operation === 'blank' || operation === 'notBlank') {
|
|
12
8
|
return '';
|
|
13
9
|
}
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
const { maxValueLength } = resolveOptions(config);
|
|
11
|
+
if (value.length > maxValueLength) {
|
|
12
|
+
throw new InvalidFilterError(`Filter value exceeds maximum length of ${maxValueLength} characters`, undefined, { code: 'VALUE_TOO_LONG' });
|
|
16
13
|
}
|
|
17
14
|
return value;
|
|
18
15
|
}
|
|
@@ -20,9 +17,6 @@ export function validateNumberFilter(value) {
|
|
|
20
17
|
if (!Number.isFinite(value)) {
|
|
21
18
|
return { valid: false, error: 'Filter value must be a finite number' };
|
|
22
19
|
}
|
|
23
|
-
if (Math.abs(value) > Number.MAX_SAFE_INTEGER) {
|
|
24
|
-
return { valid: false, error: 'Number value exceeds safe integer range' };
|
|
25
|
-
}
|
|
26
20
|
return { valid: true };
|
|
27
21
|
}
|
|
28
22
|
export function validateNumberRange(min, max) {
|
|
@@ -40,24 +34,58 @@ export function validateNumberRange(min, max) {
|
|
|
40
34
|
}
|
|
41
35
|
return { valid: true };
|
|
42
36
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
37
|
+
const NUMBER_FORMAT = /^[+-]?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?$/;
|
|
38
|
+
const EXPONENT_SPACE = /(?<=[\d.][eE]) (?=\d+$)/;
|
|
39
|
+
const MAX_PRECISION = 100;
|
|
40
|
+
function significantDigits(text) {
|
|
41
|
+
const [mantissa = '', exponent = '0'] = text.replace(/^[+-]/, '').split(/e/i);
|
|
42
|
+
const [whole = '', fraction = ''] = mantissa.split('.');
|
|
43
|
+
const allDigits = whole + fraction;
|
|
44
|
+
const leadingZeros = allDigits.length - allDigits.replace(/^0+/, '').length;
|
|
45
|
+
const digits = allDigits.slice(leadingZeros).replace(/0+$/, '');
|
|
46
|
+
if (digits === '')
|
|
47
|
+
return '';
|
|
48
|
+
const point = whole.length - leadingZeros + Number(exponent);
|
|
49
|
+
return `${digits}e${point}`;
|
|
50
|
+
}
|
|
51
|
+
function keepsDigits(text, number) {
|
|
52
|
+
const key = significantDigits(text);
|
|
53
|
+
const precision = Math.max(1, key.indexOf('e'));
|
|
54
|
+
const magnitude = Math.abs(number);
|
|
55
|
+
return (key === significantDigits(String(magnitude)) ||
|
|
56
|
+
key === significantDigits(magnitude.toPrecision(precision)));
|
|
57
|
+
}
|
|
58
|
+
const NUMBER_ISSUE = { code: 'INVALID_NUMBER' };
|
|
59
|
+
export function readNumber(value) {
|
|
60
|
+
const text = value?.trim() ?? '';
|
|
61
|
+
if (!text) {
|
|
62
|
+
return new InvalidFilterError('Number filter value cannot be empty', undefined, NUMBER_ISSUE);
|
|
51
63
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
throw new InvalidFilterError(`Invalid number format: ${value}`);
|
|
64
|
+
if (!NUMBER_FORMAT.test(text)) {
|
|
65
|
+
return new InvalidFilterError(`Invalid number format: ${text}`, undefined, NUMBER_ISSUE);
|
|
55
66
|
}
|
|
56
|
-
const
|
|
67
|
+
const number = parseFloat(text);
|
|
68
|
+
const validation = validateNumberFilter(number);
|
|
57
69
|
if (!validation.valid) {
|
|
58
|
-
|
|
70
|
+
return new InvalidFilterError(validation.error || 'Invalid number value', undefined, NUMBER_ISSUE);
|
|
71
|
+
}
|
|
72
|
+
if (significantDigits(text).indexOf('e') > MAX_PRECISION) {
|
|
73
|
+
return new InvalidFilterError(`Number value has more than ${MAX_PRECISION} significant digits: ${text}`, undefined, NUMBER_ISSUE);
|
|
74
|
+
}
|
|
75
|
+
if (!keepsDigits(text, number)) {
|
|
76
|
+
return new InvalidFilterError(`Number value ${text} would be rounded to ${number}`, undefined, NUMBER_ISSUE);
|
|
59
77
|
}
|
|
60
|
-
return
|
|
78
|
+
return number;
|
|
79
|
+
}
|
|
80
|
+
export function parseExactNumber(value) {
|
|
81
|
+
const number = readNumber(value);
|
|
82
|
+
return number instanceof InvalidFilterError ? null : number;
|
|
83
|
+
}
|
|
84
|
+
export function validateAndParseNumber(value) {
|
|
85
|
+
const number = readNumber((value?.trim() ?? '').replace(EXPONENT_SPACE, '+'));
|
|
86
|
+
if (number instanceof InvalidFilterError)
|
|
87
|
+
throw number;
|
|
88
|
+
return number;
|
|
61
89
|
}
|
|
62
90
|
export function validateAndParseDate(value) {
|
|
63
91
|
const trimmedValue = value?.trim();
|
|
@@ -132,30 +160,6 @@ export function validateAndParseDateRange(rangeValue) {
|
|
|
132
160
|
return [startDate, endDate];
|
|
133
161
|
}
|
|
134
162
|
export function isValidColumnFilter(obj) {
|
|
135
|
-
|
|
136
|
-
return false;
|
|
137
|
-
}
|
|
138
|
-
const filter = obj;
|
|
139
|
-
if (!filter.filterType ||
|
|
140
|
-
!filter.type ||
|
|
141
|
-
typeof filter.filterType !== 'string' ||
|
|
142
|
-
typeof filter.type !== 'string') {
|
|
143
|
-
return false;
|
|
144
|
-
}
|
|
145
|
-
if (filter.filterType === 'text') {
|
|
146
|
-
return (typeof filter.filter === 'string' &&
|
|
147
|
-
TEXT_FILTER_OPERATIONS.includes(filter.type));
|
|
148
|
-
}
|
|
149
|
-
if (filter.filterType === 'number') {
|
|
150
|
-
return (typeof filter.filter === 'number' &&
|
|
151
|
-
NUMBER_FILTER_OPERATIONS.includes(filter.type) &&
|
|
152
|
-
(filter.filterTo === undefined || typeof filter.filterTo === 'number'));
|
|
153
|
-
}
|
|
154
|
-
if (filter.filterType === 'date') {
|
|
155
|
-
return (typeof filter.filter === 'string' &&
|
|
156
|
-
DATE_FILTER_OPERATIONS.includes(filter.type) &&
|
|
157
|
-
(filter.filterTo === undefined || typeof filter.filterTo === 'string'));
|
|
158
|
-
}
|
|
159
|
-
return false;
|
|
163
|
+
return v.is(ColumnFilterSchema, obj);
|
|
160
164
|
}
|
|
161
165
|
//# sourceMappingURL=validation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,12 @@
|
|
|
1
|
+
import * as v from 'valibot';
|
|
2
|
+
import { GridViewSchema, StoredViewsSchema } from './schemas.js';
|
|
3
|
+
import { URLSyncError } from './types.js';
|
|
4
|
+
import { toError } from './to-error.js';
|
|
1
5
|
const SCHEMA_VERSION = 'v1';
|
|
2
6
|
const keyFor = (storageKey) => `ag-grid-url-sync:views:${SCHEMA_VERSION}:${storageKey}`;
|
|
3
7
|
const empty = () => ({ views: [], activeId: null });
|
|
4
8
|
function isGridView(value) {
|
|
5
|
-
|
|
6
|
-
return false;
|
|
7
|
-
const candidate = value;
|
|
8
|
-
return (typeof candidate.id === 'string' &&
|
|
9
|
-
typeof candidate.name === 'string' &&
|
|
10
|
-
typeof candidate.updatedAt === 'number' &&
|
|
11
|
-
typeof candidate.filterModel === 'object' &&
|
|
12
|
-
candidate.filterModel !== null);
|
|
9
|
+
return v.is(GridViewSchema, value);
|
|
13
10
|
}
|
|
14
11
|
function createId() {
|
|
15
12
|
if (typeof crypto !== 'undefined' && 'randomUUID' in crypto) {
|
|
@@ -32,15 +29,14 @@ export function createViewStore(storageKey) {
|
|
|
32
29
|
if (!raw)
|
|
33
30
|
return empty();
|
|
34
31
|
try {
|
|
35
|
-
const parsed = JSON.parse(raw);
|
|
36
|
-
if (
|
|
32
|
+
const parsed = v.safeParse(StoredViewsSchema, JSON.parse(raw));
|
|
33
|
+
if (!parsed.success)
|
|
37
34
|
return empty();
|
|
38
|
-
const { views, activeId } = parsed;
|
|
39
|
-
const validViews =
|
|
35
|
+
const { views, activeId } = parsed.output;
|
|
36
|
+
const validViews = views.filter(isGridView);
|
|
40
37
|
return {
|
|
41
38
|
views: validViews,
|
|
42
|
-
activeId:
|
|
43
|
-
validViews.some(view => view.id === activeId)
|
|
39
|
+
activeId: activeId !== null && validViews.some(view => view.id === activeId)
|
|
44
40
|
? activeId
|
|
45
41
|
: null
|
|
46
42
|
};
|
|
@@ -51,7 +47,9 @@ export function createViewStore(storageKey) {
|
|
|
51
47
|
};
|
|
52
48
|
const write = (next) => {
|
|
53
49
|
if (typeof window === 'undefined') {
|
|
54
|
-
throw new
|
|
50
|
+
throw new URLSyncError('Browser storage is unavailable.', undefined, {
|
|
51
|
+
code: 'STORAGE_UNAVAILABLE'
|
|
52
|
+
});
|
|
55
53
|
}
|
|
56
54
|
try {
|
|
57
55
|
window.localStorage.setItem(key, JSON.stringify(next));
|
|
@@ -61,9 +59,11 @@ export function createViewStore(storageKey) {
|
|
|
61
59
|
error instanceof DOMException &&
|
|
62
60
|
(error.name === 'QuotaExceededError' ||
|
|
63
61
|
error.name === 'NS_ERROR_DOM_QUOTA_REACHED');
|
|
64
|
-
throw
|
|
65
|
-
? 'Browser storage is full. Delete a saved view and try again.'
|
|
66
|
-
: 'Error writing to storage.',
|
|
62
|
+
throw isQuota
|
|
63
|
+
? new URLSyncError('Browser storage is full. Delete a saved view and try again.', toError(error), { code: 'STORAGE_FULL' })
|
|
64
|
+
: new URLSyncError('Error writing to storage.', toError(error), {
|
|
65
|
+
code: 'STORAGE_WRITE_FAILED'
|
|
66
|
+
});
|
|
67
67
|
}
|
|
68
68
|
};
|
|
69
69
|
return {
|
|
@@ -78,7 +78,9 @@ export function createViewStore(storageKey) {
|
|
|
78
78
|
saveView: (name, filterModel) => {
|
|
79
79
|
const trimmedName = name.trim();
|
|
80
80
|
if (!trimmedName) {
|
|
81
|
-
throw new
|
|
81
|
+
throw new URLSyncError('A view name is required.', undefined, {
|
|
82
|
+
code: 'VIEW_NAME_REQUIRED'
|
|
83
|
+
});
|
|
82
84
|
}
|
|
83
85
|
const current = read();
|
|
84
86
|
const existing = current.views.find(view => view.name === trimmedName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-storage.js","sourceRoot":"","sources":["../../src/core/view-storage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"view-storage.js","sourceRoot":"","sources":["../../src/core/view-storage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAevC,MAAM,cAAc,GAAG,IAAI,CAAA;AAE3B,MAAM,MAAM,GAAG,CAAC,UAAkB,EAAU,EAAE,CAC5C,0BAA0B,cAAc,IAAI,UAAU,EAAE,CAAA;AAsE1D,MAAM,KAAK,GAAG,GAAgB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AAEhE,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,CAAC,CAAC,EAAE,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;AACpC,CAAC;AAED,SAAS,QAAQ;IAEf,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,YAAY,IAAI,MAAM,EAAE,CAAC;QAC5D,OAAO,MAAM,CAAC,UAAU,EAAE,CAAA;IAC5B,CAAC;IAED,OAAO,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAA;AAChE,CAAC;AASD,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;IAE9B,MAAM,IAAI,GAAG,GAAgB,EAAE;QAC7B,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO,KAAK,EAAE,CAAA;QAEjD,IAAI,GAAG,GAAkB,IAAI,CAAA;QAE7B,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACxC,CAAC;QAAC,MAAM,CAAC;YAEP,OAAO,KAAK,EAAE,CAAA;QAChB,CAAC;QAED,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,EAAE,CAAA;QAExB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;YAE9D,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAO,KAAK,EAAE,CAAA;YAEnC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,CAAA;YACzC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;YAE3C,OAAO;gBACL,KAAK,EAAE,UAAU;gBACjB,QAAQ,EACN,QAAQ,KAAK,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC;oBAChE,CAAC,CAAC,QAAQ;oBACV,CAAC,CAAC,IAAI;aACX,CAAA;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,EAAE,CAAA;QAChB,CAAC;IACH,CAAC,CAAA;IAED,MAAM,KAAK,GAAG,CAAC,IAAiB,EAAQ,EAAE;QAIxC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,IAAI,YAAY,CAAC,iCAAiC,EAAE,SAAS,EAAE;gBACnE,IAAI,EAAE,qBAAqB;aAC5B,CAAC,CAAA;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GACX,OAAO,YAAY,KAAK,WAAW;gBACnC,KAAK,YAAY,YAAY;gBAC7B,CAAC,KAAK,CAAC,IAAI,KAAK,oBAAoB;oBAClC,KAAK,CAAC,IAAI,KAAK,4BAA4B,CAAC,CAAA;YAEhD,MAAM,OAAO;gBACX,CAAC,CAAC,IAAI,YAAY,CACd,6DAA6D,EAC7D,OAAO,CAAC,KAAK,CAAC,EACd,EAAE,IAAI,EAAE,cAAc,EAAE,CACzB;gBACH,CAAC,CAAC,IAAI,YAAY,CAAC,2BAA2B,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;oBAC5D,IAAI,EAAE,sBAAsB;iBAC7B,CAAC,CAAA;QACR,CAAC;IACH,CAAC,CAAA;IAED,OAAO;QACL,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK;QAE7B,eAAe,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ;QAEtC,mBAAmB,EAAE,CAAC,EAAiB,EAAE,EAAE;YACzC,MAAM,OAAO,GAAG,IAAI,EAAE,CAAA;YAMtB,IAAI,OAAO,CAAC,QAAQ,KAAK,EAAE;gBAAE,OAAM;YAEnC,KAAK,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA;QACrC,CAAC;QAED,QAAQ,EAAE,CAAC,IAAY,EAAE,WAAwB,EAAY,EAAE;YAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;YAE/B,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,YAAY,CAAC,0BAA0B,EAAE,SAAS,EAAE;oBAC5D,IAAI,EAAE,oBAAoB;iBAC3B,CAAC,CAAA;YACJ,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,EAAE,CAAA;YACtB,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CAAA;YAEtE,MAAM,IAAI,GAAa;gBAGrB,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,QAAQ,EAAE;gBAC9B,IAAI,EAAE,WAAW;gBACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBAKrB,WAAW,EAAE,eAAe,CAAC,WAAW,IAAI,EAAE,CAAC;aAChD,CAAA;YAED,KAAK,CAAC;gBAEJ,KAAK,EAAE,QAAQ;oBACb,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAC5B,SAAS,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAChD;oBACH,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;gBAC5B,QAAQ,EAAE,IAAI,CAAC,EAAE;aAClB,CAAC,CAAA;YAEF,OAAO,IAAI,CAAA;QACb,CAAC;QAED,UAAU,EAAE,CAAC,EAAU,EAAE,EAAE;YACzB,MAAM,OAAO,GAAG,IAAI,EAAE,CAAA;YACtB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;YAK1D,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;gBACrE,OAAM;YACR,CAAC;YAED,KAAK,CAAC;gBACJ,KAAK;gBACL,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ;aAC5D,CAAC,CAAA;QACJ,CAAC;KACF,CAAA;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
export { AGGridUrlSync, createUrlSync } from './core/ag-grid-url-sync.js';
|
|
2
|
+
export { createGridUrlSync, IDLE_SNAPSHOT } from './core/grid-url-sync.js';
|
|
3
|
+
export { individual, grouped } from './core/codecs.js';
|
|
2
4
|
export * from './core/types.js';
|
|
3
|
-
export { validateFilterValue
|
|
5
|
+
export { validateFilterValue } from './core/validation.js';
|
|
6
|
+
export { DEFAULT_CONFIG } from './core/options.js';
|
|
4
7
|
export { parseUrlFilters, parseFilterParam } from './core/url-parser.js';
|
|
5
8
|
export { serializeFilters, generateUrl } from './core/url-generator.js';
|
|
6
9
|
export { getFilterModel, applyFilterModel } from './core/grid-integration.js';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
export { AGGridUrlSync, createUrlSync } from './core/ag-grid-url-sync.js';
|
|
2
|
+
export { createGridUrlSync, IDLE_SNAPSHOT } from './core/grid-url-sync.js';
|
|
3
|
+
export { individual, grouped } from './core/codecs.js';
|
|
2
4
|
export * from './core/types.js';
|
|
3
|
-
export { validateFilterValue
|
|
5
|
+
export { validateFilterValue } from './core/validation.js';
|
|
6
|
+
export { DEFAULT_CONFIG } from './core/options.js';
|
|
4
7
|
export { parseUrlFilters, parseFilterParam } from './core/url-parser.js';
|
|
5
8
|
export { serializeFilters, generateUrl } from './core/url-generator.js';
|
|
6
9
|
export { getFilterModel, applyFilterModel } from './core/grid-integration.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAGzE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAE1E,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAEtD,cAAc,iBAAiB,CAAA;AAG/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAE1D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAGlD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAGxE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAGvE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAS7E,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,iCAAiC,CAAA;AAExC,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EACjB,MAAM,iCAAiC,CAAA"}
|
package/dist/react/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
+
export { useGridUrlSync } from './use-grid-url-sync.js';
|
|
1
2
|
export { useAGGridUrlSync } from './use-ag-grid-url-sync.js';
|
|
2
|
-
export type { UseAGGridUrlSyncOptions, UseAGGridUrlSyncReturn } from './types.js';
|
|
3
|
+
export type { UseGridUrlSyncOptions, UseGridUrlSyncResult, UseAGGridUrlSyncOptions, UseAGGridUrlSyncReturn } from './types.js';
|
|
3
4
|
export type { GridView } from '../core/view-storage.js';
|
|
4
|
-
export type { FilterState, ColumnFilter, FilterOperation, AGGridUrlSyncConfig, GridApi } from '../core/types.js';
|
|
5
|
+
export type { FilterState, ColumnFilter, FilterOperation, AGGridUrlSyncConfig, GridApi, HistoryMode } from '../core/types.js';
|
package/dist/react/index.js
CHANGED
package/dist/react/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAGvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { GridUrlSync, GridUrlSyncSnapshot, URLSyncError } from '../core/types.js';
|
|
2
|
+
import type { GridView } from '../core/view-storage.js';
|
|
3
|
+
export interface SyncHolder {
|
|
4
|
+
/** Puts a sync in the holder (or none). Does not destroy the old one. */
|
|
5
|
+
set(sync: GridUrlSync | null): void;
|
|
6
|
+
/** The current sync, or null */
|
|
7
|
+
get(): GridUrlSync | null;
|
|
8
|
+
/**
|
|
9
|
+
* The stored views to show while there is no sync (#223). The listeners
|
|
10
|
+
* hear of it only when no sync is in the holder and the views changed.
|
|
11
|
+
*/
|
|
12
|
+
setIdleViews(views: readonly GridView[]): void;
|
|
13
|
+
/**
|
|
14
|
+
* The apply issues of an earlier sync on the same grid. The snapshot of
|
|
15
|
+
* the current sync shows them before its own issues.
|
|
16
|
+
*/
|
|
17
|
+
setCarriedIssues(issues: readonly URLSyncError[]): void;
|
|
18
|
+
subscribe(listener: () => void): () => void;
|
|
19
|
+
/** The current sync's snapshot, or the idle snapshot */
|
|
20
|
+
getSnapshot(): GridUrlSyncSnapshot;
|
|
21
|
+
}
|
|
22
|
+
export declare function createSyncHolder(): SyncHolder;
|