@multiplatform.one/frappe-ui 7.28.1 → 7.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/FrappeCalendar.cjs +3 -2
- package/dist/cjs/FrappeCalendar.native.js +3 -2
- package/dist/cjs/FrappeCalendar.native.js.map +1 -1
- package/dist/cjs/FrappeForm.cjs +148 -464
- package/dist/cjs/FrappeForm.native.js +152 -633
- package/dist/cjs/FrappeForm.native.js.map +1 -1
- package/dist/cjs/FrappeListView.cjs +5 -27
- package/dist/cjs/FrappeListView.native.js +11 -32
- package/dist/cjs/FrappeListView.native.js.map +1 -1
- package/dist/cjs/FrappeReportBuilder.cjs +523 -309
- package/dist/cjs/FrappeReportBuilder.native.js +658 -353
- package/dist/cjs/FrappeReportBuilder.native.js.map +1 -1
- package/dist/cjs/FrappeReportView.cjs +35 -234
- package/dist/cjs/FrappeReportView.native.js +39 -283
- package/dist/cjs/FrappeReportView.native.js.map +1 -1
- package/dist/cjs/dependsOn.cjs +2 -2
- package/dist/cjs/dependsOn.native.js +1 -2
- package/dist/cjs/dependsOn.native.js.map +1 -1
- package/dist/cjs/fields/shared/EditorPreviewPanes.cjs +2 -2
- package/dist/cjs/fields/shared/EditorPreviewPanes.native.js +2 -2
- package/dist/cjs/fields/shared/EditorPreviewPanes.native.js.map +1 -1
- package/dist/cjs/formEngine/docPermissions.cjs +20 -0
- package/dist/cjs/formEngine/docPermissions.native.js +69 -0
- package/dist/cjs/formEngine/docPermissions.native.js.map +1 -1
- package/dist/cjs/formEngine/index.cjs +2 -0
- package/dist/cjs/formEngine/index.native.js +2 -0
- package/dist/cjs/formEngine/index.native.js.map +1 -1
- package/dist/cjs/index.cjs +67 -7
- package/dist/cjs/index.native.js +67 -7
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/liveErrors.cjs +8 -2
- package/dist/cjs/liveErrors.native.js +8 -2
- package/dist/cjs/liveErrors.native.js.map +1 -1
- package/dist/cjs/measures.cjs +31 -0
- package/dist/cjs/measures.native.js +34 -0
- package/dist/cjs/measures.native.js.map +1 -0
- package/dist/cjs/recordShape.cjs +103 -0
- package/dist/cjs/recordShape.native.js +115 -0
- package/dist/cjs/recordShape.native.js.map +1 -0
- package/dist/cjs/report/ReportGrid.cjs +453 -0
- package/dist/cjs/report/ReportGrid.native.js +510 -0
- package/dist/cjs/report/ReportGrid.native.js.map +1 -0
- package/dist/cjs/report/ReportViewToolbar.cjs +253 -0
- package/dist/cjs/report/ReportViewToolbar.native.js +303 -0
- package/dist/cjs/report/ReportViewToolbar.native.js.map +1 -0
- package/dist/cjs/report/queryReport.cjs +444 -0
- package/dist/cjs/report/queryReport.native.js +588 -0
- package/dist/cjs/report/queryReport.native.js.map +1 -0
- package/dist/cjs/report/queryReportColumns.cjs +131 -0
- package/dist/cjs/report/queryReportColumns.native.js +159 -0
- package/dist/cjs/report/queryReportColumns.native.js.map +1 -0
- package/dist/cjs/report/reportViewModel.cjs +386 -0
- package/dist/cjs/report/reportViewModel.native.js +657 -0
- package/dist/cjs/report/reportViewModel.native.js.map +1 -0
- package/dist/cjs/report/savedReports.cjs +137 -0
- package/dist/cjs/report/savedReports.native.js +169 -0
- package/dist/cjs/report/savedReports.native.js.map +1 -0
- package/dist/cjs/report/useFrappeReport.cjs +184 -0
- package/dist/cjs/report/useFrappeReport.native.js +214 -0
- package/dist/cjs/report/useFrappeReport.native.js.map +1 -0
- package/dist/cjs/report/useQueryReport.cjs +201 -0
- package/dist/cjs/report/useQueryReport.native.js +233 -0
- package/dist/cjs/report/useQueryReport.native.js.map +1 -0
- package/dist/cjs/useFrappeForm.cjs +558 -0
- package/dist/cjs/useFrappeForm.native.js +714 -0
- package/dist/cjs/useFrappeForm.native.js.map +1 -0
- package/dist/esm/FrappeCalendar.mjs +4 -3
- package/dist/esm/FrappeCalendar.mjs.map +1 -1
- package/dist/esm/FrappeCalendar.native.js +4 -3
- package/dist/esm/FrappeCalendar.native.js.map +1 -1
- package/dist/esm/FrappeForm.mjs +151 -467
- package/dist/esm/FrappeForm.mjs.map +1 -1
- package/dist/esm/FrappeForm.native.js +155 -636
- package/dist/esm/FrappeForm.native.js.map +1 -1
- package/dist/esm/FrappeListView.mjs +6 -28
- package/dist/esm/FrappeListView.mjs.map +1 -1
- package/dist/esm/FrappeListView.native.js +12 -33
- package/dist/esm/FrappeListView.native.js.map +1 -1
- package/dist/esm/FrappeReportBuilder.mjs +526 -312
- package/dist/esm/FrappeReportBuilder.mjs.map +1 -1
- package/dist/esm/FrappeReportBuilder.native.js +661 -356
- package/dist/esm/FrappeReportBuilder.native.js.map +1 -1
- package/dist/esm/FrappeReportView.mjs +30 -229
- package/dist/esm/FrappeReportView.mjs.map +1 -1
- package/dist/esm/FrappeReportView.native.js +34 -278
- package/dist/esm/FrappeReportView.native.js.map +1 -1
- package/dist/esm/dependsOn.mjs +2 -2
- package/dist/esm/dependsOn.mjs.map +1 -1
- package/dist/esm/dependsOn.native.js +1 -2
- package/dist/esm/dependsOn.native.js.map +1 -1
- package/dist/esm/fields/shared/EditorPreviewPanes.mjs +2 -2
- package/dist/esm/fields/shared/EditorPreviewPanes.mjs.map +1 -1
- package/dist/esm/fields/shared/EditorPreviewPanes.native.js +2 -2
- package/dist/esm/fields/shared/EditorPreviewPanes.native.js.map +1 -1
- package/dist/esm/formEngine/docPermissions.mjs +19 -1
- package/dist/esm/formEngine/docPermissions.mjs.map +1 -1
- package/dist/esm/formEngine/docPermissions.native.js +68 -1
- package/dist/esm/formEngine/docPermissions.native.js.map +1 -1
- package/dist/esm/formEngine/index.mjs +2 -2
- package/dist/esm/formEngine/index.mjs.map +1 -1
- package/dist/esm/formEngine/index.native.js +2 -2
- package/dist/esm/formEngine/index.native.js.map +1 -1
- package/dist/esm/index.mjs +16 -4
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +16 -4
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/liveErrors.mjs +8 -3
- package/dist/esm/liveErrors.mjs.map +1 -1
- package/dist/esm/liveErrors.native.js +8 -3
- package/dist/esm/liveErrors.native.js.map +1 -1
- package/dist/esm/measures.mjs +5 -0
- package/dist/esm/measures.mjs.map +1 -0
- package/dist/esm/measures.native.js +5 -0
- package/dist/esm/measures.native.js.map +1 -0
- package/dist/esm/recordShape.mjs +74 -0
- package/dist/esm/recordShape.mjs.map +1 -0
- package/dist/esm/recordShape.native.js +83 -0
- package/dist/esm/recordShape.native.js.map +1 -0
- package/dist/esm/report/ReportGrid.mjs +428 -0
- package/dist/esm/report/ReportGrid.mjs.map +1 -0
- package/dist/esm/report/ReportGrid.native.js +471 -0
- package/dist/esm/report/ReportGrid.native.js.map +1 -0
- package/dist/esm/report/ReportViewToolbar.mjs +228 -0
- package/dist/esm/report/ReportViewToolbar.mjs.map +1 -0
- package/dist/esm/report/ReportViewToolbar.native.js +264 -0
- package/dist/esm/report/ReportViewToolbar.native.js.map +1 -0
- package/dist/esm/report/queryReport.mjs +404 -0
- package/dist/esm/report/queryReport.mjs.map +1 -0
- package/dist/esm/report/queryReport.native.js +545 -0
- package/dist/esm/report/queryReport.native.js.map +1 -0
- package/dist/esm/report/queryReportColumns.mjs +105 -0
- package/dist/esm/report/queryReportColumns.mjs.map +1 -0
- package/dist/esm/report/queryReportColumns.native.js +119 -0
- package/dist/esm/report/queryReportColumns.native.js.map +1 -0
- package/dist/esm/report/reportViewModel.mjs +343 -0
- package/dist/esm/report/reportViewModel.mjs.map +1 -0
- package/dist/esm/report/reportViewModel.native.js +611 -0
- package/dist/esm/report/reportViewModel.native.js.map +1 -0
- package/dist/esm/report/savedReports.mjs +112 -0
- package/dist/esm/report/savedReports.mjs.map +1 -0
- package/dist/esm/report/savedReports.native.js +141 -0
- package/dist/esm/report/savedReports.native.js.map +1 -0
- package/dist/esm/report/useFrappeReport.mjs +158 -0
- package/dist/esm/report/useFrappeReport.mjs.map +1 -0
- package/dist/esm/report/useFrappeReport.native.js +185 -0
- package/dist/esm/report/useFrappeReport.native.js.map +1 -0
- package/dist/esm/report/useQueryReport.mjs +176 -0
- package/dist/esm/report/useQueryReport.mjs.map +1 -0
- package/dist/esm/report/useQueryReport.native.js +205 -0
- package/dist/esm/report/useQueryReport.native.js.map +1 -0
- package/dist/esm/useFrappeForm.mjs +533 -0
- package/dist/esm/useFrappeForm.mjs.map +1 -0
- package/dist/esm/useFrappeForm.native.js +686 -0
- package/dist/esm/useFrappeForm.native.js.map +1 -0
- package/dist/jsx/FrappeCalendar.mjs +4 -3
- package/dist/jsx/FrappeCalendar.mjs.map +1 -1
- package/dist/jsx/FrappeCalendar.native.js +3 -2
- package/dist/jsx/FrappeCalendar.native.js.map +1 -1
- package/dist/jsx/FrappeForm.mjs +151 -467
- package/dist/jsx/FrappeForm.mjs.map +1 -1
- package/dist/jsx/FrappeForm.native.js +152 -633
- package/dist/jsx/FrappeForm.native.js.map +1 -1
- package/dist/jsx/FrappeListView.mjs +6 -28
- package/dist/jsx/FrappeListView.mjs.map +1 -1
- package/dist/jsx/FrappeListView.native.js +11 -32
- package/dist/jsx/FrappeListView.native.js.map +1 -1
- package/dist/jsx/FrappeReportBuilder.mjs +526 -312
- package/dist/jsx/FrappeReportBuilder.mjs.map +1 -1
- package/dist/jsx/FrappeReportBuilder.native.js +658 -353
- package/dist/jsx/FrappeReportBuilder.native.js.map +1 -1
- package/dist/jsx/FrappeReportView.mjs +30 -229
- package/dist/jsx/FrappeReportView.mjs.map +1 -1
- package/dist/jsx/FrappeReportView.native.js +39 -283
- package/dist/jsx/FrappeReportView.native.js.map +1 -1
- package/dist/jsx/dependsOn.mjs +2 -2
- package/dist/jsx/dependsOn.mjs.map +1 -1
- package/dist/jsx/dependsOn.native.js +1 -2
- package/dist/jsx/dependsOn.native.js.map +1 -1
- package/dist/jsx/fields/shared/EditorPreviewPanes.mjs +2 -2
- package/dist/jsx/fields/shared/EditorPreviewPanes.mjs.map +1 -1
- package/dist/jsx/fields/shared/EditorPreviewPanes.native.js +2 -2
- package/dist/jsx/fields/shared/EditorPreviewPanes.native.js.map +1 -1
- package/dist/jsx/formEngine/docPermissions.mjs +19 -1
- package/dist/jsx/formEngine/docPermissions.mjs.map +1 -1
- package/dist/jsx/formEngine/docPermissions.native.js +69 -0
- package/dist/jsx/formEngine/docPermissions.native.js.map +1 -1
- package/dist/jsx/formEngine/index.mjs +2 -2
- package/dist/jsx/formEngine/index.mjs.map +1 -1
- package/dist/jsx/formEngine/index.native.js +2 -0
- package/dist/jsx/formEngine/index.native.js.map +1 -1
- package/dist/jsx/index.js +16 -4
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +16 -4
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +67 -7
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/liveErrors.mjs +8 -3
- package/dist/jsx/liveErrors.mjs.map +1 -1
- package/dist/jsx/liveErrors.native.js +8 -2
- package/dist/jsx/liveErrors.native.js.map +1 -1
- package/dist/jsx/measures.mjs +5 -0
- package/dist/jsx/measures.mjs.map +1 -0
- package/dist/jsx/measures.native.js +34 -0
- package/dist/jsx/measures.native.js.map +1 -0
- package/dist/jsx/recordShape.mjs +74 -0
- package/dist/jsx/recordShape.mjs.map +1 -0
- package/dist/jsx/recordShape.native.js +115 -0
- package/dist/jsx/recordShape.native.js.map +1 -0
- package/dist/jsx/report/ReportGrid.mjs +428 -0
- package/dist/jsx/report/ReportGrid.mjs.map +1 -0
- package/dist/jsx/report/ReportGrid.native.js +510 -0
- package/dist/jsx/report/ReportGrid.native.js.map +1 -0
- package/dist/jsx/report/ReportViewToolbar.mjs +228 -0
- package/dist/jsx/report/ReportViewToolbar.mjs.map +1 -0
- package/dist/jsx/report/ReportViewToolbar.native.js +303 -0
- package/dist/jsx/report/ReportViewToolbar.native.js.map +1 -0
- package/dist/jsx/report/queryReport.mjs +404 -0
- package/dist/jsx/report/queryReport.mjs.map +1 -0
- package/dist/jsx/report/queryReport.native.js +588 -0
- package/dist/jsx/report/queryReport.native.js.map +1 -0
- package/dist/jsx/report/queryReportColumns.mjs +105 -0
- package/dist/jsx/report/queryReportColumns.mjs.map +1 -0
- package/dist/jsx/report/queryReportColumns.native.js +159 -0
- package/dist/jsx/report/queryReportColumns.native.js.map +1 -0
- package/dist/jsx/report/reportViewModel.mjs +343 -0
- package/dist/jsx/report/reportViewModel.mjs.map +1 -0
- package/dist/jsx/report/reportViewModel.native.js +657 -0
- package/dist/jsx/report/reportViewModel.native.js.map +1 -0
- package/dist/jsx/report/savedReports.mjs +112 -0
- package/dist/jsx/report/savedReports.mjs.map +1 -0
- package/dist/jsx/report/savedReports.native.js +169 -0
- package/dist/jsx/report/savedReports.native.js.map +1 -0
- package/dist/jsx/report/useFrappeReport.mjs +158 -0
- package/dist/jsx/report/useFrappeReport.mjs.map +1 -0
- package/dist/jsx/report/useFrappeReport.native.js +214 -0
- package/dist/jsx/report/useFrappeReport.native.js.map +1 -0
- package/dist/jsx/report/useQueryReport.mjs +176 -0
- package/dist/jsx/report/useQueryReport.mjs.map +1 -0
- package/dist/jsx/report/useQueryReport.native.js +233 -0
- package/dist/jsx/report/useQueryReport.native.js.map +1 -0
- package/dist/jsx/useFrappeForm.mjs +533 -0
- package/dist/jsx/useFrappeForm.mjs.map +1 -0
- package/dist/jsx/useFrappeForm.native.js +714 -0
- package/dist/jsx/useFrappeForm.native.js.map +1 -0
- package/package.json +16 -16
- package/src/FrappeCalendar.tsx +8 -2
- package/src/FrappeForm.stories.tsx +52 -0
- package/src/FrappeForm.tsx +176 -565
- package/src/FrappeListView.cards.stories.tsx +3 -6
- package/src/FrappeListView.tsx +15 -55
- package/src/FrappeReportBuilder.stories.tsx +34 -7
- package/src/FrappeReportBuilder.tsx +790 -380
- package/src/FrappeReportView.spec.tsx +10 -6
- package/src/FrappeReportView.stories.tsx +20 -1
- package/src/FrappeReportView.tsx +89 -415
- package/src/dependsOn.ts +4 -1
- package/src/fields/shared/EditorPreviewPanes.tsx +2 -2
- package/src/formEngine/docPermissions.spec.ts +36 -1
- package/src/formEngine/docPermissions.ts +34 -0
- package/src/formEngine/index.ts +8 -1
- package/src/frappeRemainder.designLaw.spec.ts +9 -1
- package/src/frappeRoutes.spec.tsx +9 -0
- package/src/frappeViews.designLaw.spec.ts +15 -2
- package/src/guestFallback.spec.tsx +236 -0
- package/src/index.ts +117 -16
- package/src/liveErrors.spec.ts +10 -0
- package/src/liveErrors.ts +16 -3
- package/src/measures.ts +11 -0
- package/src/recordShape.spec.ts +100 -0
- package/src/recordShape.ts +133 -0
- package/src/report/ReportGrid.spec.tsx +175 -0
- package/src/report/ReportGrid.tsx +530 -0
- package/src/report/ReportViewToolbar.spec.tsx +90 -0
- package/src/report/ReportViewToolbar.tsx +314 -0
- package/src/report/queryReport.spec.ts +483 -0
- package/src/report/queryReport.ts +722 -0
- package/src/report/queryReportColumns.tsx +123 -0
- package/src/report/reportViewModel.spec.ts +393 -0
- package/src/report/reportViewModel.ts +617 -0
- package/src/report/savedReports.ts +172 -0
- package/src/report/seam.spec.ts +216 -0
- package/src/report/useFrappeReport.ts +241 -0
- package/src/report/useQueryReport.spec.tsx +131 -0
- package/src/report/useQueryReport.ts +309 -0
- package/src/useFrappeForm.spec.tsx +209 -0
- package/src/useFrappeForm.ts +778 -0
- package/types/FrappeCalendar.d.ts.map +1 -1
- package/types/FrappeForm.d.ts +21 -1
- package/types/FrappeForm.d.ts.map +1 -1
- package/types/FrappeListView.d.ts.map +1 -1
- package/types/FrappeReportBuilder.d.ts +66 -16
- package/types/FrappeReportBuilder.d.ts.map +1 -1
- package/types/FrappeReportView.d.ts +9 -127
- package/types/FrappeReportView.d.ts.map +1 -1
- package/types/dependsOn.d.ts.map +1 -1
- package/types/formEngine/docPermissions.d.ts +14 -0
- package/types/formEngine/docPermissions.d.ts.map +1 -1
- package/types/formEngine/index.d.ts +1 -1
- package/types/formEngine/index.d.ts.map +1 -1
- package/types/index.d.ts +15 -3
- package/types/index.d.ts.map +1 -1
- package/types/liveErrors.d.ts +9 -1
- package/types/liveErrors.d.ts.map +1 -1
- package/types/measures.d.ts +3 -0
- package/types/measures.d.ts.map +1 -0
- package/types/recordShape.d.ts +45 -0
- package/types/recordShape.d.ts.map +1 -0
- package/types/report/ReportGrid.d.ts +20 -0
- package/types/report/ReportGrid.d.ts.map +1 -0
- package/types/report/ReportViewToolbar.d.ts +31 -0
- package/types/report/ReportViewToolbar.d.ts.map +1 -0
- package/types/report/queryReport.d.ts +181 -0
- package/types/report/queryReport.d.ts.map +1 -0
- package/types/report/queryReportColumns.d.ts +12 -0
- package/types/report/queryReportColumns.d.ts.map +1 -0
- package/types/report/reportViewModel.d.ts +146 -0
- package/types/report/reportViewModel.d.ts.map +1 -0
- package/types/report/savedReports.d.ts +27 -0
- package/types/report/savedReports.d.ts.map +1 -0
- package/types/report/useFrappeReport.d.ts +60 -0
- package/types/report/useFrappeReport.d.ts.map +1 -0
- package/types/report/useQueryReport.d.ts +37 -0
- package/types/report/useQueryReport.d.ts.map +1 -0
- package/types/useFrappeForm.d.ts +142 -0
- package/types/useFrappeForm.d.ts.map +1 -0
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all) __defProp(target, name, {
|
|
7
|
+
get: all[name],
|
|
8
|
+
enumerable: true
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
14
|
+
get: () => from[key],
|
|
15
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
21
|
+
value: true
|
|
22
|
+
}), mod);
|
|
23
|
+
var queryReport_exports = {};
|
|
24
|
+
__export(queryReport_exports, {
|
|
25
|
+
buildRunFilters: () => buildRunFilters,
|
|
26
|
+
compactFilterValues: () => compactFilterValues,
|
|
27
|
+
compactQueryReportFilters: () => compactQueryReportFilters,
|
|
28
|
+
defaultFilterValues: () => defaultFilterValues,
|
|
29
|
+
extractScriptFilters: () => extractScriptFilters,
|
|
30
|
+
humanizeFrappeError: () => humanizeFrappeError,
|
|
31
|
+
isEmptyFilterValue: () => isEmptyFilterValue,
|
|
32
|
+
normalizeFilterMeta: () => normalizeFilterMeta,
|
|
33
|
+
normalizeQueryReportColumns: () => normalizeQueryReportColumns,
|
|
34
|
+
normalizeQueryReportPayload: () => normalizeQueryReportPayload,
|
|
35
|
+
normalizeQueryReportRows: () => normalizeQueryReportRows,
|
|
36
|
+
normalizeReportColumn: () => normalizeReportColumn,
|
|
37
|
+
normalizeReportPayload: () => normalizeReportPayload,
|
|
38
|
+
normalizeReportRows: () => normalizeReportRows,
|
|
39
|
+
scrubFieldname: () => scrubFieldname,
|
|
40
|
+
stripHtml: () => stripHtml
|
|
41
|
+
});
|
|
42
|
+
module.exports = __toCommonJS(queryReport_exports);
|
|
43
|
+
var import_frappe = require("@multiplatform.one/frappe");
|
|
44
|
+
function scrubFieldname(label) {
|
|
45
|
+
return label.replace(/ /g, "_").replace(/-/g, "_").toLowerCase();
|
|
46
|
+
}
|
|
47
|
+
function stripHtml(value) {
|
|
48
|
+
if (!value.includes("<") && !value.includes("&")) return value;
|
|
49
|
+
return value.replace(/<[^>]*>/g, "").replace(/ /g, " ").replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, '"').replace(/'/g, "'").replace(/\s+/g, " ").trim();
|
|
50
|
+
}
|
|
51
|
+
function parseWidth(raw) {
|
|
52
|
+
if (typeof raw === "number") return raw > 0 ? raw : void 0;
|
|
53
|
+
if (typeof raw === "string" && raw) {
|
|
54
|
+
const parsed = Number.parseInt(raw, 10);
|
|
55
|
+
if (!Number.isNaN(parsed) && parsed > 0) return parsed;
|
|
56
|
+
}
|
|
57
|
+
return void 0;
|
|
58
|
+
}
|
|
59
|
+
function parsePrecision(raw) {
|
|
60
|
+
const parsed = typeof raw === "string" && raw ? Number(raw) : raw;
|
|
61
|
+
return typeof parsed === "number" && Number.isInteger(parsed) && parsed >= 0 ? parsed : void 0;
|
|
62
|
+
}
|
|
63
|
+
function normalizeQueryReportColumns(raw) {
|
|
64
|
+
const used = /* @__PURE__ */new Set();
|
|
65
|
+
const columns = [];
|
|
66
|
+
(raw ?? []).forEach((entry, index) => {
|
|
67
|
+
let label = "";
|
|
68
|
+
let fieldname = "";
|
|
69
|
+
let fieldtype = "";
|
|
70
|
+
let options;
|
|
71
|
+
let width;
|
|
72
|
+
let precision;
|
|
73
|
+
if (typeof entry === "string") {
|
|
74
|
+
const [labelPart = "", typePart = "", widthPart = ""] = entry.split(":");
|
|
75
|
+
label = labelPart.trim();
|
|
76
|
+
const [typeBit = "", optionsBit = ""] = typePart.split("/");
|
|
77
|
+
fieldtype = typeBit.trim();
|
|
78
|
+
options = optionsBit.trim() || void 0;
|
|
79
|
+
width = parseWidth(widthPart.trim());
|
|
80
|
+
} else if (entry && typeof entry === "object") {
|
|
81
|
+
const column = entry;
|
|
82
|
+
label = typeof column.label === "string" ? column.label : "";
|
|
83
|
+
fieldname = typeof column.fieldname === "string" ? column.fieldname : "";
|
|
84
|
+
fieldtype = typeof column.fieldtype === "string" ? column.fieldtype : "";
|
|
85
|
+
options = typeof column.options === "string" && column.options ? column.options : void 0;
|
|
86
|
+
width = parseWidth(column.width);
|
|
87
|
+
precision = parsePrecision(column.precision);
|
|
88
|
+
} else {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
let id = fieldname || scrubFieldname(label) || `col_${index}`;
|
|
92
|
+
if (used.has(id)) id = `${id}_${index}`;
|
|
93
|
+
used.add(id);
|
|
94
|
+
columns.push({
|
|
95
|
+
fieldname: id,
|
|
96
|
+
label: label || id,
|
|
97
|
+
fieldtype,
|
|
98
|
+
options,
|
|
99
|
+
width,
|
|
100
|
+
precision
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
return columns;
|
|
104
|
+
}
|
|
105
|
+
function normalizeQueryReportRows(raw, columns) {
|
|
106
|
+
const rows = [];
|
|
107
|
+
for (const entry of raw ?? []) {
|
|
108
|
+
if (Array.isArray(entry)) {
|
|
109
|
+
const row = {};
|
|
110
|
+
columns.forEach((column, index) => {
|
|
111
|
+
row[column.fieldname] = entry[index];
|
|
112
|
+
});
|
|
113
|
+
rows.push(row);
|
|
114
|
+
} else if (entry && typeof entry === "object") {
|
|
115
|
+
rows.push(entry);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return rows;
|
|
119
|
+
}
|
|
120
|
+
function coerceFlag(raw) {
|
|
121
|
+
return raw === 1 || raw === "1" || raw === true ? 1 : 0;
|
|
122
|
+
}
|
|
123
|
+
function coerceFilterMetaEntry(row) {
|
|
124
|
+
const fieldname = typeof row.fieldname === "string" && row.fieldname ? row.fieldname : typeof row.label === "string" && row.label ? scrubFieldname(row.label) : "";
|
|
125
|
+
if (!fieldname) return void 0;
|
|
126
|
+
let defaultValue;
|
|
127
|
+
if (typeof row.default === "string" && row.default !== "") defaultValue = row.default;else if (typeof row.default === "number") defaultValue = row.default;else if (typeof row.default === "boolean") defaultValue = row.default ? 1 : 0;
|
|
128
|
+
return {
|
|
129
|
+
fieldname,
|
|
130
|
+
label: typeof row.label === "string" ? row.label : void 0,
|
|
131
|
+
fieldtype: typeof row.fieldtype === "string" ? row.fieldtype : void 0,
|
|
132
|
+
options: typeof row.options === "string" ? row.options : Array.isArray(row.options) && row.options.every(entry => typeof entry === "string") ? row.options.join("\n") : void 0,
|
|
133
|
+
default: defaultValue,
|
|
134
|
+
mandatory: coerceFlag(row.mandatory) || coerceFlag(row.reqd) ? 1 : 0,
|
|
135
|
+
wildcard_filter: coerceFlag(row.wildcard_filter),
|
|
136
|
+
hidden: coerceFlag(row.hidden),
|
|
137
|
+
read_only: coerceFlag(row.read_only) || coerceFlag(row.readOnly) ? 1 : 0
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
function normalizeFilterMeta(raw) {
|
|
141
|
+
if (!Array.isArray(raw)) return [];
|
|
142
|
+
const filters = [];
|
|
143
|
+
for (const entry of raw) {
|
|
144
|
+
if (!entry || typeof entry !== "object") continue;
|
|
145
|
+
const meta = coerceFilterMetaEntry(entry);
|
|
146
|
+
if (meta) filters.push(meta);
|
|
147
|
+
}
|
|
148
|
+
return filters;
|
|
149
|
+
}
|
|
150
|
+
function isEmptyFilterValue(value) {
|
|
151
|
+
return value === void 0 || value === null || value === "";
|
|
152
|
+
}
|
|
153
|
+
function compactFilterValues(values) {
|
|
154
|
+
const out = {};
|
|
155
|
+
for (const [fieldname, value] of Object.entries(values ?? {})) {
|
|
156
|
+
if (!isEmptyFilterValue(value)) out[fieldname] = value;
|
|
157
|
+
}
|
|
158
|
+
return out;
|
|
159
|
+
}
|
|
160
|
+
function normalizeQueryReportPayload(raw) {
|
|
161
|
+
const columns = normalizeQueryReportColumns(raw.columns);
|
|
162
|
+
const rows = normalizeQueryReportRows(raw.result, columns);
|
|
163
|
+
const message = Array.isArray(raw.message) ? raw.message.filter(Boolean).join(" ") : raw.message ?? void 0;
|
|
164
|
+
return {
|
|
165
|
+
columns,
|
|
166
|
+
rows,
|
|
167
|
+
message: message || void 0,
|
|
168
|
+
addTotalRow: Boolean(raw.add_total_row) && !raw.skip_total_row,
|
|
169
|
+
filters: raw.filters,
|
|
170
|
+
raw
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
function compactQueryReportFilters(filterMeta, values) {
|
|
174
|
+
const declared = {};
|
|
175
|
+
for (const filter of filterMeta) declared[filter.fieldname] = values[filter.fieldname];
|
|
176
|
+
return compactFilterValues(declared);
|
|
177
|
+
}
|
|
178
|
+
function defaultFilterValues(filterMeta) {
|
|
179
|
+
const defaults = {};
|
|
180
|
+
for (const filter of filterMeta) {
|
|
181
|
+
if (filter.default !== void 0 && filter.default !== "") defaults[filter.fieldname] = filter.default;
|
|
182
|
+
}
|
|
183
|
+
return defaults;
|
|
184
|
+
}
|
|
185
|
+
function buildRunFilters(filterMeta, filters) {
|
|
186
|
+
const metaByField = new Map(filterMeta.map(filter => [filter.fieldname, filter]));
|
|
187
|
+
const out = {};
|
|
188
|
+
for (const [fieldname, rawValue] of Object.entries(filters)) {
|
|
189
|
+
let value = rawValue === true ? 1 : rawValue;
|
|
190
|
+
if (isEmptyFilterValue(value) || value === false || value === 0) continue;
|
|
191
|
+
const meta = metaByField.get(fieldname);
|
|
192
|
+
if (meta?.wildcard_filter === 1 && typeof value === "string" && !value.includes("%")) value = `%${value}%`;
|
|
193
|
+
if (meta?.fieldtype !== void 0 && NUMERIC_FILTER_FIELDTYPES.has(meta.fieldtype) && typeof value === "string" && value.trim() !== "" && Number.isFinite(Number(value))) value = Number(value);
|
|
194
|
+
out[fieldname] = value;
|
|
195
|
+
}
|
|
196
|
+
return out;
|
|
197
|
+
}
|
|
198
|
+
const EMPTY_EXTRACTION = {
|
|
199
|
+
declared: false,
|
|
200
|
+
declaredCount: 0,
|
|
201
|
+
filters: []
|
|
202
|
+
};
|
|
203
|
+
const RENDERABLE_FILTER_FIELDTYPES = /* @__PURE__ */new Set(["Data", "Small Text", "Text", "Int", "Float", "Currency", "Percent", "Date", "Datetime", "Time", "Check", "Select", "Link"]);
|
|
204
|
+
const NUMERIC_FILTER_FIELDTYPES = /* @__PURE__ */new Set(["Int", "Float", "Currency", "Percent"]);
|
|
205
|
+
function scanStringEnd(text, start) {
|
|
206
|
+
const quote = text[start];
|
|
207
|
+
let index = start + 1;
|
|
208
|
+
while (index < text.length) {
|
|
209
|
+
const ch = text[index];
|
|
210
|
+
if (ch === "\\") {
|
|
211
|
+
index += 2;
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
if (ch === quote) return index + 1;
|
|
215
|
+
index += 1;
|
|
216
|
+
}
|
|
217
|
+
return index;
|
|
218
|
+
}
|
|
219
|
+
function scanCommentEnd(text, start) {
|
|
220
|
+
const next = text[start + 1];
|
|
221
|
+
if (next === "/") {
|
|
222
|
+
const newline = text.indexOf("\n", start);
|
|
223
|
+
return newline === -1 ? text.length : newline + 1;
|
|
224
|
+
}
|
|
225
|
+
if (next === "*") {
|
|
226
|
+
const end = text.indexOf("*/", start + 2);
|
|
227
|
+
return end === -1 ? text.length : end + 2;
|
|
228
|
+
}
|
|
229
|
+
return start + 1;
|
|
230
|
+
}
|
|
231
|
+
function matchBracket(text, open) {
|
|
232
|
+
const openCh = text[open];
|
|
233
|
+
const closeCh = openCh === "[" ? "]" : openCh === "{" ? "}" : openCh === "(" ? ")" : "";
|
|
234
|
+
if (!closeCh) return -1;
|
|
235
|
+
let depth = 0;
|
|
236
|
+
let index = open;
|
|
237
|
+
while (index < text.length) {
|
|
238
|
+
const ch = text[index];
|
|
239
|
+
if (ch === "'" || ch === '"' || ch === "`") {
|
|
240
|
+
index = scanStringEnd(text, index);
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
if (ch === "/") {
|
|
244
|
+
index = scanCommentEnd(text, index);
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
if (ch === openCh) depth += 1;else if (ch === closeCh) {
|
|
248
|
+
depth -= 1;
|
|
249
|
+
if (depth === 0) return index;
|
|
250
|
+
}
|
|
251
|
+
index += 1;
|
|
252
|
+
}
|
|
253
|
+
return -1;
|
|
254
|
+
}
|
|
255
|
+
function unescapeStringBody(body) {
|
|
256
|
+
return body.replace(/\\(.)/g, (_, ch) => ch === "n" ? "\n" : ch === "t" ? " " : ch === "r" ? "\r" : ch);
|
|
257
|
+
}
|
|
258
|
+
function interpretScriptValue(raw) {
|
|
259
|
+
const value = raw.trim();
|
|
260
|
+
if (!value) return void 0;
|
|
261
|
+
const first = value[0];
|
|
262
|
+
if (first === "'" || first === '"' || first === "`") {
|
|
263
|
+
const end = scanStringEnd(value, 0);
|
|
264
|
+
if (end !== value.length) return void 0;
|
|
265
|
+
const body = value.slice(1, -1);
|
|
266
|
+
if (first === "`" && body.includes("${")) return void 0;
|
|
267
|
+
return unescapeStringBody(body);
|
|
268
|
+
}
|
|
269
|
+
if (/^__\s*\(/.test(value)) {
|
|
270
|
+
const parenIndex = value.indexOf("(");
|
|
271
|
+
const rest = value.slice(parenIndex + 1).trim();
|
|
272
|
+
const quote = rest[0];
|
|
273
|
+
if (quote !== "'" && quote !== '"' && quote !== "`") return void 0;
|
|
274
|
+
const quoteIndex = value.indexOf(quote, parenIndex);
|
|
275
|
+
const end = scanStringEnd(value, quoteIndex);
|
|
276
|
+
return unescapeStringBody(value.slice(quoteIndex + 1, end - 1));
|
|
277
|
+
}
|
|
278
|
+
if (/^-?\d+(\.\d+)?$/.test(value)) return Number(value);
|
|
279
|
+
if (value === "true") return true;
|
|
280
|
+
if (value === "false") return false;
|
|
281
|
+
if (first === "[") {
|
|
282
|
+
const close = matchBracket(value, 0);
|
|
283
|
+
if (close !== value.length - 1) return void 0;
|
|
284
|
+
const entries = [];
|
|
285
|
+
let index = 1;
|
|
286
|
+
while (index < close) {
|
|
287
|
+
const ch = value[index];
|
|
288
|
+
if (ch === "'" || ch === '"' || ch === "`") {
|
|
289
|
+
const end = scanStringEnd(value, index);
|
|
290
|
+
const body = value.slice(index + 1, end - 1);
|
|
291
|
+
if (ch === "`" && body.includes("${")) return void 0;
|
|
292
|
+
entries.push(unescapeStringBody(body));
|
|
293
|
+
index = end;
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
if (ch === "/" && (value[index + 1] === "/" || value[index + 1] === "*")) {
|
|
297
|
+
index = scanCommentEnd(value, index);
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
if (ch === "," || ch === " " || ch === " " || ch === "\n" || ch === "\r") {
|
|
301
|
+
index += 1;
|
|
302
|
+
continue;
|
|
303
|
+
}
|
|
304
|
+
return void 0;
|
|
305
|
+
}
|
|
306
|
+
return entries;
|
|
307
|
+
}
|
|
308
|
+
return void 0;
|
|
309
|
+
}
|
|
310
|
+
function parseScriptObject(source) {
|
|
311
|
+
const record = {};
|
|
312
|
+
let index = 1;
|
|
313
|
+
const end = source.length - 1;
|
|
314
|
+
while (index < end) {
|
|
315
|
+
const ch = source[index];
|
|
316
|
+
if (ch === "/" && (source[index + 1] === "/" || source[index + 1] === "*")) {
|
|
317
|
+
index = scanCommentEnd(source, index);
|
|
318
|
+
continue;
|
|
319
|
+
}
|
|
320
|
+
if (/\s|,/.test(ch)) {
|
|
321
|
+
index += 1;
|
|
322
|
+
continue;
|
|
323
|
+
}
|
|
324
|
+
let key = "";
|
|
325
|
+
if (ch === "'" || ch === '"') {
|
|
326
|
+
const keyEnd = scanStringEnd(source, index);
|
|
327
|
+
key = source.slice(index + 1, keyEnd - 1);
|
|
328
|
+
index = keyEnd;
|
|
329
|
+
} else {
|
|
330
|
+
const keyMatch = source.slice(index, index + 64).match(/^[A-Za-z_$][\w$]*/);
|
|
331
|
+
if (!keyMatch) break;
|
|
332
|
+
key = keyMatch[0];
|
|
333
|
+
index += key.length;
|
|
334
|
+
}
|
|
335
|
+
while (index < end && /\s/.test(source[index])) index += 1;
|
|
336
|
+
if (source[index] !== ":") break;
|
|
337
|
+
index += 1;
|
|
338
|
+
let valueRaw = "";
|
|
339
|
+
while (index < end) {
|
|
340
|
+
const valueCh = source[index];
|
|
341
|
+
if (valueCh === "'" || valueCh === '"' || valueCh === "`") {
|
|
342
|
+
const stringEnd = scanStringEnd(source, index);
|
|
343
|
+
valueRaw += source.slice(index, stringEnd);
|
|
344
|
+
index = stringEnd;
|
|
345
|
+
continue;
|
|
346
|
+
}
|
|
347
|
+
if (valueCh === "/" && (source[index + 1] === "/" || source[index + 1] === "*")) {
|
|
348
|
+
index = scanCommentEnd(source, index);
|
|
349
|
+
continue;
|
|
350
|
+
}
|
|
351
|
+
if (valueCh === "{" || valueCh === "[" || valueCh === "(") {
|
|
352
|
+
const close = matchBracket(source, index);
|
|
353
|
+
if (close === -1) return record;
|
|
354
|
+
valueRaw += source.slice(index, close + 1);
|
|
355
|
+
index = close + 1;
|
|
356
|
+
continue;
|
|
357
|
+
}
|
|
358
|
+
if (valueCh === ",") {
|
|
359
|
+
index += 1;
|
|
360
|
+
break;
|
|
361
|
+
}
|
|
362
|
+
valueRaw += valueCh;
|
|
363
|
+
index += 1;
|
|
364
|
+
}
|
|
365
|
+
const interpreted = interpretScriptValue(valueRaw);
|
|
366
|
+
if (interpreted !== void 0) record[key] = interpreted;
|
|
367
|
+
}
|
|
368
|
+
return record;
|
|
369
|
+
}
|
|
370
|
+
function extractScriptFilters(script) {
|
|
371
|
+
if (!script) return EMPTY_EXTRACTION;
|
|
372
|
+
const keyMatch = script.match(/\bfilters\s*:\s*\[/);
|
|
373
|
+
if (!keyMatch || keyMatch.index === void 0) return EMPTY_EXTRACTION;
|
|
374
|
+
const openBracket = keyMatch.index + keyMatch[0].length - 1;
|
|
375
|
+
const closeBracket = matchBracket(script, openBracket);
|
|
376
|
+
if (closeBracket === -1) return EMPTY_EXTRACTION;
|
|
377
|
+
const filters = [];
|
|
378
|
+
let declaredCount = 0;
|
|
379
|
+
let index = openBracket + 1;
|
|
380
|
+
while (index < closeBracket) {
|
|
381
|
+
const ch = script[index];
|
|
382
|
+
if (ch === "{") {
|
|
383
|
+
const close = matchBracket(script, index);
|
|
384
|
+
if (close === -1 || close > closeBracket) break;
|
|
385
|
+
declaredCount += 1;
|
|
386
|
+
const record = parseScriptObject(script.slice(index, close + 1));
|
|
387
|
+
const meta = coerceFilterMetaEntry(record);
|
|
388
|
+
const fieldtype = meta?.fieldtype ?? "Data";
|
|
389
|
+
const needsOptions = fieldtype === "Select" || fieldtype === "Link";
|
|
390
|
+
if (meta && RENDERABLE_FILTER_FIELDTYPES.has(fieldtype) && (!needsOptions || (meta.options ?? "") !== "")) filters.push({
|
|
391
|
+
...meta,
|
|
392
|
+
fieldtype
|
|
393
|
+
});
|
|
394
|
+
index = close + 1;
|
|
395
|
+
continue;
|
|
396
|
+
}
|
|
397
|
+
if (ch === "'" || ch === '"' || ch === "`") {
|
|
398
|
+
index = scanStringEnd(script, index);
|
|
399
|
+
continue;
|
|
400
|
+
}
|
|
401
|
+
if (ch === "/" && (script[index + 1] === "/" || script[index + 1] === "*")) {
|
|
402
|
+
index = scanCommentEnd(script, index);
|
|
403
|
+
continue;
|
|
404
|
+
}
|
|
405
|
+
index += 1;
|
|
406
|
+
}
|
|
407
|
+
return {
|
|
408
|
+
declared: true,
|
|
409
|
+
declaredCount,
|
|
410
|
+
filters
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
function decodeServerMessages(raw) {
|
|
414
|
+
if (typeof raw !== "string" || !raw.startsWith("[")) return void 0;
|
|
415
|
+
const lines = (0, import_frappe.readServerMessages)(raw);
|
|
416
|
+
return lines.length > 0 ? lines.join("\n") : void 0;
|
|
417
|
+
}
|
|
418
|
+
function humanizeFrappeError(err) {
|
|
419
|
+
if (err instanceof Error) {
|
|
420
|
+
const source = err;
|
|
421
|
+
const data = source.data;
|
|
422
|
+
const decoded = decodeServerMessages(data?._server_messages) ?? decodeServerMessages(err.message);
|
|
423
|
+
if (!decoded) return err;
|
|
424
|
+
const humanized = new Error(decoded);
|
|
425
|
+
if (source.status !== void 0) humanized.status = source.status;
|
|
426
|
+
const excType = source.exc_type ?? data?.exc_type;
|
|
427
|
+
if (excType !== void 0) humanized.exc_type = excType;
|
|
428
|
+
if (source.data !== void 0) humanized.data = source.data;
|
|
429
|
+
if (err.stack) humanized.stack = err.stack;
|
|
430
|
+
return humanized;
|
|
431
|
+
}
|
|
432
|
+
return new Error(String(err));
|
|
433
|
+
}
|
|
434
|
+
const normalizeReportPayload = normalizeQueryReportPayload;
|
|
435
|
+
function normalizeReportColumn(column) {
|
|
436
|
+
return normalizeQueryReportColumns([column])[0] ?? {
|
|
437
|
+
fieldname: "col_0",
|
|
438
|
+
label: "col_0",
|
|
439
|
+
fieldtype: ""
|
|
440
|
+
};
|
|
441
|
+
}
|
|
442
|
+
function normalizeReportRows(columns, result) {
|
|
443
|
+
return normalizeQueryReportRows(result, columns);
|
|
444
|
+
}
|