@nestjs-dash/core 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/README.md +81 -0
- package/dist/actions/handlers.d.ts +16 -0
- package/dist/actions/handlers.d.ts.map +1 -0
- package/dist/actions/handlers.js +12 -0
- package/dist/actions/handlers.js.map +1 -0
- package/dist/actions/index.d.ts +101 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +232 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/charts/index.d.ts +65 -0
- package/dist/charts/index.d.ts.map +1 -0
- package/dist/charts/index.js +143 -0
- package/dist/charts/index.js.map +1 -0
- package/dist/forms/index.d.ts +146 -0
- package/dist/forms/index.d.ts.map +1 -0
- package/dist/forms/index.js +291 -0
- package/dist/forms/index.js.map +1 -0
- package/dist/forms/json-fields.d.ts +7 -0
- package/dist/forms/json-fields.d.ts.map +1 -0
- package/dist/forms/json-fields.js +124 -0
- package/dist/forms/json-fields.js.map +1 -0
- package/dist/forms/validation.d.ts +10 -0
- package/dist/forms/validation.d.ts.map +1 -0
- package/dist/forms/validation.js +42 -0
- package/dist/forms/validation.js.map +1 -0
- package/dist/index.d.ts +353 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +588 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/index.d.ts +54 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +126 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/tables/index.d.ts +117 -0
- package/dist/tables/index.d.ts.map +1 -0
- package/dist/tables/index.js +283 -0
- package/dist/tables/index.js.map +1 -0
- package/dist/tables/list-query-config.d.ts +6 -0
- package/dist/tables/list-query-config.d.ts.map +1 -0
- package/dist/tables/list-query-config.js +86 -0
- package/dist/tables/list-query-config.js.map +1 -0
- package/dist/theme/index.d.ts +44 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +2 -0
- package/dist/theme/index.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { jsonTextareaFieldKey } from '@nestjs-dash/support';
|
|
2
|
+
const JSON_ARRAY_FIELD_KINDS = new Set(['tags-input', 'repeater']);
|
|
3
|
+
export function collectJsonArrayFields(node) {
|
|
4
|
+
if (!node)
|
|
5
|
+
return [];
|
|
6
|
+
const out = [];
|
|
7
|
+
if (JSON_ARRAY_FIELD_KINDS.has(node.kind)) {
|
|
8
|
+
out.push(node);
|
|
9
|
+
}
|
|
10
|
+
for (const child of node.children ?? []) {
|
|
11
|
+
out.push(...collectJsonArrayFields(child));
|
|
12
|
+
}
|
|
13
|
+
return out;
|
|
14
|
+
}
|
|
15
|
+
function parseJsonArray(raw) {
|
|
16
|
+
if (Array.isArray(raw))
|
|
17
|
+
return raw;
|
|
18
|
+
if (typeof raw !== 'string' || raw.trim() === '')
|
|
19
|
+
return [];
|
|
20
|
+
try {
|
|
21
|
+
const parsed = JSON.parse(raw);
|
|
22
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export function parseJsonArrayFields(body, form) {
|
|
29
|
+
const fields = collectJsonArrayFields(form);
|
|
30
|
+
if (fields.length === 0)
|
|
31
|
+
return body;
|
|
32
|
+
const payload = { ...body };
|
|
33
|
+
for (const field of fields) {
|
|
34
|
+
const name = String(field.name ?? field.props.name ?? '');
|
|
35
|
+
if (!name || !(name in payload))
|
|
36
|
+
continue;
|
|
37
|
+
payload[name] = parseJsonArray(payload[name]);
|
|
38
|
+
}
|
|
39
|
+
return payload;
|
|
40
|
+
}
|
|
41
|
+
const JSON_PROJECTABLE_FIELD_KINDS = new Set(['textarea', 'rich-box']);
|
|
42
|
+
export function collectJsonTextareaFields(node) {
|
|
43
|
+
if (!node)
|
|
44
|
+
return [];
|
|
45
|
+
const out = [];
|
|
46
|
+
if (JSON_PROJECTABLE_FIELD_KINDS.has(node.kind) && node.props.json === true) {
|
|
47
|
+
out.push(node);
|
|
48
|
+
}
|
|
49
|
+
for (const child of node.children ?? []) {
|
|
50
|
+
out.push(...collectJsonTextareaFields(child));
|
|
51
|
+
}
|
|
52
|
+
return out;
|
|
53
|
+
}
|
|
54
|
+
function isPlainObject(value) {
|
|
55
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
56
|
+
}
|
|
57
|
+
function parseJsonValue(raw) {
|
|
58
|
+
if (raw == null)
|
|
59
|
+
return null;
|
|
60
|
+
if (typeof raw !== 'string')
|
|
61
|
+
return raw;
|
|
62
|
+
if (raw.trim() === '')
|
|
63
|
+
return null;
|
|
64
|
+
try {
|
|
65
|
+
return JSON.parse(raw);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return raw;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export function parseJsonTextareaFields(body, form, existingRecord) {
|
|
72
|
+
const fields = collectJsonTextareaFields(form);
|
|
73
|
+
if (fields.length === 0)
|
|
74
|
+
return body;
|
|
75
|
+
const payload = { ...body };
|
|
76
|
+
const merged = new Map();
|
|
77
|
+
for (const field of fields) {
|
|
78
|
+
const name = String(field.name ?? field.props.name ?? '');
|
|
79
|
+
if (!name)
|
|
80
|
+
continue;
|
|
81
|
+
const property = typeof field.props.jsonProperty === 'string' ? field.props.jsonProperty : undefined;
|
|
82
|
+
const inputKey = jsonTextareaFieldKey(name, property);
|
|
83
|
+
if (!(inputKey in payload))
|
|
84
|
+
continue;
|
|
85
|
+
const raw = payload[inputKey];
|
|
86
|
+
if (property) {
|
|
87
|
+
if (!merged.has(name)) {
|
|
88
|
+
const existingValue = existingRecord?.[name];
|
|
89
|
+
merged.set(name, isPlainObject(existingValue) ? { ...existingValue } : {});
|
|
90
|
+
}
|
|
91
|
+
merged.get(name)[property] = raw == null ? null : String(raw);
|
|
92
|
+
payload[name] = merged.get(name);
|
|
93
|
+
if (inputKey !== name)
|
|
94
|
+
delete payload[inputKey];
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
payload[name] = parseJsonValue(raw);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return payload;
|
|
101
|
+
}
|
|
102
|
+
export function stringifyJsonTextareaFields(values, form) {
|
|
103
|
+
const fields = collectJsonTextareaFields(form);
|
|
104
|
+
if (fields.length === 0)
|
|
105
|
+
return values;
|
|
106
|
+
const result = { ...values };
|
|
107
|
+
for (const field of fields) {
|
|
108
|
+
const name = String(field.name ?? field.props.name ?? '');
|
|
109
|
+
if (!name || !(name in values))
|
|
110
|
+
continue;
|
|
111
|
+
const property = typeof field.props.jsonProperty === 'string' ? field.props.jsonProperty : undefined;
|
|
112
|
+
const original = values[name];
|
|
113
|
+
if (property) {
|
|
114
|
+
const source = isPlainObject(original) ? original[property] : undefined;
|
|
115
|
+
result[jsonTextareaFieldKey(name, property)] =
|
|
116
|
+
source == null ? '' : typeof source === 'string' ? source : JSON.stringify(source);
|
|
117
|
+
}
|
|
118
|
+
else if (typeof original !== 'string') {
|
|
119
|
+
result[name] = original == null ? '' : JSON.stringify(original, null, 2);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return result;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=json-fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-fields.js","sourceRoot":"","sources":["../../src/forms/json-fields.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SchemaNode } from '@nestjs-dash/support';
|
|
2
|
+
import type { ZodType } from 'zod';
|
|
3
|
+
export declare function registerFieldValidation(schema: ZodType): string;
|
|
4
|
+
export declare function resolveFieldValidation(key: string): ZodType | undefined;
|
|
5
|
+
export declare function collectFieldValidations(node: SchemaNode | undefined | null): Array<{
|
|
6
|
+
name: string;
|
|
7
|
+
schema: ZodType;
|
|
8
|
+
}>;
|
|
9
|
+
export declare function validateFormPayload(form: SchemaNode | undefined | null, payload: Record<string, unknown>): Record<string, string[]> | null;
|
|
10
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/forms/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAWnC,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAK/D;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAEvE;AAGD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,IAAI,GAClC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CAe1C;AAOD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,IAAI,EACnC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAYjC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
const fieldValidationRegistry = new Map();
|
|
2
|
+
let sequence = 0;
|
|
3
|
+
export function registerFieldValidation(schema) {
|
|
4
|
+
sequence += 1;
|
|
5
|
+
const key = `zv-${sequence}`;
|
|
6
|
+
fieldValidationRegistry.set(key, schema);
|
|
7
|
+
return key;
|
|
8
|
+
}
|
|
9
|
+
export function resolveFieldValidation(key) {
|
|
10
|
+
return fieldValidationRegistry.get(key);
|
|
11
|
+
}
|
|
12
|
+
export function collectFieldValidations(node) {
|
|
13
|
+
if (!node)
|
|
14
|
+
return [];
|
|
15
|
+
const out = [];
|
|
16
|
+
const key = node.props.validationKey;
|
|
17
|
+
if (typeof key === 'string') {
|
|
18
|
+
const schema = resolveFieldValidation(key);
|
|
19
|
+
const name = String(node.name ?? node.props.name ?? '');
|
|
20
|
+
if (schema && name) {
|
|
21
|
+
out.push({ name, schema });
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
for (const child of node.children ?? []) {
|
|
25
|
+
out.push(...collectFieldValidations(child));
|
|
26
|
+
}
|
|
27
|
+
return out;
|
|
28
|
+
}
|
|
29
|
+
export function validateFormPayload(form, payload) {
|
|
30
|
+
const fields = collectFieldValidations(form);
|
|
31
|
+
if (fields.length === 0)
|
|
32
|
+
return null;
|
|
33
|
+
const errors = {};
|
|
34
|
+
for (const field of fields) {
|
|
35
|
+
const result = field.schema.safeParse(payload[field.name]);
|
|
36
|
+
if (!result.success) {
|
|
37
|
+
errors[field.name] = result.error.issues.map((issue) => issue.message);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return Object.keys(errors).length > 0 ? errors : null;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/forms/validation.ts"],"names":[],"mappings":"AASA,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAAmB,CAAC;AAC3D,IAAI,QAAQ,GAAG,CAAC,CAAC;AAEjB,MAAM,UAAU,uBAAuB,CAAC,MAAe;IACrD,QAAQ,IAAI,CAAC,CAAC;IACd,MAAM,GAAG,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC7B,uBAAuB,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACzC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,OAAO,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC1C,CAAC;AAGD,MAAM,UAAU,uBAAuB,CACrC,IAAmC;IAEnC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,MAAM,GAAG,GAA6C,EAAE,CAAC;IACzD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;IACrC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACxD,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YACnB,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAOD,MAAM,UAAU,mBAAmB,CACjC,IAAmC,EACnC,OAAgC;IAEhC,MAAM,MAAM,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,MAAM,MAAM,GAA6B,EAAE,CAAC;IAC5C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACxD,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
import { type DatabaseAdapter, type ListQueryConfig, type RecordData, type RelationDefinition, type RelationType, type ResourceAdapter } from '@nestjs-dash/adapter';
|
|
2
|
+
import type { ChartSpec, SchemaNode } from '@nestjs-dash/support';
|
|
3
|
+
import { Schema } from './schemas/index.js';
|
|
4
|
+
import { Table, type TableSchema } from './tables/index.js';
|
|
5
|
+
import type { PanelThemeColors, PanelThemeOverrides } from './theme/index.js';
|
|
6
|
+
export * from '@nestjs-dash/adapter';
|
|
7
|
+
export * from './actions/index.js';
|
|
8
|
+
export * from './charts/index.js';
|
|
9
|
+
export * from './forms/index.js';
|
|
10
|
+
export * from './schemas/index.js';
|
|
11
|
+
export * from './tables/index.js';
|
|
12
|
+
export * from './theme/index.js';
|
|
13
|
+
export * from '@nestjs-dash/support';
|
|
14
|
+
export type ResourceApiMethod = 'list' | 'get' | 'create' | 'update' | 'delete';
|
|
15
|
+
export interface ResourceApiFieldConfig {
|
|
16
|
+
create?: string[] | '*';
|
|
17
|
+
update?: string[] | '*';
|
|
18
|
+
response?: string[] | '*';
|
|
19
|
+
}
|
|
20
|
+
export interface ResourceApiConfig {
|
|
21
|
+
enabled?: boolean;
|
|
22
|
+
methods?: readonly ResourceApiMethod[];
|
|
23
|
+
fields?: ResourceApiFieldConfig;
|
|
24
|
+
strict?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export type RelationManagerClass = {
|
|
27
|
+
new (...args: never[]): unknown;
|
|
28
|
+
relationship: string;
|
|
29
|
+
type: RelationType;
|
|
30
|
+
title?: string;
|
|
31
|
+
icon?: string;
|
|
32
|
+
relatedResource?: string;
|
|
33
|
+
foreignKey?: string;
|
|
34
|
+
ownerKey?: string;
|
|
35
|
+
pivotTable?: string;
|
|
36
|
+
pivotForeignKey?: string;
|
|
37
|
+
pivotRelatedKey?: string;
|
|
38
|
+
pivotFields?: string[];
|
|
39
|
+
ownerRelationProperty?: string;
|
|
40
|
+
relatedRelationProperty?: string;
|
|
41
|
+
table?(table: Table): Table;
|
|
42
|
+
form?(form: Schema): Schema;
|
|
43
|
+
};
|
|
44
|
+
export type ResourceClass = {
|
|
45
|
+
new (...args: never[]): unknown;
|
|
46
|
+
slug?: string;
|
|
47
|
+
label?: string;
|
|
48
|
+
model?: unknown;
|
|
49
|
+
adapter?: ResourceAdapter;
|
|
50
|
+
api?: ResourceApiConfig;
|
|
51
|
+
relationManagers?: RelationManagerClass[];
|
|
52
|
+
panels?: ResourcePanelClass[];
|
|
53
|
+
navigationGroup?: string | null;
|
|
54
|
+
navigationLabel?: string;
|
|
55
|
+
navigationSort?: number;
|
|
56
|
+
navigationIcon?: string;
|
|
57
|
+
breadcrumb?: string;
|
|
58
|
+
shouldRegisterNavigation?: boolean;
|
|
59
|
+
table?(table: Table): Table;
|
|
60
|
+
form?(form: Schema): Schema;
|
|
61
|
+
canAccess?(ctx: AdminPolicyContext): boolean | Promise<boolean>;
|
|
62
|
+
can?(action: string, ctx: AdminPolicyContext): boolean | Promise<boolean>;
|
|
63
|
+
};
|
|
64
|
+
export interface PageInstance {
|
|
65
|
+
content?(ctx: PageRenderContext): string | Promise<string>;
|
|
66
|
+
widgets?(ctx: PageRenderContext): DashboardWidget[] | Promise<DashboardWidget[]>;
|
|
67
|
+
styles?(ctx: PageRenderContext): string | Promise<string>;
|
|
68
|
+
actions?: Record<string, (ctx: PageActionContext) => Promise<PageActionResult | void> | PageActionResult | void>;
|
|
69
|
+
}
|
|
70
|
+
export interface PageActionContext {
|
|
71
|
+
pageSlug: string;
|
|
72
|
+
action: string;
|
|
73
|
+
values: Record<string, unknown>;
|
|
74
|
+
user?: Record<string, unknown>;
|
|
75
|
+
request: unknown;
|
|
76
|
+
}
|
|
77
|
+
export interface PageActionResult {
|
|
78
|
+
message?: string;
|
|
79
|
+
}
|
|
80
|
+
export type PageClass = {
|
|
81
|
+
new (...args: never[]): PageInstance;
|
|
82
|
+
slug?: string;
|
|
83
|
+
title?: string;
|
|
84
|
+
navigationLabel?: string;
|
|
85
|
+
navigationGroup?: string | null;
|
|
86
|
+
navigationSort?: number;
|
|
87
|
+
navigationIcon?: string;
|
|
88
|
+
shouldRegisterNavigation?: boolean;
|
|
89
|
+
canAccess?(ctx: AdminPolicyContext): boolean | Promise<boolean>;
|
|
90
|
+
can?(action: string, ctx: AdminPolicyContext): boolean | Promise<boolean>;
|
|
91
|
+
};
|
|
92
|
+
export interface PageRenderContext {
|
|
93
|
+
panelPath: string;
|
|
94
|
+
brandName: string;
|
|
95
|
+
}
|
|
96
|
+
export interface ResourcePanelInstance {
|
|
97
|
+
render(ctx: ResourcePanelContext): string | Promise<string>;
|
|
98
|
+
}
|
|
99
|
+
export interface ResourcePanelContext {
|
|
100
|
+
resourceSlug: string;
|
|
101
|
+
record: RecordData;
|
|
102
|
+
panelPath: string;
|
|
103
|
+
brandName: string;
|
|
104
|
+
}
|
|
105
|
+
export type ResourcePanelClass = {
|
|
106
|
+
new (...args: never[]): ResourcePanelInstance;
|
|
107
|
+
};
|
|
108
|
+
export interface DashboardWidget {
|
|
109
|
+
slot?: 'main' | 'side';
|
|
110
|
+
render?(ctx: PageRenderContext): string | Promise<string>;
|
|
111
|
+
chart?(ctx: PageRenderContext): ChartSpec | Promise<ChartSpec>;
|
|
112
|
+
canAccess?(ctx: AdminPolicyContext): boolean | Promise<boolean>;
|
|
113
|
+
}
|
|
114
|
+
export type DashboardWidgetPayload = {
|
|
115
|
+
type: 'html';
|
|
116
|
+
html: string;
|
|
117
|
+
} | {
|
|
118
|
+
type: 'chart';
|
|
119
|
+
chart: ChartSpec;
|
|
120
|
+
};
|
|
121
|
+
export type DashboardWidgets = {
|
|
122
|
+
main: DashboardWidgetPayload[];
|
|
123
|
+
side: DashboardWidgetPayload[];
|
|
124
|
+
};
|
|
125
|
+
export interface AdminPlugin {
|
|
126
|
+
name?: string;
|
|
127
|
+
pages?: PageClass[];
|
|
128
|
+
widgets?: DashboardWidget[];
|
|
129
|
+
}
|
|
130
|
+
export interface AdminPolicyContext {
|
|
131
|
+
user?: Record<string, unknown>;
|
|
132
|
+
request: unknown;
|
|
133
|
+
action?: string;
|
|
134
|
+
}
|
|
135
|
+
export type NavigationItemType = 'resource' | 'page' | 'link';
|
|
136
|
+
export interface NavigationItem {
|
|
137
|
+
label: string;
|
|
138
|
+
slug: string;
|
|
139
|
+
href: string;
|
|
140
|
+
type?: NavigationItemType;
|
|
141
|
+
group?: string | null;
|
|
142
|
+
sort?: number;
|
|
143
|
+
icon?: string;
|
|
144
|
+
openInNewTab?: boolean;
|
|
145
|
+
}
|
|
146
|
+
export interface NavigationGroup {
|
|
147
|
+
label: string;
|
|
148
|
+
items: NavigationItem[];
|
|
149
|
+
collapsible?: boolean;
|
|
150
|
+
collapsed?: boolean;
|
|
151
|
+
}
|
|
152
|
+
export interface NavigationOverride {
|
|
153
|
+
group?: string | null;
|
|
154
|
+
sort?: number;
|
|
155
|
+
label?: string;
|
|
156
|
+
}
|
|
157
|
+
export type NavigationOverrides = Record<string, NavigationOverride>;
|
|
158
|
+
export declare class NavigationLink {
|
|
159
|
+
private data;
|
|
160
|
+
private constructor();
|
|
161
|
+
static make(label: string): NavigationLink;
|
|
162
|
+
url(value: string): this;
|
|
163
|
+
slug(value: string): this;
|
|
164
|
+
group(value: string | null): this;
|
|
165
|
+
sort(value: number): this;
|
|
166
|
+
icon(value: string): this;
|
|
167
|
+
openInNewTab(value?: boolean): this;
|
|
168
|
+
toNavigationItem(panelPath: string): NavigationItem;
|
|
169
|
+
}
|
|
170
|
+
export interface SerializedResourceApi {
|
|
171
|
+
enabled: boolean;
|
|
172
|
+
methods: readonly ResourceApiMethod[];
|
|
173
|
+
fields: {
|
|
174
|
+
create: string[] | '*';
|
|
175
|
+
update: string[] | '*';
|
|
176
|
+
response: string[] | '*';
|
|
177
|
+
};
|
|
178
|
+
strict: boolean;
|
|
179
|
+
}
|
|
180
|
+
export interface SerializedRelationManager {
|
|
181
|
+
relationship: string;
|
|
182
|
+
type: RelationType;
|
|
183
|
+
title: string;
|
|
184
|
+
icon?: string;
|
|
185
|
+
relatedResource: string;
|
|
186
|
+
foreignKey?: string;
|
|
187
|
+
ownerKey: string;
|
|
188
|
+
pivotTable?: string;
|
|
189
|
+
pivotForeignKey?: string;
|
|
190
|
+
pivotRelatedKey?: string;
|
|
191
|
+
pivotFields: string[];
|
|
192
|
+
ownerRelationProperty?: string;
|
|
193
|
+
relatedRelationProperty?: string;
|
|
194
|
+
table: TableSchema | null;
|
|
195
|
+
form: SchemaNode | null;
|
|
196
|
+
listQueryConfig: ListQueryConfig | null;
|
|
197
|
+
definition: RelationDefinition;
|
|
198
|
+
}
|
|
199
|
+
export interface SerializedResource {
|
|
200
|
+
slug: string;
|
|
201
|
+
label: string;
|
|
202
|
+
table: TableSchema | null;
|
|
203
|
+
form: SchemaNode | null;
|
|
204
|
+
listQueryConfig: ListQueryConfig | null;
|
|
205
|
+
api: SerializedResourceApi;
|
|
206
|
+
relationManagers: SerializedRelationManager[];
|
|
207
|
+
navigationGroup?: string | null;
|
|
208
|
+
navigationSort?: number;
|
|
209
|
+
breadcrumb?: string;
|
|
210
|
+
supportsSoftDelete: boolean;
|
|
211
|
+
deletedAtField?: string;
|
|
212
|
+
}
|
|
213
|
+
export interface SerializedPage {
|
|
214
|
+
slug: string;
|
|
215
|
+
title: string;
|
|
216
|
+
navigationLabel: string;
|
|
217
|
+
navigationGroup?: string | null;
|
|
218
|
+
navigationSort?: number;
|
|
219
|
+
navigationIcon?: string;
|
|
220
|
+
}
|
|
221
|
+
export interface SerializedPanel {
|
|
222
|
+
id: string;
|
|
223
|
+
path: string;
|
|
224
|
+
apiPath: string;
|
|
225
|
+
brandName: string;
|
|
226
|
+
resources: SerializedResource[];
|
|
227
|
+
pages: SerializedPage[];
|
|
228
|
+
navigation: NavigationItem[];
|
|
229
|
+
navigationGroups: NavigationGroup[];
|
|
230
|
+
}
|
|
231
|
+
export declare class Resource {
|
|
232
|
+
static slug?: string;
|
|
233
|
+
static label?: string;
|
|
234
|
+
static model?: unknown;
|
|
235
|
+
static adapter?: ResourceAdapter;
|
|
236
|
+
static api?: ResourceApiConfig;
|
|
237
|
+
static relationManagers?: RelationManagerClass[];
|
|
238
|
+
static navigationGroup?: string | null;
|
|
239
|
+
static navigationLabel?: string;
|
|
240
|
+
static navigationSort?: number;
|
|
241
|
+
static navigationIcon?: string;
|
|
242
|
+
static breadcrumb?: string;
|
|
243
|
+
static shouldRegisterNavigation?: boolean;
|
|
244
|
+
static table?(table: Table): Table;
|
|
245
|
+
static form?(form: Schema): Schema;
|
|
246
|
+
static canAccess?(ctx: AdminPolicyContext): boolean | Promise<boolean>;
|
|
247
|
+
static can?(action: string, ctx: AdminPolicyContext): boolean | Promise<boolean>;
|
|
248
|
+
}
|
|
249
|
+
export declare class Page implements PageInstance {
|
|
250
|
+
static slug?: string;
|
|
251
|
+
static title?: string;
|
|
252
|
+
static navigationLabel?: string;
|
|
253
|
+
static navigationGroup?: string | null;
|
|
254
|
+
static navigationSort?: number;
|
|
255
|
+
static navigationIcon?: string;
|
|
256
|
+
static shouldRegisterNavigation?: boolean;
|
|
257
|
+
static canAccess?(ctx: AdminPolicyContext): boolean | Promise<boolean>;
|
|
258
|
+
static can?(action: string, ctx: AdminPolicyContext): boolean | Promise<boolean>;
|
|
259
|
+
content(_ctx: PageRenderContext): string | Promise<string>;
|
|
260
|
+
}
|
|
261
|
+
export declare class RelationManager {
|
|
262
|
+
static relationship: string;
|
|
263
|
+
static type: RelationType;
|
|
264
|
+
static title?: string;
|
|
265
|
+
static icon?: string;
|
|
266
|
+
static relatedResource?: string;
|
|
267
|
+
static foreignKey?: string;
|
|
268
|
+
static ownerKey?: string;
|
|
269
|
+
static pivotTable?: string;
|
|
270
|
+
static pivotForeignKey?: string;
|
|
271
|
+
static pivotRelatedKey?: string;
|
|
272
|
+
static pivotFields?: string[];
|
|
273
|
+
static ownerRelationProperty?: string;
|
|
274
|
+
static relatedRelationProperty?: string;
|
|
275
|
+
static table?(table: Table): Table;
|
|
276
|
+
static form?(form: Schema): Schema;
|
|
277
|
+
}
|
|
278
|
+
export declare function resolveResourceSlug(resource: ResourceClass): string;
|
|
279
|
+
export declare function resolveResourceLabel(resource: ResourceClass): string;
|
|
280
|
+
export declare function extractFormFieldNames(form: SchemaNode | null): string[];
|
|
281
|
+
export declare function resolveResourceApi(resource: ResourceClass, form: SchemaNode | null): SerializedResourceApi;
|
|
282
|
+
export declare function pickFields(data: Record<string, unknown>, allowed: string[] | '*'): Record<string, unknown>;
|
|
283
|
+
export declare function assertAllowedFields(data: Record<string, unknown>, allowed: string[] | '*', strict: boolean): {
|
|
284
|
+
data: Record<string, unknown>;
|
|
285
|
+
rejected: string[];
|
|
286
|
+
};
|
|
287
|
+
export declare function serializeRelationManager(manager: RelationManagerClass): SerializedRelationManager;
|
|
288
|
+
export declare function relationsFromResource(resource: ResourceClass): RelationDefinition[];
|
|
289
|
+
export declare class Panel {
|
|
290
|
+
private panelId;
|
|
291
|
+
private panelPath;
|
|
292
|
+
private panelApiPath;
|
|
293
|
+
private panelBrand;
|
|
294
|
+
private resourceClasses;
|
|
295
|
+
private pageClasses;
|
|
296
|
+
private panelWidgets;
|
|
297
|
+
private customNavLinks;
|
|
298
|
+
private panelPlugins;
|
|
299
|
+
private adapters;
|
|
300
|
+
private panelTheme;
|
|
301
|
+
private panelStylesheetUrl;
|
|
302
|
+
private panelThemeOverrides;
|
|
303
|
+
private panelNavigationOverrides;
|
|
304
|
+
static make(): Panel;
|
|
305
|
+
id(value: string): this;
|
|
306
|
+
path(value: string): this;
|
|
307
|
+
apiPath(value: string): this;
|
|
308
|
+
brandName(value: string): this;
|
|
309
|
+
theme(value: 'light' | 'dark' | 'system'): this;
|
|
310
|
+
stylesheetUrl(value: string): this;
|
|
311
|
+
colors(value: PanelThemeColors): this;
|
|
312
|
+
darkColors(value: PanelThemeColors): this;
|
|
313
|
+
radius(value: string): this;
|
|
314
|
+
fontFamily(value: string): this;
|
|
315
|
+
sidebarWidth(value: string): this;
|
|
316
|
+
sidebarWidthIcon(value: string): this;
|
|
317
|
+
spacing(value: string): this;
|
|
318
|
+
navigationOverrides(overrides: NavigationOverrides): this;
|
|
319
|
+
getNavigationOverrides(): NavigationOverrides;
|
|
320
|
+
resources(resources: ResourceClass[]): this;
|
|
321
|
+
registerResources(resources: ResourceClass[]): this;
|
|
322
|
+
pages(pages: PageClass[]): this;
|
|
323
|
+
registerPages(pages: PageClass[]): this;
|
|
324
|
+
widgets(widgets: DashboardWidget[]): this;
|
|
325
|
+
registerWidgets(widgets: DashboardWidget[]): this;
|
|
326
|
+
navigationItems(items: NavigationLink[]): this;
|
|
327
|
+
plugins(plugins: AdminPlugin[]): this;
|
|
328
|
+
registerDatabase(adapter: DatabaseAdapter): this;
|
|
329
|
+
getId(): string;
|
|
330
|
+
getPath(): string;
|
|
331
|
+
getApiPath(): string;
|
|
332
|
+
getBrandName(): string;
|
|
333
|
+
getTheme(): 'light' | 'dark' | 'system';
|
|
334
|
+
getStylesheetUrl(): string | null;
|
|
335
|
+
getThemeOverrides(): PanelThemeOverrides;
|
|
336
|
+
getResources(): ResourceClass[];
|
|
337
|
+
getPages(): PageClass[];
|
|
338
|
+
getPageClass(slug: string): PageClass | undefined;
|
|
339
|
+
getResourceClass(slug: string): ResourceClass | undefined;
|
|
340
|
+
getWidgets(): DashboardWidget[];
|
|
341
|
+
getPlugins(): AdminPlugin[];
|
|
342
|
+
getAdapters(): DatabaseAdapter[];
|
|
343
|
+
getResourceAdapter(slug: string): ResourceAdapter | undefined;
|
|
344
|
+
serialize(): SerializedPanel;
|
|
345
|
+
private buildNavigation;
|
|
346
|
+
private finalizeNavigation;
|
|
347
|
+
private serializePage;
|
|
348
|
+
private serializeResource;
|
|
349
|
+
}
|
|
350
|
+
export declare function resolvePageSlug(page: PageClass): string;
|
|
351
|
+
export declare function groupNavigationItems(items: NavigationItem[]): NavigationGroup[];
|
|
352
|
+
export type { RelationDefinition, RelationType } from '@nestjs-dash/adapter';
|
|
353
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|