@dforge-core/metadata 0.0.1
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/actions.d.ts +31 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +7 -0
- package/dist/actions.js.map +1 -0
- package/dist/aggregation.d.ts +13 -0
- package/dist/aggregation.d.ts.map +1 -0
- package/dist/aggregation.js +17 -0
- package/dist/aggregation.js.map +1 -0
- package/dist/base-datatypes.d.ts +5 -0
- package/dist/base-datatypes.d.ts.map +1 -0
- package/dist/base-datatypes.js +49 -0
- package/dist/base-datatypes.js.map +1 -0
- package/dist/column-types.d.ts +5 -0
- package/dist/column-types.d.ts.map +1 -0
- package/dist/column-types.js +18 -0
- package/dist/column-types.js.map +1 -0
- package/dist/data-views.d.ts +95 -0
- package/dist/data-views.d.ts.map +1 -0
- package/dist/data-views.js +17 -0
- package/dist/data-views.js.map +1 -0
- package/dist/derive.d.ts +19 -0
- package/dist/derive.d.ts.map +1 -0
- package/dist/derive.js +51 -0
- package/dist/derive.js.map +1 -0
- package/dist/entity.d.ts +110 -0
- package/dist/entity.d.ts.map +1 -0
- package/dist/entity.js +7 -0
- package/dist/entity.js.map +1 -0
- package/dist/field-types.d.ts +260 -0
- package/dist/field-types.d.ts.map +1 -0
- package/dist/field-types.js +55 -0
- package/dist/field-types.js.map +1 -0
- package/dist/filter.d.ts +26 -0
- package/dist/filter.d.ts.map +1 -0
- package/dist/filter.js +7 -0
- package/dist/filter.js.map +1 -0
- package/dist/folders.d.ts +32 -0
- package/dist/folders.d.ts.map +1 -0
- package/dist/folders.js +6 -0
- package/dist/folders.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/jobs.d.ts +32 -0
- package/dist/jobs.d.ts.map +1 -0
- package/dist/jobs.js +3 -0
- package/dist/jobs.js.map +1 -0
- package/dist/manifest.d.ts +53 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +4 -0
- package/dist/manifest.js.map +1 -0
- package/dist/menus.d.ts +32 -0
- package/dist/menus.d.ts.map +1 -0
- package/dist/menus.js +3 -0
- package/dist/menus.js.map +1 -0
- package/dist/print-templates.d.ts +36 -0
- package/dist/print-templates.d.ts.map +1 -0
- package/dist/print-templates.js +4 -0
- package/dist/print-templates.js.map +1 -0
- package/dist/reports.d.ts +84 -0
- package/dist/reports.d.ts.map +1 -0
- package/dist/reports.js +24 -0
- package/dist/reports.js.map +1 -0
- package/dist/roles.d.ts +10 -0
- package/dist/roles.d.ts.map +1 -0
- package/dist/roles.js +3 -0
- package/dist/roles.js.map +1 -0
- package/dist/seed-data.d.ts +8 -0
- package/dist/seed-data.d.ts.map +1 -0
- package/dist/seed-data.js +4 -0
- package/dist/seed-data.js.map +1 -0
- package/dist/settings.d.ts +26 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +3 -0
- package/dist/settings.js.map +1 -0
- package/dist/traits.d.ts +14 -0
- package/dist/traits.d.ts.map +1 -0
- package/dist/traits.js +121 -0
- package/dist/traits.js.map +1 -0
- package/dist/triggers.d.ts +24 -0
- package/dist/triggers.d.ts.map +1 -0
- package/dist/triggers.js +3 -0
- package/dist/triggers.js.map +1 -0
- package/dist/types.d.ts +121 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/webhooks.d.ts +31 -0
- package/dist/webhooks.d.ts.map +1 -0
- package/dist/webhooks.js +3 -0
- package/dist/webhooks.js.map +1 -0
- package/package.json +54 -0
- package/src/actions.ts +38 -0
- package/src/aggregation.ts +21 -0
- package/src/base-datatypes.ts +53 -0
- package/src/column-types.ts +22 -0
- package/src/data-views.ts +139 -0
- package/src/derive.ts +63 -0
- package/src/entity.ts +124 -0
- package/src/field-types.ts +68 -0
- package/src/filter.ts +34 -0
- package/src/folders.ts +39 -0
- package/src/index.ts +109 -0
- package/src/jobs.ts +34 -0
- package/src/manifest.ts +54 -0
- package/src/menus.ts +36 -0
- package/src/print-templates.ts +41 -0
- package/src/reports.ts +111 -0
- package/src/roles.ts +12 -0
- package/src/seed-data.ts +10 -0
- package/src/settings.ts +29 -0
- package/src/traits.ts +127 -0
- package/src/triggers.ts +27 -0
- package/src/types.ts +177 -0
- package/src/webhooks.ts +35 -0
package/dist/menus.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** Menu item type: V=Data View, D=Document, R=Report, null=folder/section. */
|
|
2
|
+
export type MenuItemType = "V" | "D" | "R" | null;
|
|
3
|
+
/** A menu item; folder/section nodes nest children and omit `itemType`. */
|
|
4
|
+
export interface MenuItemDef {
|
|
5
|
+
itemType?: MenuItemType;
|
|
6
|
+
/** Data view code (when `itemType` is 'V'). */
|
|
7
|
+
dataViewCode?: string;
|
|
8
|
+
/** Document code (when `itemType` is 'D'). */
|
|
9
|
+
documentCode?: string;
|
|
10
|
+
/** Report code (when `itemType` is 'R'). */
|
|
11
|
+
reportCode?: string;
|
|
12
|
+
orderNum?: number;
|
|
13
|
+
/** Display text. */
|
|
14
|
+
label: string;
|
|
15
|
+
description?: string;
|
|
16
|
+
/** Bootstrap icon name. */
|
|
17
|
+
icon?: string;
|
|
18
|
+
/** Child items keyed by item code (folder/section nodes). */
|
|
19
|
+
children?: Record<string, MenuItemDef>;
|
|
20
|
+
}
|
|
21
|
+
/** A menu (value in the `ui/menus.json` map). */
|
|
22
|
+
export interface MenuDef {
|
|
23
|
+
label: string;
|
|
24
|
+
description?: string;
|
|
25
|
+
/** Folder codes where this menu is available. */
|
|
26
|
+
folders?: string[];
|
|
27
|
+
/** Menu items keyed by item code. */
|
|
28
|
+
items: Record<string, MenuItemDef>;
|
|
29
|
+
}
|
|
30
|
+
/** A `ui/menus.json` file: menu code → definition. */
|
|
31
|
+
export type MenusFile = Record<string, MenuDef>;
|
|
32
|
+
//# sourceMappingURL=menus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menus.d.ts","sourceRoot":"","sources":["../src/menus.ts"],"names":[],"mappings":"AAEA,8EAA8E;AAC9E,MAAM,MAAM,YAAY,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC;AAElD,2EAA2E;AAC3E,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACvC;AAED,iDAAiD;AACjD,MAAM,WAAW,OAAO;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACnC;AAED,sDAAsD;AACtD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC"}
|
package/dist/menus.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menus.js","sourceRoot":"","sources":["../src/menus.ts"],"names":[],"mappings":"AAAA,2EAA2E"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** Page margins (CSS lengths, e.g. '15mm'). */
|
|
2
|
+
export interface PrintMargins {
|
|
3
|
+
top?: string;
|
|
4
|
+
right?: string;
|
|
5
|
+
bottom?: string;
|
|
6
|
+
left?: string;
|
|
7
|
+
}
|
|
8
|
+
/** Default page geometry applied when printing from the UI. */
|
|
9
|
+
export interface PrintPageSettings {
|
|
10
|
+
size?: "A4" | "letter" | "legal";
|
|
11
|
+
orientation?: "portrait" | "landscape";
|
|
12
|
+
margins?: PrintMargins;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* A print template or snippet (value in the print_templates map).
|
|
16
|
+
* `type: 'template'` (default) is entity-bound; `type: 'snippet'` is a
|
|
17
|
+
* module-scoped Liquid partial included via {% include 'module.snippet' %}.
|
|
18
|
+
* Either `file` or `template` must be set (`file` wins when both are present).
|
|
19
|
+
*/
|
|
20
|
+
export interface PrintTemplateDef {
|
|
21
|
+
type?: "template" | "snippet";
|
|
22
|
+
/** Entity code rendered. Required for templates; ignored for snippets. */
|
|
23
|
+
entityCd?: string;
|
|
24
|
+
/** Human-readable label shown in the print menu. */
|
|
25
|
+
description?: string;
|
|
26
|
+
/** Inline Liquid HTML. */
|
|
27
|
+
template?: string;
|
|
28
|
+
/** Relative path under the module's `print_templates/` directory. */
|
|
29
|
+
file?: string;
|
|
30
|
+
/** Inline CSS, or a `.css` filename resolved relative to `print_templates/`. */
|
|
31
|
+
css?: string;
|
|
32
|
+
pageSettings?: PrintPageSettings;
|
|
33
|
+
}
|
|
34
|
+
/** A `ui/print_templates.json` file: template_cd → definition. */
|
|
35
|
+
export type PrintTemplatesFile = Record<string, PrintTemplateDef>;
|
|
36
|
+
//# sourceMappingURL=print-templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"print-templates.d.ts","sourceRoot":"","sources":["../src/print-templates.ts"],"names":[],"mappings":"AAGA,+CAA+C;AAC/C,MAAM,WAAW,YAAY;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,+DAA+D;AAC/D,MAAM,WAAW,iBAAiB;IACjC,IAAI,CAAC,EAAE,IAAI,GAAG,QAAQ,GAAG,OAAO,CAAC;IACjC,WAAW,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;IACvC,OAAO,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAChC,IAAI,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC9B,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,iBAAiB,CAAC;CACjC;AAED,kEAAkE;AAClE,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"print-templates.js","sourceRoot":"","sources":["../src/print-templates.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,yCAAyC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { Filter, SortClause } from "./filter";
|
|
2
|
+
import type { NamedKind } from "./types";
|
|
3
|
+
/** Report visualization types. Source: reports.schema.json (`vizType`). */
|
|
4
|
+
export type VizType = "table" | "chart" | "metric" | "pivot";
|
|
5
|
+
/** Friendly picker list of report visualization types. */
|
|
6
|
+
export declare const vizTypes: readonly NamedKind[];
|
|
7
|
+
/** Chart kinds used by report `config.chartType` (curated; rendered via Chart.js). */
|
|
8
|
+
export declare const chartTypes: readonly NamedKind[];
|
|
9
|
+
/** A report parameter definition (report- or dataset-level). */
|
|
10
|
+
export interface ParamDef {
|
|
11
|
+
/** Field type code (see settings for the common list). */
|
|
12
|
+
fieldTypeCd: string;
|
|
13
|
+
label?: string;
|
|
14
|
+
/** Display order in the parameter form (falls back to declaration order). */
|
|
15
|
+
orderNum?: number;
|
|
16
|
+
/** Whether the user must provide a value. */
|
|
17
|
+
required?: boolean;
|
|
18
|
+
/** Alternate spelling of `required` used by some modules. Prefer `required`. */
|
|
19
|
+
isRequired?: boolean;
|
|
20
|
+
/** Default value applied when the user doesn't provide one. */
|
|
21
|
+
default?: unknown;
|
|
22
|
+
/** Entity link for lookup-type params. */
|
|
23
|
+
link?: {
|
|
24
|
+
entity: string;
|
|
25
|
+
otherKey?: string;
|
|
26
|
+
};
|
|
27
|
+
/** Field-type-specific params. */
|
|
28
|
+
params?: Record<string, unknown>;
|
|
29
|
+
}
|
|
30
|
+
/** SQL/entity query for a `datasetType: 'Q'` dataset. */
|
|
31
|
+
export interface ReportQuery {
|
|
32
|
+
/** Source entity code. */
|
|
33
|
+
entityCd: string;
|
|
34
|
+
/** Column codes to select (supports dot navigation: 'customer.name'). */
|
|
35
|
+
columns?: string[];
|
|
36
|
+
filter?: Filter;
|
|
37
|
+
sort?: SortClause[];
|
|
38
|
+
}
|
|
39
|
+
/** Per-column metadata override on a dataset. */
|
|
40
|
+
export interface ColumnDef {
|
|
41
|
+
label?: string;
|
|
42
|
+
visible?: boolean;
|
|
43
|
+
width?: number;
|
|
44
|
+
}
|
|
45
|
+
/** A report dataset (value in the report's `datasets` map). */
|
|
46
|
+
export interface Dataset {
|
|
47
|
+
/** Display label (used in panel headings if no `title`). */
|
|
48
|
+
caption?: string;
|
|
49
|
+
/** Q = SQL/entity query, S = stored procedure. */
|
|
50
|
+
datasetType: "Q" | "S";
|
|
51
|
+
/** Used when `datasetType` is 'Q'. */
|
|
52
|
+
query?: ReportQuery;
|
|
53
|
+
/** Used when `datasetType` is 'S'. */
|
|
54
|
+
procedureName?: string;
|
|
55
|
+
/** Optional column metadata overrides: field code → override. */
|
|
56
|
+
columnsDef?: Record<string, ColumnDef>;
|
|
57
|
+
/** Dataset-level parameters (alternative to report-level `parameters`). */
|
|
58
|
+
params?: Record<string, ParamDef>;
|
|
59
|
+
}
|
|
60
|
+
/** A single visualization panel within the report layout. */
|
|
61
|
+
export interface ReportPanel {
|
|
62
|
+
vizType: VizType;
|
|
63
|
+
/** Dataset code (key in the report's `datasets` map). */
|
|
64
|
+
datasetCd: string;
|
|
65
|
+
title?: string;
|
|
66
|
+
/** Viz-type-specific config (chart → { chartType, categoryCol, … }). */
|
|
67
|
+
config?: Record<string, unknown>;
|
|
68
|
+
}
|
|
69
|
+
export interface ReportLayout {
|
|
70
|
+
panels: ReportPanel[];
|
|
71
|
+
}
|
|
72
|
+
/** A single report (value in the `ui/reports.json` map). */
|
|
73
|
+
export interface ReportDef {
|
|
74
|
+
/** Human-readable report title. */
|
|
75
|
+
description: string;
|
|
76
|
+
layout: ReportLayout;
|
|
77
|
+
/** Dataset code → dataset definition. */
|
|
78
|
+
datasets: Record<string, Dataset>;
|
|
79
|
+
/** Report-level parameters (alternative to per-dataset `params`). */
|
|
80
|
+
parameters?: Record<string, ParamDef>;
|
|
81
|
+
}
|
|
82
|
+
/** A `ui/reports.json` file: report code → definition. */
|
|
83
|
+
export type ReportsFile = Record<string, ReportDef>;
|
|
84
|
+
//# sourceMappingURL=reports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reports.d.ts","sourceRoot":"","sources":["../src/reports.ts"],"names":[],"mappings":"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"}
|
package/dist/reports.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Report registries + the authoring shape of a `ui/reports.json` file.
|
|
2
|
+
//
|
|
3
|
+
// `vizTypes` / `chartTypes` are the friendly picker lists; `ReportDef` and
|
|
4
|
+
// friends mirror reports.schema.json so editors/MCP/CLI can build reports.
|
|
5
|
+
/** Friendly picker list of report visualization types. */
|
|
6
|
+
export const vizTypes = [
|
|
7
|
+
{ cd: "table", name: "Table" },
|
|
8
|
+
{ cd: "chart", name: "Chart" },
|
|
9
|
+
{ cd: "metric", name: "Metric" },
|
|
10
|
+
{ cd: "pivot", name: "Pivot" },
|
|
11
|
+
];
|
|
12
|
+
/** Chart kinds used by report `config.chartType` (curated; rendered via Chart.js). */
|
|
13
|
+
export const chartTypes = [
|
|
14
|
+
{ cd: "bar", name: "Bar" },
|
|
15
|
+
{ cd: "line", name: "Line" },
|
|
16
|
+
{ cd: "area", name: "Area" },
|
|
17
|
+
{ cd: "pie", name: "Pie" },
|
|
18
|
+
{ cd: "donut", name: "Donut" },
|
|
19
|
+
{ cd: "scatter", name: "Scatter" },
|
|
20
|
+
{ cd: "bubble", name: "Bubble" },
|
|
21
|
+
{ cd: "heatmap", name: "Heatmap" },
|
|
22
|
+
{ cd: "funnel", name: "Funnel" },
|
|
23
|
+
];
|
|
24
|
+
//# sourceMappingURL=reports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reports.js","sourceRoot":"","sources":["../src/reports.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,EAAE;AACF,2EAA2E;AAC3E,2EAA2E;AAQ3E,0DAA0D;AAC1D,MAAM,CAAC,MAAM,QAAQ,GAAyB;IAC7C,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;IAC9B,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;IAC9B,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;IAChC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;CACrB,CAAC;AAEX,sFAAsF;AACtF,MAAM,CAAC,MAAM,UAAU,GAAyB;IAC/C,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;IAC1B,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;IAC5B,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;IAC5B,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;IAC1B,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;IAC9B,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;IAClC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;IAChC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;IAClC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;CACvB,CAAC"}
|
package/dist/roles.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** A role with its entity rights (value in the roles map). */
|
|
2
|
+
export interface RoleDef {
|
|
3
|
+
/** Role display name. */
|
|
4
|
+
description: string;
|
|
5
|
+
/** Entity code → rights string. Rights: S/I/U/D/C/E (pattern ^[SIUDCE]*$). */
|
|
6
|
+
rights: Record<string, string>;
|
|
7
|
+
}
|
|
8
|
+
/** A `roles.json` file: role code → definition. */
|
|
9
|
+
export type RolesFile = Record<string, RoleDef>;
|
|
10
|
+
//# sourceMappingURL=roles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../src/roles.ts"],"names":[],"mappings":"AAEA,8DAA8D;AAC9D,MAAM,WAAW,OAAO;IACvB,yBAAyB;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,mDAAmD;AACnD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC"}
|
package/dist/roles.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roles.js","sourceRoot":"","sources":["../src/roles.ts"],"names":[],"mappings":"AAAA,iFAAiF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** A seed-data file: records to insert into one entity. */
|
|
2
|
+
export interface SeedDataFile {
|
|
3
|
+
/** Target entity code. */
|
|
4
|
+
entityCode: string;
|
|
5
|
+
/** Records to insert; each is a `column_code → value` map. */
|
|
6
|
+
records: Record<string, unknown>[];
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=seed-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed-data.d.ts","sourceRoot":"","sources":["../src/seed-data.ts"],"names":[],"mappings":"AAGA,2DAA2D;AAC3D,MAAM,WAAW,YAAY;IAC5B,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CACnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed-data.js","sourceRoot":"","sources":["../src/seed-data.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,mCAAmC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** Underlying primitive datatype for a setting. */
|
|
2
|
+
export type SettingBaseDatatype = "string" | "number" | "bool" | "date" | "dateTime" | "time" | "json";
|
|
3
|
+
/** A single setting definition (value in the settings map). */
|
|
4
|
+
export interface SettingDef {
|
|
5
|
+
/** Field type code (must match a `dforge.field_type` code). */
|
|
6
|
+
fieldTypeCd: string;
|
|
7
|
+
/** Underlying primitive datatype (older settings declare this explicitly). */
|
|
8
|
+
baseDatatypeCd?: SettingBaseDatatype;
|
|
9
|
+
/** Display label (preferred for new settings). */
|
|
10
|
+
label?: string;
|
|
11
|
+
/** Display label (older style). Prefer `label`. */
|
|
12
|
+
description?: string;
|
|
13
|
+
/** Alternative older label key. Prefer `label`. */
|
|
14
|
+
desc?: string;
|
|
15
|
+
/** Default value before the user sets one. */
|
|
16
|
+
defaultValue?: unknown;
|
|
17
|
+
/** Formula to evaluate the default (alternative to `defaultValue`). */
|
|
18
|
+
formula?: string;
|
|
19
|
+
/** If true, must be set somewhere in the folder chain for install to proceed. */
|
|
20
|
+
required?: boolean;
|
|
21
|
+
/** Field-type-specific parameters (dropdown options, min/max, lookup link, …). */
|
|
22
|
+
params?: Record<string, unknown>;
|
|
23
|
+
}
|
|
24
|
+
/** A `settings.json` file: setting code → definition. */
|
|
25
|
+
export type SettingsFile = Record<string, SettingDef>;
|
|
26
|
+
//# sourceMappingURL=settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAEA,mDAAmD;AACnD,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvG,+DAA+D;AAC/D,MAAM,WAAW,UAAU;IAC1B,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,yDAAyD;AACzD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC"}
|
package/dist/settings.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,wFAAwF"}
|
package/dist/traits.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { FieldDef, TraitDef } from "./types";
|
|
2
|
+
export declare const traits: readonly TraitDef[];
|
|
3
|
+
/** Look up a trait by code. */
|
|
4
|
+
export declare function getTrait(cd: string): TraitDef | undefined;
|
|
5
|
+
/**
|
|
6
|
+
* Expand a trait (and any traits it includes) into the concrete fields it adds
|
|
7
|
+
* for `entityName`, with `{entity}` / `{Entity}` tokens resolved. Returns an
|
|
8
|
+
* empty object for unknown or marker traits. Field order follows include-depth
|
|
9
|
+
* first, then declaration order; later definitions win on key collisions.
|
|
10
|
+
*/
|
|
11
|
+
export declare function expandTrait(traitCd: string, entityName: string): Record<string, FieldDef>;
|
|
12
|
+
/** Expand several traits in order into one merged field map. */
|
|
13
|
+
export declare function expandTraits(traitCds: readonly string[], entityName: string): Record<string, FieldDef>;
|
|
14
|
+
//# sourceMappingURL=traits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traits.d.ts","sourceRoot":"","sources":["../src/traits.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAElD,eAAO,MAAM,MAAM,EAAE,SAAS,QAAQ,EA2D5B,CAAC;AAIX,+BAA+B;AAC/B,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAEzD;AA4BD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CASzF;AAED,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAItG"}
|
package/dist/traits.js
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// Trait registry — mirror of
|
|
2
|
+
// server/database/system-modules/metadata/traits.json
|
|
3
|
+
//
|
|
4
|
+
// Traits are authoring shortcuts: adding one to an entity injects a fixed set of
|
|
5
|
+
// fields (and sometimes references) at install time. The visual editor offers
|
|
6
|
+
// these as checkboxes and previews the expanded fields, so authors never
|
|
7
|
+
// hand-write `created_date` / `{entity}_id` etc.
|
|
8
|
+
export const traits = [
|
|
9
|
+
{
|
|
10
|
+
cd: "identity",
|
|
11
|
+
description: "Primary Key",
|
|
12
|
+
fields: {
|
|
13
|
+
"{entity}_id": { dbDatatype: "cuid", flags: "I", isPk: true, isIdentity: true, isNullable: false, orderNum: 1, description: "{Entity} ID" },
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
cd: "audit",
|
|
18
|
+
description: "Creation and update timestamps",
|
|
19
|
+
fields: {
|
|
20
|
+
created_date: { dbDatatype: "timestamptz", fieldTypeCd: "datetime", flags: "I", isNullable: false, formula: "NOW()", orderNum: 9901, description: "Created Date" },
|
|
21
|
+
last_updated: { dbDatatype: "timestamptz", fieldTypeCd: "datetime", flags: "I", isNullable: false, formula: "NOW()", orderNum: 9902, description: "Last Updated" },
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
cd: "audit-full",
|
|
26
|
+
description: "Full audit with user tracking",
|
|
27
|
+
includes: ["audit"],
|
|
28
|
+
fields: {
|
|
29
|
+
created_by: { dbDatatype: "cuid", flags: "I", isNullable: false, orderNum: 9903, description: "Created By User ID" },
|
|
30
|
+
created_by_user: { columnType: "R", fieldTypeCd: "lookup", flags: "I", orderNum: 9904, description: "Created By", link: { entity: "user", thisKey: "created_by", otherKey: "user_id" } },
|
|
31
|
+
last_updated_by: { dbDatatype: "cuid", flags: "I", isNullable: false, orderNum: 9905, description: "Last Updated By User ID" },
|
|
32
|
+
last_updated_by_user: { columnType: "R", fieldTypeCd: "lookup", flags: "I", orderNum: 9906, description: "Last Updated By", link: { entity: "user", thisKey: "last_updated_by", otherKey: "user_id" } },
|
|
33
|
+
},
|
|
34
|
+
references: {
|
|
35
|
+
"FK_{Entity}_CreatedBy": { from: { field: "created_by" }, to: { entity: "user", field: "user_id" } },
|
|
36
|
+
"FK_{Entity}_LastUpdatedBy": { from: { field: "last_updated_by" }, to: { entity: "user", field: "user_id" } },
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
cd: "soft-delete",
|
|
41
|
+
description: "Soft delete flag",
|
|
42
|
+
fields: {
|
|
43
|
+
active: { dbDatatype: "bool", fieldTypeCd: "checkbox", flags: "", isNullable: false, formula: "true", orderNum: 9910, description: "Active" },
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
cd: "sorting",
|
|
48
|
+
description: "Display order",
|
|
49
|
+
fields: {
|
|
50
|
+
order_num: { dbDatatype: "int4", fieldTypeCd: "number", flags: "VEM", orderNum: 9920, description: "Order" },
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
{ cd: "postable", description: "Document posting support (marker trait — actual state managed by A/L columns)", fields: {} },
|
|
54
|
+
{ cd: "accumulation", description: "Accumulation register (marker trait — config in A-type column params)", fields: {} },
|
|
55
|
+
{ cd: "ledger", description: "Double-entry ledger (marker trait — config in L-type column params)", fields: {} },
|
|
56
|
+
{
|
|
57
|
+
cd: "period",
|
|
58
|
+
description: "Period entity with key format, closed flag, date range",
|
|
59
|
+
fields: {
|
|
60
|
+
period_key: { dbDatatype: "varchar", fieldTypeCd: "text", flags: "VEM", isPk: true, isNullable: false, maxLen: 20, orderNum: 1, description: "Period Key" },
|
|
61
|
+
description: { dbDatatype: "varchar", fieldTypeCd: "text", flags: "VEM", maxLen: 100, orderNum: 30, description: "Description" },
|
|
62
|
+
closed: { dbDatatype: "bool", fieldTypeCd: "checkbox", flags: "VEM", isNullable: false, formula: "false", orderNum: 40, description: "Closed" },
|
|
63
|
+
start_date: { dbDatatype: "date", fieldTypeCd: "date", flags: "VEM", orderNum: 50, description: "Start Date" },
|
|
64
|
+
end_date: { dbDatatype: "date", fieldTypeCd: "date", flags: "VEM", orderNum: 60, description: "End Date" },
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
];
|
|
68
|
+
const byCd = new Map(traits.map((t) => [t.cd, t]));
|
|
69
|
+
/** Look up a trait by code. */
|
|
70
|
+
export function getTrait(cd) {
|
|
71
|
+
return byCd.get(cd);
|
|
72
|
+
}
|
|
73
|
+
/** Title-case a snake_case entity code for the `{Entity}` template token. */
|
|
74
|
+
function titleCaseEntity(entity) {
|
|
75
|
+
const local = entity.split(".").pop() ?? entity;
|
|
76
|
+
return local
|
|
77
|
+
.split(/[_\s]+/)
|
|
78
|
+
.filter(Boolean)
|
|
79
|
+
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
80
|
+
.join(" ");
|
|
81
|
+
}
|
|
82
|
+
function applyTemplate(value, entity) {
|
|
83
|
+
const local = entity.split(".").pop() ?? entity;
|
|
84
|
+
return value.replace(/\{entity\}/g, local).replace(/\{Entity\}/g, titleCaseEntity(entity));
|
|
85
|
+
}
|
|
86
|
+
function templateFields(fields, entity) {
|
|
87
|
+
const out = {};
|
|
88
|
+
for (const [name, def] of Object.entries(fields)) {
|
|
89
|
+
const key = applyTemplate(name, entity);
|
|
90
|
+
const next = { ...def };
|
|
91
|
+
if (typeof next.description === "string")
|
|
92
|
+
next.description = applyTemplate(next.description, entity);
|
|
93
|
+
out[key] = next;
|
|
94
|
+
}
|
|
95
|
+
return out;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Expand a trait (and any traits it includes) into the concrete fields it adds
|
|
99
|
+
* for `entityName`, with `{entity}` / `{Entity}` tokens resolved. Returns an
|
|
100
|
+
* empty object for unknown or marker traits. Field order follows include-depth
|
|
101
|
+
* first, then declaration order; later definitions win on key collisions.
|
|
102
|
+
*/
|
|
103
|
+
export function expandTrait(traitCd, entityName) {
|
|
104
|
+
const trait = byCd.get(traitCd);
|
|
105
|
+
if (!trait)
|
|
106
|
+
return {};
|
|
107
|
+
const result = {};
|
|
108
|
+
for (const included of trait.includes ?? []) {
|
|
109
|
+
Object.assign(result, expandTrait(included, entityName));
|
|
110
|
+
}
|
|
111
|
+
Object.assign(result, templateFields(trait.fields, entityName));
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
/** Expand several traits in order into one merged field map. */
|
|
115
|
+
export function expandTraits(traitCds, entityName) {
|
|
116
|
+
const result = {};
|
|
117
|
+
for (const cd of traitCds)
|
|
118
|
+
Object.assign(result, expandTrait(cd, entityName));
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=traits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traits.js","sourceRoot":"","sources":["../src/traits.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** DB event a trigger or webhook watches. */
|
|
2
|
+
export type EntityEvent = "insert" | "update" | "delete" | "status_change" | "any";
|
|
3
|
+
/** A single trigger declaration. */
|
|
4
|
+
export interface TriggerDef {
|
|
5
|
+
/** Trigger code, unique within the module. */
|
|
6
|
+
code: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
/** Entity whose events this watches (cross-module via 'module.entity'). */
|
|
9
|
+
entity: string;
|
|
10
|
+
event: EntityEvent;
|
|
11
|
+
/** Optional `[field]`-syntax formula; trigger fires only when true. */
|
|
12
|
+
condition?: string;
|
|
13
|
+
/** Action code to invoke (cross-module form 'module.action' supported). */
|
|
14
|
+
action: string;
|
|
15
|
+
/** Static parameters passed to the action, merged with the injected record id. */
|
|
16
|
+
params?: Record<string, unknown>;
|
|
17
|
+
/** Run the action in the background after the triggering tx commits (default false). */
|
|
18
|
+
async?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/** A `logic/triggers.json` file. */
|
|
21
|
+
export interface TriggersFile {
|
|
22
|
+
triggers: TriggerDef[];
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=triggers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triggers.d.ts","sourceRoot":"","sources":["../src/triggers.ts"],"names":[],"mappings":"AAEA,6CAA6C;AAC7C,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,eAAe,GAAG,KAAK,CAAC;AAEnF,oCAAoC;AACpC,MAAM,WAAW,UAAU;IAC1B,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;IACnB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,wFAAwF;IACxF,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,oCAAoC;AACpC,MAAM,WAAW,YAAY;IAC5B,QAAQ,EAAE,UAAU,EAAE,CAAC;CACvB"}
|
package/dist/triggers.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triggers.js","sourceRoot":"","sources":["../src/triggers.ts"],"names":[],"mappings":"AAAA,uFAAuF"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/** A `{ cd, name }` pair for friendly pickers (view kinds, viz types, …). */
|
|
2
|
+
export interface NamedKind {
|
|
3
|
+
cd: string;
|
|
4
|
+
name: string;
|
|
5
|
+
}
|
|
6
|
+
/** Horizontal alignment for a column's display (authored via `params.align`). */
|
|
7
|
+
export type AlignType = "left" | "right" | "center";
|
|
8
|
+
/** Column kind letter as stored in entity JSON / the `column` metadata table. */
|
|
9
|
+
export type ColumnTypeCd = "D" | "R" | "S" | "F" | "A" | "L" | "G";
|
|
10
|
+
/** Abstract data type code from the `base_datatype` table. */
|
|
11
|
+
export type BaseDatatypeCd = "binary" | "bool" | "culture" | "cuid" | "date" | "guid" | "json" | "link" | "number" | "project" | "ref" | "set" | "string" | "time" | "timestamp" | "xml";
|
|
12
|
+
/** Display flags string characters. V=Visible I=Identity E=Editable M=Mandatory H=Hidden. */
|
|
13
|
+
export type FlagCd = "V" | "I" | "E" | "M" | "H";
|
|
14
|
+
/** Known field type codes from the field_type seed. */
|
|
15
|
+
export type FieldTypeCd = "text" | "email" | "phone" | "url" | "textarea" | "number" | "currency" | "percent" | "checkbox" | "date" | "datetime" | "time" | "dropdown" | "flags" | "json" | "hidden" | "color" | "image" | "file" | "richtext" | "lookup" | "user" | "grid" | "tags" | "entitylink" | "code";
|
|
16
|
+
/**
|
|
17
|
+
* A UI field type from the `field_type` table. The author picks one of these;
|
|
18
|
+
* the physical `dbDatatype` and `baseDatatypeCd` are derived from it.
|
|
19
|
+
*/
|
|
20
|
+
export interface FieldTypeDef {
|
|
21
|
+
/** Stable code stored as `fieldTypeCd` on a field. */
|
|
22
|
+
cd: FieldTypeCd;
|
|
23
|
+
/** Human label for pickers. */
|
|
24
|
+
name: string;
|
|
25
|
+
/** Default column kind this field type implies (D / R / S). */
|
|
26
|
+
columnType: ColumnTypeCd;
|
|
27
|
+
/** Abstract datatype used for platform semantics. */
|
|
28
|
+
baseDatatypeCd: BaseDatatypeCd;
|
|
29
|
+
/** Aggregations this type supports: S=sum C=count A=avg M=min/max (letters). */
|
|
30
|
+
supportedAgg: string | null;
|
|
31
|
+
/** Default maximum length for string-backed types (e.g. color = 20). */
|
|
32
|
+
maxLen: number | null;
|
|
33
|
+
/** Default numeric scale for number-backed types (e.g. currency = 2). */
|
|
34
|
+
precision: number | null;
|
|
35
|
+
/** Whether the value participates in text filters. */
|
|
36
|
+
useStringInFilter: boolean;
|
|
37
|
+
/** Default field-type params merged into `params` when the field is created. */
|
|
38
|
+
defParams?: Record<string, unknown>;
|
|
39
|
+
}
|
|
40
|
+
/** Relationship link for Reference (R) and Set (S) columns. */
|
|
41
|
+
export interface FieldLink {
|
|
42
|
+
/** Target entity code (the entity being referenced or collected). */
|
|
43
|
+
entity: string;
|
|
44
|
+
/** Column(s) in this entity (comma-separated for compound keys). */
|
|
45
|
+
thisKey: string;
|
|
46
|
+
/** Column(s) in the target entity (comma-separated for compound keys). */
|
|
47
|
+
otherKey: string;
|
|
48
|
+
}
|
|
49
|
+
/** A dropdown/flags option in `params.options` (rich form). */
|
|
50
|
+
export interface FieldOption {
|
|
51
|
+
value: string;
|
|
52
|
+
label: string;
|
|
53
|
+
icon?: string;
|
|
54
|
+
color?: string;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* A field/column definition as it appears under an entity's `fields` map.
|
|
58
|
+
* Mirrors the `field` $def in entity.schema.json. Trait fields are a subset of
|
|
59
|
+
* this shape, so the same type covers both. The open index signature keeps it
|
|
60
|
+
* tolerant of forward-compatible / type-specific extras (e.g. A/L register
|
|
61
|
+
* config under `params`).
|
|
62
|
+
*/
|
|
63
|
+
export interface FieldDef {
|
|
64
|
+
/** PostgreSQL data type (e.g. uuid, varchar, int4, numeric, timestamptz). */
|
|
65
|
+
dbDatatype?: string;
|
|
66
|
+
/** Abstract base datatype; required on Formula (F) columns. */
|
|
67
|
+
baseDatatypeCd?: BaseDatatypeCd;
|
|
68
|
+
/** UI field type code. */
|
|
69
|
+
fieldTypeCd?: FieldTypeCd;
|
|
70
|
+
/** Column kind (defaults to D when omitted). */
|
|
71
|
+
columnType?: ColumnTypeCd;
|
|
72
|
+
/** Display flags string (subset of V/I/E/M/H). */
|
|
73
|
+
flags?: string;
|
|
74
|
+
isPk?: boolean;
|
|
75
|
+
isNullable?: boolean;
|
|
76
|
+
isIdentity?: boolean;
|
|
77
|
+
/** Formula expression (F/G columns) or SQL default value. */
|
|
78
|
+
formula?: string;
|
|
79
|
+
orderNum?: number;
|
|
80
|
+
description?: string;
|
|
81
|
+
maxLen?: number;
|
|
82
|
+
precision?: number;
|
|
83
|
+
/** Input mask pattern for editing. */
|
|
84
|
+
editMask?: string;
|
|
85
|
+
/** Display format pattern. */
|
|
86
|
+
displayFmt?: string;
|
|
87
|
+
/** Relationship link for R and S columns. */
|
|
88
|
+
link?: FieldLink;
|
|
89
|
+
/**
|
|
90
|
+
* On a self-referencing R column, set true to ALLOW parent/child cycles.
|
|
91
|
+
* Absent ⇒ treated as an acyclic hierarchy guarded at the DB level.
|
|
92
|
+
*/
|
|
93
|
+
cyclic?: boolean;
|
|
94
|
+
/** Filter criteria for reference lookups. */
|
|
95
|
+
refFilter?: unknown;
|
|
96
|
+
/** Field-type-specific configuration (dropdown options, register config, …). */
|
|
97
|
+
params?: {
|
|
98
|
+
options?: (string | FieldOption)[];
|
|
99
|
+
} & Record<string, unknown>;
|
|
100
|
+
[key: string]: unknown;
|
|
101
|
+
}
|
|
102
|
+
/** A reusable trait that expands into a set of fields (and optional references). */
|
|
103
|
+
export interface TraitDef {
|
|
104
|
+
cd: string;
|
|
105
|
+
description: string;
|
|
106
|
+
/** Other traits this one includes (expanded first). */
|
|
107
|
+
includes?: string[];
|
|
108
|
+
/** Fields injected, keyed by column code. `{entity}` / `{Entity}` are templated. */
|
|
109
|
+
fields: Record<string, FieldDef>;
|
|
110
|
+
/** Foreign-key references injected (legacy `references` block). */
|
|
111
|
+
references?: Record<string, unknown>;
|
|
112
|
+
}
|
|
113
|
+
/** Description of a column kind for friendly pickers. */
|
|
114
|
+
export interface ColumnTypeDef {
|
|
115
|
+
cd: ColumnTypeCd;
|
|
116
|
+
/** Author-facing label. */
|
|
117
|
+
name: string;
|
|
118
|
+
/** One-line explanation. */
|
|
119
|
+
description: string;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|