@ganju/utils 0.0.20 → 0.0.22
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 +16 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +43 -0
- package/dist/data.d.ts +7 -5
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +27 -3
- package/dist/dataApi.d.ts +82 -6
- package/dist/dataApi.d.ts.map +1 -1
- package/dist/dataApi.js +47 -4
- package/dist/dataAttachment.d.ts +8 -0
- package/dist/dataAttachment.d.ts.map +1 -0
- package/dist/dataAttachment.js +19 -0
- package/dist/dataCompiler.d.ts +4 -0
- package/dist/dataCompiler.d.ts.map +1 -1
- package/dist/dataCompiler.js +27 -2
- package/dist/dataDdl.d.ts.map +1 -1
- package/dist/dataDdl.js +5 -0
- package/dist/dataEngine.d.ts +25 -3
- package/dist/dataEngine.d.ts.map +1 -1
- package/dist/dataEngine.js +508 -14
- package/dist/dataImport.d.ts +3 -0
- package/dist/dataImport.d.ts.map +1 -1
- package/dist/dataImport.js +12 -2
- package/dist/dataIndexAdvice.d.ts +36 -0
- package/dist/dataIndexAdvice.d.ts.map +1 -0
- package/dist/dataIndexAdvice.js +89 -0
- package/dist/dataRpc.d.ts +20 -1
- package/dist/dataRpc.d.ts.map +1 -1
- package/dist/dataSheet.d.ts +34 -0
- package/dist/dataSheet.d.ts.map +1 -0
- package/dist/dataSheet.js +100 -0
- package/dist/dataTools.js +3 -3
- package/dist/dataTriggers.d.ts +66 -4
- package/dist/dataTriggers.d.ts.map +1 -1
- package/dist/dataTriggers.js +446 -20
- package/dist/dataTypes.d.ts +69 -0
- package/dist/dataTypes.d.ts.map +1 -1
- package/dist/dataTypes.js +21 -1
- package/dist/index.d.ts +91 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/localizeDataError.d.ts.map +1 -1
- package/dist/localizeDataError.js +109 -3
- package/dist/schema.d.ts +67 -6
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +57 -2
- package/dist/untrustedContent.d.ts +7 -0
- package/dist/untrustedContent.d.ts.map +1 -1
- package/dist/untrustedContent.js +13 -1
- package/dist/whatsappWebhook.d.ts +28 -0
- package/dist/whatsappWebhook.d.ts.map +1 -0
- package/dist/whatsappWebhook.js +30 -0
- package/package.json +1 -1
- package/src/constants.ts +46 -0
- package/src/data.ts +33 -3
- package/src/dataApi.ts +54 -4
- package/src/dataAttachment.ts +23 -0
- package/src/dataCompiler.ts +41 -1
- package/src/dataDdl.ts +7 -0
- package/src/dataEngine.ts +680 -15
- package/src/dataImport.ts +16 -1
- package/src/dataIndexAdvice.ts +127 -0
- package/src/dataRpc.ts +27 -2
- package/src/dataSheet.ts +147 -0
- package/src/dataTools.ts +3 -3
- package/src/dataTriggers.ts +599 -20
- package/src/dataTypes.ts +108 -0
- package/src/index.ts +15 -0
- package/src/localizeDataError.ts +183 -4
- package/src/schema.ts +60 -2
- package/src/untrustedContent.ts +15 -0
- package/src/whatsappWebhook.ts +55 -0
package/dist/dataCompiler.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isSensitiveWrite = exports.tidyArgs = exports.chunkRows = exports.rowsPerInsert = exports.keysetCondition = exports.decodeCursor = exports.encodeCursor = exports.ftsMatch = exports.assertParamCount = exports.compileWhere = exports.resolvePath = exports.fromStored = exports.zoned = exports.zoneOffsetMinutes = exports.toStored = exports.isoSeconds = exports.relationJoin = exports.joinsParams = exports.joinsSql = exports.participantOf = exports.canRead = exports.isScoped = exports.tableFor = exports.visibleTables = exports.accessOf = exports.unknownColumn = exports.columnFor = exports.isSystemColumn = exports.FILTER_OPERATORS = void 0;
|
|
3
|
+
exports.isSensitiveWrite = exports.tidyArgs = exports.chunkRows = exports.rowsPerInsert = exports.keysetCondition = exports.decodeCursor = exports.encodeCursor = exports.ftsMatch = exports.assertParamCount = exports.compileWhere = exports.resolvePath = exports.fromStored = exports.zoned = exports.zoneOffsetMinutes = exports.toStored = exports.unknownFileUris = exports.fileUriOf = exports.localDatetime = exports.isoSeconds = exports.relationJoin = exports.joinsParams = exports.joinsSql = exports.participantOf = exports.canRead = exports.isScoped = exports.tableFor = exports.visibleTables = exports.accessOf = exports.unknownColumn = exports.columnFor = exports.isSystemColumn = exports.FILTER_OPERATORS = void 0;
|
|
4
4
|
// Turns the structured query and write arguments into SQL with bound values.
|
|
5
5
|
// Identifiers are checked against the database's own schema and quoted;
|
|
6
6
|
// every value a caller sends is a parameter. Pure: the engine runs the SQL.
|
|
@@ -137,11 +137,12 @@ const localDatetime = (value, timeZone) => {
|
|
|
137
137
|
at = wall - (0, exports.zoneOffsetMinutes)(new Date(at), timeZone) * 60_000;
|
|
138
138
|
return new Date(at);
|
|
139
139
|
};
|
|
140
|
+
exports.localDatetime = localDatetime;
|
|
140
141
|
const normaliseDatetime = (value, label, timeZone) => {
|
|
141
142
|
if (typeof value !== 'string' && typeof value !== 'number') {
|
|
142
143
|
throw new dataTypes_1.DataError(`${label}: expected an ISO 8601 date and time.`);
|
|
143
144
|
}
|
|
144
|
-
const date = (typeof value === 'string' ? localDatetime(value, timeZone) : null) ??
|
|
145
|
+
const date = (typeof value === 'string' ? (0, exports.localDatetime)(value, timeZone) : null) ??
|
|
145
146
|
new Date(value);
|
|
146
147
|
if (Number.isNaN(date.getTime())) {
|
|
147
148
|
throw new dataTypes_1.DataError(`${label}: "${value}" is not a date and time; use ISO 8601, e.g. 2026-10-19T09:00:00-05:00.`);
|
|
@@ -162,6 +163,26 @@ const checkSize = (label, value) => {
|
|
|
162
163
|
}
|
|
163
164
|
return value;
|
|
164
165
|
};
|
|
166
|
+
// A knowledge item's uri, given as the text or as { uri } (how reads return
|
|
167
|
+
// it). Any scheme: knowledge holds resource://, website and drive uris.
|
|
168
|
+
const fileUriOf = (value, label) => {
|
|
169
|
+
const raw = value !== null && typeof value === 'object' && !Array.isArray(value)
|
|
170
|
+
? value.uri
|
|
171
|
+
: value;
|
|
172
|
+
const uri = typeof raw === 'string' ? raw.trim() : '';
|
|
173
|
+
if (!/^[a-z][a-z0-9+.-]*:\/\/\S+$/i.test(uri)) {
|
|
174
|
+
throw new dataTypes_1.DataError(`${label} takes a knowledge item's uri, e.g. resource://menu-photo.`);
|
|
175
|
+
}
|
|
176
|
+
if (uri.length > dataTypes_1.DATA_FILE_URI_MAX) {
|
|
177
|
+
throw new dataTypes_1.DataError(`${label}: a uri is at most ${dataTypes_1.DATA_FILE_URI_MAX} characters.`, 'too_large');
|
|
178
|
+
}
|
|
179
|
+
return uri;
|
|
180
|
+
};
|
|
181
|
+
exports.fileUriOf = fileUriOf;
|
|
182
|
+
// A write that links uris no item of the project has: the workers check,
|
|
183
|
+
// since the database object can't see knowledge.
|
|
184
|
+
const unknownFileUris = (uris) => new dataTypes_1.DataError(`No resource in this project has the uri ${uris.join(', ')}; link an existing resource by its uri.`, 'invalid', { uris });
|
|
185
|
+
exports.unknownFileUris = unknownFileUris;
|
|
165
186
|
// Turns a value from a caller into what the column stores, or explains why
|
|
166
187
|
// it can't. `timeZone` is the project's, for datetimes sent without an
|
|
167
188
|
// offset.
|
|
@@ -230,6 +251,8 @@ const toStored = (table, column, value, timeZone) => {
|
|
|
230
251
|
throw new dataTypes_1.DataError(`${label} must be a URL starting with http(s)://.`);
|
|
231
252
|
}
|
|
232
253
|
return checkSize(label, value.trim());
|
|
254
|
+
case 'file':
|
|
255
|
+
return (0, exports.fileUriOf)(value, label);
|
|
233
256
|
case 'phone': {
|
|
234
257
|
if (typeof value !== 'string' && typeof value !== 'number') {
|
|
235
258
|
throw new dataTypes_1.DataError(`${label} must be a phone number.`);
|
|
@@ -392,6 +415,8 @@ const compileWhere = (ctx, where, indexed) => {
|
|
|
392
415
|
continue;
|
|
393
416
|
}
|
|
394
417
|
const resolved = (0, exports.resolvePath)(ctx, key);
|
|
418
|
+
if (resolved.own)
|
|
419
|
+
ctx.filtered?.add(resolved.column.name);
|
|
395
420
|
// { "customer": { "name": "Ana" } } reads as "customer.name": models
|
|
396
421
|
// write relation filters this way unprompted.
|
|
397
422
|
if (resolved.column.type === 'relation' &&
|
package/dist/dataDdl.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataDdl.d.ts","sourceRoot":"","sources":["../src/dataDdl.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dataDdl.d.ts","sourceRoot":"","sources":["../src/dataDdl.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,SAAS,EACV,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,YAAY,0CAA0C,CAAC;AAEpE,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,cAAc,CAOtD,CAAC;AACH,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,cAAc,CAGpD,CAAC;AAEH,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,cAAc,CAOvD,CAAC;AAEH,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,cAAc,CAWnD,CAAC;AAIH,eAAO,MAAM,UAAU,GAAI,OAAO,gBAAgB,KAAG,MAQpD,CAAC;AAIF,eAAO,MAAM,SAAS,GAAI,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,QAAQ,UAAU,WAC3C,CAAC;AAChC,eAAO,MAAM,eAAe,GAC1B,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAC5B,QAAQ,UAAU,WACc,CAAC;AACnC,eAAO,MAAM,oBAAoB,GAAI,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WACnC,CAAC;AAC/B,eAAO,MAAM,YAAY,GAAI,OAAO,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,WACrC,CAAC;AACvB,eAAO,MAAM,aAAa,GAAI,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WACvC,CAAC;AACpB,eAAO,MAAM,mBAAmB,GAAI,QAAQ,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAC9C,CAAC;AACrB,eAAO,MAAM,iBAAiB,GAAI,QAAQ,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAC5C,CAAC;AAGrB,eAAO,MAAM,aAAa,GACxB,QAAQ,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,EAChC,OAAO,gBAAgB,KACtB,gBAKF,CAAC;AA2CF,eAAO,MAAM,mBAAmB,GAAI,QAAQ,UAAU,KAAG,MAuBxD,CAAC;AAKF,eAAO,MAAM,cAAc,GACzB,MAAM,MAAM,EACZ,SAAS,SAAS,UAAU,EAAE,KAC7B,MAcW,CAAC;AAEf,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAMD,eAAO,MAAM,cAAc,GAAI,OAAO,SAAS,KAAG,cAAc,EA6B/D,CAAC;AAGF,eAAO,MAAM,eAAe,GAAI,QAAQ,UAAU,KAAG,OAI7B,CAAC;AAEzB,eAAO,MAAM,iBAAiB,GAAI,OAAO,SAAS,KAAG,UAAU,EAG5D,CAAC;AAKJ,eAAO,MAAM,YAAY,GAAI,OAAO,SAAS,KAAG,MAAM,GAAG,IAQxD,CAAC;AAkGF,eAAO,MAAM,eAAe,GAAI,OAAO,SAAS,KAAG,cAAc,EAIhE,CAAC;AAOF,eAAO,MAAM,aAAa,GACxB,UAAU,cAAc,EACxB,IAAI,UAAU,EACd,KAAK,MAAM,KACV,MAgCF,CAAC;AAIF,eAAO,MAAM,yBAAyB,GACpC,IAAI,UAAU,EACd,KAAK,MAAM,EACX,WAAW,MAAM,KAChB,MA+BF,CAAC"}
|
package/dist/dataDdl.js
CHANGED
|
@@ -6,6 +6,7 @@ exports.invalidAfterConversionSql = exports.conversionSql = exports.desiredTrigg
|
|
|
6
6
|
// ours, and every owner-supplied value is a literal escaped by sqlLiteral.
|
|
7
7
|
const dataTriggers_1 = require("./dataTriggers");
|
|
8
8
|
const dataIdentifiers_1 = require("./dataIdentifiers");
|
|
9
|
+
const dataTypes_1 = require("./dataTypes");
|
|
9
10
|
exports.DATA_NOW_SQL = "strftime('%Y-%m-%dT%H:%M:%SZ', 'now')";
|
|
10
11
|
exports.TEXT_LIKE_TYPES = new Set([
|
|
11
12
|
'text',
|
|
@@ -348,6 +349,10 @@ const invalidAfterConversionSql = (to, src, converted) => {
|
|
|
348
349
|
if (to.type === 'url') {
|
|
349
350
|
parts.push(`NOT ((${converted}) LIKE 'http://%' OR (${converted}) LIKE 'https://%')`);
|
|
350
351
|
}
|
|
352
|
+
// A file column holds a knowledge item's uri: scheme://…, no spaces.
|
|
353
|
+
if (to.type === 'file') {
|
|
354
|
+
parts.push(`NOT ((${converted}) GLOB '[A-Za-z]*://?*' AND (${converted}) NOT GLOB '*[ ' || char(9) || char(10) || char(13) || ']*' AND length(${converted}) <= ${dataTypes_1.DATA_FILE_URI_MAX})`);
|
|
355
|
+
}
|
|
351
356
|
if (to.type === 'relation' && to.table) {
|
|
352
357
|
parts.push(`((${converted}) IS NOT NULL AND NOT EXISTS (SELECT 1 FROM ${(0, dataIdentifiers_1.quoteIdentifier)(to.table)} WHERE id = (${converted})))`);
|
|
353
358
|
}
|
package/dist/dataEngine.d.ts
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import type { SqlValue } from './dataCompiler';
|
|
2
2
|
import { toTableInput, DataError } from './dataTypes';
|
|
3
|
-
import type { DataCaller, DataColumn, DataDefaultValue, DataDeleteImpact, DataSchema, DataTable, DataTableCopy } from './dataTypes';
|
|
3
|
+
import type { DataCaller, DataColumn, DataDefaultValue, DataDeleteImpact, DataFileLinks, DataFileLinksReplaced, DataQueryShape, DataSchema, DataTable, DataTableCopy, DataTableSync, DataUsage, DataWriteShape } from './dataTypes';
|
|
4
4
|
export type SqlRow = Record<string, SqlValue>;
|
|
5
5
|
export interface SqlRunner {
|
|
6
6
|
all(sql: string, params?: readonly SqlValue[]): SqlRow[];
|
|
7
7
|
iterate(sql: string, params?: readonly SqlValue[]): Iterable<SqlRow>;
|
|
8
8
|
transaction<T>(fn: () => T): T;
|
|
9
9
|
databaseSize(): number;
|
|
10
|
+
usageSoFar?(): DataUsage;
|
|
11
|
+
noteQuery?(shape: DataQueryShape): void;
|
|
12
|
+
noteWrite?(shape: DataWriteShape): void;
|
|
10
13
|
}
|
|
11
14
|
export declare const INTERNAL_MIGRATIONS: readonly (readonly string[])[];
|
|
12
15
|
export declare const INTERNAL_SCHEMA_VERSION: number;
|
|
@@ -45,7 +48,7 @@ export declare const describe: (runner: SqlRunner, schema: DataSchema, caller: D
|
|
|
45
48
|
rowsAbout: number;
|
|
46
49
|
onlyThisCustomersRows?: boolean | undefined;
|
|
47
50
|
description: string | null;
|
|
48
|
-
access: "none" | "
|
|
51
|
+
access: "none" | "add" | "read" | "full";
|
|
49
52
|
label?: string | undefined;
|
|
50
53
|
name: string;
|
|
51
54
|
} | {
|
|
@@ -70,7 +73,7 @@ export declare const describe: (runner: SqlRunner, schema: DataSchema, caller: D
|
|
|
70
73
|
rows: number;
|
|
71
74
|
onlyThisCustomersRows?: boolean | undefined;
|
|
72
75
|
description: string | null;
|
|
73
|
-
access: "none" | "
|
|
76
|
+
access: "none" | "add" | "read" | "full";
|
|
74
77
|
label?: string | undefined;
|
|
75
78
|
name: string;
|
|
76
79
|
})[];
|
|
@@ -83,6 +86,7 @@ export declare const query: (runner: SqlRunner, schema: DataSchema, caller: Data
|
|
|
83
86
|
nextCursor?: string | undefined;
|
|
84
87
|
includeTruncated?: string | undefined;
|
|
85
88
|
rows: ShapedRow[];
|
|
89
|
+
fileFields?: string[][] | undefined;
|
|
86
90
|
searchMatched?: "all words" | "any word" | undefined;
|
|
87
91
|
total?: number | undefined;
|
|
88
92
|
scope?: string | undefined;
|
|
@@ -90,6 +94,7 @@ export declare const query: (runner: SqlRunner, schema: DataSchema, caller: Data
|
|
|
90
94
|
};
|
|
91
95
|
export declare const assertActor: (caller: DataCaller) => void;
|
|
92
96
|
export declare const assertWritable: (runner: SqlRunner, caller: DataCaller, addsData: boolean) => void;
|
|
97
|
+
export declare const assertNotSynced: (table: DataTable) => void;
|
|
93
98
|
type WriteResult = {
|
|
94
99
|
op: 'insert';
|
|
95
100
|
table: string;
|
|
@@ -107,7 +112,24 @@ export declare const write: (runner: SqlRunner, schema: DataSchema, caller: Data
|
|
|
107
112
|
ok: true;
|
|
108
113
|
results: WriteResult[];
|
|
109
114
|
};
|
|
115
|
+
export interface SheetSyncArgs {
|
|
116
|
+
table: string;
|
|
117
|
+
columns: string[];
|
|
118
|
+
rows: Record<string, unknown>[];
|
|
119
|
+
lines?: number[];
|
|
120
|
+
title?: string | null;
|
|
121
|
+
version?: string | null;
|
|
122
|
+
}
|
|
123
|
+
export declare const syncRows: (runner: SqlRunner, schema: DataSchema, caller: DataCaller, args: SheetSyncArgs) => DataTableSync;
|
|
124
|
+
export declare const recordSyncFailure: (runner: SqlRunner, schema: DataSchema, args: {
|
|
125
|
+
table: string;
|
|
126
|
+
error: string;
|
|
127
|
+
title?: string | null;
|
|
128
|
+
version?: string | null;
|
|
129
|
+
}) => DataTableSync | null;
|
|
110
130
|
export declare const deleteImpact: (runner: SqlRunner, schema: DataSchema, caller: DataCaller, rawArgs: unknown) => DataDeleteImpact;
|
|
131
|
+
export declare const fileLinks: (runner: SqlRunner, schema: DataSchema, caller: DataCaller, rawArgs: unknown) => DataFileLinks;
|
|
132
|
+
export declare const replaceFileLinks: (runner: SqlRunner, schema: DataSchema, caller: DataCaller, rawArgs: unknown) => DataFileLinksReplaced;
|
|
111
133
|
export declare const rowHistory: (runner: SqlRunner, schema: DataSchema, caller: DataCaller, args: {
|
|
112
134
|
table: string;
|
|
113
135
|
id: number;
|
package/dist/dataEngine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataEngine.d.ts","sourceRoot":"","sources":["../src/dataEngine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dataEngine.d.ts","sourceRoot":"","sources":["../src/dataEngine.ts"],"names":[],"mappings":"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"}
|