Skip to content

Commit 837f18f

Browse files
committed
feat: use expo-sqlite/next and store system tid to sqlite
1 parent 52058a1 commit 837f18f

31 files changed

+1702
-776
lines changed

assets/preload/streamChunksPreloadScript.js.html

+27-33
Original file line numberDiff line numberDiff line change
@@ -6,48 +6,42 @@
66
* Run `pnpm build:preload` to build this file.
77
*/
88
(function useStreamChunksToWebViewWebviewSideReceiverIIFE() {
9-
var tiddlersStoreAccumulatedContent = '';
10-
var skinnyTiddlersStoreAccumulatedContent = '';
11-
var wikiHTML = '';
12-
var skinnyStoreCompleteCount = 0;
13-
var storeCompleteCount = 0;
9+
/**
10+
* Array of stringified json array.
11+
*/
12+
var tiddlersStoreContents = [];
13+
var canInjectTiddlers = false;
1414
function resetUseStreamChunksToWebViewWebviewSideReceiverIIFE() {
15-
tiddlersStoreAccumulatedContent = '';
16-
skinnyTiddlersStoreAccumulatedContent = '';
17-
wikiHTML = '';
18-
skinnyStoreCompleteCount = 0;
19-
storeCompleteCount = 0;
15+
tiddlersStoreContents = [];
16+
canInjectTiddlers = false;
2017
}
2118
// @ts-ignore
2219
window.onStreamChunksToWebView = function (event) {
2320
switch (event.type) {
2421
case 'TIDDLYWIKI_HTML': {
25-
wikiHTML += event.data;
22+
resetUseStreamChunksToWebViewWebviewSideReceiverIIFE();
23+
startInjectHTML(event.data);
2624
break;
2725
}
2826
case 'TIDDLER_STORE_SCRIPT_CHUNK': {
29-
tiddlersStoreAccumulatedContent += event.data;
30-
break;
31-
}
32-
case 'TIDDLER_SKINNY_STORE_SCRIPT_CHUNK': {
33-
skinnyTiddlersStoreAccumulatedContent += event.data;
34-
break;
35-
}
36-
case 'TIDDLER_SKINNY_STORE_SCRIPT_CHUNK_END': {
37-
skinnyStoreCompleteCount += 1;
27+
tiddlersStoreContents.push(event.data);
3828
break;
3929
}
4030
case 'TIDDLER_STORE_SCRIPT_CHUNK_END': {
41-
storeCompleteCount += 1;
31+
var startInjectTiddlerIfHTMLDone_1 = function () {
32+
if (canInjectTiddlers) {
33+
executeScriptsAfterInjectHTML();
34+
}
35+
else {
36+
setTimeout(startInjectTiddlerIfHTMLDone_1, 100);
37+
}
38+
};
39+
startInjectTiddlerIfHTMLDone_1();
4240
break;
4341
}
4442
}
45-
if (skinnyStoreCompleteCount === 1 && storeCompleteCount === 1) {
46-
// start jobs
47-
startInjectHTML();
48-
}
4943
};
50-
function startInjectHTML() {
44+
function startInjectHTML(newInnerHTML) {
5145
console.log('startInjectHTML');
5246
/**
5347
* All information needed are collected.
@@ -67,20 +61,19 @@
6761
}
6862
if (hasChange) {
6963
observer.disconnect(); // Important: disconnect the observer once done.
70-
// use timeout to give splash screen a chance to execute and show
71-
setTimeout(executeScriptsAfterInjectHTML, 100);
64+
canInjectTiddlers = true;
7265
}
7366
});
7467
// Start observing the body with the configured parameters
7568
observer.observe(document.body, { childList: true });
7669
// this ignores all script tags, so we need 'executeScriptsAfterInjectHTML()' later.
77-
document.body.innerHTML = wikiHTML;
70+
document.body.innerHTML = newInnerHTML;
7871
}
79-
function appendStoreScript(storeJSON, name) {
72+
function appendStoreScript(storeJSONString, name) {
8073
var tiddlersStoreScript = document.createElement('script');
8174
tiddlersStoreScript.type = 'application/json';
8275
tiddlersStoreScript.classList.add('tiddlywiki-tiddler-store', name);
83-
tiddlersStoreScript.textContent = storeJSON;
76+
tiddlersStoreScript.textContent = storeJSONString;
8477
var styleAreaDiv = document.querySelector('#styleArea');
8578
styleAreaDiv === null || styleAreaDiv === void 0 ? void 0 : styleAreaDiv.insertAdjacentElement('afterend', tiddlersStoreScript);
8679
}
@@ -93,8 +86,9 @@
9386
console.log('executeScriptsAfterInjectHTML');
9487
try {
9588
// load tiddlers store, place it after <div id="styleArea"> where it used to belong to.
96-
appendStoreScript(skinnyTiddlersStoreAccumulatedContent, 'skinnyTiddlers');
97-
appendStoreScript(tiddlersStoreAccumulatedContent, 'pluginsAndJS');
89+
tiddlersStoreContents.forEach(function (storeJSONString, index) {
90+
appendStoreScript(storeJSONString, "tidgi-tiddlers-store-".concat(index));
91+
});
9892
// load other scripts
9993
var scriptElements = Array.from(document.querySelectorAll('script'));
10094
for (var _i = 0, scriptElements_1 = scriptElements; _i < scriptElements_1.length; _i++) {

babel.config.js

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ module.exports = function(api) {
1515
['@babel/plugin-transform-private-methods', { loose: true }],
1616
'babel-plugin-transform-typescript-metadata',
1717
'react-native-reanimated/plugin',
18+
['inline-import', { extensions: ['.sql'] }],
1819
],
1920
};
2021
};

drizzle.config.ts

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import type { Config } from 'drizzle-kit';
2+
3+
export default {
4+
schema: 'src/services/SQLiteService/orm/index.ts',
5+
out: 'src/services/SQLiteService/orm/migrations',
6+
driver: 'expo',
7+
} satisfies Config;

metro.config.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ module.exports = {
1313
resolver: {
1414
...resolver,
1515
unstable_enableSymlinks: true,
16-
sourceExts: [...sourceExts, 'mjs'],
16+
sourceExts: [...sourceExts, 'mjs', 'sql'],
1717
extraNodeModules: {
1818
stream: require.resolve('readable-stream'),
1919
// crypto: require.resolve('react-native-crypto-js'),

package.json

+5-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"android": "cross-env NODE_ENV=development expo start --go --android",
66
"build:plugin": "zx scripts/buildPlugins.mjs",
77
"build:preload": "tsc src/pages/WikiWebView/useStreamChunksToWebView/streamChunksPreloadScript.ts --outFile assets/preload/streamChunksPreloadScript.js.html",
8+
"build:sqlite-migration": "drizzle-kit generate:sqlite",
89
"build:android-apk": "eas build --profile preview --platform android --non-interactive",
910
"build:expo-sdk": "eas build --profile development --platform android --non-interactive",
1011
"ios": "expo start --ios",
@@ -22,6 +23,8 @@
2223
"@react-navigation/stack": "^6.3.20",
2324
"@types/lodash": "^4.14.202",
2425
"beautiful-react-hooks": "^5.0.1",
26+
"buffer": "^6.0.3",
27+
"drizzle-orm": "^0.29.3",
2528
"expo": "50.0.2",
2629
"expo-application": "5.8.3",
2730
"expo-background-fetch": "11.8.0",
@@ -66,7 +69,6 @@
6669
"stream-json": "^1.8.0",
6770
"styled-components": "^6.1.8",
6871
"type-fest": "^4.9.0",
69-
"typeorm": "^0.3.19",
7072
"zustand": "^4.5.0"
7173
},
7274
"devDependencies": {
@@ -79,8 +81,10 @@
7981
"@types/stream-chain": "^2.0.4",
8082
"@types/stream-json": "^1.7.7",
8183
"babel-plugin-import": "^1.13.8",
84+
"babel-plugin-inline-import": "^3.0.0",
8285
"babel-plugin-transform-typescript-metadata": "^0.3.2",
8386
"cross-env": "^7.0.3",
87+
"drizzle-kit": "^0.20.13",
8488
"eslint-config-tidgi": "^1.1.5",
8589
"eslint-plugin-react-native": "^4.1.0",
8690
"react-native-reanimated": "3.6.0",

0 commit comments

Comments
 (0)