@ganju/utils 0.0.15 → 0.0.17
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/constants.d.ts +26 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +107 -9
- package/dist/customCodeToken.d.ts +11 -0
- package/dist/customCodeToken.d.ts.map +1 -1
- package/dist/customCodeToken.js +41 -1
- package/dist/data.d.ts +13 -0
- package/dist/data.d.ts.map +1 -0
- package/dist/data.js +103 -0
- package/dist/dataApi.d.ts +578 -0
- package/dist/dataApi.d.ts.map +1 -0
- package/dist/dataApi.js +399 -0
- package/dist/dataCompiler.d.ts +68 -0
- package/dist/dataCompiler.d.ts.map +1 -0
- package/dist/dataCompiler.js +730 -0
- package/dist/dataCsv.d.ts +20 -0
- package/dist/dataCsv.d.ts.map +1 -0
- package/dist/dataCsv.js +102 -0
- package/dist/dataDdl.d.ts +29 -0
- package/dist/dataDdl.d.ts.map +1 -0
- package/dist/dataDdl.js +354 -0
- package/dist/dataEngine.d.ts +143 -0
- package/dist/dataEngine.d.ts.map +1 -0
- package/dist/dataEngine.js +2042 -0
- package/dist/dataIdentifiers.d.ts +8 -0
- package/dist/dataIdentifiers.d.ts.map +1 -0
- package/dist/dataIdentifiers.js +55 -0
- package/dist/dataImport.d.ts +79 -0
- package/dist/dataImport.d.ts.map +1 -0
- package/dist/dataImport.js +453 -0
- package/dist/dataQueries.d.ts +73 -0
- package/dist/dataQueries.d.ts.map +1 -0
- package/dist/dataQueries.js +513 -0
- package/dist/dataRpc.d.ts +150 -0
- package/dist/dataRpc.d.ts.map +1 -0
- package/dist/dataRpc.js +2 -0
- package/dist/dataTools.d.ts +40 -0
- package/dist/dataTools.d.ts.map +1 -0
- package/dist/dataTools.js +280 -0
- package/dist/dataTypes.d.ts +159 -0
- package/dist/dataTypes.d.ts.map +1 -0
- package/dist/dataTypes.js +160 -0
- package/dist/index.d.ts +394 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/oauth.d.ts +14 -0
- package/dist/oauth.d.ts.map +1 -1
- package/dist/oauth.js +42 -2
- package/dist/resourceRerank.d.ts +3 -2
- package/dist/resourceRerank.d.ts.map +1 -1
- package/dist/resourceRerank.js +5 -2
- package/dist/schema.d.ts +376 -4
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +268 -1
- package/dist/sdkConstants.d.ts +1 -0
- package/dist/sdkConstants.d.ts.map +1 -1
- package/dist/sdkConstants.js +2 -1
- package/package.json +17 -2
- package/src/constants.ts +121 -9
- package/src/customCodeToken.ts +74 -0
- package/src/data.ts +108 -0
- package/src/dataApi.ts +479 -0
- package/src/dataCompiler.ts +952 -0
- package/src/dataCsv.ts +99 -0
- package/src/dataDdl.ts +419 -0
- package/src/dataEngine.ts +2773 -0
- package/src/dataIdentifiers.ts +63 -0
- package/src/dataImport.ts +557 -0
- package/src/dataQueries.ts +730 -0
- package/src/dataRpc.ts +132 -0
- package/src/dataTools.ts +338 -0
- package/src/dataTypes.ts +318 -0
- package/src/index.ts +13 -1
- package/src/oauth.ts +42 -1
- package/src/resourceRerank.ts +5 -2
- package/src/schema.ts +315 -1
- package/src/sdkConstants.ts +1 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// The shapes and limits shared by a project's database object (apps/data),
|
|
3
|
+
// the workers that call it, and the tests. Pure: nothing here touches SQLite.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.toTableInput = exports.DATA_HISTORY_DAYS = exports.DATA_IMPACT_MAX_IDS = exports.DATA_IMPACT_MAX_ROWS = exports.DATA_COPY_STEP_ROWS = exports.DATA_REBUILD_MAX_ROWS = exports.DATA_MAX_GROUPS = exports.DATA_MAX_GROUP_BY = exports.DATA_MAX_AGGREGATES = exports.DATA_MAX_SORT_KEYS = exports.DATA_MAX_IN_VALUES = exports.DATA_MAX_ENUM_VALUES = exports.DATA_MAX_LABEL = exports.DATA_MAX_DESCRIPTION = exports.DATA_MAX_VALUE_BYTES = exports.DATA_MAX_ROWS_PER_WRITE = exports.DATA_MAX_INSERT_ROWS = exports.DATA_MAX_WRITE_OPERATIONS = exports.DATA_LARGE_TABLE_ROWS = exports.DATA_MAX_RESULT_BYTES = exports.DATA_MAX_PAGE = exports.DATA_DEFAULT_PAGE = exports.DATA_MAX_TABLES = exports.DATA_MAX_COLUMNS = exports.DATA_MAX_STATEMENT_BYTES = exports.DATA_MAX_PARAMS = exports.isDataError = exports.DataError = exports.DATA_ERROR_CODES = exports.DATA_ON_DELETE = exports.DATA_ACCESS_RANK = exports.DATA_ACCESS_LEVELS = exports.DATA_COLUMN_TYPES = void 0;
|
|
6
|
+
exports.DATA_COLUMN_TYPES = [
|
|
7
|
+
'text',
|
|
8
|
+
'long_text',
|
|
9
|
+
'integer',
|
|
10
|
+
'decimal',
|
|
11
|
+
'boolean',
|
|
12
|
+
'date',
|
|
13
|
+
'datetime',
|
|
14
|
+
'enum',
|
|
15
|
+
'json',
|
|
16
|
+
'email',
|
|
17
|
+
'url',
|
|
18
|
+
'phone',
|
|
19
|
+
'relation',
|
|
20
|
+
'file'
|
|
21
|
+
];
|
|
22
|
+
// What the assistant may do with a table when the caller is restricted (a
|
|
23
|
+
// channel bot). Owners, the dashboard, the CLI and functions see every table.
|
|
24
|
+
exports.DATA_ACCESS_LEVELS = ['none', 'read', 'add', 'full'];
|
|
25
|
+
exports.DATA_ACCESS_RANK = {
|
|
26
|
+
none: 0,
|
|
27
|
+
read: 1,
|
|
28
|
+
add: 2,
|
|
29
|
+
full: 3
|
|
30
|
+
};
|
|
31
|
+
exports.DATA_ON_DELETE = ['restrict', 'cascade', 'set_null'];
|
|
32
|
+
exports.DATA_ERROR_CODES = [
|
|
33
|
+
'invalid',
|
|
34
|
+
'not_found',
|
|
35
|
+
'forbidden',
|
|
36
|
+
'conflict',
|
|
37
|
+
'constraint',
|
|
38
|
+
'guard',
|
|
39
|
+
'too_large',
|
|
40
|
+
'full',
|
|
41
|
+
'read_only',
|
|
42
|
+
'deleted',
|
|
43
|
+
'not_initialised',
|
|
44
|
+
'restore',
|
|
45
|
+
'internal'
|
|
46
|
+
];
|
|
47
|
+
// The one error the database object returns. Its message is written for the
|
|
48
|
+
// person or model that made the call, never raw SQLite text.
|
|
49
|
+
class DataError extends Error {
|
|
50
|
+
code;
|
|
51
|
+
details;
|
|
52
|
+
constructor(message, code = 'invalid', details) {
|
|
53
|
+
super(message);
|
|
54
|
+
this.name = 'DataError';
|
|
55
|
+
this.code = code;
|
|
56
|
+
this.details = details;
|
|
57
|
+
}
|
|
58
|
+
// What the API answers with; its error handler reads both.
|
|
59
|
+
get status() {
|
|
60
|
+
return DATA_ERROR_STATUS[this.code];
|
|
61
|
+
}
|
|
62
|
+
toBody() {
|
|
63
|
+
return { code: this.code, ...(this.details ? { details: this.details } : {}) };
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.DataError = DataError;
|
|
67
|
+
const DATA_ERROR_STATUS = {
|
|
68
|
+
invalid: 400,
|
|
69
|
+
not_found: 404,
|
|
70
|
+
forbidden: 403,
|
|
71
|
+
conflict: 409,
|
|
72
|
+
constraint: 409,
|
|
73
|
+
guard: 409,
|
|
74
|
+
too_large: 400,
|
|
75
|
+
full: 409,
|
|
76
|
+
read_only: 403,
|
|
77
|
+
deleted: 409,
|
|
78
|
+
not_initialised: 404,
|
|
79
|
+
restore: 400,
|
|
80
|
+
internal: 500
|
|
81
|
+
};
|
|
82
|
+
const isDataError = (error) => error instanceof DataError;
|
|
83
|
+
exports.isDataError = isDataError;
|
|
84
|
+
// Limits. SQLite in a Durable Object allows 100 columns per table, 100 bound
|
|
85
|
+
// parameters per statement and 100 KB per statement; the rest are ours.
|
|
86
|
+
exports.DATA_MAX_PARAMS = 100;
|
|
87
|
+
exports.DATA_MAX_STATEMENT_BYTES = 90_000;
|
|
88
|
+
// 100 minus id, created_at, updated_at, version, created_by, updated_by and
|
|
89
|
+
// participant_id.
|
|
90
|
+
exports.DATA_MAX_COLUMNS = 93;
|
|
91
|
+
exports.DATA_MAX_TABLES = 50;
|
|
92
|
+
exports.DATA_DEFAULT_PAGE = 20;
|
|
93
|
+
exports.DATA_MAX_PAGE = 500;
|
|
94
|
+
exports.DATA_MAX_RESULT_BYTES = 1024 * 1024;
|
|
95
|
+
// Past this many rows, an aggregate or a sort on an unindexed column needs a
|
|
96
|
+
// filter on an indexed one: the object serves one request at a time.
|
|
97
|
+
exports.DATA_LARGE_TABLE_ROWS = 200_000;
|
|
98
|
+
exports.DATA_MAX_WRITE_OPERATIONS = 50;
|
|
99
|
+
exports.DATA_MAX_INSERT_ROWS = 500;
|
|
100
|
+
exports.DATA_MAX_ROWS_PER_WRITE = 5_000;
|
|
101
|
+
exports.DATA_MAX_VALUE_BYTES = 1_000_000;
|
|
102
|
+
exports.DATA_MAX_DESCRIPTION = 300;
|
|
103
|
+
exports.DATA_MAX_LABEL = 100;
|
|
104
|
+
exports.DATA_MAX_ENUM_VALUES = 100;
|
|
105
|
+
exports.DATA_MAX_IN_VALUES = 50;
|
|
106
|
+
exports.DATA_MAX_SORT_KEYS = 3;
|
|
107
|
+
exports.DATA_MAX_AGGREGATES = 5;
|
|
108
|
+
exports.DATA_MAX_GROUP_BY = 3;
|
|
109
|
+
exports.DATA_MAX_GROUPS = 100;
|
|
110
|
+
// A type change copies the table in one request up to this size. A larger
|
|
111
|
+
// table is copied in the background, this many rows a step (tens of
|
|
112
|
+
// milliseconds, so other requests are served in between), and writes that
|
|
113
|
+
// would change its rows wait until it is done.
|
|
114
|
+
exports.DATA_REBUILD_MAX_ROWS = 100_000;
|
|
115
|
+
exports.DATA_COPY_STEP_ROWS = 5_000;
|
|
116
|
+
// A delete preview follows cascades through up to this many rows; past it,
|
|
117
|
+
// its counts are lower bounds.
|
|
118
|
+
exports.DATA_IMPACT_MAX_ROWS = 200_000;
|
|
119
|
+
exports.DATA_IMPACT_MAX_IDS = exports.DATA_MAX_ROWS_PER_WRITE;
|
|
120
|
+
exports.DATA_HISTORY_DAYS = 90;
|
|
121
|
+
// The table as the owner would write it again: what `ganju.data.json` and an
|
|
122
|
+
// export's schema.json hold.
|
|
123
|
+
const toTableInput = (table) => ({
|
|
124
|
+
name: table.name,
|
|
125
|
+
label: table.label,
|
|
126
|
+
description: table.description,
|
|
127
|
+
displayColumn: table.displayColumn,
|
|
128
|
+
access: table.access,
|
|
129
|
+
customerScoped: table.customerScoped,
|
|
130
|
+
history: table.history,
|
|
131
|
+
columns: table.columns.map(column => {
|
|
132
|
+
const out = { name: column.name, type: column.type };
|
|
133
|
+
if (column.label)
|
|
134
|
+
out.label = column.label;
|
|
135
|
+
if (column.description)
|
|
136
|
+
out.description = column.description;
|
|
137
|
+
if (column.required)
|
|
138
|
+
out.required = true;
|
|
139
|
+
if (column.unique)
|
|
140
|
+
out.unique = true;
|
|
141
|
+
if (column.filterable)
|
|
142
|
+
out.filterable = true;
|
|
143
|
+
if (column.searchable)
|
|
144
|
+
out.searchable = true;
|
|
145
|
+
if (column.personal)
|
|
146
|
+
out.personal = true;
|
|
147
|
+
if (column.values)
|
|
148
|
+
out.values = column.values;
|
|
149
|
+
if (column.table)
|
|
150
|
+
out.table = column.table;
|
|
151
|
+
if (column.onDelete)
|
|
152
|
+
out.onDelete = column.onDelete;
|
|
153
|
+
if (column.min !== null)
|
|
154
|
+
out.min = column.min;
|
|
155
|
+
if (column.default !== undefined)
|
|
156
|
+
out.default = column.default;
|
|
157
|
+
return out;
|
|
158
|
+
})
|
|
159
|
+
});
|
|
160
|
+
exports.toTableInput = toTableInput;
|