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 |
import x_db_sqlite, asynchttpserver, pegs, json 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 ConfigFiles* = object auth*: string config*: string 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 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 config*: JsonNode configFile*: string directory*: string file*: string mount*: bool readonly*: bool appname*: string appversion*: string auth*: JsonNode authFile*: string 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)} (\/ {(.+)} / \/?)$""" 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*(): QueryOptions = return QueryOptions(select: @["documents.id AS id", "documents.data AS data", "content_type", "binary", "searchable", "created", "modified"], single: false, limit: 0, offset: 0, orderby: "", tags: "", search: "", folder: "", like: "", createdAfter: "", createdBefore: "", modifiedAfter: "", modifiedBefore: "", jsonFilter: "", jsonSelect: newSeq[tuple[path: string, alias: string]](), tables: newSeq[string]()) |