···11-// SQL Schema definitions for direct SQLite
22-// Converted from TinyBase schema.js
33-44-export const createTableStatements = `
55- -- Addresses: URLs with metadata
66- CREATE TABLE IF NOT EXISTS addresses (
77- id TEXT PRIMARY KEY,
88- uri TEXT NOT NULL,
99- protocol TEXT DEFAULT 'https',
1010- domain TEXT,
1111- path TEXT DEFAULT '',
1212- title TEXT DEFAULT '',
1313- mimeType TEXT DEFAULT 'text/html',
1414- favicon TEXT DEFAULT '',
1515- description TEXT DEFAULT '',
1616- tags TEXT DEFAULT '',
1717- metadata TEXT DEFAULT '{}',
1818- createdAt INTEGER,
1919- updatedAt INTEGER,
2020- lastVisitAt INTEGER DEFAULT 0,
2121- visitCount INTEGER DEFAULT 0,
2222- starred INTEGER DEFAULT 0,
2323- archived INTEGER DEFAULT 0
2424- );
2525-2626- CREATE INDEX IF NOT EXISTS idx_addresses_uri ON addresses(uri);
2727- CREATE INDEX IF NOT EXISTS idx_addresses_domain ON addresses(domain);
2828- CREATE INDEX IF NOT EXISTS idx_addresses_protocol ON addresses(protocol);
2929- CREATE INDEX IF NOT EXISTS idx_addresses_lastVisitAt ON addresses(lastVisitAt);
3030- CREATE INDEX IF NOT EXISTS idx_addresses_visitCount ON addresses(visitCount);
3131- CREATE INDEX IF NOT EXISTS idx_addresses_starred ON addresses(starred);
3232-3333- -- Visits: Navigation history linked to addresses
3434- CREATE TABLE IF NOT EXISTS visits (
3535- id TEXT PRIMARY KEY,
3636- addressId TEXT,
3737- timestamp INTEGER,
3838- duration INTEGER DEFAULT 0,
3939- source TEXT DEFAULT 'direct',
4040- sourceId TEXT DEFAULT '',
4141- windowType TEXT DEFAULT 'main',
4242- metadata TEXT DEFAULT '{}',
4343- scrollDepth INTEGER DEFAULT 0,
4444- interacted INTEGER DEFAULT 0
4545- );
4646-4747- CREATE INDEX IF NOT EXISTS idx_visits_addressId ON visits(addressId);
4848- CREATE INDEX IF NOT EXISTS idx_visits_timestamp ON visits(timestamp);
4949- CREATE INDEX IF NOT EXISTS idx_visits_source ON visits(source);
5050-5151- -- Content: User-created content (notes, etc.)
5252- CREATE TABLE IF NOT EXISTS content (
5353- id TEXT PRIMARY KEY,
5454- title TEXT DEFAULT 'Untitled',
5555- content TEXT DEFAULT '',
5656- mimeType TEXT DEFAULT 'text/plain',
5757- contentType TEXT DEFAULT 'plain',
5858- language TEXT DEFAULT '',
5959- encoding TEXT DEFAULT 'utf-8',
6060- tags TEXT DEFAULT '',
6161- addressRefs TEXT DEFAULT '',
6262- parentId TEXT DEFAULT '',
6363- metadata TEXT DEFAULT '{}',
6464- createdAt INTEGER,
6565- updatedAt INTEGER,
6666- syncPath TEXT DEFAULT '',
6767- synced INTEGER DEFAULT 0,
6868- starred INTEGER DEFAULT 0,
6969- archived INTEGER DEFAULT 0
7070- );
7171-7272- CREATE INDEX IF NOT EXISTS idx_content_contentType ON content(contentType);
7373- CREATE INDEX IF NOT EXISTS idx_content_mimeType ON content(mimeType);
7474- CREATE INDEX IF NOT EXISTS idx_content_synced ON content(synced);
7575- CREATE INDEX IF NOT EXISTS idx_content_updatedAt ON content(updatedAt);
7676-7777- -- Tags: Tag definitions with frecency tracking
7878- CREATE TABLE IF NOT EXISTS tags (
7979- id TEXT PRIMARY KEY,
8080- name TEXT NOT NULL,
8181- slug TEXT,
8282- color TEXT DEFAULT '#999999',
8383- parentId TEXT DEFAULT '',
8484- description TEXT DEFAULT '',
8585- metadata TEXT DEFAULT '{}',
8686- createdAt INTEGER,
8787- updatedAt INTEGER,
8888- frequency INTEGER DEFAULT 0,
8989- lastUsedAt INTEGER DEFAULT 0,
9090- frecencyScore INTEGER DEFAULT 0
9191- );
9292-9393- CREATE INDEX IF NOT EXISTS idx_tags_name ON tags(name);
9494- CREATE INDEX IF NOT EXISTS idx_tags_slug ON tags(slug);
9595- CREATE INDEX IF NOT EXISTS idx_tags_parentId ON tags(parentId);
9696- CREATE INDEX IF NOT EXISTS idx_tags_frecencyScore ON tags(frecencyScore);
9797-9898- -- Address-Tag join table
9999- CREATE TABLE IF NOT EXISTS address_tags (
100100- id TEXT PRIMARY KEY,
101101- addressId TEXT NOT NULL,
102102- tagId TEXT NOT NULL,
103103- createdAt INTEGER
104104- );
105105-106106- CREATE INDEX IF NOT EXISTS idx_address_tags_addressId ON address_tags(addressId);
107107- CREATE INDEX IF NOT EXISTS idx_address_tags_tagId ON address_tags(tagId);
108108- CREATE UNIQUE INDEX IF NOT EXISTS idx_address_tags_unique ON address_tags(addressId, tagId);
109109-110110- -- Blobs: Binary files/media
111111- CREATE TABLE IF NOT EXISTS blobs (
112112- id TEXT PRIMARY KEY,
113113- filename TEXT,
114114- mimeType TEXT,
115115- mediaType TEXT,
116116- size INTEGER,
117117- hash TEXT,
118118- extension TEXT,
119119- path TEXT,
120120- addressId TEXT DEFAULT '',
121121- contentId TEXT DEFAULT '',
122122- tags TEXT DEFAULT '',
123123- metadata TEXT DEFAULT '{}',
124124- createdAt INTEGER,
125125- width INTEGER DEFAULT 0,
126126- height INTEGER DEFAULT 0,
127127- duration INTEGER DEFAULT 0,
128128- thumbnail TEXT DEFAULT ''
129129- );
130130-131131- CREATE INDEX IF NOT EXISTS idx_blobs_mediaType ON blobs(mediaType);
132132- CREATE INDEX IF NOT EXISTS idx_blobs_mimeType ON blobs(mimeType);
133133- CREATE INDEX IF NOT EXISTS idx_blobs_addressId ON blobs(addressId);
134134- CREATE INDEX IF NOT EXISTS idx_blobs_contentId ON blobs(contentId);
135135-136136- -- Scripts data: Script execution results
137137- CREATE TABLE IF NOT EXISTS scripts_data (
138138- id TEXT PRIMARY KEY,
139139- scriptId TEXT,
140140- scriptName TEXT,
141141- addressId TEXT,
142142- selector TEXT,
143143- content TEXT,
144144- contentType TEXT DEFAULT 'text',
145145- metadata TEXT DEFAULT '{}',
146146- extractedAt INTEGER,
147147- previousValue TEXT DEFAULT '',
148148- changed INTEGER DEFAULT 0
149149- );
150150-151151- CREATE INDEX IF NOT EXISTS idx_scripts_data_scriptId ON scripts_data(scriptId);
152152- CREATE INDEX IF NOT EXISTS idx_scripts_data_addressId ON scripts_data(addressId);
153153- CREATE INDEX IF NOT EXISTS idx_scripts_data_changed ON scripts_data(changed);
154154-155155- -- Feeds: Feed definitions
156156- CREATE TABLE IF NOT EXISTS feeds (
157157- id TEXT PRIMARY KEY,
158158- name TEXT,
159159- description TEXT DEFAULT '',
160160- type TEXT,
161161- query TEXT DEFAULT '',
162162- schedule TEXT DEFAULT '',
163163- source TEXT DEFAULT 'internal',
164164- tags TEXT DEFAULT '',
165165- metadata TEXT DEFAULT '{}',
166166- createdAt INTEGER,
167167- updatedAt INTEGER,
168168- lastFetchedAt INTEGER DEFAULT 0,
169169- enabled INTEGER DEFAULT 1
170170- );
171171-172172- CREATE INDEX IF NOT EXISTS idx_feeds_type ON feeds(type);
173173- CREATE INDEX IF NOT EXISTS idx_feeds_enabled ON feeds(enabled);
174174-175175- -- Extensions: Extension registry
176176- CREATE TABLE IF NOT EXISTS extensions (
177177- id TEXT PRIMARY KEY,
178178- name TEXT,
179179- description TEXT DEFAULT '',
180180- version TEXT DEFAULT '1.0.0',
181181- path TEXT,
182182- backgroundUrl TEXT DEFAULT '',
183183- settingsUrl TEXT DEFAULT '',
184184- iconPath TEXT DEFAULT '',
185185- builtin INTEGER DEFAULT 0,
186186- enabled INTEGER DEFAULT 1,
187187- status TEXT DEFAULT 'installed',
188188- installedAt INTEGER,
189189- updatedAt INTEGER,
190190- lastErrorAt INTEGER DEFAULT 0,
191191- lastError TEXT DEFAULT '',
192192- metadata TEXT DEFAULT '{}'
193193- );
194194-195195- CREATE INDEX IF NOT EXISTS idx_extensions_enabled ON extensions(enabled);
196196- CREATE INDEX IF NOT EXISTS idx_extensions_status ON extensions(status);
197197- CREATE INDEX IF NOT EXISTS idx_extensions_builtin ON extensions(builtin);
198198-199199- -- Extension settings: Key-value storage for extension preferences
200200- CREATE TABLE IF NOT EXISTS extension_settings (
201201- id TEXT PRIMARY KEY,
202202- extensionId TEXT NOT NULL,
203203- key TEXT NOT NULL,
204204- value TEXT,
205205- updatedAt INTEGER
206206- );
207207-208208- CREATE INDEX IF NOT EXISTS idx_extension_settings_extensionId ON extension_settings(extensionId);
209209- CREATE UNIQUE INDEX IF NOT EXISTS idx_extension_settings_unique ON extension_settings(extensionId, key);
210210-`;
211211-212212-// List of all tables for validation and iteration
213213-export const tableNames = [
214214- 'addresses',
215215- 'visits',
216216- 'content',
217217- 'tags',
218218- 'address_tags',
219219- 'blobs',
220220- 'scripts_data',
221221- 'feeds',
222222- 'extensions',
223223- 'extension_settings'
224224-];