@plumile/backoffice-core 0.1.59

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.
Files changed (63) hide show
  1. package/LICENSE +21 -0
  2. package/lib/esm/base64.d.ts +3 -0
  3. package/lib/esm/base64.d.ts.map +1 -0
  4. package/lib/esm/base64.js +33 -0
  5. package/lib/esm/builders.d.ts +14 -0
  6. package/lib/esm/builders.d.ts.map +1 -0
  7. package/lib/esm/builders.js +34 -0
  8. package/lib/esm/constants.d.ts +14 -0
  9. package/lib/esm/constants.d.ts.map +1 -0
  10. package/lib/esm/constants.js +20 -0
  11. package/lib/esm/detail/pages.d.ts +29 -0
  12. package/lib/esm/detail/pages.d.ts.map +1 -0
  13. package/lib/esm/detail/pages.js +85 -0
  14. package/lib/esm/detailParams.d.ts +3 -0
  15. package/lib/esm/detailParams.d.ts.map +1 -0
  16. package/lib/esm/detailParams.js +15 -0
  17. package/lib/esm/filters/schema.d.ts +9 -0
  18. package/lib/esm/filters/schema.d.ts.map +1 -0
  19. package/lib/esm/filters/schema.js +101 -0
  20. package/lib/esm/filters/where.d.ts +4 -0
  21. package/lib/esm/filters/where.d.ts.map +1 -0
  22. package/lib/esm/filters/where.js +83 -0
  23. package/lib/esm/resolve.d.ts +13 -0
  24. package/lib/esm/resolve.d.ts.map +1 -0
  25. package/lib/esm/resolve.js +163 -0
  26. package/lib/esm/state/buildListHref.d.ts +14 -0
  27. package/lib/esm/state/buildListHref.d.ts.map +1 -0
  28. package/lib/esm/state/buildListHref.js +86 -0
  29. package/lib/esm/state/stableKey.d.ts +8 -0
  30. package/lib/esm/state/stableKey.d.ts.map +1 -0
  31. package/lib/esm/state/stableKey.js +17 -0
  32. package/lib/esm/state/urlState.d.ts +16 -0
  33. package/lib/esm/state/urlState.d.ts.map +1 -0
  34. package/lib/esm/state/urlState.js +48 -0
  35. package/lib/esm/types.d.ts +882 -0
  36. package/lib/esm/types.d.ts.map +1 -0
  37. package/lib/esm/types.js +8 -0
  38. package/lib/tsconfig.esm.tsbuildinfo +1 -0
  39. package/lib/types/base64.d.ts +3 -0
  40. package/lib/types/base64.d.ts.map +1 -0
  41. package/lib/types/builders.d.ts +14 -0
  42. package/lib/types/builders.d.ts.map +1 -0
  43. package/lib/types/constants.d.ts +14 -0
  44. package/lib/types/constants.d.ts.map +1 -0
  45. package/lib/types/detail/pages.d.ts +29 -0
  46. package/lib/types/detail/pages.d.ts.map +1 -0
  47. package/lib/types/detailParams.d.ts +3 -0
  48. package/lib/types/detailParams.d.ts.map +1 -0
  49. package/lib/types/filters/schema.d.ts +9 -0
  50. package/lib/types/filters/schema.d.ts.map +1 -0
  51. package/lib/types/filters/where.d.ts +4 -0
  52. package/lib/types/filters/where.d.ts.map +1 -0
  53. package/lib/types/resolve.d.ts +13 -0
  54. package/lib/types/resolve.d.ts.map +1 -0
  55. package/lib/types/state/buildListHref.d.ts +14 -0
  56. package/lib/types/state/buildListHref.d.ts.map +1 -0
  57. package/lib/types/state/stableKey.d.ts +8 -0
  58. package/lib/types/state/stableKey.d.ts.map +1 -0
  59. package/lib/types/state/urlState.d.ts +16 -0
  60. package/lib/types/state/urlState.d.ts.map +1 -0
  61. package/lib/types/types.d.ts +882 -0
  62. package/lib/types/types.d.ts.map +1 -0
  63. package/package.json +112 -0
@@ -0,0 +1,163 @@
1
+ import { createBackofficeFilterSchema } from './filters/schema.js';
2
+ import { createBackofficeListUrlCodec } from './state/urlState.js';
3
+ const DETAIL_LAYOUT_FACET_KIND = 'detail-layout';
4
+ const DETAIL_PAGE_FACET_KIND = 'detail-page';
5
+ const attachResolvedRoutes = (config, manifest) => {
6
+ return {
7
+ ...config,
8
+ routes: manifest.routes,
9
+ };
10
+ };
11
+ function normalizeBasePath(basePath) {
12
+ if (basePath.trim() === '' || basePath === '/') {
13
+ return '';
14
+ }
15
+ if (basePath.endsWith('/')) {
16
+ return basePath.slice(0, -1);
17
+ }
18
+ return basePath;
19
+ }
20
+ const joinPath = (...parts) => {
21
+ const normalized = parts
22
+ .map((part) => {
23
+ return part.trim().replace(/^\/+|\/+$/g, '');
24
+ })
25
+ .filter((part) => {
26
+ return part !== '';
27
+ });
28
+ return `/${normalized.join('/')}`;
29
+ };
30
+ const normalizeRoute = (value) => {
31
+ const trimmed = value.trim();
32
+ if (trimmed === '' || trimmed === '/') {
33
+ return '/';
34
+ }
35
+ if (!trimmed.startsWith('/')) {
36
+ return `/${trimmed}`;
37
+ }
38
+ if (trimmed.endsWith('/')) {
39
+ return trimmed.slice(0, -1);
40
+ }
41
+ return trimmed;
42
+ };
43
+ export const resolveBackofficeToolRoute = (basePath, toolId, routeOverride) => {
44
+ if (routeOverride != null && routeOverride.trim() !== '') {
45
+ return normalizeRoute(routeOverride);
46
+ }
47
+ const normalized = normalizeBasePath(basePath);
48
+ if (normalized === '') {
49
+ return `/tools/${toolId}`;
50
+ }
51
+ return `${normalized}/tools/${toolId}`;
52
+ };
53
+ function buildDefaultListDefaults(list) {
54
+ if (list.defaultState != null) {
55
+ return list.defaultState;
56
+ }
57
+ const firstSort = list.sorts[0]?.id ?? null;
58
+ return {
59
+ where: null,
60
+ sort: firstSort,
61
+ };
62
+ }
63
+ export function extractBackofficeToolFacetConfig(config) {
64
+ return {
65
+ kind: 'tool',
66
+ id: config.id,
67
+ label: config.label ??
68
+ (() => {
69
+ return config.id;
70
+ }),
71
+ tool: config,
72
+ };
73
+ }
74
+ export function resolveBackofficeListFacetConfig(config, manifest, _options) {
75
+ const routes = {
76
+ ...manifest.routes,
77
+ };
78
+ const listDefaults = buildDefaultListDefaults(config.list);
79
+ const listUrlCodec = createBackofficeListUrlCodec({
80
+ defaults: listDefaults,
81
+ filterSchema: createBackofficeFilterSchema(config.list.filters),
82
+ sortIds: config.list.sorts.map((sort) => {
83
+ return sort.id;
84
+ }),
85
+ });
86
+ return {
87
+ ...config,
88
+ routes,
89
+ listDefaults,
90
+ listUrlCodec,
91
+ };
92
+ }
93
+ export function resolveBackofficePickerFacetConfig(config, manifest, _options) {
94
+ return attachResolvedRoutes(config, manifest);
95
+ }
96
+ export function resolveBackofficeDetailLayoutFacetConfig(config, manifest, _options) {
97
+ return attachResolvedRoutes(config, manifest);
98
+ }
99
+ export function resolveBackofficeDetailPageFacetConfig(config, manifest, _options) {
100
+ return attachResolvedRoutes(config, manifest);
101
+ }
102
+ export function resolveBackofficeToolFacetConfig(config, manifest, options) {
103
+ const route = resolveBackofficeToolRoute(options.basePath, config.id, manifest.routes.list);
104
+ return {
105
+ ...config,
106
+ route,
107
+ routes: {
108
+ list: route,
109
+ detail: (id) => {
110
+ return joinPath(route, id);
111
+ },
112
+ detailPage: (id, pageId) => {
113
+ return joinPath(route, id, pageId);
114
+ },
115
+ },
116
+ };
117
+ }
118
+ export function resolveBackofficeLoadedFacetModule(manifest, module, options) {
119
+ if (manifest.id !== module.id) {
120
+ throw new Error(`Backoffice entity manifest/module id mismatch: ${manifest.id} !== ${module.id}`);
121
+ }
122
+ switch (module.kind) {
123
+ case 'list':
124
+ return {
125
+ kind: 'list',
126
+ id: module.id,
127
+ manifest,
128
+ config: resolveBackofficeListFacetConfig(module.config, manifest, options),
129
+ };
130
+ case 'picker':
131
+ return {
132
+ kind: 'picker',
133
+ id: module.id,
134
+ manifest,
135
+ config: resolveBackofficePickerFacetConfig(module.config, manifest, options),
136
+ };
137
+ case DETAIL_LAYOUT_FACET_KIND:
138
+ return {
139
+ kind: DETAIL_LAYOUT_FACET_KIND,
140
+ id: module.id,
141
+ manifest,
142
+ config: resolveBackofficeDetailLayoutFacetConfig(module.config, manifest, options),
143
+ };
144
+ case DETAIL_PAGE_FACET_KIND:
145
+ return {
146
+ kind: DETAIL_PAGE_FACET_KIND,
147
+ id: module.id,
148
+ pageId: module.pageId,
149
+ manifest,
150
+ config: resolveBackofficeDetailPageFacetConfig(module.config, manifest, options),
151
+ };
152
+ case 'tool':
153
+ return {
154
+ kind: 'tool',
155
+ id: module.id,
156
+ manifest,
157
+ config: resolveBackofficeToolFacetConfig(module.config, manifest, options),
158
+ };
159
+ default:
160
+ throw new Error(`Unsupported backoffice facet kind: ${String(module)}`);
161
+ }
162
+ }
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXNvbHZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWtCQSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQU1uRSxNQUFNLHdCQUF3QixHQUFHLGVBQWUsQ0FBQztBQUNqRCxNQUFNLHNCQUFzQixHQUFHLGFBQWEsQ0FBQztBQUU3QyxNQUFNLG9CQUFvQixHQUFHLENBQzNCLE1BQWUsRUFDZixRQUFzQyxFQUN3QixFQUFFO0lBQ2hFLE9BQU87UUFDTCxHQUFHLE1BQU07UUFDVCxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07S0FDeEIsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUtGLFNBQVMsaUJBQWlCLENBQUMsUUFBZ0I7SUFDekMsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLFFBQVEsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUMvQyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMzQixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsS0FBZSxFQUFVLEVBQUU7SUFDOUMsTUFBTSxVQUFVLEdBQUcsS0FBSztTQUNyQixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDL0MsQ0FBQyxDQUFDO1NBQ0QsTUFBTSxDQUFDLENBQUMsSUFB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TUFBTTtnQkFDckIsUUFBUTtnQkFDUixNQUFNLEVBQUUsc0NBQXNDLENBQzVDLE1BQU0sQ0FBQyxNQUFNLEVBQ2IsUUFBUSxFQUNSLE9BQU8sQ0FDUjthQUNGLENBQUM7UUFDSixLQUFLLE1BQU07WUFDVCxPQUFPO2dCQUNMLElBQUksRUFBRSxNQUFNO2dCQUNaLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRTtnQkFDYixRQUFRO2dCQUNSLE1BQU0sRUFBRSxnQ0FBZ0MsQ0FDdEMsTUFBTSxDQUFDLE1BQU0sRUFDYixRQUFRLEVBQ1IsT0FBTyxDQUNSO2FBQ0YsQ0FBQztRQUNKO1lBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1RSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgQmFja29mZmljZUVudGl0eU1hbmlmZXN0SXRlbSxcbiAgQmFja29mZmljZURldGFpbExheW91dEZhY2V0Q29uZmlnLFxuICBCYWNrb2ZmaWNlRGV0YWlsUGFnZUZhY2V0Q29uZmlnLFxuICBCYWNrb2ZmaWNlRW50aXR5TGlzdENvbmZpZyxcbiAgQmFja29mZmljZUxpc3REZWZhdWx0cyxcbiAgQmFja29mZmljZUxpc3RGYWNldENvbmZpZyxcbiAgQmFja29mZmljZUxvYWRlZEVudGl0eUZhY2V0TW9kdWxlLFxuICBCYWNrb2ZmaWNlUGlja2VyRmFjZXRDb25maWcsXG4gIEJhY2tvZmZpY2VUb29sRW50aXR5Q29uZmlnLFxuICBCYWNrb2ZmaWNlVG9vbEZhY2V0Q29uZmlnLFxuICBCYWNrb2ZmaWNlUmVzb2x2ZWRUb29sRmFjZXRDb25maWcsXG4gIEJhY2tvZmZpY2VSZXNvbHZlZERldGFpbExheW91dEZhY2V0Q29uZmlnLFxuICBCYWNrb2ZmaWNlUmVzb2x2ZWREZXRhaWxQYWdlRmFjZXRDb25maWcsXG4gIEJhY2tvZmZpY2VSZXNvbHZlZEVudGl0eUZhY2V0TW9kdWxlLFxuICBCYWNrb2ZmaWNlUmVzb2x2ZWRMaXN0RmFjZXRDb25maWcsXG4gIEJhY2tvZmZpY2VSZXNvbHZlZFBpY2tlckZhY2V0Q29uZmlnLFxufSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGNyZWF0ZUJhY2tvZmZpY2VGaWx0ZXJTY2hlbWEgfSBmcm9tICcuL2ZpbHRlcnMvc2NoZW1hLmpzJztcbmltcG9ydCB7IGNyZWF0ZUJhY2tvZmZpY2VMaXN0VXJsQ29kZWMgfSBmcm9tICcuL3N0YXRlL3VybFN0YXRlLmpzJztcblxuZXhwb3J0IHR5cGUgUmVzb2x2ZUJhY2tvZmZpY2VFbnRpdHlPcHRpb25zID0ge1xuICBiYXNlUGF0aDogc3RyaW5nO1xufTtcblxuY29uc3QgREVUQUlMX0xBWU9VVF9GQUNFVF9LSU5EID0gJ2RldGFpbC1sYXlvdXQnO1xuY29uc3QgREVUQUlMX1BBR0VfRkFDRVRfS0lORCA9ICdkZXRhaWwtcGFnZSc7XG5cbmNvbnN0IGF0dGFjaFJlc29sdmVkUm91dGVzID0gPFRDb25maWcgZXh0ZW5kcyB7IGlkOiBzdHJpbmcgfT4oXG4gIGNvbmZpZzogVENvbmZpZyxcbiAgbWFuaWZlc3Q6IEJhY2tvZmZpY2VFbnRpdHlNYW5pZmVzdEl0ZW0sXG4pOiBUQ29uZmlnICYgeyByb3V0ZXM6IEJhY2tvZmZpY2VFbnRpdHlNYW5pZmVzdEl0ZW1bJ3JvdXRlcyddIH0gPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLmNvbmZpZyxcbiAgICByb3V0ZXM6IG1hbmlmZXN0LnJvdXRlcyxcbiAgfTtcbn07XG5cbi8qKlxuICpcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQmFzZVBhdGgoYmFzZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChiYXNlUGF0aC50cmltKCkgPT09ICcnIHx8IGJhc2VQYXRoID09PSAnLycpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgaWYgKGJhc2VQYXRoLmVuZHNXaXRoKCcvJykpIHtcbiAgICByZXR1cm4gYmFzZVBhdGguc2xpY2UoMCwgLTEpO1xuICB9XG4gIHJldHVybiBiYXNlUGF0aDtcbn1cblxuY29uc3Qgam9pblBhdGggPSAoLi4ucGFydHM6IHN0cmluZ1tdKTogc3RyaW5nID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHBhcnRzXG4gICAgLm1hcCgocGFydCkgPT4ge1xuICAgICAgcmV0dXJuIHBhcnQudHJpbSgpLnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKTtcbiAgICB9KVxuICAgIC5maWx0ZXIoKHBhcnQpID0+IHtcbiAgICAgIHJldHVybiBwYXJ0ICE9PSAnJztcbiAgICB9KTtcbiAgcmV0dXJuIGAvJHtub3JtYWxpemVkLmpvaW4oJy8nKX1gO1xufTtcblxuY29uc3Qgbm9ybWFsaXplUm91dGUgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7XG4gIGlmICh0cmltbWVkID09PSAnJyB8fCB0cmltbWVkID09PSAnLycpIHtcbiAgICByZXR1cm4gJy8nO1xuICB9XG4gIGlmICghdHJpbW1lZC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICByZXR1cm4gYC8ke3RyaW1tZWR9YDtcbiAgfVxuICBpZiAodHJpbW1lZC5lbmRzV2l0aCgnLycpKSB7XG4gICAgcmV0dXJuIHRyaW1tZWQuc2xpY2UoMCwgLTEpO1xuICB9XG4gIHJldHVybiB0cmltbWVkO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgY2Fub25pY2FsIHRvb2wgcm91dGUuXG4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlQmFja29mZmljZVRvb2xSb3V0ZSA9IChcbiAgYmFzZVBhdGg6IHN0cmluZyxcbiAgdG9vbElkOiBzdHJpbmcsXG4gIHJvdXRlT3ZlcnJpZGU/OiBzdHJpbmcsXG4pOiBzdHJpbmcgPT4ge1xuICBpZiAocm91dGVPdmVycmlkZSAhPSBudWxsICYmIHJvdXRlT3ZlcnJpZGUudHJpbSgpICE9PSAnJykge1xuICAgIHJldHVybiBub3JtYWxpemVSb3V0ZShyb3V0ZU92ZXJyaWRlKTtcbiAgfVxuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplQmFzZVBhdGgoYmFzZVBhdGgpO1xuICBpZiAobm9ybWFsaXplZCA9PT0gJycpIHtcbiAgICByZXR1cm4gYC90b29scy8ke3Rvb2xJZH1gO1xuICB9XG4gIHJldHVybiBgJHtub3JtYWxpemVkfS90b29scy8ke3Rvb2xJZH1gO1xufTtcblxuLyoqXG4gKlxuICovXG5mdW5jdGlvbiBidWlsZERlZmF1bHRMaXN0RGVmYXVsdHM8XG4gIFdoZXJlLFxuICBTb3J0IGV4dGVuZHMgc3RyaW5nLFxuICBSb3dSZWYsXG4gIFJvd1ZpZXcsXG4gIExpc3RRdWVyeURhdGEsXG4gIExpc3RGcmFnbWVudERhdGEsXG4gIExpc3RRdWVyeVZhcmlhYmxlcyxcbj4oXG4gIGxpc3Q6IEJhY2tvZmZpY2VFbnRpdHlMaXN0Q29uZmlnPFxuICAgIFdoZXJlLFxuICAgIFNvcnQsXG4gICAgUm93UmVmLFxuICAgIFJvd1ZpZXcsXG4gICAgTGlzdFF1ZXJ5RGF0YSxcbiAgICBMaXN0RnJhZ21lbnREYXRhLFxuICAgIExpc3RRdWVyeVZhcmlhYmxlc1xuICA+LFxuKTogQmFja29mZmljZUxpc3REZWZhdWx0czxXaGVyZSwgU29ydD4ge1xuICBpZiAobGlzdC5kZWZhdWx0U3RhdGUgIT0gbnVsbCkge1xuICAgIHJldHVybiBsaXN0LmRlZmF1bHRTdGF0ZTtcbiAgfVxuICBjb25zdCBmaXJzdFNvcnQgPSBsaXN0LnNvcnRzWzBdPy5pZCA/PyBudWxsO1xuICByZXR1cm4ge1xuICAgIHdoZXJlOiBudWxsLFxuICAgIHNvcnQ6IGZpcnN0U29ydCxcbiAgfTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEJhY2tvZmZpY2VUb29sRmFjZXRDb25maWcoXG4gIGNvbmZpZzogQmFja29mZmljZVRvb2xFbnRpdHlDb25maWcsXG4pOiBCYWNrb2ZmaWNlVG9vbEZhY2V0Q29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiAndG9vbCcsXG4gICAgaWQ6IGNvbmZpZy5pZCxcbiAgICBsYWJlbDpcbiAgICAgIGNvbmZpZy5sYWJlbCA/P1xuICAgICAgKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbmZpZy5pZDtcbiAgICAgIH0pLFxuICAgIHRvb2w6IGNvbmZpZyxcbiAgfTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUJhY2tvZmZpY2VMaXN0RmFjZXRDb25maWc8XG4gIFdoZXJlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIFNvcnQgZXh0ZW5kcyBzdHJpbmcsXG4gIFJvd1JlZixcbiAgUm93VmlldyxcbiAgTGlzdFF1ZXJ5RGF0YSxcbiAgTGlzdEZyYWdtZW50RGF0YSxcbiAgTGlzdFF1ZXJ5VmFyaWFibGVzLFxuPihcbiAgY29uZmlnOiBCYWNrb2ZmaWNlTGlzdEZhY2V0Q29uZmlnPFxuICAgIFdoZXJlLFxuICAgIFNvcnQsXG4gICAgUm93UmVmLFxuICAgIFJvd1ZpZXcsXG4gICAgTGlzdFF1ZXJ5RGF0YSxcbiAgICBMaXN0RnJhZ21lbnREYXRhLFxuICAgIExpc3RRdWVyeVZhcmlhYmxlc1xuICA+LFxuICBtYW5pZmVzdDogQmFja29mZmljZUVudGl0eU1hbmlmZXN0SXRlbSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBfb3B0aW9uczogUmVzb2x2ZUJhY2tvZmZpY2VFbnRpdHlPcHRpb25zLFxuKTogQmFja29mZmljZVJlc29sdmVkTGlzdEZhY2V0Q29uZmlnPFxuICBXaGVyZSxcbiAgU29ydCxcbiAgUm93UmVmLFxuICBSb3dWaWV3LFxuICBMaXN0UXVlcnlEYXRhLFxuICBMaXN0RnJhZ21lbnREYXRhLFxuICBMaXN0UXVlcnlWYXJpYWJsZXNcbj4ge1xuICBjb25zdCByb3V0ZXMgPSB7XG4gICAgLi4ubWFuaWZlc3Qucm91dGVzLFxuICB9O1xuXG4gIGNvbnN0IGxpc3REZWZhdWx0cyA9IGJ1aWxkRGVmYXVsdExpc3REZWZhdWx0cyhjb25maWcubGlzdCk7XG4gIGNvbnN0IGxpc3RVcmxDb2RlYyA9IGNyZWF0ZUJhY2tvZmZpY2VMaXN0VXJsQ29kZWMoe1xuICAgIGRlZmF1bHRzOiBsaXN0RGVmYXVsdHMsXG4gICAgZmlsdGVyU2NoZW1hOiBjcmVhdGVCYWNrb2ZmaWNlRmlsdGVyU2NoZW1hKGNvbmZpZy5saXN0LmZpbHRlcnMpLFxuICAgIHNvcnRJZHM6IGNvbmZpZy5saXN0LnNvcnRzLm1hcCgoc29ydCkgPT4ge1xuICAgICAgcmV0dXJuIHNvcnQuaWQ7XG4gICAgfSksXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4uY29uZmlnLFxuICAgIHJvdXRlcyxcbiAgICBsaXN0RGVmYXVsdHMsXG4gICAgbGlzdFVybENvZGVjLFxuICB9O1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQmFja29mZmljZVBpY2tlckZhY2V0Q29uZmlnPFxuICBSb3dSZWYsXG4gIFJvd1ZpZXcsXG4gIFBpY2tlclF1ZXJ5RGF0YSxcbiAgUGlja2VyRnJhZ21lbnREYXRhLFxuICBQaWNrZXJRdWVyeVZhcmlhYmxlcyxcbj4oXG4gIGNvbmZpZzogQmFja29mZmljZVBpY2tlckZhY2V0Q29uZmlnPFxuICAgIFJvd1JlZixcbiAgICBSb3dWaWV3LFxuICAgIFBpY2tlclF1ZXJ5RGF0YSxcbiAgICBQaWNrZXJGcmFnbWVudERhdGEsXG4gICAgUGlja2VyUXVlcnlWYXJpYWJsZXNcbiAgPixcbiAgbWFuaWZlc3Q6IEJhY2tvZmZpY2VFbnRpdHlNYW5pZmVzdEl0ZW0sXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgX29wdGlvbnM6IFJlc29sdmVCYWNrb2ZmaWNlRW50aXR5T3B0aW9ucyxcbik6IEJhY2tvZmZpY2VSZXNvbHZlZFBpY2tlckZhY2V0Q29uZmlnPFxuICBSb3dSZWYsXG4gIFJvd1ZpZXcsXG4gIFBpY2tlclF1ZXJ5RGF0YSxcbiAgUGlja2VyRnJhZ21lbnREYXRhLFxuICBQaWNrZXJRdWVyeVZhcmlhYmxlc1xuPiB7XG4gIHJldHVybiBhdHRhY2hSZXNvbHZlZFJvdXRlcyhjb25maWcsIG1hbmlmZXN0KTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUJhY2tvZmZpY2VEZXRhaWxMYXlvdXRGYWNldENvbmZpZzxcbiAgTGF5b3V0UmVmLFxuICBMYXlvdXRWaWV3LFxuICBMYXlvdXRRdWVyeURhdGEsXG4gIExheW91dEZyYWdtZW50UmVmLFxuICBMYXlvdXRRdWVyeVZhcmlhYmxlcyxcbj4oXG4gIGNvbmZpZzogQmFja29mZmljZURldGFpbExheW91dEZhY2V0Q29uZmlnPFxuICAgIExheW91dFJlZixcbiAgICBMYXlvdXRWaWV3LFxuICAgIExheW91dFF1ZXJ5RGF0YSxcbiAgICBMYXlvdXRGcmFnbWVudFJlZixcbiAgICBMYXlvdXRRdWVyeVZhcmlhYmxlc1xuICA+LFxuICBtYW5pZmVzdDogQmFja29mZmljZUVudGl0eU1hbmlmZXN0SXRlbSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBfb3B0aW9uczogUmVzb2x2ZUJhY2tvZmZpY2VFbnRpdHlPcHRpb25zLFxuKTogQmFja29mZmljZVJlc29sdmVkRGV0YWlsTGF5b3V0RmFjZXRDb25maWc8XG4gIExheW91dFJlZixcbiAgTGF5b3V0VmlldyxcbiAgTGF5b3V0UXVlcnlEYXRhLFxuICBMYXlvdXRGcmFnbWVudFJlZixcbiAgTGF5b3V0UXVlcnlWYXJpYWJsZXNcbj4ge1xuICByZXR1cm4gYXR0YWNoUmVzb2x2ZWRSb3V0ZXMoY29uZmlnLCBtYW5pZmVzdCk7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVCYWNrb2ZmaWNlRGV0YWlsUGFnZUZhY2V0Q29uZmlnPFxuICBMYXlvdXRWaWV3LFxuICBEZXRhaWxSZWYsXG4gIERldGFpbFZpZXcsXG4gIERldGFpbFF1ZXJ5RGF0YSxcbiAgRGV0YWlsRnJhZ21lbnRSZWYsXG4gIERldGFpbFF1ZXJ5VmFyaWFibGVzLFxuPihcbiAgY29uZmlnOiBCYWNrb2ZmaWNlRGV0YWlsUGFnZUZhY2V0Q29uZmlnPFxuICAgIExheW91dFZpZXcsXG4gICAgRGV0YWlsUmVmLFxuICAgIERldGFpbFZpZXcsXG4gICAgRGV0YWlsUXVlcnlEYXRhLFxuICAgIERldGFpbEZyYWdtZW50UmVmLFxuICAgIERldGFpbFF1ZXJ5VmFyaWFibGVzXG4gID4sXG4gIG1hbmlmZXN0OiBCYWNrb2ZmaWNlRW50aXR5TWFuaWZlc3RJdGVtLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIF9vcHRpb25zOiBSZXNvbHZlQmFja29mZmljZUVudGl0eU9wdGlvbnMsXG4pOiBCYWNrb2ZmaWNlUmVzb2x2ZWREZXRhaWxQYWdlRmFjZXRDb25maWc8XG4gIExheW91dFZpZXcsXG4gIERldGFpbFJlZixcbiAgRGV0YWlsVmlldyxcbiAgRGV0YWlsUXVlcnlEYXRhLFxuICBEZXRhaWxGcmFnbWVudFJlZixcbiAgRGV0YWlsUXVlcnlWYXJpYWJsZXNcbj4ge1xuICByZXR1cm4gYXR0YWNoUmVzb2x2ZWRSb3V0ZXMoY29uZmlnLCBtYW5pZmVzdCk7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVCYWNrb2ZmaWNlVG9vbEZhY2V0Q29uZmlnKFxuICBjb25maWc6IEJhY2tvZmZpY2VUb29sRmFjZXRDb25maWcsXG4gIG1hbmlmZXN0OiBCYWNrb2ZmaWNlRW50aXR5TWFuaWZlc3RJdGVtLFxuICBvcHRpb25zOiBSZXNvbHZlQmFja29mZmljZUVudGl0eU9wdGlvbnMsXG4pOiBCYWNrb2ZmaWNlUmVzb2x2ZWRUb29sRmFjZXRDb25maWcge1xuICBjb25zdCByb3V0ZSA9IHJlc29sdmVCYWNrb2ZmaWNlVG9vbFJvdXRlKFxuICAgIG9wdGlvbnMuYmFzZVBhdGgsXG4gICAgY29uZmlnLmlkLFxuICAgIG1hbmlmZXN0LnJvdXRlcy5saXN0LFxuICApO1xuICByZXR1cm4ge1xuICAgIC4uLmNvbmZpZyxcbiAgICByb3V0ZSxcbiAgICByb3V0ZXM6IHtcbiAgICAgIGxpc3Q6IHJvdXRlLFxuICAgICAgZGV0YWlsOiAoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gam9pblBhdGgocm91dGUsIGlkKTtcbiAgICAgIH0sXG4gICAgICBkZXRhaWxQYWdlOiAoaWQ6IHN0cmluZywgcGFnZUlkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIGpvaW5QYXRoKHJvdXRlLCBpZCwgcGFnZUlkKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUJhY2tvZmZpY2VMb2FkZWRGYWNldE1vZHVsZShcbiAgbWFuaWZlc3Q6IEJhY2tvZmZpY2VFbnRpdHlNYW5pZmVzdEl0ZW0sXG4gIG1vZHVsZTogQmFja29mZmljZUxvYWRlZEVudGl0eUZhY2V0TW9kdWxlLFxuICBvcHRpb25zOiBSZXNvbHZlQmFja29mZmljZUVudGl0eU9wdGlvbnMsXG4pOiBCYWNrb2ZmaWNlUmVzb2x2ZWRFbnRpdHlGYWNldE1vZHVsZSB7XG4gIGlmIChtYW5pZmVzdC5pZCAhPT0gbW9kdWxlLmlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEJhY2tvZmZpY2UgZW50aXR5IG1hbmlmZXN0L21vZHVsZSBpZCBtaXNtYXRjaDogJHttYW5pZmVzdC5pZH0gIT09ICR7bW9kdWxlLmlkfWAsXG4gICAgKTtcbiAgfVxuXG4gIHN3aXRjaCAobW9kdWxlLmtpbmQpIHtcbiAgICBjYXNlICdsaXN0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6ICdsaXN0JyxcbiAgICAgICAgaWQ6IG1vZHVsZS5pZCxcbiAgICAgICAgbWFuaWZlc3QsXG4gICAgICAgIGNvbmZpZzogcmVzb2x2ZUJhY2tvZmZpY2VMaXN0RmFjZXRDb25maWcoXG4gICAgICAgICAgbW9kdWxlLmNvbmZpZyxcbiAgICAgICAgICBtYW5pZmVzdCxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICApLFxuICAgICAgfTtcbiAgICBjYXNlICdwaWNrZXInOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2luZDogJ3BpY2tlcicsXG4gICAgICAgIGlkOiBtb2R1bGUuaWQsXG4gICAgICAgIG1hbmlmZXN0LFxuICAgICAgICBjb25maWc6IHJlc29sdmVCYWNrb2ZmaWNlUGlja2VyRmFjZXRDb25maWcoXG4gICAgICAgICAgbW9kdWxlLmNvbmZpZyxcbiAgICAgICAgICBtYW5pZmVzdCxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICApLFxuICAgICAgfTtcbiAgICBjYXNlIERFVEFJTF9MQVlPVVRfRkFDRVRfS0lORDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6IERFVEFJTF9MQVlPVVRfRkFDRVRfS0lORCxcbiAgICAgICAgaWQ6IG1vZHVsZS5pZCxcbiAgICAgICAgbWFuaWZlc3QsXG4gICAgICAgIGNvbmZpZzogcmVzb2x2ZUJhY2tvZmZpY2VEZXRhaWxMYXlvdXRGYWNldENvbmZpZyhcbiAgICAgICAgICBtb2R1bGUuY29uZmlnLFxuICAgICAgICAgIG1hbmlmZXN0LFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIGNhc2UgREVUQUlMX1BBR0VfRkFDRVRfS0lORDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6IERFVEFJTF9QQUdFX0ZBQ0VUX0tJTkQsXG4gICAgICAgIGlkOiBtb2R1bGUuaWQsXG4gICAgICAgIHBhZ2VJZDogbW9kdWxlLnBhZ2VJZCxcbiAgICAgICAgbWFuaWZlc3QsXG4gICAgICAgIGNvbmZpZzogcmVzb2x2ZUJhY2tvZmZpY2VEZXRhaWxQYWdlRmFjZXRDb25maWcoXG4gICAgICAgICAgbW9kdWxlLmNvbmZpZyxcbiAgICAgICAgICBtYW5pZmVzdCxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICApLFxuICAgICAgfTtcbiAgICBjYXNlICd0b29sJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6ICd0b29sJyxcbiAgICAgICAgaWQ6IG1vZHVsZS5pZCxcbiAgICAgICAgbWFuaWZlc3QsXG4gICAgICAgIGNvbmZpZzogcmVzb2x2ZUJhY2tvZmZpY2VUb29sRmFjZXRDb25maWcoXG4gICAgICAgICAgbW9kdWxlLmNvbmZpZyxcbiAgICAgICAgICBtYW5pZmVzdCxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICApLFxuICAgICAgfTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBiYWNrb2ZmaWNlIGZhY2V0IGtpbmQ6ICR7U3RyaW5nKG1vZHVsZSl9YCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,14 @@
1
+ import type { BackofficeListState, BackofficeResolvedListFacetConfigBase } from '../types.js';
2
+ export type BackofficeListStateOverrides<Where, Sort extends string> = Partial<BackofficeListState<Where, Sort>>;
3
+ export type BackofficeFallbackListFilter = {
4
+ id: string;
5
+ value: unknown;
6
+ };
7
+ export declare function buildBackofficeListSearch<Where, Sort extends string>(config: BackofficeResolvedListFacetConfigBase, overrides: BackofficeListStateOverrides<Where, Sort>): string;
8
+ export declare function buildBackofficeListLink<Where, Sort extends string>(config: BackofficeResolvedListFacetConfigBase, overrides: BackofficeListStateOverrides<Where, Sort>): {
9
+ pathname: string;
10
+ search: string;
11
+ };
12
+ export declare function buildBackofficeListHref<Where, Sort extends string>(config: BackofficeResolvedListFacetConfigBase, overrides: BackofficeListStateOverrides<Where, Sort>): string;
13
+ export declare function buildBackofficeFallbackListHref(pathname: string, where: Record<string, unknown> | null | undefined, filters?: readonly BackofficeFallbackListFilter[]): string;
14
+ //# sourceMappingURL=buildListHref.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildListHref.d.ts","sourceRoot":"","sources":["../../../src/state/buildListHref.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,mBAAmB,EACnB,qCAAqC,EACtC,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,4BAA4B,CAAC,KAAK,EAAE,IAAI,SAAS,MAAM,IAAI,OAAO,CAC5E,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CACjC,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAKF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,IAAI,SAAS,MAAM,EAClE,MAAM,EAAE,qCAAqC,EAC7C,SAAS,EAAE,4BAA4B,CAAC,KAAK,EAAE,IAAI,CAAC,GACnD,MAAM,CAWR;AAKD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,IAAI,SAAS,MAAM,EAChE,MAAM,EAAE,qCAAqC,EAC7C,SAAS,EAAE,4BAA4B,CAAC,KAAK,EAAE,IAAI,CAAC,GACnD;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAGtC;AAOD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,IAAI,SAAS,MAAM,EAChE,MAAM,EAAE,qCAAqC,EAC7C,SAAS,EAAE,4BAA4B,CAAC,KAAK,EAAE,IAAI,CAAC,GACnD,MAAM,CAOR;AAiED,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,EACjD,OAAO,CAAC,EAAE,SAAS,4BAA4B,EAAE,GAChD,MAAM,CAqBR"}
@@ -0,0 +1,86 @@
1
+ import { booleanField, defineSchema, stringify as stringifyFilters, stringField, } from '@plumile/filter-query';
2
+ export function buildBackofficeListSearch(config, overrides) {
3
+ if (config.listDefaults == null || config.listUrlCodec == null) {
4
+ return '';
5
+ }
6
+ const merged = {
7
+ ...config.listDefaults,
8
+ ...overrides,
9
+ };
10
+ const params = config.listUrlCodec.serialize(merged);
11
+ return params.toString();
12
+ }
13
+ export function buildBackofficeListLink(config, overrides) {
14
+ const search = buildBackofficeListSearch(config, overrides);
15
+ return { pathname: config.routes.list, search };
16
+ }
17
+ export function buildBackofficeListHref(config, overrides) {
18
+ const qs = buildBackofficeListSearch(config, overrides);
19
+ if (qs === '') {
20
+ return config.routes.list;
21
+ }
22
+ return `${config.routes.list}?${qs}`;
23
+ }
24
+ const appendFallbackEntries = (entries, value, path) => {
25
+ if (value == null || path === '') {
26
+ return;
27
+ }
28
+ if (Array.isArray(value)) {
29
+ if (value.length === 0) {
30
+ return;
31
+ }
32
+ entries.set(path, value);
33
+ return;
34
+ }
35
+ if (typeof value === 'object') {
36
+ for (const [key, nested] of Object.entries(value)) {
37
+ let nestedPath = key;
38
+ if (path !== '') {
39
+ nestedPath = `${path}.${key}`;
40
+ }
41
+ appendFallbackEntries(entries, nested, nestedPath);
42
+ }
43
+ return;
44
+ }
45
+ if (typeof value === 'string' && value.trim() === '') {
46
+ return;
47
+ }
48
+ entries.set(path, value);
49
+ };
50
+ const buildFallbackFilterQuery = (entries) => {
51
+ if (entries.size === 0) {
52
+ return '';
53
+ }
54
+ const schema = defineSchema(Object.fromEntries(Array.from(entries.entries(), ([key, value]) => {
55
+ if (typeof value === 'boolean') {
56
+ return [key, booleanField(['eq'])];
57
+ }
58
+ return [key, stringField(['eq'])];
59
+ })));
60
+ const filters = Object.fromEntries(Array.from(entries.entries(), ([key, value]) => {
61
+ return [key, { eq: value }];
62
+ }));
63
+ return stringifyFilters(filters, schema);
64
+ };
65
+ export function buildBackofficeFallbackListHref(pathname, where, filters) {
66
+ if (where == null && (filters == null || filters.length === 0)) {
67
+ return pathname;
68
+ }
69
+ const entries = new Map();
70
+ if (filters != null && filters.length > 0) {
71
+ for (const filter of filters) {
72
+ appendFallbackEntries(entries, filter.value, filter.id);
73
+ }
74
+ }
75
+ else if (where != null) {
76
+ for (const [key, value] of Object.entries(where)) {
77
+ appendFallbackEntries(entries, value, key);
78
+ }
79
+ }
80
+ const search = buildFallbackFilterQuery(entries);
81
+ if (search === '') {
82
+ return pathname;
83
+ }
84
+ return `${pathname}?${search}`;
85
+ }
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRMaXN0SHJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdGF0ZS9idWlsZExpc3RIcmVmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxZQUFZLEVBQ1osWUFBWSxFQUNaLFNBQVMsSUFBSSxnQkFBZ0IsRUFDN0IsV0FBVyxHQUNaLE1BQU0sdUJBQXVCLENBQUM7QUFtQi9CLE1BQU0sVUFBVSx5QkFBeUIsQ0FDdkMsTUFBNkMsRUFDN0MsU0FBb0Q7SUFFcEQsSUFBSSxNQUFNLENBQUMsWUFBWSxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsWUFBWSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQy9ELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFxQztRQUMvQyxHQUFHLE1BQU0sQ0FBQyxZQUFZO1FBQ3RCLEdBQUcsU0FBUztLQUN1QixDQUFDO0lBRXRDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JELE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzNCLENBQUM7QUFLRCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLE1BQTZDLEVBQzdDLFNBQW9EO0lBRXBELE1BQU0sTUFBTSxHQUFHLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ2xELENBQUM7QUFPRCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLE1BQTZDLEVBQzdDLFNBQW9EO0lBRXBELE1BQU0sRUFBRSxHQUFHLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUV4RCxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUNkLE9BQU8sTUFBTSxDQUFD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LE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9ELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztJQUMzQyxJQUFJLE9BQU8sSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMxQyxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzdCLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxRCxDQUFDO0lBQ0gsQ0FBQztTQUFNLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3pCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakQscUJBQXFCLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELElBQUksTUFBTSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ2xCLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxPQUFPLEdBQUcsUUFBUSxJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBib29sZWFuRmllbGQsXG4gIGRlZmluZVNjaGVtYSxcbiAgc3RyaW5naWZ5IGFzIHN0cmluZ2lmeUZpbHRlcnMsXG4gIHN0cmluZ0ZpZWxkLFxufSBmcm9tICdAcGx1bWlsZS9maWx0ZXItcXVlcnknO1xuXG5pbXBvcnQgdHlwZSB7XG4gIEJhY2tvZmZpY2VMaXN0U3RhdGUsXG4gIEJhY2tvZmZpY2VSZXNvbHZlZExpc3RGYWNldENvbmZpZ0Jhc2UsXG59IGZyb20gJy4uL3R5cGVzLmpzJztcblxuZXhwb3J0IHR5cGUgQmFja29mZmljZUxpc3RTdGF0ZU92ZXJyaWRlczxXaGVyZSwgU29ydCBleHRlbmRzIHN0cmluZz4gPSBQYXJ0aWFsPFxuICBCYWNrb2ZmaWNlTGlzdFN0YXRlPFdoZXJlLCBTb3J0PlxuPjtcblxuZXhwb3J0IHR5cGUgQmFja29mZmljZUZhbGxiYWNrTGlzdEZpbHRlciA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdmFsdWU6IHVua25vd247XG59O1xuXG4vKipcbiAqIEJ1aWxkcyBhIHN0YWJsZSBzZWFyY2ggc3RyaW5nICh3aXRob3V0IGA/YCkgZm9yIGxpc3QgVVJMcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQmFja29mZmljZUxpc3RTZWFyY2g8V2hlcmUsIFNvcnQgZXh0ZW5kcyBzdHJpbmc+KFxuICBjb25maWc6IEJhY2tvZmZpY2VSZXNvbHZlZExpc3RGYWNldENvbmZpZ0Jhc2UsXG4gIG92ZXJyaWRlczogQmFja29mZmljZUxpc3RTdGF0ZU92ZXJyaWRlczxXaGVyZSwgU29ydD4sXG4pOiBzdHJpbmcge1xuICBpZiAoY29uZmlnLmxpc3REZWZhdWx0cyA9PSBudWxsIHx8IGNvbmZpZy5saXN0VXJsQ29kZWMgPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBjb25zdCBtZXJnZWQ6IEJhY2tvZmZpY2VMaXN0U3RhdGU8V2hlcmUsIFNvcnQ+ID0ge1xuICAgIC4uLmNvbmZpZy5saXN0RGVmYXVsdHMsXG4gICAgLi4ub3ZlcnJpZGVzLFxuICB9IGFzIEJhY2tvZmZpY2VMaXN0U3RhdGU8V2hlcmUsIFNvcnQ+O1xuXG4gIGNvbnN0IHBhcmFtcyA9IGNvbmZpZy5saXN0VXJsQ29kZWMuc2VyaWFsaXplKG1lcmdlZCk7XG4gIHJldHVybiBwYXJhbXMudG9TdHJpbmcoKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBMaW5rLWZyaWVuZGx5IGB7IHBhdGhuYW1lLCBzZWFyY2ggfWAgcGFpciBmb3IgbGlzdCBVUkxzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRCYWNrb2ZmaWNlTGlzdExpbms8V2hlcmUsIFNvcnQgZXh0ZW5kcyBzdHJpbmc+KFxuICBjb25maWc6IEJhY2tvZmZpY2VSZXNvbHZlZExpc3RGYWNldENvbmZpZ0Jhc2UsXG4gIG92ZXJyaWRlczogQmFja29mZmljZUxpc3RTdGF0ZU92ZXJyaWRlczxXaGVyZSwgU29ydD4sXG4pOiB7IHBhdGhuYW1lOiBzdHJpbmc7IHNlYXJjaDogc3RyaW5nIH0ge1xuICBjb25zdCBzZWFyY2ggPSBidWlsZEJhY2tvZmZpY2VMaXN0U2VhcmNoKGNvbmZpZywgb3ZlcnJpZGVzKTtcbiAgcmV0dXJuIHsgcGF0aG5hbWU6IGNvbmZpZy5yb3V0ZXMubGlzdCwgc2VhcmNoIH07XG59XG5cbi8qKlxuICogQnVpbGRzIGEgc3RhYmxlIGxpc3QgVVJMIHVzaW5nIHRoZSBlbnRpdHkgYGNvbmZpZ2AgdXJsIHNlcmlhbGl6ZXIuXG4gKlxuICogVGhpcyBpcyB1c2VkIGJ5IGRldGFpbCB0YWJzIHRvIGxpbmsgdG8gcHJlLWZpbHRlcmVkIGxpc3Qgdmlld3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEJhY2tvZmZpY2VMaXN0SHJlZjxXaGVyZSwgU29ydCBleHRlbmRzIHN0cmluZz4oXG4gIGNvbmZpZzogQmFja29mZmljZVJlc29sdmVkTGlzdEZhY2V0Q29uZmlnQmFzZSxcbiAgb3ZlcnJpZGVzOiBCYWNrb2ZmaWNlTGlzdFN0YXRlT3ZlcnJpZGVzPFdoZXJlLCBTb3J0Pixcbik6IHN0cmluZyB7XG4gIGNvbnN0IHFzID0gYnVpbGRCYWNrb2ZmaWNlTGlzdFNlYXJjaChjb25maWcsIG92ZXJyaWRlcyk7XG5cbiAgaWYgKHFzID09PSAnJykge1xuICAgIHJldHVybiBjb25maWcucm91dGVzLmxpc3Q7XG4gIH1cbiAgcmV0dXJuIGAke2NvbmZpZy5yb3V0ZXMubGlzdH0/JHtxc31gO1xufVxuXG5jb25zdCBhcHBlbmRGYWxsYmFja0VudHJpZXMgPSAoXG4gIGVudHJpZXM6IE1hcDxzdHJpbmcsIHVua25vd24+LFxuICB2YWx1ZTogdW5rbm93bixcbiAgcGF0aDogc3RyaW5nLFxuKTogdm9pZCA9PiB7XG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IHBhdGggPT09ICcnKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZW50cmllcy5zZXQocGF0aCwgdmFsdWUpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIGZvciAoY29uc3QgW2tleSwgbmVzdGVkXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICAgIGxldCBuZXN0ZWRQYXRoID0ga2V5O1xuICAgICAgaWYgKHBhdGggIT09ICcnKSB7XG4gICAgICAgIG5lc3RlZFBhdGggPSBgJHtwYXRofS4ke2tleX1gO1xuICAgICAgfVxuICAgICAgYXBwZW5kRmFsbGJhY2tFbnRyaWVzKGVudHJpZXMsIG5lc3RlZCwgbmVzdGVkUGF0aCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS50cmltKCkgPT09ICcnKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGVudHJpZXMuc2V0KHBhdGgsIHZhbHVlKTtcbn07XG5cbmNvbnN0IGJ1aWxkRmFsbGJhY2tGaWx0ZXJRdWVyeSA9IChcbiAgZW50cmllczogUmVhZG9ubHlNYXA8c3RyaW5nLCB1bmtub3duPixcbik6IHN0cmluZyA9PiB7XG4gIGlmIChlbnRyaWVzLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBzY2hlbWEgPSBkZWZpbmVTY2hlbWEoXG4gICAgT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgQXJyYXkuZnJvbShlbnRyaWVzLmVudHJpZXMoKSwgKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICByZXR1cm4gW2tleSwgYm9vbGVhbkZpZWxkKFsnZXEnXSldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBba2V5LCBzdHJpbmdGaWVsZChbJ2VxJ10pXTtcbiAgICAgIH0pLFxuICAgICksXG4gICk7XG5cbiAgY29uc3QgZmlsdGVycyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBBcnJheS5mcm9tKGVudHJpZXMuZW50cmllcygpLCAoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICByZXR1cm4gW2tleSwgeyBlcTogdmFsdWUgfV07XG4gICAgfSksXG4gICk7XG5cbiAgcmV0dXJuIHN0cmluZ2lmeUZpbHRlcnMoZmlsdGVycyBhcyBuZXZlciwgc2NoZW1hKTtcbn07XG5cbi8qKlxuICogQnVpbGRzIGEgYmVzdC1lZmZvcnQgbGlzdCBVUkwgd2hlbiB0aGUgcmVzb2x2ZWQgbGlzdCBmYWNldCBoYXMgbm90IGJlZW5cbiAqIGxvYWRlZCB5ZXQuIEl0IHByZXNlcnZlcyBjb21tb24gZXF1YWxpdHkgZmlsdGVycyBpbiB0aGUgaHJlZiBzbyBicm93c2VyXG4gKiBuYXZpZ2F0aW9uIGJlaGF2aW9ycyBrZWVwIHRoZSBmaWx0ZXJlZCByb3V0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQmFja29mZmljZUZhbGxiYWNrTGlzdEhyZWYoXG4gIHBhdGhuYW1lOiBzdHJpbmcsXG4gIHdoZXJlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGZpbHRlcnM/OiByZWFkb25seSBCYWNrb2ZmaWNlRmFsbGJhY2tMaXN0RmlsdGVyW10sXG4pOiBzdHJpbmcge1xuICBpZiAod2hlcmUgPT0gbnVsbCAmJiAoZmlsdGVycyA9PSBudWxsIHx8IGZpbHRlcnMubGVuZ3RoID09PSAwKSkge1xuICAgIHJldHVybiBwYXRobmFtZTtcbiAgfVxuXG4gIGNvbnN0IGVudHJpZXMgPSBuZXcgTWFwPHN0cmluZywgdW5rbm93bj4oKTtcbiAgaWYgKGZpbHRlcnMgIT0gbnVsbCAmJiBmaWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgICBhcHBlbmRGYWxsYmFja0VudHJpZXMoZW50cmllcywgZmlsdGVyLnZhbHVlLCBmaWx0ZXIuaWQpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh3aGVyZSAhPSBudWxsKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMod2hlcmUpKSB7XG4gICAgICBhcHBlbmRGYWxsYmFja0VudHJpZXMoZW50cmllcywgdmFsdWUsIGtleSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2VhcmNoID0gYnVpbGRGYWxsYmFja0ZpbHRlclF1ZXJ5KGVudHJpZXMpO1xuICBpZiAoc2VhcmNoID09PSAnJykge1xuICAgIHJldHVybiBwYXRobmFtZTtcbiAgfVxuICByZXR1cm4gYCR7cGF0aG5hbWV9PyR7c2VhcmNofWA7XG59XG4iXX0=
@@ -0,0 +1,8 @@
1
+ type VariablesKey = {
2
+ where: unknown;
3
+ sort: unknown;
4
+ count: number;
5
+ };
6
+ export declare function stableListVariablesKey(variables: VariablesKey): string;
7
+ export {};
8
+ //# sourceMappingURL=stableKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stableKey.d.ts","sourceRoot":"","sources":["../../../src/state/stableKey.ts"],"names":[],"mappings":"AAAA,KAAK,YAAY,GAAG;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAsBF,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,YAAY,GAAG,MAAM,CAGtE"}
@@ -0,0 +1,17 @@
1
+ function normalizeWhere(where) {
2
+ if (typeof where !== 'object' || where == null) {
3
+ return null;
4
+ }
5
+ const record = where;
6
+ const keys = Object.keys(record).sort();
7
+ const normalized = {};
8
+ for (const key of keys) {
9
+ normalized[key] = record[key];
10
+ }
11
+ return normalized;
12
+ }
13
+ export function stableListVariablesKey(variables) {
14
+ const where = normalizeWhere(variables.where);
15
+ return JSON.stringify({ ...variables, where });
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhYmxlS2V5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0YXRlL3N0YWJsZUtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSxTQUFTLGNBQWMsQ0FBQyxLQUFjO0lBQ3BDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUMvQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxLQUFnQyxDQUFDO0lBQ2hELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEMsTUFBTSxVQUFVLEdBQTRCLEVBQUUsQ0FBQztJQUMvQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFLRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsU0FBdUI7SUFDNUQsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJ0eXBlIFZhcmlhYmxlc0tleSA9IHtcbiAgd2hlcmU6IHVua25vd247XG4gIHNvcnQ6IHVua25vd247XG4gIGNvdW50OiBudW1iZXI7XG59O1xuXG4vKipcbiAqXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVdoZXJlKHdoZXJlOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIHtcbiAgaWYgKHR5cGVvZiB3aGVyZSAhPT0gJ29iamVjdCcgfHwgd2hlcmUgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcmVjb3JkID0gd2hlcmUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyZWNvcmQpLnNvcnQoKTtcbiAgY29uc3Qgbm9ybWFsaXplZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIG5vcm1hbGl6ZWRba2V5XSA9IHJlY29yZFtrZXldO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFibGVMaXN0VmFyaWFibGVzS2V5KHZhcmlhYmxlczogVmFyaWFibGVzS2V5KTogc3RyaW5nIHtcbiAgY29uc3Qgd2hlcmUgPSBub3JtYWxpemVXaGVyZSh2YXJpYWJsZXMud2hlcmUpO1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoeyAuLi52YXJpYWJsZXMsIHdoZXJlIH0pO1xufVxuIl19
@@ -0,0 +1,16 @@
1
+ import type { BackofficeListState } from '../types.js';
2
+ import type { BackofficeFilterSchema } from '../filters/schema.js';
3
+ export declare const BACKOFFICE_URL_KEYS: {
4
+ readonly sort: "sort";
5
+ };
6
+ type UrlCodecOptions<Where, Sort extends string> = {
7
+ defaults: BackofficeListState<Where, Sort>;
8
+ filterSchema: BackofficeFilterSchema<Where>;
9
+ sortIds: readonly Sort[];
10
+ };
11
+ export declare function createBackofficeListUrlCodec<Where extends Record<string, unknown>, Sort extends string>(options: UrlCodecOptions<Where, Sort>): {
12
+ parse: (search: URLSearchParams) => BackofficeListState<Where, Sort>;
13
+ serialize: (state: BackofficeListState<Where, Sort>) => URLSearchParams;
14
+ };
15
+ export {};
16
+ //# sourceMappingURL=urlState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urlState.d.ts","sourceRoot":"","sources":["../../../src/state/urlState.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEnE,eAAO,MAAM,mBAAmB;;CAEtB,CAAC;AAeX,KAAK,eAAe,CAAC,KAAK,EAAE,IAAI,SAAS,MAAM,IAAI;IACjD,QAAQ,EAAE,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC3C,YAAY,EAAE,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC5C,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC;CAC1B,CAAC;AAGF,wBAAgB,4BAA4B,CAC1C,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,IAAI,SAAS,MAAM,EAEnB,OAAO,EAAE,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,GACpC;IACD,KAAK,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACrE,SAAS,EAAE,CAAC,KAAK,EAAE,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,eAAe,CAAC;CACzE,CAyCA"}
@@ -0,0 +1,48 @@
1
+ import { parse as parseFilters, stringify as stringifyFilters, } from '@plumile/filter-query';
2
+ export const BACKOFFICE_URL_KEYS = {
3
+ sort: 'sort',
4
+ };
5
+ function serializeFilterParams(params) {
6
+ const entries = Array.from(params.entries());
7
+ if (entries.length === 0) {
8
+ return '';
9
+ }
10
+ return entries
11
+ .map(([key, value]) => {
12
+ return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
13
+ })
14
+ .join('&');
15
+ }
16
+ export function createBackofficeListUrlCodec(options) {
17
+ const { defaults, filterSchema, sortIds } = options;
18
+ const { sort: defaultSort } = defaults;
19
+ const sortSet = new Set(sortIds);
20
+ function parse(search) {
21
+ const filterParams = new URLSearchParams(search);
22
+ filterParams.delete(BACKOFFICE_URL_KEYS.sort);
23
+ const filterQuery = serializeFilterParams(filterParams);
24
+ const { filters } = parseFilters(filterQuery, filterSchema.schema);
25
+ const where = filterSchema.toWhere(filters);
26
+ const sortRaw = search.get(BACKOFFICE_URL_KEYS.sort);
27
+ let sort = defaultSort;
28
+ if (sortRaw != null && sortSet.has(sortRaw)) {
29
+ sort = sortRaw;
30
+ }
31
+ return {
32
+ where,
33
+ sort,
34
+ };
35
+ }
36
+ function serialize(state) {
37
+ const { sort, where } = state;
38
+ const filters = filterSchema.fromWhere(where);
39
+ const filterQuery = stringifyFilters(filters, filterSchema.schema);
40
+ const search = new URLSearchParams(filterQuery);
41
+ if (sort != null) {
42
+ search.set(BACKOFFICE_URL_KEYS.sort, sort);
43
+ }
44
+ return search;
45
+ }
46
+ return { parse, serialize };
47
+ }
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsU3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3RhdGUvdXJsU3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLEtBQUssSUFBSSxZQUFZLEVBQ3JCLFNBQVMsSUFBSSxnQkFBZ0IsR0FDOUIsTUFBTSx1QkFBdUIsQ0FBQztBQUsvQixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRztJQUNqQyxJQUFJLEVBQUUsTUFBTTtDQUNKLENBQUM7QUFHWCxTQUFTLHFCQUFxQixDQUFDLE1BQXVCO0lBQ3BELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDN0MsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELE9BQU8sT0FBTztTQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7UUFDcEIsT0FBTyxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDbkUsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsQ0FBQztBQVNELE1BQU0sVUFBVSw0QkFBNEIsQ0FJMUMsT0FBcUM7SUFLckMsTUFBTSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ3BELE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEdBQUcsUUFBUSxDQUFDO0lBQ3ZDLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxDQUFTLE9BQU8sQ0FBQyxDQUFDO0lBR3pDLFNBQVMsS0FBSyxDQUFDLE1BQXVCO1FBQ3BDLE1BQU0sWUFBWSxHQUFHLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELFlBQVksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFOUMsTUFBTSxXQUFXLEdBQUcscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEQsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLFlBQVksQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25FLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFNUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRCxJQUFJLElBQUksR0FBRyxXQUFXLENBQUM7UUFDdkIsSUFBSSxPQUFPLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxJQUFJLEdBQUcsT0FBZSxDQUFDO1FBQ3pCLENBQUM7UUFFRCxPQUFPO1lBQ0wsS0FBSztZQUNMLElBQUk7U0FDTCxDQUFDO0lBQ0osQ0FBQztJQUdELFNBQVMsU0FBUyxDQUFDLEtBQXVDO1FBQ3hELE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQzlCLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRSxNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVoRCxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNqQixNQUFNLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHBhcnNlIGFzIHBhcnNlRmlsdGVycyxcbiAgc3RyaW5naWZ5IGFzIHN0cmluZ2lmeUZpbHRlcnMsXG59IGZyb20gJ0BwbHVtaWxlL2ZpbHRlci1xdWVyeSc7XG5cbmltcG9ydCB0eXBlIHsgQmFja29mZmljZUxpc3RTdGF0ZSB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgQmFja29mZmljZUZpbHRlclNjaGVtYSB9IGZyb20gJy4uL2ZpbHRlcnMvc2NoZW1hLmpzJztcblxuZXhwb3J0IGNvbnN0IEJBQ0tPRkZJQ0VfVVJMX0tFWVMgPSB7XG4gIHNvcnQ6ICdzb3J0Jyxcbn0gYXMgY29uc3Q7XG5cbi8qKiBTZXJpYWxpemVzIGZpbHRlciBwYXJhbXMgd2l0aCBSRkMzOTg2IGVuY29kaW5nLiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplRmlsdGVyUGFyYW1zKHBhcmFtczogVVJMU2VhcmNoUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgZW50cmllcyA9IEFycmF5LmZyb20ocGFyYW1zLmVudHJpZXMoKSk7XG4gIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gZW50cmllc1xuICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgcmV0dXJuIGAke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSl9YDtcbiAgICB9KVxuICAgIC5qb2luKCcmJyk7XG59XG5cbnR5cGUgVXJsQ29kZWNPcHRpb25zPFdoZXJlLCBTb3J0IGV4dGVuZHMgc3RyaW5nPiA9IHtcbiAgZGVmYXVsdHM6IEJhY2tvZmZpY2VMaXN0U3RhdGU8V2hlcmUsIFNvcnQ+O1xuICBmaWx0ZXJTY2hlbWE6IEJhY2tvZmZpY2VGaWx0ZXJTY2hlbWE8V2hlcmU+O1xuICBzb3J0SWRzOiByZWFkb25seSBTb3J0W107XG59O1xuXG4vKiogQ3JlYXRlcyBhIFVSTCBjb2RlYyBmb3IgZ2VuZXJpYyBiYWNrb2ZmaWNlIGxpc3QgcGFnZXMuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmFja29mZmljZUxpc3RVcmxDb2RlYzxcbiAgV2hlcmUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgU29ydCBleHRlbmRzIHN0cmluZyxcbj4oXG4gIG9wdGlvbnM6IFVybENvZGVjT3B0aW9uczxXaGVyZSwgU29ydD4sXG4pOiB7XG4gIHBhcnNlOiAoc2VhcmNoOiBVUkxTZWFyY2hQYXJhbXMpID0+IEJhY2tvZmZpY2VMaXN0U3RhdGU8V2hlcmUsIFNvcnQ+O1xuICBzZXJpYWxpemU6IChzdGF0ZTogQmFja29mZmljZUxpc3RTdGF0ZTxXaGVyZSwgU29ydD4pID0+IFVSTFNlYXJjaFBhcmFtcztcbn0ge1xuICBjb25zdCB7IGRlZmF1bHRzLCBmaWx0ZXJTY2hlbWEsIHNvcnRJZHMgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHsgc29ydDogZGVmYXVsdFNvcnQgfSA9IGRlZmF1bHRzO1xuICBjb25zdCBzb3J0U2V0ID0gbmV3IFNldDxzdHJpbmc+KHNvcnRJZHMpO1xuXG4gIC8qKiBQYXJzZXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0IGludG8gYSBmdWxsIGxpc3Qgc3RhdGUuICovXG4gIGZ1bmN0aW9uIHBhcnNlKHNlYXJjaDogVVJMU2VhcmNoUGFyYW1zKTogQmFja29mZmljZUxpc3RTdGF0ZTxXaGVyZSwgU29ydD4ge1xuICAgIGNvbnN0IGZpbHRlclBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoc2VhcmNoKTtcbiAgICBmaWx0ZXJQYXJhbXMuZGVsZXRlKEJBQ0tPRkZJQ0VfVVJMX0tFWVMuc29ydCk7XG5cbiAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IHNlcmlhbGl6ZUZpbHRlclBhcmFtcyhmaWx0ZXJQYXJhbXMpO1xuICAgIGNvbnN0IHsgZmlsdGVycyB9ID0gcGFyc2VGaWx0ZXJzKGZpbHRlclF1ZXJ5LCBmaWx0ZXJTY2hlbWEuc2NoZW1hKTtcbiAgICBjb25zdCB3aGVyZSA9IGZpbHRlclNjaGVtYS50b1doZXJlKGZpbHRlcnMpO1xuXG4gICAgY29uc3Qgc29ydFJhdyA9IHNlYXJjaC5nZXQoQkFDS09GRklDRV9VUkxfS0VZUy5zb3J0KTtcbiAgICBsZXQgc29ydCA9IGRlZmF1bHRTb3J0O1xuICAgIGlmIChzb3J0UmF3ICE9IG51bGwgJiYgc29ydFNldC5oYXMoc29ydFJhdykpIHtcbiAgICAgIHNvcnQgPSBzb3J0UmF3IGFzIFNvcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdoZXJlLFxuICAgICAgc29ydCxcbiAgICB9O1xuICB9XG5cbiAgLyoqIFNlcmlhbGl6ZXMgYSBsaXN0IHN0YXRlIGludG8gVVJMU2VhcmNoUGFyYW1zLiAqL1xuICBmdW5jdGlvbiBzZXJpYWxpemUoc3RhdGU6IEJhY2tvZmZpY2VMaXN0U3RhdGU8V2hlcmUsIFNvcnQ+KTogVVJMU2VhcmNoUGFyYW1zIHtcbiAgICBjb25zdCB7IHNvcnQsIHdoZXJlIH0gPSBzdGF0ZTtcbiAgICBjb25zdCBmaWx0ZXJzID0gZmlsdGVyU2NoZW1hLmZyb21XaGVyZSh3aGVyZSk7XG4gICAgY29uc3QgZmlsdGVyUXVlcnkgPSBzdHJpbmdpZnlGaWx0ZXJzKGZpbHRlcnMsIGZpbHRlclNjaGVtYS5zY2hlbWEpO1xuICAgIGNvbnN0IHNlYXJjaCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoZmlsdGVyUXVlcnkpO1xuXG4gICAgaWYgKHNvcnQgIT0gbnVsbCkge1xuICAgICAgc2VhcmNoLnNldChCQUNLT0ZGSUNFX1VSTF9LRVlTLnNvcnQsIHNvcnQpO1xuICAgIH1cblxuICAgIHJldHVybiBzZWFyY2g7XG4gIH1cblxuICByZXR1cm4geyBwYXJzZSwgc2VyaWFsaXplIH07XG59XG4iXX0=