tinybase 10.0.0-beta.1 → 10.0.0-beta.2
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/@types/common/index.d.ts +1 -0
- package/@types/common/with-schemas/index.d.ts +1 -0
- package/@types/indexes/index.d.ts +1 -0
- package/@types/indexes/with-schemas/index.d.ts +1 -0
- package/@types/metrics/index.d.ts +1 -0
- package/@types/metrics/with-schemas/index.d.ts +1 -0
- package/@types/omni/index.d.ts +1 -0
- package/@types/omni/with-schemas/index.d.ts +1 -0
- package/@types/persisters/index.d.ts +1 -0
- package/@types/persisters/persister-partykit-server/index.d.ts +17 -0
- package/@types/persisters/persister-partykit-server/with-schemas/index.d.ts +17 -0
- package/@types/persisters/persister-tinyjoin/index.d.ts +197 -0
- package/@types/persisters/persister-tinyjoin/with-schemas/index.d.ts +221 -0
- package/@types/persisters/with-schemas/index.d.ts +1 -0
- package/@types/queries/index.d.ts +3 -0
- package/@types/queries/with-schemas/index.d.ts +3 -0
- package/@types/relationships/index.d.ts +1 -0
- package/@types/relationships/with-schemas/index.d.ts +1 -0
- package/@types/store/index.d.ts +4 -0
- package/@types/store/with-schemas/index.d.ts +4 -0
- package/@types/ui-react/index.d.ts +2 -0
- package/@types/ui-react/with-schemas/index.d.ts +1 -0
- package/@types/ui-react-dom-charts/index.d.ts +7 -0
- package/@types/ui-react-dom-charts/with-schemas/index.d.ts +7 -0
- package/@types/ui-solid/index.d.ts +2 -0
- package/@types/ui-solid/with-schemas/index.d.ts +1 -0
- package/@types/ui-svelte/index.d.ts +23 -0
- package/@types/ui-svelte/with-schemas/index.d.ts +23 -0
- package/@types/ui-svelte-dom/index.d.ts +10 -0
- package/@types/ui-svelte-dom/with-schemas/index.d.ts +10 -0
- package/@types/ui-svelte-inspector/index.d.ts +1 -0
- package/@types/ui-svelte-inspector/with-schemas/index.d.ts +1 -0
- package/min/omni/index.js +1 -1
- package/min/omni/index.js.gz +0 -0
- package/min/omni/with-schemas/index.js +1 -1
- package/min/omni/with-schemas/index.js.gz +0 -0
- package/min/persisters/index.js +1 -1
- package/min/persisters/index.js.gz +0 -0
- package/min/persisters/persister-better-sqlite3/index.js +1 -1
- package/min/persisters/persister-better-sqlite3/index.js.gz +0 -0
- package/min/persisters/persister-better-sqlite3/with-schemas/index.js +1 -1
- package/min/persisters/persister-better-sqlite3/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-capacitor-sqlite/index.js +1 -1
- package/min/persisters/persister-capacitor-sqlite/index.js.gz +0 -0
- package/min/persisters/persister-capacitor-sqlite/with-schemas/index.js +1 -1
- package/min/persisters/persister-capacitor-sqlite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
- package/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
- package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
- package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-sql-storage/index.js +1 -1
- package/min/persisters/persister-durable-object-sql-storage/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js +1 -1
- package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-electric-sql/index.js +1 -1
- package/min/persisters/persister-electric-sql/index.js.gz +0 -0
- package/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
- package/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-expo-sqlite/index.js +1 -1
- package/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
- package/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
- package/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-libsql/index.js +1 -1
- package/min/persisters/persister-libsql/index.js.gz +0 -0
- package/min/persisters/persister-libsql/with-schemas/index.js +1 -1
- package/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-pg/index.js +1 -1
- package/min/persisters/persister-pg/index.js.gz +0 -0
- package/min/persisters/persister-pg/with-schemas/index.js +1 -1
- package/min/persisters/persister-pg/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-pglite/index.js +1 -1
- package/min/persisters/persister-pglite/index.js.gz +0 -0
- package/min/persisters/persister-pglite/with-schemas/index.js +1 -1
- package/min/persisters/persister-pglite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-postgres/index.js +1 -1
- package/min/persisters/persister-postgres/index.js.gz +0 -0
- package/min/persisters/persister-postgres/with-schemas/index.js +1 -1
- package/min/persisters/persister-postgres/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-powersync/index.js +1 -1
- package/min/persisters/persister-powersync/index.js.gz +0 -0
- package/min/persisters/persister-powersync/with-schemas/index.js +1 -1
- package/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-react-native-sqlite/index.js +1 -1
- package/min/persisters/persister-react-native-sqlite/index.js.gz +0 -0
- package/min/persisters/persister-react-native-sqlite/with-schemas/index.js +1 -1
- package/min/persisters/persister-react-native-sqlite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-bun/index.js +1 -1
- package/min/persisters/persister-sqlite-bun/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-bun/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite-bun/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-node/index.js +1 -1
- package/min/persisters/persister-sqlite-node/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-node/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite-node/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-wasm/index.js +1 -1
- package/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite3/index.js +1 -1
- package/min/persisters/persister-sqlite3/index.js.gz +0 -0
- package/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-tinyjoin/index.js +1 -0
- package/min/persisters/persister-tinyjoin/index.js.gz +0 -0
- package/min/persisters/persister-tinyjoin/with-schemas/index.js +1 -0
- package/min/persisters/persister-tinyjoin/with-schemas/index.js.gz +0 -0
- package/min/persisters/with-schemas/index.js +1 -1
- package/min/persisters/with-schemas/index.js.gz +0 -0
- package/omni/index.js +146 -66
- package/omni/with-schemas/index.js +146 -66
- package/package.json +41 -1
- package/persisters/index.js +28 -13
- package/persisters/persister-better-sqlite3/index.js +70 -55
- package/persisters/persister-better-sqlite3/with-schemas/index.js +70 -55
- package/persisters/persister-capacitor-sqlite/index.js +70 -55
- package/persisters/persister-capacitor-sqlite/with-schemas/index.js +70 -55
- package/persisters/persister-cr-sqlite-wasm/index.js +70 -55
- package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +70 -55
- package/persisters/persister-durable-object-sql-storage/index.js +28 -13
- package/persisters/persister-durable-object-sql-storage/with-schemas/index.js +28 -13
- package/persisters/persister-electric-sql/index.js +70 -55
- package/persisters/persister-electric-sql/with-schemas/index.js +70 -55
- package/persisters/persister-expo-sqlite/index.js +70 -55
- package/persisters/persister-expo-sqlite/with-schemas/index.js +70 -55
- package/persisters/persister-libsql/index.js +70 -55
- package/persisters/persister-libsql/with-schemas/index.js +70 -55
- package/persisters/persister-pg/index.js +77 -62
- package/persisters/persister-pg/with-schemas/index.js +77 -62
- package/persisters/persister-pglite/index.js +28 -13
- package/persisters/persister-pglite/with-schemas/index.js +28 -13
- package/persisters/persister-postgres/index.js +28 -13
- package/persisters/persister-postgres/with-schemas/index.js +28 -13
- package/persisters/persister-powersync/index.js +81 -66
- package/persisters/persister-powersync/with-schemas/index.js +81 -66
- package/persisters/persister-react-native-sqlite/index.js +70 -55
- package/persisters/persister-react-native-sqlite/with-schemas/index.js +70 -55
- package/persisters/persister-sqlite-bun/index.js +70 -55
- package/persisters/persister-sqlite-bun/with-schemas/index.js +70 -55
- package/persisters/persister-sqlite-node/index.js +70 -55
- package/persisters/persister-sqlite-node/with-schemas/index.js +70 -55
- package/persisters/persister-sqlite-wasm/index.js +70 -55
- package/persisters/persister-sqlite-wasm/with-schemas/index.js +70 -55
- package/persisters/persister-sqlite3/index.js +70 -55
- package/persisters/persister-sqlite3/with-schemas/index.js +70 -55
- package/persisters/persister-tinyjoin/index.js +1710 -0
- package/persisters/persister-tinyjoin/with-schemas/index.js +1710 -0
- package/persisters/with-schemas/index.js +28 -13
- package/readme.md +3 -3
- package/releases.md +20 -1
|
@@ -5163,10 +5163,74 @@ const getPlaceholders = (array, getPlaceholder, offset = [1]) =>
|
|
|
5163
5163
|
arrayMap(array, () => getPlaceholder(offset)),
|
|
5164
5164
|
COMMA,
|
|
5165
5165
|
);
|
|
5166
|
-
const
|
|
5167
|
-
|
|
5166
|
+
const getWhere = (tableName, condition = TRUE, extraCondition) => {
|
|
5167
|
+
const conditions = arrayFilter(
|
|
5168
|
+
[
|
|
5169
|
+
condition == TRUE
|
|
5170
|
+
? void 0
|
|
5171
|
+
: `(${replaceTableName(condition, escapeId(tableName))})`,
|
|
5172
|
+
extraCondition,
|
|
5173
|
+
],
|
|
5174
|
+
(condition2) => !isUndefined(condition2),
|
|
5175
|
+
);
|
|
5176
|
+
return isEmpty(conditions)
|
|
5177
|
+
? EMPTY_STRING
|
|
5178
|
+
: WHERE + arrayJoin(conditions, 'AND');
|
|
5179
|
+
};
|
|
5168
5180
|
const replaceTableName = (condition, tableName) =>
|
|
5169
5181
|
strReplace(condition, TABLE_NAME_PLACEHOLDER_REGEX, tableName);
|
|
5182
|
+
const updateThenInsertUpsert = async (
|
|
5183
|
+
executeCommand,
|
|
5184
|
+
tableName,
|
|
5185
|
+
rowIdColumnName,
|
|
5186
|
+
changingColumnNames,
|
|
5187
|
+
rows,
|
|
5188
|
+
getPlaceholder,
|
|
5189
|
+
) => {
|
|
5190
|
+
const updateOffset = [1];
|
|
5191
|
+
const assignments = arrayJoin(
|
|
5192
|
+
arrayMap(
|
|
5193
|
+
changingColumnNames,
|
|
5194
|
+
(columnName) => escapeId(columnName) + '=' + getPlaceholder(updateOffset),
|
|
5195
|
+
),
|
|
5196
|
+
COMMA,
|
|
5197
|
+
);
|
|
5198
|
+
const rowIdPlaceholder = getPlaceholder(updateOffset);
|
|
5199
|
+
for (const [id, row] of objToArray(rows, (row2, id2) => [id2, row2])) {
|
|
5200
|
+
const rowParams = arrayMap(row, (value) => value ?? null);
|
|
5201
|
+
if (
|
|
5202
|
+
isEmpty(
|
|
5203
|
+
await executeCommand(
|
|
5204
|
+
UPDATE +
|
|
5205
|
+
escapeId(tableName) +
|
|
5206
|
+
' SET' +
|
|
5207
|
+
assignments +
|
|
5208
|
+
' ' +
|
|
5209
|
+
WHERE +
|
|
5210
|
+
escapeId(rowIdColumnName) +
|
|
5211
|
+
'=' +
|
|
5212
|
+
rowIdPlaceholder +
|
|
5213
|
+
' RETURNING' +
|
|
5214
|
+
escapeId(rowIdColumnName),
|
|
5215
|
+
[...rowParams, id],
|
|
5216
|
+
),
|
|
5217
|
+
)
|
|
5218
|
+
) {
|
|
5219
|
+
const offset = [1];
|
|
5220
|
+
await executeCommand(
|
|
5221
|
+
INSERT +
|
|
5222
|
+
' INTO' +
|
|
5223
|
+
escapeId(tableName) +
|
|
5224
|
+
'(' +
|
|
5225
|
+
escapeColumnNames(rowIdColumnName, ...changingColumnNames) +
|
|
5226
|
+
')VALUES(' +
|
|
5227
|
+
getPlaceholders([id, ...row], getPlaceholder, offset) +
|
|
5228
|
+
')',
|
|
5229
|
+
[id, ...rowParams],
|
|
5230
|
+
);
|
|
5231
|
+
}
|
|
5232
|
+
}
|
|
5233
|
+
};
|
|
5170
5234
|
|
|
5171
5235
|
const COLUMN_NAME = 'ColumnName';
|
|
5172
5236
|
const STORE = 'store';
|
|
@@ -5339,7 +5403,7 @@ const getCommandFunctions = (
|
|
|
5339
5403
|
await executeCommand(
|
|
5340
5404
|
SELECT_STAR_FROM +
|
|
5341
5405
|
escapeId(tableName) +
|
|
5342
|
-
|
|
5406
|
+
getWhere(tableName, condition),
|
|
5343
5407
|
),
|
|
5344
5408
|
(row) => {
|
|
5345
5409
|
const rowId = row[rowIdColumnName];
|
|
@@ -5495,9 +5559,7 @@ const getCommandFunctions = (
|
|
|
5495
5559
|
if (isUndefined(content)) {
|
|
5496
5560
|
if (isUndefined(contentSubIdSet)) {
|
|
5497
5561
|
await executeCommand(
|
|
5498
|
-
DELETE_FROM +
|
|
5499
|
-
escapeId(tableName) +
|
|
5500
|
-
getWhereCondition(tableName, condition),
|
|
5562
|
+
DELETE_FROM + escapeId(tableName) + getWhere(tableName, condition),
|
|
5501
5563
|
);
|
|
5502
5564
|
}
|
|
5503
5565
|
} else {
|
|
@@ -5507,8 +5569,11 @@ const getCommandFunctions = (
|
|
|
5507
5569
|
await executeCommand(
|
|
5508
5570
|
DELETE_FROM +
|
|
5509
5571
|
escapeId(tableName) +
|
|
5510
|
-
|
|
5511
|
-
|
|
5572
|
+
getWhere(
|
|
5573
|
+
tableName,
|
|
5574
|
+
condition,
|
|
5575
|
+
`(${escapeId(rowIdColumnName)}=${getPlaceholder([1])})`,
|
|
5576
|
+
),
|
|
5512
5577
|
[rowId],
|
|
5513
5578
|
);
|
|
5514
5579
|
} else if (!isEmpty(settingColumnNames)) {
|
|
@@ -5567,8 +5632,12 @@ const getCommandFunctions = (
|
|
|
5567
5632
|
await executeCommand(
|
|
5568
5633
|
DELETE_FROM +
|
|
5569
5634
|
escapeId(tableName) +
|
|
5570
|
-
|
|
5571
|
-
|
|
5635
|
+
getWhere(
|
|
5636
|
+
tableName,
|
|
5637
|
+
condition,
|
|
5638
|
+
// eslint-disable-next-line max-len
|
|
5639
|
+
`${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds, getPlaceholder)})`,
|
|
5640
|
+
),
|
|
5572
5641
|
deleteRowIds,
|
|
5573
5642
|
);
|
|
5574
5643
|
} else if (
|
|
@@ -5576,9 +5645,7 @@ const getCommandFunctions = (
|
|
|
5576
5645
|
collHas(schemaMap, tableName)
|
|
5577
5646
|
) {
|
|
5578
5647
|
await executeCommand(
|
|
5579
|
-
DELETE_FROM +
|
|
5580
|
-
escapeId(tableName) +
|
|
5581
|
-
getWhereCondition(tableName, condition),
|
|
5648
|
+
DELETE_FROM + escapeId(tableName) + getWhere(tableName, condition),
|
|
5582
5649
|
);
|
|
5583
5650
|
}
|
|
5584
5651
|
}
|
|
@@ -7961,61 +8028,9 @@ const createPowerSyncPersister = (
|
|
|
7961
8028
|
// StoreOnly,
|
|
7962
8029
|
powerSync,
|
|
7963
8030
|
'getPowerSync',
|
|
7964
|
-
|
|
8031
|
+
updateThenInsertUpsert,
|
|
7965
8032
|
);
|
|
7966
8033
|
};
|
|
7967
|
-
const powerSyncUpdateThenInsert = async (
|
|
7968
|
-
executeCommand,
|
|
7969
|
-
tableName,
|
|
7970
|
-
rowIdColumnName,
|
|
7971
|
-
changingColumnNames,
|
|
7972
|
-
rows,
|
|
7973
|
-
getPlaceholder,
|
|
7974
|
-
) => {
|
|
7975
|
-
const updateOffset = [1];
|
|
7976
|
-
const assignments = arrayJoin(
|
|
7977
|
-
arrayMap(
|
|
7978
|
-
changingColumnNames,
|
|
7979
|
-
(columnName) => escapeId(columnName) + '=' + getPlaceholder(updateOffset),
|
|
7980
|
-
),
|
|
7981
|
-
COMMA,
|
|
7982
|
-
);
|
|
7983
|
-
const rowIdPlaceholder = getPlaceholder(updateOffset);
|
|
7984
|
-
for (const [id, row] of objToArray(rows, (row2, id2) => [id2, row2])) {
|
|
7985
|
-
const rowParams = arrayMap(row, (value) => value ?? null);
|
|
7986
|
-
if (
|
|
7987
|
-
isEmpty(
|
|
7988
|
-
await executeCommand(
|
|
7989
|
-
UPDATE +
|
|
7990
|
-
escapeId(tableName) +
|
|
7991
|
-
' SET' +
|
|
7992
|
-
assignments +
|
|
7993
|
-
' ' +
|
|
7994
|
-
WHERE +
|
|
7995
|
-
escapeId(rowIdColumnName) +
|
|
7996
|
-
'=' +
|
|
7997
|
-
rowIdPlaceholder +
|
|
7998
|
-
' RETURNING' +
|
|
7999
|
-
escapeId(rowIdColumnName),
|
|
8000
|
-
[...rowParams, id],
|
|
8001
|
-
),
|
|
8002
|
-
)
|
|
8003
|
-
) {
|
|
8004
|
-
const offset = [1];
|
|
8005
|
-
await executeCommand(
|
|
8006
|
-
INSERT +
|
|
8007
|
-
' INTO' +
|
|
8008
|
-
escapeId(tableName) +
|
|
8009
|
-
'(' +
|
|
8010
|
-
escapeColumnNames(rowIdColumnName, ...changingColumnNames) +
|
|
8011
|
-
')VALUES(' +
|
|
8012
|
-
getPlaceholders([id, ...row], getPlaceholder, offset) +
|
|
8013
|
-
')',
|
|
8014
|
-
[id, ...rowParams],
|
|
8015
|
-
);
|
|
8016
|
-
}
|
|
8017
|
-
}
|
|
8018
|
-
};
|
|
8019
8034
|
|
|
8020
8035
|
const createReactNativeMmkvPersister = (
|
|
8021
8036
|
store,
|
|
@@ -8363,6 +8378,70 @@ const createSupabasePersister = (
|
|
|
8363
8378
|
);
|
|
8364
8379
|
};
|
|
8365
8380
|
|
|
8381
|
+
const LIMIT_0 = 'LIMIT 0';
|
|
8382
|
+
const createTinyJoinPersister = (
|
|
8383
|
+
store,
|
|
8384
|
+
tinyJoin,
|
|
8385
|
+
configOrStoreTableName,
|
|
8386
|
+
onSqlCommand,
|
|
8387
|
+
onIgnoredError,
|
|
8388
|
+
) => {
|
|
8389
|
+
const executeCommand = getWrappedCommand(
|
|
8390
|
+
async (sql, params = []) => (await tinyJoin.query(sql, params)).rows,
|
|
8391
|
+
onSqlCommand,
|
|
8392
|
+
);
|
|
8393
|
+
const [isJson, , defaultedConfig, managedTableNamesSet] = getConfigStructures(
|
|
8394
|
+
configOrStoreTableName,
|
|
8395
|
+
);
|
|
8396
|
+
if (!isJson && store.isMergeable()) {
|
|
8397
|
+
errorThrow(ERROR_STORE_TYPE);
|
|
8398
|
+
}
|
|
8399
|
+
const managedTableNames = collValues(managedTableNamesSet);
|
|
8400
|
+
const querySchema = async () => {
|
|
8401
|
+
const schema = [];
|
|
8402
|
+
await promiseAll(
|
|
8403
|
+
arrayMap(managedTableNames, async (tn) => {
|
|
8404
|
+
const sql = SELECT_STAR_FROM + escapeId(tn) + LIMIT_0;
|
|
8405
|
+
onSqlCommand?.(sql);
|
|
8406
|
+
await tryCatchIgnore(async () =>
|
|
8407
|
+
arrayForEach((await tinyJoin.query(sql)).fields, ({name}) =>
|
|
8408
|
+
arrayPush(schema, {tn, cn: name}),
|
|
8409
|
+
),
|
|
8410
|
+
);
|
|
8411
|
+
}),
|
|
8412
|
+
);
|
|
8413
|
+
return schema;
|
|
8414
|
+
};
|
|
8415
|
+
const addPersisterListener = (listener) =>
|
|
8416
|
+
tinyJoin.subscribe(
|
|
8417
|
+
{tables: managedTableNames},
|
|
8418
|
+
() => void tryCatchIgnore(listener, onIgnoredError),
|
|
8419
|
+
);
|
|
8420
|
+
const delPersisterListener = (unsubscribe) => unsubscribe();
|
|
8421
|
+
const executeTransaction = (actions) => actions(executeCommand);
|
|
8422
|
+
return (isJson ? createJsonPersister : createTabularPersister)(
|
|
8423
|
+
store,
|
|
8424
|
+
executeCommand,
|
|
8425
|
+
addPersisterListener,
|
|
8426
|
+
delPersisterListener,
|
|
8427
|
+
onIgnoredError,
|
|
8428
|
+
noop,
|
|
8429
|
+
3,
|
|
8430
|
+
// StoreOrMergeableStore,
|
|
8431
|
+
defaultedConfig,
|
|
8432
|
+
managedTableNames,
|
|
8433
|
+
querySchema,
|
|
8434
|
+
tinyJoin,
|
|
8435
|
+
'getTinyJoin',
|
|
8436
|
+
'text',
|
|
8437
|
+
numberedPlaceholder,
|
|
8438
|
+
updateThenInsertUpsert,
|
|
8439
|
+
(cellOrValue) => jsonString(cellOrValue),
|
|
8440
|
+
(field) => jsonParse(field),
|
|
8441
|
+
executeTransaction,
|
|
8442
|
+
);
|
|
8443
|
+
};
|
|
8444
|
+
|
|
8366
8445
|
const DELETE = 'delete';
|
|
8367
8446
|
const getYMap = (yMap) =>
|
|
8368
8447
|
yMap instanceof Map$1 ? yMap : errorThrow(ERROR_CONTENT);
|
|
@@ -12747,6 +12826,7 @@ export {
|
|
|
12747
12826
|
createSqliteWasmPersister,
|
|
12748
12827
|
createStore,
|
|
12749
12828
|
createSupabasePersister,
|
|
12829
|
+
createTinyJoinPersister,
|
|
12750
12830
|
createWsServer,
|
|
12751
12831
|
createWsServerSimple,
|
|
12752
12832
|
createWsSynchronizer,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tinybase",
|
|
3
|
-
"version": "10.0.0-beta.
|
|
3
|
+
"version": "10.0.0-beta.2",
|
|
4
4
|
"author": "jamesgpearce",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -61,6 +61,7 @@
|
|
|
61
61
|
"solid-js": "^1.9.15",
|
|
62
62
|
"sqlite3": "^6.0.1",
|
|
63
63
|
"svelte": "^5.57.0",
|
|
64
|
+
"tinyjoin": "^0.1.0",
|
|
64
65
|
"valibot": "^1.5.0",
|
|
65
66
|
"ws": "^8.21.3",
|
|
66
67
|
"yjs": "^13.6.32",
|
|
@@ -151,6 +152,9 @@
|
|
|
151
152
|
"svelte": {
|
|
152
153
|
"optional": true
|
|
153
154
|
},
|
|
155
|
+
"tinyjoin": {
|
|
156
|
+
"optional": true
|
|
157
|
+
},
|
|
154
158
|
"valibot": {
|
|
155
159
|
"optional": true
|
|
156
160
|
},
|
|
@@ -384,6 +388,12 @@
|
|
|
384
388
|
"persisters/persister-supabase/with-schemas": [
|
|
385
389
|
"./@types/persisters/persister-supabase/with-schemas/index.d.ts"
|
|
386
390
|
],
|
|
391
|
+
"persisters/persister-tinyjoin": [
|
|
392
|
+
"./@types/persisters/persister-tinyjoin/index.d.ts"
|
|
393
|
+
],
|
|
394
|
+
"persisters/persister-tinyjoin/with-schemas": [
|
|
395
|
+
"./@types/persisters/persister-tinyjoin/with-schemas/index.d.ts"
|
|
396
|
+
],
|
|
387
397
|
"persisters/persister-yjs": [
|
|
388
398
|
"./@types/persisters/persister-yjs/index.d.ts"
|
|
389
399
|
],
|
|
@@ -762,6 +772,12 @@
|
|
|
762
772
|
"min/persisters/persister-supabase/with-schemas": [
|
|
763
773
|
"./@types/persisters/persister-supabase/with-schemas/index.d.ts"
|
|
764
774
|
],
|
|
775
|
+
"min/persisters/persister-tinyjoin": [
|
|
776
|
+
"./@types/persisters/persister-tinyjoin/index.d.ts"
|
|
777
|
+
],
|
|
778
|
+
"min/persisters/persister-tinyjoin/with-schemas": [
|
|
779
|
+
"./@types/persisters/persister-tinyjoin/with-schemas/index.d.ts"
|
|
780
|
+
],
|
|
765
781
|
"min/persisters/persister-yjs": [
|
|
766
782
|
"./@types/persisters/persister-yjs/index.d.ts"
|
|
767
783
|
],
|
|
@@ -1353,6 +1369,18 @@
|
|
|
1353
1369
|
"default": "./persisters/persister-supabase/index.js"
|
|
1354
1370
|
}
|
|
1355
1371
|
},
|
|
1372
|
+
"./persisters/persister-tinyjoin": {
|
|
1373
|
+
"default": {
|
|
1374
|
+
"types": "./@types/persisters/persister-tinyjoin/index.d.ts",
|
|
1375
|
+
"default": "./persisters/persister-tinyjoin/index.js"
|
|
1376
|
+
}
|
|
1377
|
+
},
|
|
1378
|
+
"./persisters/persister-tinyjoin/with-schemas": {
|
|
1379
|
+
"default": {
|
|
1380
|
+
"types": "./@types/persisters/persister-tinyjoin/with-schemas/index.d.ts",
|
|
1381
|
+
"default": "./persisters/persister-tinyjoin/index.js"
|
|
1382
|
+
}
|
|
1383
|
+
},
|
|
1356
1384
|
"./persisters/persister-yjs": {
|
|
1357
1385
|
"default": {
|
|
1358
1386
|
"types": "./@types/persisters/persister-yjs/index.d.ts",
|
|
@@ -2093,6 +2121,18 @@
|
|
|
2093
2121
|
"default": "./min/persisters/persister-supabase/index.js"
|
|
2094
2122
|
}
|
|
2095
2123
|
},
|
|
2124
|
+
"./min/persisters/persister-tinyjoin": {
|
|
2125
|
+
"default": {
|
|
2126
|
+
"types": "./@types/persisters/persister-tinyjoin/index.d.ts",
|
|
2127
|
+
"default": "./min/persisters/persister-tinyjoin/index.js"
|
|
2128
|
+
}
|
|
2129
|
+
},
|
|
2130
|
+
"./min/persisters/persister-tinyjoin/with-schemas": {
|
|
2131
|
+
"default": {
|
|
2132
|
+
"types": "./@types/persisters/persister-tinyjoin/with-schemas/index.d.ts",
|
|
2133
|
+
"default": "./min/persisters/persister-tinyjoin/index.js"
|
|
2134
|
+
}
|
|
2135
|
+
},
|
|
2096
2136
|
"./min/persisters/persister-yjs": {
|
|
2097
2137
|
"default": {
|
|
2098
2138
|
"types": "./@types/persisters/persister-yjs/index.d.ts",
|
package/persisters/index.js
CHANGED
|
@@ -883,8 +883,20 @@ const getPlaceholders = (array, getPlaceholder, offset = [1]) =>
|
|
|
883
883
|
arrayMap(array, () => getPlaceholder(offset)),
|
|
884
884
|
COMMA,
|
|
885
885
|
);
|
|
886
|
-
const
|
|
887
|
-
|
|
886
|
+
const getWhere = (tableName, condition = TRUE, extraCondition) => {
|
|
887
|
+
const conditions = arrayFilter(
|
|
888
|
+
[
|
|
889
|
+
condition == TRUE
|
|
890
|
+
? void 0
|
|
891
|
+
: `(${replaceTableName(condition, escapeId(tableName))})`,
|
|
892
|
+
extraCondition,
|
|
893
|
+
],
|
|
894
|
+
(condition2) => !isUndefined(condition2),
|
|
895
|
+
);
|
|
896
|
+
return isEmpty(conditions)
|
|
897
|
+
? EMPTY_STRING
|
|
898
|
+
: WHERE + arrayJoin(conditions, 'AND');
|
|
899
|
+
};
|
|
888
900
|
const replaceTableName = (condition, tableName) =>
|
|
889
901
|
strReplace(condition, TABLE_NAME_PLACEHOLDER_REGEX, tableName);
|
|
890
902
|
|
|
@@ -1059,7 +1071,7 @@ const getCommandFunctions = (
|
|
|
1059
1071
|
await executeCommand(
|
|
1060
1072
|
SELECT_STAR_FROM +
|
|
1061
1073
|
escapeId(tableName) +
|
|
1062
|
-
|
|
1074
|
+
getWhere(tableName, condition),
|
|
1063
1075
|
),
|
|
1064
1076
|
(row) => {
|
|
1065
1077
|
const rowId = row[rowIdColumnName];
|
|
@@ -1215,9 +1227,7 @@ const getCommandFunctions = (
|
|
|
1215
1227
|
if (isUndefined(content)) {
|
|
1216
1228
|
if (isUndefined(contentSubIdSet)) {
|
|
1217
1229
|
await executeCommand(
|
|
1218
|
-
DELETE_FROM +
|
|
1219
|
-
escapeId(tableName) +
|
|
1220
|
-
getWhereCondition(tableName, condition),
|
|
1230
|
+
DELETE_FROM + escapeId(tableName) + getWhere(tableName, condition),
|
|
1221
1231
|
);
|
|
1222
1232
|
}
|
|
1223
1233
|
} else {
|
|
@@ -1227,8 +1237,11 @@ const getCommandFunctions = (
|
|
|
1227
1237
|
await executeCommand(
|
|
1228
1238
|
DELETE_FROM +
|
|
1229
1239
|
escapeId(tableName) +
|
|
1230
|
-
|
|
1231
|
-
|
|
1240
|
+
getWhere(
|
|
1241
|
+
tableName,
|
|
1242
|
+
condition,
|
|
1243
|
+
`(${escapeId(rowIdColumnName)}=${getPlaceholder([1])})`,
|
|
1244
|
+
),
|
|
1232
1245
|
[rowId],
|
|
1233
1246
|
);
|
|
1234
1247
|
} else if (!isEmpty(settingColumnNames)) {
|
|
@@ -1287,8 +1300,12 @@ const getCommandFunctions = (
|
|
|
1287
1300
|
await executeCommand(
|
|
1288
1301
|
DELETE_FROM +
|
|
1289
1302
|
escapeId(tableName) +
|
|
1290
|
-
|
|
1291
|
-
|
|
1303
|
+
getWhere(
|
|
1304
|
+
tableName,
|
|
1305
|
+
condition,
|
|
1306
|
+
// eslint-disable-next-line max-len
|
|
1307
|
+
`${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds, getPlaceholder)})`,
|
|
1308
|
+
),
|
|
1292
1309
|
deleteRowIds,
|
|
1293
1310
|
);
|
|
1294
1311
|
} else if (
|
|
@@ -1296,9 +1313,7 @@ const getCommandFunctions = (
|
|
|
1296
1313
|
collHas(schemaMap, tableName)
|
|
1297
1314
|
) {
|
|
1298
1315
|
await executeCommand(
|
|
1299
|
-
DELETE_FROM +
|
|
1300
|
-
escapeId(tableName) +
|
|
1301
|
-
getWhereCondition(tableName, condition),
|
|
1316
|
+
DELETE_FROM + escapeId(tableName) + getWhere(tableName, condition),
|
|
1302
1317
|
);
|
|
1303
1318
|
}
|
|
1304
1319
|
}
|
|
@@ -105,50 +105,6 @@ const arrayClear = (array, to = size(array)) => array.splice(0, to);
|
|
|
105
105
|
const arrayPush = (array, ...values) => array.push(...values);
|
|
106
106
|
const arrayShift = (array) => array.shift();
|
|
107
107
|
|
|
108
|
-
const SINGLE_ROW_ID = '_';
|
|
109
|
-
const DEFAULT_ROW_ID_COLUMN_NAME = '_id';
|
|
110
|
-
const SELECT = 'SELECT';
|
|
111
|
-
const WHERE = 'WHERE';
|
|
112
|
-
const TABLE = 'TABLE';
|
|
113
|
-
const INSERT = 'INSERT';
|
|
114
|
-
const DELETE = 'DELETE';
|
|
115
|
-
const UPDATE = 'UPDATE';
|
|
116
|
-
const ALTER_TABLE = 'ALTER ' + TABLE;
|
|
117
|
-
const FROM = 'FROM';
|
|
118
|
-
const DELETE_FROM = DELETE + ' ' + FROM;
|
|
119
|
-
const SELECT_STAR_FROM = SELECT + '*' + FROM;
|
|
120
|
-
const PRAGMA = 'pragma_';
|
|
121
|
-
const DATA_VERSION = 'data_version';
|
|
122
|
-
const SCHEMA_VERSION = 'schema_version';
|
|
123
|
-
const PRAGMA_TABLE = 'pragma_table_';
|
|
124
|
-
const CREATE = 'CREATE ';
|
|
125
|
-
const CREATE_TABLE = CREATE + TABLE;
|
|
126
|
-
const TABLE_NAME_PLACEHOLDER_REGEX = /\$tableName/g;
|
|
127
|
-
const getWrappedCommand = (executeCommand, onSqlCommand) =>
|
|
128
|
-
onSqlCommand
|
|
129
|
-
? async (sql, params) => {
|
|
130
|
-
onSqlCommand(sql, params);
|
|
131
|
-
return await executeCommand(sql, params);
|
|
132
|
-
}
|
|
133
|
-
: executeCommand;
|
|
134
|
-
const escapeId = (str) =>
|
|
135
|
-
arrayJoin(
|
|
136
|
-
arrayMap(strSplit(str, DOT), (part) => `"${strReplace(part, /"/g, '""')}"`),
|
|
137
|
-
DOT,
|
|
138
|
-
);
|
|
139
|
-
const escapeColumnNames = (...columnNames) =>
|
|
140
|
-
arrayJoin(arrayMap(columnNames, escapeId), COMMA);
|
|
141
|
-
const anonymousPlaceholder = () => '?';
|
|
142
|
-
const getPlaceholders = (array, getPlaceholder, offset = [1]) =>
|
|
143
|
-
arrayJoin(
|
|
144
|
-
arrayMap(array, () => getPlaceholder(offset)),
|
|
145
|
-
COMMA,
|
|
146
|
-
);
|
|
147
|
-
const getWhereCondition = (tableName, condition = TRUE) =>
|
|
148
|
-
WHERE + `(${replaceTableName(condition, escapeId(tableName))})`;
|
|
149
|
-
const replaceTableName = (condition, tableName) =>
|
|
150
|
-
strReplace(condition, TABLE_NAME_PLACEHOLDER_REGEX, tableName);
|
|
151
|
-
|
|
152
108
|
const object = Object;
|
|
153
109
|
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
154
110
|
const objEntries = object.entries;
|
|
@@ -198,6 +154,62 @@ const objValues = (obj) => object.values(obj);
|
|
|
198
154
|
const objSize = (obj) => size(objIds(obj));
|
|
199
155
|
const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
|
|
200
156
|
|
|
157
|
+
const SINGLE_ROW_ID = '_';
|
|
158
|
+
const DEFAULT_ROW_ID_COLUMN_NAME = '_id';
|
|
159
|
+
const SELECT = 'SELECT';
|
|
160
|
+
const WHERE = 'WHERE';
|
|
161
|
+
const TABLE = 'TABLE';
|
|
162
|
+
const INSERT = 'INSERT';
|
|
163
|
+
const DELETE = 'DELETE';
|
|
164
|
+
const UPDATE = 'UPDATE';
|
|
165
|
+
const ALTER_TABLE = 'ALTER ' + TABLE;
|
|
166
|
+
const FROM = 'FROM';
|
|
167
|
+
const DELETE_FROM = DELETE + ' ' + FROM;
|
|
168
|
+
const SELECT_STAR_FROM = SELECT + '*' + FROM;
|
|
169
|
+
const PRAGMA = 'pragma_';
|
|
170
|
+
const DATA_VERSION = 'data_version';
|
|
171
|
+
const SCHEMA_VERSION = 'schema_version';
|
|
172
|
+
const PRAGMA_TABLE = 'pragma_table_';
|
|
173
|
+
const CREATE = 'CREATE ';
|
|
174
|
+
const CREATE_TABLE = CREATE + TABLE;
|
|
175
|
+
const TABLE_NAME_PLACEHOLDER_REGEX = /\$tableName/g;
|
|
176
|
+
const getWrappedCommand = (executeCommand, onSqlCommand) =>
|
|
177
|
+
onSqlCommand
|
|
178
|
+
? async (sql, params) => {
|
|
179
|
+
onSqlCommand(sql, params);
|
|
180
|
+
return await executeCommand(sql, params);
|
|
181
|
+
}
|
|
182
|
+
: executeCommand;
|
|
183
|
+
const escapeId = (str) =>
|
|
184
|
+
arrayJoin(
|
|
185
|
+
arrayMap(strSplit(str, DOT), (part) => `"${strReplace(part, /"/g, '""')}"`),
|
|
186
|
+
DOT,
|
|
187
|
+
);
|
|
188
|
+
const escapeColumnNames = (...columnNames) =>
|
|
189
|
+
arrayJoin(arrayMap(columnNames, escapeId), COMMA);
|
|
190
|
+
const anonymousPlaceholder = () => '?';
|
|
191
|
+
const getPlaceholders = (array, getPlaceholder, offset = [1]) =>
|
|
192
|
+
arrayJoin(
|
|
193
|
+
arrayMap(array, () => getPlaceholder(offset)),
|
|
194
|
+
COMMA,
|
|
195
|
+
);
|
|
196
|
+
const getWhere = (tableName, condition = TRUE, extraCondition) => {
|
|
197
|
+
const conditions = arrayFilter(
|
|
198
|
+
[
|
|
199
|
+
condition == TRUE
|
|
200
|
+
? void 0
|
|
201
|
+
: `(${replaceTableName(condition, escapeId(tableName))})`,
|
|
202
|
+
extraCondition,
|
|
203
|
+
],
|
|
204
|
+
(condition2) => !isUndefined(condition2),
|
|
205
|
+
);
|
|
206
|
+
return isEmpty(conditions)
|
|
207
|
+
? EMPTY_STRING
|
|
208
|
+
: WHERE + arrayJoin(conditions, 'AND');
|
|
209
|
+
};
|
|
210
|
+
const replaceTableName = (condition, tableName) =>
|
|
211
|
+
strReplace(condition, TABLE_NAME_PLACEHOLDER_REGEX, tableName);
|
|
212
|
+
|
|
201
213
|
const map = Map;
|
|
202
214
|
const mapNew = (entries) => new map(entries);
|
|
203
215
|
const mapGet = (map2, key) => map2?.get(key);
|
|
@@ -1045,7 +1057,7 @@ const getCommandFunctions = (
|
|
|
1045
1057
|
await executeCommand(
|
|
1046
1058
|
SELECT_STAR_FROM +
|
|
1047
1059
|
escapeId(tableName) +
|
|
1048
|
-
|
|
1060
|
+
getWhere(tableName, condition),
|
|
1049
1061
|
),
|
|
1050
1062
|
(row) => {
|
|
1051
1063
|
const rowId = row[rowIdColumnName];
|
|
@@ -1201,9 +1213,7 @@ const getCommandFunctions = (
|
|
|
1201
1213
|
if (isUndefined(content)) {
|
|
1202
1214
|
if (isUndefined(contentSubIdSet)) {
|
|
1203
1215
|
await executeCommand(
|
|
1204
|
-
DELETE_FROM +
|
|
1205
|
-
escapeId(tableName) +
|
|
1206
|
-
getWhereCondition(tableName, condition),
|
|
1216
|
+
DELETE_FROM + escapeId(tableName) + getWhere(tableName, condition),
|
|
1207
1217
|
);
|
|
1208
1218
|
}
|
|
1209
1219
|
} else {
|
|
@@ -1213,8 +1223,11 @@ const getCommandFunctions = (
|
|
|
1213
1223
|
await executeCommand(
|
|
1214
1224
|
DELETE_FROM +
|
|
1215
1225
|
escapeId(tableName) +
|
|
1216
|
-
|
|
1217
|
-
|
|
1226
|
+
getWhere(
|
|
1227
|
+
tableName,
|
|
1228
|
+
condition,
|
|
1229
|
+
`(${escapeId(rowIdColumnName)}=${getPlaceholder([1])})`,
|
|
1230
|
+
),
|
|
1218
1231
|
[rowId],
|
|
1219
1232
|
);
|
|
1220
1233
|
} else if (!isEmpty(settingColumnNames)) {
|
|
@@ -1273,8 +1286,12 @@ const getCommandFunctions = (
|
|
|
1273
1286
|
await executeCommand(
|
|
1274
1287
|
DELETE_FROM +
|
|
1275
1288
|
escapeId(tableName) +
|
|
1276
|
-
|
|
1277
|
-
|
|
1289
|
+
getWhere(
|
|
1290
|
+
tableName,
|
|
1291
|
+
condition,
|
|
1292
|
+
// eslint-disable-next-line max-len
|
|
1293
|
+
`${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds, getPlaceholder)})`,
|
|
1294
|
+
),
|
|
1278
1295
|
deleteRowIds,
|
|
1279
1296
|
);
|
|
1280
1297
|
} else if (
|
|
@@ -1282,9 +1299,7 @@ const getCommandFunctions = (
|
|
|
1282
1299
|
collHas(schemaMap, tableName)
|
|
1283
1300
|
) {
|
|
1284
1301
|
await executeCommand(
|
|
1285
|
-
DELETE_FROM +
|
|
1286
|
-
escapeId(tableName) +
|
|
1287
|
-
getWhereCondition(tableName, condition),
|
|
1302
|
+
DELETE_FROM + escapeId(tableName) + getWhere(tableName, condition),
|
|
1288
1303
|
);
|
|
1289
1304
|
}
|
|
1290
1305
|
}
|