src/litestorepkg/lib/types.nim
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
import x_db_sqlite, asynchttpserver, pegs, json, strtabs import config type EDatastoreExists* = object of Exception EDatastoreDoesNotExist* = object of Exception EDatastoreUnavailable* = object of Exception EInvalidTag* = object of Exception EDirectoryNotFound* = object of Exception EFileNotFound* = object of Exception EFileExists* = object of Exception EInvalidRequest* = object of Exception ExecutionData* = object operation*: string file*: string body*: string ctype*: string uri*: string Datastore* = object db*: DbConn path*: string mount*: string QueryOptions* = object tables*: seq[string] jsonFilter*: string jsonSelect*: seq[tuple[path: string, alias: string]] select*: seq[string] single*:bool system*:bool limit*: int offset*: int orderby*: string tags*: string like*: string createdAfter*: string createdBefore*: string modifiedAfter*: string modifiedBefore*: string folder*: string search*: string TagExpression* = object tag*: string startswith*: bool endswith*: bool negated*: bool Operation* = enum opRun, opImport, opExport, opDelete, opVacuum, opOptimize, opExecute LogLevel* = enum lvDebug lvInfo lvWarn lvError lvNone Logger* = object level*: LogLevel LiteStore* = object store*: Datastore execution*: ExecutionData address*: string port*: int operation*: Operation directory*: string manageSystemData*: bool file*: string mount*: bool readonly*: bool appname*: string customResources*: StringTableRef appversion*: string auth*: JsonNode favicon*:string loglevel*:string LSRequest* = asynchttpserver.Request LSResponse* = tuple[ code: HttpCode, content: string, headers: HttpHeaders] ResourceInfo* = tuple[ resource: string, id: string, version: string ] var PEG_TAG* {.threadvar.}: Peg PEG_USER_TAG* {.threadvar.}: Peg PEG_INDEX* {.threadvar}: Peg PEG_JSON_FIELD* {.threadvar.}: Peg PEG_DEFAULT_URL* {.threadvar.}: Peg PEG_URL* {.threadvar.}: Peg PEG_TAG = peg"""^\$? [a-zA-Z0-9_\-?~:.@#^!+]+$""" PEG_USER_TAG = peg"""^[a-zA-Z0-9_\-?~:.@#^!+]+$""" PEG_INDEX = peg"""^[a-zA-Z0-9_]+$""" PEG_JSON_FIELD = peg"""'$' ('.' [a-z-A-Z0-9_]+)+""" PEG_DEFAULT_URL = peg"""^\/{(docs / info / dir / tags / indexes / custom)} (\/ {(.+)} / \/?)$""" PEG_URL = peg"""^\/({(v\d+)} \/) {([^\/]+)} (\/ {(.+)} / \/?)$""" # Initialize LiteStore var LS* {.threadvar.}: LiteStore var TAB_HEADERS* {.threadvar.}: array[0..2, (string, string)] LS.appversion = pkgVersion LS.appname = appname TAB_HEADERS = { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Headers": "Authorization, Content-Type", "Server": LS.appname & "/" & LS.appversion } proc newQueryOptions*(system = false): QueryOptions = var select = @["documents.id AS id", "documents.data AS data", "content_type", "binary", "searchable", "created", "modified"] if system: select = @["system_documents.id AS id", "system_documents.data AS data", "content_type", "binary", "created", "modified"] return QueryOptions(select: select, single: false, limit: 0, offset: 0, orderby: "", tags: "", search: "", folder: "", like: "", system: system, createdAfter: "", createdBefore: "", modifiedAfter: "", modifiedBefore: "", jsonFilter: "", jsonSelect: newSeq[tuple[path: string, alias: string]](), tables: newSeq[string]()) |