jopi-toolkit 3.0.11 → 3.0.15
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/jk_data/index.d.ts +40 -0
- package/dist/jk_data/index.js +76 -0
- package/dist/jk_data/index.js.map +1 -0
- package/dist/jk_fs/jBundler_ifServer.d.ts +1 -1
- package/dist/jk_schemas/index.d.ts +76 -6
- package/dist/jk_schemas/index.js +82 -47
- package/dist/jk_schemas/index.js.map +1 -1
- package/dist/jk_schemas/jkSchemas.d.ts +188 -0
- package/dist/jk_schemas/jkSchemas.js +257 -0
- package/dist/jk_schemas/jkSchemas.js.map +1 -0
- package/dist/jk_timer/index.d.ts +2 -0
- package/dist/jk_timer/index.js +2 -0
- package/dist/jk_timer/index.js.map +1 -1
- package/dist/jk_tools/jBundler_ifServer.d.ts +1 -0
- package/dist/jk_tools/jBundler_ifServer.js +40 -10
- package/dist/jk_tools/jBundler_ifServer.js.map +1 -1
- package/package.json +10 -5
- package/src/jk_app/common.js +442 -0
- package/src/jk_crypto/jBundler_ifServer.js +16 -0
- package/src/jk_data/index.js +117 -0
- package/src/jk_data/index.ts +129 -0
- package/src/jk_events/index.js +213 -0
- package/src/jk_fs/index.js +2 -0
- package/src/jk_fs/jBundler_ifServer.js +729 -0
- package/src/jk_logs/index.js +371 -0
- package/src/jk_logs/jBundler_ifServer.js +24 -0
- package/src/jk_schemas/index.js +84 -47
- package/src/jk_schemas/index.ts +196 -69
- package/src/jk_thread/common.js +7 -0
- package/src/jk_timer/index.js +2 -0
- package/src/jk_timer/index.ts +3 -0
- package/src/jk_tools/common.js +101 -0
- package/src/jk_tools/index.js +1 -0
- package/src/jk_tools/jBundler_ifServer.js +215 -0
- package/src/jk_tools/jBundler_ifServer.ts +49 -11
- package/src/jk_translate/index.js +56 -0
- package/src/jk_what/jBundler_ifServer.js +5 -0
- package/src/jk_os/jBundler_ifServer.js +0 -132
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { Schema } from "jopi-toolkit/jk_schema";
|
|
2
|
+
export interface JFieldSorting {
|
|
3
|
+
field: string;
|
|
4
|
+
direction: "asc" | "desc";
|
|
5
|
+
}
|
|
6
|
+
export interface JRowsFilter {
|
|
7
|
+
field?: string;
|
|
8
|
+
value: string;
|
|
9
|
+
}
|
|
10
|
+
export interface JFieldFilter {
|
|
11
|
+
value?: string | number | boolean;
|
|
12
|
+
constraint: JFieldConstraintType;
|
|
13
|
+
caseSensitive?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export type JFieldConstraintType = "$eq" | "$ne" | "$gt" | "$gte" | "$lt" | "$lte" | "$in" | "$nin" | "$like";
|
|
16
|
+
export interface JRowArrayFilter {
|
|
17
|
+
offset: number;
|
|
18
|
+
count: number;
|
|
19
|
+
filter?: JRowsFilter;
|
|
20
|
+
sorting?: JFieldSorting[];
|
|
21
|
+
fieldFilters?: Record<string, JFieldFilter[]>;
|
|
22
|
+
}
|
|
23
|
+
export interface JDataRowSource_ReadParams extends JRowArrayFilter {
|
|
24
|
+
}
|
|
25
|
+
export interface JDataRowSource_ReadResult {
|
|
26
|
+
rows: any[];
|
|
27
|
+
total?: number;
|
|
28
|
+
offset?: number;
|
|
29
|
+
}
|
|
30
|
+
export interface JDataRowSource {
|
|
31
|
+
get schema(): Schema;
|
|
32
|
+
read(params: JDataRowSource_ReadParams): Promise<JDataRowSource_ReadResult>;
|
|
33
|
+
}
|
|
34
|
+
export declare class JDataRowSource_UseArray implements JDataRowSource {
|
|
35
|
+
readonly schema: Schema;
|
|
36
|
+
private readonly rows;
|
|
37
|
+
constructor(schema: Schema, rows: any[]);
|
|
38
|
+
read(params: JDataRowSource_ReadParams): Promise<JDataRowSource_ReadResult>;
|
|
39
|
+
}
|
|
40
|
+
export declare function simpleRowArrayFilter(rows: any[], params: JRowArrayFilter): JDataRowSource_ReadResult;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
export class JDataRowSource_UseArray {
|
|
2
|
+
schema;
|
|
3
|
+
rows;
|
|
4
|
+
constructor(schema, rows) {
|
|
5
|
+
this.schema = schema;
|
|
6
|
+
this.rows = rows;
|
|
7
|
+
}
|
|
8
|
+
async read(params) {
|
|
9
|
+
return simpleRowArrayFilter(this.rows, params);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function simpleRowArrayFilter(rows, params) {
|
|
13
|
+
// > Apply filter.
|
|
14
|
+
if (params.filter) {
|
|
15
|
+
const f = params.filter;
|
|
16
|
+
rows = rows.filter(r => {
|
|
17
|
+
if (f.field) {
|
|
18
|
+
let v = r[f.field];
|
|
19
|
+
if (v === undefined)
|
|
20
|
+
return false;
|
|
21
|
+
return String(v).includes(f.value);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
for (let v of Object.values(r)) {
|
|
25
|
+
if (v === undefined)
|
|
26
|
+
continue;
|
|
27
|
+
if (String(v).includes(f.value))
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
// > Apply sorting.
|
|
35
|
+
if (params.sorting && params.sorting.length) {
|
|
36
|
+
debugger;
|
|
37
|
+
const sorting = params.sorting[0];
|
|
38
|
+
const sortField = sorting.field;
|
|
39
|
+
const sortDir = sorting.direction;
|
|
40
|
+
rows = rows.sort((a, b) => {
|
|
41
|
+
let av = a[sortField];
|
|
42
|
+
let bv = b[sortField];
|
|
43
|
+
if (av === undefined)
|
|
44
|
+
av = "";
|
|
45
|
+
if (bv === undefined)
|
|
46
|
+
bv = "";
|
|
47
|
+
const avIsNumber = typeof av === "number";
|
|
48
|
+
const bvIsNumber = typeof bv === "number";
|
|
49
|
+
if (avIsNumber && bvIsNumber) {
|
|
50
|
+
if (sortDir === "asc") {
|
|
51
|
+
return av - bv;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
return bv - av;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
const avStr = String(av);
|
|
59
|
+
const bvStr = String(bv);
|
|
60
|
+
if (sortDir === "asc") {
|
|
61
|
+
return avStr.localeCompare(bvStr);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
return bvStr.localeCompare(avStr);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
const totalWithoutPagination = rows.length;
|
|
70
|
+
rows = rows.slice(params.offset, params.offset + params.count);
|
|
71
|
+
return {
|
|
72
|
+
rows, total: totalWithoutPagination,
|
|
73
|
+
offset: params.offset
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/jk_data/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -75,7 +75,7 @@ export declare const join: (...paths: string[]) => string;
|
|
|
75
75
|
export declare const resolve: (...paths: string[]) => string;
|
|
76
76
|
export declare const dirname: (path: string) => string;
|
|
77
77
|
export declare const extname: (path: string) => string;
|
|
78
|
-
export declare const sep: "
|
|
78
|
+
export declare const sep: "\\" | "/";
|
|
79
79
|
export declare const isAbsolute: (path: string) => boolean;
|
|
80
80
|
export declare const normalize: (path: string) => string;
|
|
81
81
|
export declare const basename: (path: string, suffix?: string) => string;
|
|
@@ -59,7 +59,57 @@ export type SchemaToType<S extends Schema> = {
|
|
|
59
59
|
} & {
|
|
60
60
|
[K in keyof S['desc'] as S['desc'][K] extends ScField<any, true> ? K : never]?: S['desc'][K] extends ScField<infer T, any> ? T : never;
|
|
61
61
|
};
|
|
62
|
-
export interface
|
|
62
|
+
export interface ScOnTableRenderingInfo {
|
|
63
|
+
/**
|
|
64
|
+
* The title to use if rendering with a Table.
|
|
65
|
+
*/
|
|
66
|
+
title?: string;
|
|
67
|
+
/**
|
|
68
|
+
* If true, then allows hiding the column
|
|
69
|
+
* when rendering into a UI table component.
|
|
70
|
+
*/
|
|
71
|
+
enableHiding?: boolean;
|
|
72
|
+
/**
|
|
73
|
+
* If true, then the table column is hidden by default.
|
|
74
|
+
*/
|
|
75
|
+
defaultHidden?: boolean;
|
|
76
|
+
/**
|
|
77
|
+
* If true, then the table column is hidden and remain hidden.
|
|
78
|
+
*/
|
|
79
|
+
alwaysHidden?: boolean;
|
|
80
|
+
/**
|
|
81
|
+
* If true, then allows sorting the column
|
|
82
|
+
* when rendering into a UI table component.
|
|
83
|
+
*/
|
|
84
|
+
enableSorting?: boolean;
|
|
85
|
+
/**
|
|
86
|
+
* If true, then allows editing the column
|
|
87
|
+
* when rendering into a UI table component.
|
|
88
|
+
*/
|
|
89
|
+
enableEditing?: boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Contains the name of the renderer to user for the header.
|
|
92
|
+
*/
|
|
93
|
+
rendererForHeader?: string;
|
|
94
|
+
/**
|
|
95
|
+
* Contains the name of the renderer to user for the cell.
|
|
96
|
+
*/
|
|
97
|
+
rendererForCell?: string;
|
|
98
|
+
/**
|
|
99
|
+
* Allows setting the column grow rule.
|
|
100
|
+
*/
|
|
101
|
+
columnGrow?: "takeAllPlace" | "takeMinPlace";
|
|
102
|
+
/**
|
|
103
|
+
* Allows defining extra-css class for rendering the cells.
|
|
104
|
+
*/
|
|
105
|
+
cellCssClass?: string;
|
|
106
|
+
/**
|
|
107
|
+
* Allows defining extra-css class for rendering the header.
|
|
108
|
+
*/
|
|
109
|
+
headerCssClass?: string;
|
|
110
|
+
textAlign?: "left" | "center" | "right";
|
|
111
|
+
}
|
|
112
|
+
interface ScField<T, Opt extends boolean> {
|
|
63
113
|
title: string;
|
|
64
114
|
type: string;
|
|
65
115
|
description?: string;
|
|
@@ -71,10 +121,12 @@ export interface ScField<T, Opt extends boolean> {
|
|
|
71
121
|
normalize?: (value: T, allValues: any) => void;
|
|
72
122
|
validator?: (value: T, allValues: any) => void;
|
|
73
123
|
metas?: Record<string, string>;
|
|
124
|
+
onTableRendering?: ScOnTableRenderingInfo;
|
|
74
125
|
}
|
|
75
|
-
export type
|
|
76
|
-
type
|
|
77
|
-
|
|
126
|
+
export type Field = ScField<any, any>;
|
|
127
|
+
export type SchemaFieldInfos = Field;
|
|
128
|
+
type OnlyInfos<T> = Omit<T, "title" | "optional" | "type">;
|
|
129
|
+
export interface ScString<Opt extends boolean = boolean> extends ScField<string, Opt> {
|
|
78
130
|
minLength?: number;
|
|
79
131
|
errorMessage_minLength?: string;
|
|
80
132
|
maxLength?: number;
|
|
@@ -82,14 +134,14 @@ export interface ScString<Opt extends boolean> extends ScField<string, Opt> {
|
|
|
82
134
|
placeholder?: string;
|
|
83
135
|
}
|
|
84
136
|
export declare function string<Opt extends boolean>(title: string, optional: Opt, infos?: OnlyInfos<ScString<Opt>>): ScString<Opt>;
|
|
85
|
-
export interface ScBoolean<Opt extends boolean> extends ScField<boolean, Opt> {
|
|
137
|
+
export interface ScBoolean<Opt extends boolean = boolean> extends ScField<boolean, Opt> {
|
|
86
138
|
requireTrue?: boolean;
|
|
87
139
|
errorMessage_requireTrue?: string;
|
|
88
140
|
requireFalse?: boolean;
|
|
89
141
|
errorMessage_requireFalse?: string;
|
|
90
142
|
}
|
|
91
143
|
export declare function boolean<Opt extends boolean>(title: string, optional: Opt, infos?: OnlyInfos<ScBoolean<Opt>>): ScBoolean<Opt>;
|
|
92
|
-
export interface ScNumber<Opt extends boolean> extends ScField<number, Opt> {
|
|
144
|
+
export interface ScNumber<Opt extends boolean = boolean> extends ScField<number, Opt> {
|
|
93
145
|
minValue?: number;
|
|
94
146
|
errorMessage_minValue?: string;
|
|
95
147
|
maxValue?: number;
|
|
@@ -99,8 +151,26 @@ export interface ScNumber<Opt extends boolean> extends ScField<number, Opt> {
|
|
|
99
151
|
errorMessage_dontAllowDecimal?: string;
|
|
100
152
|
incrStep?: number;
|
|
101
153
|
placeholder?: string;
|
|
154
|
+
/**
|
|
155
|
+
* Allows displaying this value as a simple
|
|
156
|
+
* number, or a current, or a percent.
|
|
157
|
+
*/
|
|
158
|
+
displayType?: "decimal" | "currency" | "percent";
|
|
159
|
+
/**
|
|
160
|
+
* The regional currency format to use for formating.
|
|
161
|
+
* Ex: "en-US", "fr-FR".
|
|
162
|
+
*/
|
|
163
|
+
localFormat?: string;
|
|
164
|
+
/**
|
|
165
|
+
* The type of currency.
|
|
166
|
+
* Ex: "USD".
|
|
167
|
+
*/
|
|
168
|
+
currency?: string;
|
|
102
169
|
}
|
|
103
170
|
export declare function number<Opt extends boolean>(title: string, optional: Opt, infos?: OnlyInfos<ScNumber<Opt>>): ScNumber<Opt>;
|
|
171
|
+
export declare function formatNumber(value: string, fieldNumber: ScNumber, defaultLocalFormat?: string, defaultCurrency?: string): string;
|
|
172
|
+
export declare function currency<Opt extends boolean>(title: string, optional: Opt, infos?: OnlyInfos<ScNumber<Opt>>): ScNumber<Opt>;
|
|
173
|
+
export declare function percent<Opt extends boolean>(title: string, optional: Opt, infos?: OnlyInfos<ScNumber<Opt>>): ScNumber<Opt>;
|
|
104
174
|
export interface File extends Blob {
|
|
105
175
|
readonly lastModified: number;
|
|
106
176
|
readonly name: string;
|
package/dist/jk_schemas/index.js
CHANGED
|
@@ -21,54 +21,10 @@ class SchemaError extends Error {
|
|
|
21
21
|
export function declareError(message, errorCode) {
|
|
22
22
|
throw new SchemaError(message, errorCode);
|
|
23
23
|
}
|
|
24
|
-
const byTypeValidator = {
|
|
25
|
-
"string": (v, f) => {
|
|
26
|
-
if (typeof v !== "string") {
|
|
27
|
-
declareError(f.errorMessage_theValueIsInvalid || `Value must be a string`, "INVALID_TYPE");
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
let sf = f;
|
|
31
|
-
if ((sf.minLength !== undefined) && (v.length < sf.minLength)) {
|
|
32
|
-
declareError(sf.errorMessage_minLength || `Value must be at least ${sf.minLength} characters long`, "INVALID_LENGTH");
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
if ((sf.maxLength !== undefined) && (v.length > sf.maxLength)) {
|
|
36
|
-
declareError(sf.errorMessage_maxLength || `Value must be less than ${sf.maxLength} characters long`, "INVALID_LENGTH");
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
},
|
|
40
|
-
"number": (v, f) => {
|
|
41
|
-
if (typeof v !== "number") {
|
|
42
|
-
declareError(f.errorMessage_theValueIsInvalid || `Value must be a number`, "INVALID_TYPE");
|
|
43
|
-
}
|
|
44
|
-
let sf = f;
|
|
45
|
-
if ((sf.minValue !== undefined) && (v < sf.minValue)) {
|
|
46
|
-
declareError(sf.errorMessage_minValue || `Value must be at least ${sf.minValue}`, "INVALID_LENGTH");
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
if ((sf.maxValue !== undefined) && (v > sf.maxValue)) {
|
|
50
|
-
declareError(sf.errorMessage_maxValue || `Value must be less than ${sf.maxValue}`, "INVALID_LENGTH");
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
"boolean": (v, f) => {
|
|
55
|
-
if (typeof v !== "boolean") {
|
|
56
|
-
declareError(f.errorMessage_theValueIsInvalid || `Value must be a boolean`, "INVALID_TYPE");
|
|
57
|
-
}
|
|
58
|
-
let sf = f;
|
|
59
|
-
if (sf.requireTrue) {
|
|
60
|
-
if (v !== true) {
|
|
61
|
-
declareError(sf.errorMessage_requireTrue || `Value must be true`, "INVALID_VALUE");
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
else if (sf.requireFalse) {
|
|
65
|
-
if (v !== false) {
|
|
66
|
-
declareError(sf.errorMessage_requireFalse || `Value must be false`, "INVALID_VALUE");
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
24
|
export function validateSchema(data, schema) {
|
|
25
|
+
// Normalize the data.
|
|
26
|
+
// It's a step where we apply automatic corrections.
|
|
27
|
+
//
|
|
72
28
|
if (schema.schemaMeta.normalize) {
|
|
73
29
|
try {
|
|
74
30
|
schema.schemaMeta.normalize(data);
|
|
@@ -85,6 +41,11 @@ export function validateSchema(data, schema) {
|
|
|
85
41
|
}
|
|
86
42
|
}
|
|
87
43
|
}
|
|
44
|
+
// >>> Check each field individually.
|
|
45
|
+
// Each time it will:
|
|
46
|
+
// - Normalize the value.
|
|
47
|
+
// - Check if optional + undefined.
|
|
48
|
+
// - Apply validator for the field type.
|
|
88
49
|
let fieldErrors;
|
|
89
50
|
for (let fieldName in schema.desc) {
|
|
90
51
|
let defaultErrorMessage;
|
|
@@ -132,6 +93,8 @@ export function validateSchema(data, schema) {
|
|
|
132
93
|
}
|
|
133
94
|
}
|
|
134
95
|
}
|
|
96
|
+
// >>> Validate the whole fields.
|
|
97
|
+
// Allow validating if values are ok with each others.
|
|
135
98
|
if (schema.schemaMeta.validate) {
|
|
136
99
|
try {
|
|
137
100
|
schema.schemaMeta.validate(data);
|
|
@@ -149,10 +112,14 @@ export function validateSchema(data, schema) {
|
|
|
149
112
|
}
|
|
150
113
|
}
|
|
151
114
|
}
|
|
115
|
+
// No error ? --> undefined.
|
|
116
|
+
// Otherwise returns the errors.
|
|
117
|
+
//
|
|
152
118
|
if (!fieldErrors)
|
|
153
119
|
return undefined;
|
|
154
120
|
return { fields: fieldErrors };
|
|
155
121
|
}
|
|
122
|
+
const byTypeValidator = {};
|
|
156
123
|
export function registerSchema(schemaId, schema, meta) {
|
|
157
124
|
if (!schemaId) {
|
|
158
125
|
throw new Error("jk_schemas - Schema id required. If you need an uid you can use: " + generateUUIDv4());
|
|
@@ -196,12 +163,80 @@ export function string(title, optional, infos) {
|
|
|
196
163
|
}
|
|
197
164
|
return { ...infos, title, optional, type: "string" };
|
|
198
165
|
}
|
|
166
|
+
byTypeValidator["string"] = (v, f) => {
|
|
167
|
+
if (typeof v !== "string") {
|
|
168
|
+
declareError(f.errorMessage_theValueIsInvalid || `Value must be a string`, "INVALID_TYPE");
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
let sf = f;
|
|
172
|
+
if ((sf.minLength !== undefined) && (v.length < sf.minLength)) {
|
|
173
|
+
declareError(sf.errorMessage_minLength || `Value must be at least ${sf.minLength} characters long`, "INVALID_LENGTH");
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
if ((sf.maxLength !== undefined) && (v.length > sf.maxLength)) {
|
|
177
|
+
declareError(sf.errorMessage_maxLength || `Value must be less than ${sf.maxLength} characters long`, "INVALID_LENGTH");
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
};
|
|
199
181
|
export function boolean(title, optional, infos) {
|
|
200
182
|
return { ...infos, title, optional, type: "boolean" };
|
|
201
183
|
}
|
|
184
|
+
byTypeValidator["boolean"] = (v, f) => {
|
|
185
|
+
if (typeof v !== "boolean") {
|
|
186
|
+
declareError(f.errorMessage_theValueIsInvalid || `Value must be a boolean`, "INVALID_TYPE");
|
|
187
|
+
}
|
|
188
|
+
let sf = f;
|
|
189
|
+
if (sf.requireTrue) {
|
|
190
|
+
if (v !== true) {
|
|
191
|
+
declareError(sf.errorMessage_requireTrue || `Value must be true`, "INVALID_VALUE");
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
else if (sf.requireFalse) {
|
|
195
|
+
if (v !== false) {
|
|
196
|
+
declareError(sf.errorMessage_requireFalse || `Value must be false`, "INVALID_VALUE");
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
};
|
|
202
200
|
export function number(title, optional, infos) {
|
|
203
201
|
return { ...infos, title, optional, type: "number" };
|
|
204
202
|
}
|
|
203
|
+
export function formatNumber(value, fieldNumber, defaultLocalFormat = "en-US", defaultCurrency = "USD") {
|
|
204
|
+
const amount = parseFloat(value);
|
|
205
|
+
let localFormat = fieldNumber.localFormat || defaultLocalFormat;
|
|
206
|
+
switch (fieldNumber.displayType) {
|
|
207
|
+
case "currency":
|
|
208
|
+
return new Intl.NumberFormat(localFormat, {
|
|
209
|
+
style: "currency",
|
|
210
|
+
currency: fieldNumber.currency || defaultCurrency,
|
|
211
|
+
}).format(amount);
|
|
212
|
+
default:
|
|
213
|
+
return new Intl.NumberFormat(localFormat, { style: fieldNumber.displayType || "decimal" }).format(amount);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
byTypeValidator["number"] = (v, f) => {
|
|
217
|
+
if (typeof v !== "number") {
|
|
218
|
+
declareError(f.errorMessage_theValueIsInvalid || `Value must be a number`, "INVALID_TYPE");
|
|
219
|
+
}
|
|
220
|
+
let sf = f;
|
|
221
|
+
if ((sf.minValue !== undefined) && (v < sf.minValue)) {
|
|
222
|
+
declareError(sf.errorMessage_minValue || `Value must be at least ${sf.minValue}`, "INVALID_LENGTH");
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
if ((sf.maxValue !== undefined) && (v > sf.maxValue)) {
|
|
226
|
+
declareError(sf.errorMessage_maxValue || `Value must be less than ${sf.maxValue}`, "INVALID_LENGTH");
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
//endregion
|
|
231
|
+
//region Currency
|
|
232
|
+
export function currency(title, optional, infos) {
|
|
233
|
+
return number(title, optional, { ...infos, displayType: "currency" });
|
|
234
|
+
}
|
|
235
|
+
//endregion
|
|
236
|
+
//region Percent
|
|
237
|
+
export function percent(title, optional, infos) {
|
|
238
|
+
return number(title, optional, { ...infos, displayType: "percent" });
|
|
239
|
+
}
|
|
205
240
|
export function file(title, optional, infos) {
|
|
206
241
|
return { ...infos, title, optional, type: "file" };
|
|
207
242
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/jk_schemas/index.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAC;AAErD,mBAAmB;AAEnB;;;GAGG;AACH,MAAM,WAAY,SAAQ,KAAK;IACC;IAAuC;IAAnE,YAA4B,YAAqB,EAAkB,SAAkB;QACjF,KAAK,CAAC,EAAE,CAAC,CAAC;QADc,iBAAY,GAAZ,YAAY,CAAS;QAAkB,cAAS,GAAT,SAAS,CAAS;IAErF,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,OAAgB,EAAE,SAAkB;IAC7D,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAC9C,CAAC;AAqBD,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/jk_schemas/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Declare an error when validating a schema.
|
|
3
|
+
* Must be called when validating or normalizing.
|
|
4
|
+
*/
|
|
5
|
+
export declare function declareError(message?: string, errorCode?: string): void;
|
|
6
|
+
export interface FieldError {
|
|
7
|
+
fieldName: string;
|
|
8
|
+
message: string;
|
|
9
|
+
code?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface ValidationErrors {
|
|
12
|
+
/**
|
|
13
|
+
* An error about the whole schema.
|
|
14
|
+
*/
|
|
15
|
+
globalError?: string;
|
|
16
|
+
globalErrorCode?: string;
|
|
17
|
+
/**
|
|
18
|
+
* An error per field.
|
|
19
|
+
*/
|
|
20
|
+
fields?: Record<string, FieldError>;
|
|
21
|
+
}
|
|
22
|
+
export declare function validateSchema(data: any, schema: Schema): ValidationErrors | undefined;
|
|
23
|
+
export declare function registerSchema(schemaId: string | undefined, schema: Schema, meta?: any): void;
|
|
24
|
+
export declare function getSchemaMeta(schemaId: string): Schema | undefined;
|
|
25
|
+
export declare function getSchema(schemaId: string): Schema | undefined;
|
|
26
|
+
export declare function requireSchema(schemaId: string): Schema;
|
|
27
|
+
export declare function schema<T extends SchemaDescriptor>(descriptor: T, meta?: SchemaMeta): Schema & {
|
|
28
|
+
desc: T;
|
|
29
|
+
};
|
|
30
|
+
export interface SchemaDescriptor {
|
|
31
|
+
[field: string]: ScField<any, any>;
|
|
32
|
+
}
|
|
33
|
+
export interface SchemaMeta {
|
|
34
|
+
title?: string;
|
|
35
|
+
description?: string;
|
|
36
|
+
[key: string]: any;
|
|
37
|
+
normalize?: (allValues: any) => void;
|
|
38
|
+
validate?: (allValues: any) => void;
|
|
39
|
+
}
|
|
40
|
+
export interface SchemaInfo {
|
|
41
|
+
desc: SchemaDescriptor;
|
|
42
|
+
schemaMeta: SchemaMeta;
|
|
43
|
+
}
|
|
44
|
+
export interface Schema extends SchemaInfo {
|
|
45
|
+
}
|
|
46
|
+
export declare function toJson(schema: Schema): SchemaInfo;
|
|
47
|
+
/**
|
|
48
|
+
* Allow getting a valid TypeScript type for our schema.
|
|
49
|
+
*
|
|
50
|
+
* **Example**
|
|
51
|
+
* ```
|
|
52
|
+
* const UserSchema = { name: string("The name", false), test: string("Test", true) };
|
|
53
|
+
* type UserDataType = SchemaToType<typeof UserSchema>;
|
|
54
|
+
* let ud: UserDataType = {name:"ok", test: "5"};
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export type SchemaToType<S extends Schema> = {
|
|
58
|
+
[K in keyof S['desc'] as S['desc'][K] extends ScField<any, false> ? K : never]: S['desc'][K] extends ScField<infer T, any> ? T : never;
|
|
59
|
+
} & {
|
|
60
|
+
[K in keyof S['desc'] as S['desc'][K] extends ScField<any, true> ? K : never]?: S['desc'][K] extends ScField<infer T, any> ? T : never;
|
|
61
|
+
};
|
|
62
|
+
export interface ScOnTableRenderingInfo {
|
|
63
|
+
/**
|
|
64
|
+
* The title to use if rendering with a Table.
|
|
65
|
+
*/
|
|
66
|
+
title?: string;
|
|
67
|
+
/**
|
|
68
|
+
* If true, then allows hiding the column
|
|
69
|
+
* when rendering into a UI table component.
|
|
70
|
+
*/
|
|
71
|
+
enableHiding?: boolean;
|
|
72
|
+
/**
|
|
73
|
+
* If true, then the table column is hidden by default.
|
|
74
|
+
*/
|
|
75
|
+
defaultHidden?: boolean;
|
|
76
|
+
/**
|
|
77
|
+
* If true, then the table column is hidden and remain hidden.
|
|
78
|
+
*/
|
|
79
|
+
alwaysHidden?: boolean;
|
|
80
|
+
/**
|
|
81
|
+
* If true, then allows sorting the column
|
|
82
|
+
* when rendering into a UI table component.
|
|
83
|
+
*/
|
|
84
|
+
enableSorting?: boolean;
|
|
85
|
+
/**
|
|
86
|
+
* If true, then allows editing the column
|
|
87
|
+
* when rendering into a UI table component.
|
|
88
|
+
*/
|
|
89
|
+
enableEditing?: boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Contains the name of the renderer to user for the header.
|
|
92
|
+
*/
|
|
93
|
+
rendererForHeader?: string;
|
|
94
|
+
/**
|
|
95
|
+
* Contains the name of the renderer to user for the cell.
|
|
96
|
+
*/
|
|
97
|
+
rendererForCell?: string;
|
|
98
|
+
/**
|
|
99
|
+
* Allows setting the column grow rule.
|
|
100
|
+
*/
|
|
101
|
+
columnGrow?: "takeAllPlace" | "takeMinPlace";
|
|
102
|
+
/**
|
|
103
|
+
* Allows defining extra-css class for rendering the cells.
|
|
104
|
+
*/
|
|
105
|
+
cellCssClass?: string;
|
|
106
|
+
/**
|
|
107
|
+
* Allows defining extra-css class for rendering the header.
|
|
108
|
+
*/
|
|
109
|
+
headerCssClass?: string;
|
|
110
|
+
textAlign?: "left" | "center" | "right";
|
|
111
|
+
}
|
|
112
|
+
interface ScField<T, Opt extends boolean> {
|
|
113
|
+
title: string;
|
|
114
|
+
type: string;
|
|
115
|
+
description?: string;
|
|
116
|
+
default?: T;
|
|
117
|
+
optional?: Opt;
|
|
118
|
+
errorMessage_isRequired?: string;
|
|
119
|
+
errorMessage_theDataTypeIsInvalid?: string;
|
|
120
|
+
errorMessage_theValueIsInvalid?: string;
|
|
121
|
+
normalize?: (value: T, allValues: any) => void;
|
|
122
|
+
validator?: (value: T, allValues: any) => void;
|
|
123
|
+
metas?: Record<string, string>;
|
|
124
|
+
onTableRendering?: ScOnTableRenderingInfo;
|
|
125
|
+
}
|
|
126
|
+
export type Field = ScField<any, any>;
|
|
127
|
+
export type SchemaFieldInfos = Field;
|
|
128
|
+
type OnlyInfos<T> = Omit<T, "title" | "optional" | "type">;
|
|
129
|
+
export interface ScString<Opt extends boolean = boolean> extends ScField<string, Opt> {
|
|
130
|
+
minLength?: number;
|
|
131
|
+
errorMessage_minLength?: string;
|
|
132
|
+
maxLength?: number;
|
|
133
|
+
errorMessage_maxLength?: string;
|
|
134
|
+
placeholder?: string;
|
|
135
|
+
}
|
|
136
|
+
export declare function string<Opt extends boolean>(title: string, optional: Opt, infos?: OnlyInfos<ScString<Opt>>): ScString<Opt>;
|
|
137
|
+
export interface ScBoolean<Opt extends boolean = boolean> extends ScField<boolean, Opt> {
|
|
138
|
+
requireTrue?: boolean;
|
|
139
|
+
errorMessage_requireTrue?: string;
|
|
140
|
+
requireFalse?: boolean;
|
|
141
|
+
errorMessage_requireFalse?: string;
|
|
142
|
+
}
|
|
143
|
+
export declare function boolean<Opt extends boolean>(title: string, optional: Opt, infos?: OnlyInfos<ScBoolean<Opt>>): ScBoolean<Opt>;
|
|
144
|
+
export interface ScNumber<Opt extends boolean = boolean> extends ScField<number, Opt> {
|
|
145
|
+
minValue?: number;
|
|
146
|
+
errorMessage_minValue?: string;
|
|
147
|
+
maxValue?: number;
|
|
148
|
+
errorMessage_maxValue?: string;
|
|
149
|
+
allowDecimal?: boolean;
|
|
150
|
+
roundMethod?: "round" | "floor" | "ceil";
|
|
151
|
+
errorMessage_dontAllowDecimal?: string;
|
|
152
|
+
incrStep?: number;
|
|
153
|
+
placeholder?: string;
|
|
154
|
+
/**
|
|
155
|
+
* Allows displaying this value as a simple
|
|
156
|
+
* number, or a current, or a percent.
|
|
157
|
+
*/
|
|
158
|
+
displayType?: "decimal" | "currency" | "percent";
|
|
159
|
+
/**
|
|
160
|
+
* The regional currency format to use for formating.
|
|
161
|
+
* Ex: "en-US", "fr-FR".
|
|
162
|
+
*/
|
|
163
|
+
localFormat?: string;
|
|
164
|
+
/**
|
|
165
|
+
* The type of currency.
|
|
166
|
+
* Ex: "USD".
|
|
167
|
+
*/
|
|
168
|
+
currency?: string;
|
|
169
|
+
}
|
|
170
|
+
export declare function number<Opt extends boolean>(title: string, optional: Opt, infos?: OnlyInfos<ScNumber<Opt>>): ScNumber<Opt>;
|
|
171
|
+
export declare function formatNumber(value: string, fieldNumber: ScNumber, defaultLocalFormat?: string, defaultCurrency?: string): string;
|
|
172
|
+
export declare function currency<Opt extends boolean>(title: string, optional: Opt, infos?: OnlyInfos<ScNumber<Opt>>): ScNumber<Opt>;
|
|
173
|
+
export declare function percent<Opt extends boolean>(title: string, optional: Opt, infos?: OnlyInfos<ScNumber<Opt>>): ScNumber<Opt>;
|
|
174
|
+
export interface File extends Blob {
|
|
175
|
+
readonly lastModified: number;
|
|
176
|
+
readonly name: string;
|
|
177
|
+
readonly webkitRelativePath: string;
|
|
178
|
+
}
|
|
179
|
+
export interface ScFile<Opt extends boolean> extends ScField<File[], Opt> {
|
|
180
|
+
maxFileCount?: number;
|
|
181
|
+
errorMessage_maxFileCount?: string;
|
|
182
|
+
acceptFileType?: string;
|
|
183
|
+
errorMessage_invalidFileType?: string;
|
|
184
|
+
maxFileSize?: number;
|
|
185
|
+
errorMessage_maxFileSize?: string;
|
|
186
|
+
}
|
|
187
|
+
export declare function file<Opt extends boolean>(title: string, optional: Opt, infos?: OnlyInfos<ScFile<Opt>>): ScFile<Opt>;
|
|
188
|
+
export {};
|