{"version":3,"sources":["init.ts"],"sourcesContent":["import { Runtime } from \"./runtime/runtime.ts\";\nimport { Pointer } from \"./runtime/pointers.ts\";\nimport { LOCAL_ENDPOINT } from \"./types/addressing.ts\";\nimport { client_type } from \"./utils/constants.ts\";\nimport { Storage, registerStorageAsPointerSource } from \"./storage/storage.ts\";\nimport { logger, projectRootURL } from \"./utils/global_values.ts\";\nimport { IndexedDBStorageLocation } from \"./storage/storage-locations/indexed-db.ts\";\nimport { LocalStorageLocation } from \"./storage/storage-locations/local-storage.ts\";\nimport { loadEternalValues } from \"./utils/eternals.ts\";\nimport { DX_BOUND_LOCAL_SLOT } from \"./runtime/constants.ts\";\nimport { verboseArg } from \"./utils/logger.ts\";\nimport { MessageLogger } from \"./utils/message_logger.ts\";\nimport { Path } from \"./utils/path.ts\";\nimport { communicationHub } from \"./network/communication-hub.ts\";\nimport { LocalLoopbackInterface } from \"./network/communication-interfaces/local-loopback-interface.ts\";\nimport { Crypto } from \"./runtime/crypto.ts\";\n\n\nlet initialized = false;\n\n/**\n * Runtime init (sets ENV, storage, endpoint, ...)\n */\nexport async function init() {\n\n\tif (initialized) return;\n\tinitialized = true;\n\n\t// register DatexStorage as pointer source\n\tregisterStorageAsPointerSource();\n\n\t// bind communication hub handlers to runtime\n\tcommunicationHub.handler.init()\n\tcommunicationHub.handler.setDatexInHandler(Runtime.datexIn.bind(Runtime))\n\tRuntime.setDatexOutHandler(communicationHub.handler.datexOut.bind(communicationHub.handler))\n\tawait communicationHub.addInterface(new LocalLoopbackInterface())\n\n\t\n\t// @ts-ignore NO_INIT\n\tif (!globalThis.NO_INIT) {\n\n\t\t// custom storage module (storage.ts next to .dx config)\n\t\tlet storageInitModule: Path|undefined\n\t\tif (client_type == \"browser\") {\n\t\t\t// TODO: handle storage.ts URL in browser\n\t\t\t// storageInitModule = new URL('/storage.ts', globalThis.location.href)\n\t\t}\n\t\telse if (client_type == \"deno\") {\n\t\t\t// TODO: dynamic storage.ts location - use uix path backend/storage.ts as workaround\n\t\t\tstorageInitModule = new Path('./backend/storage.ts', projectRootURL)\n\t\t}\n\n\t\tif (await storageInitModule?.fsExists()) {\n\t\t\tlogger.info(\"Initializing custom storage configuration (\" + storageInitModule!.toString() + \")\")\n\t\t\ttry {\n\t\t\t\tawait import(storageInitModule!.toString());\n\t\t\t}\n\t\t\tcatch (e) {\n\t\t\t\tconsole.error(e)\n\t\t\t}\n\n\t\t\tif (Storage.locations.size === 0)\n\t\t\t\tlogger.warn(`No storage location was added in storage.ts - cannot store persistent data!`)\n\t\t}\n\n\t\telse if (client_type == \"browser\") {\n\t\t\tawait Storage.addLocation(new IndexedDBStorageLocation(), {\n\t\t\t\tmodes: [Storage.Mode.SAVE_ON_CHANGE, Storage.Mode.SAVE_PERIODICALLY],\n\t\t\t\tprimary: true\n\t\t\t})\n\t\t\tawait Storage.addLocation(new LocalStorageLocation(), {\n\t\t\t\tmodes: [Storage.Mode.SAVE_ON_EXIT],\n\t\t\t\tprimary: false\n\t\t\t})\n\t\t}\n\t\telse if (client_type == \"deno\") {\n\t\t\tif (Deno.env.get(\"SQLITE_STORAGE\") == \"1\") {\n\t\t\t\tconst { SqliteStorageLocation } = await import(\"./storage/storage-locations/sqlite-db.ts\" /* lazy */);\n\t\t\t\tawait Storage.addLocation(new SqliteStorageLocation({\n\t\t\t\t\tdb: \"storage\"\n\t\t\t\t}), {\n\t\t\t\t\tmodes: [Storage.Mode.SAVE_ON_CHANGE],\n\t\t\t\t\tprimary: true\n\t\t\t\t})\n\t\t\t}\n\t\t\telse {\n\t\t\t\tawait Storage.addLocation(new LocalStorageLocation(), {\n\t\t\t\t\tmodes: [Storage.Mode.SAVE_ON_EXIT, Storage.Mode.SAVE_ON_CHANGE],\n\t\t\t\t\tprimary: true\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\n\t\n\t// listen for endpoint changes\n\tRuntime.onEndpointChanged((endpoint) => {\n\t\tPointer.pointer_prefix = endpoint.getPointerPrefix();\n\t\t// has only local endpoint id (%0000) or global id?\n\t\tif (endpoint != LOCAL_ENDPOINT) {\n\t\t\tPointer.is_local = false;\n\t\t\t// update storage entries that contain pointers with unresolved @@local origin\n\t\t\tStorage.updateEntriesWithUnresolvedLocalDependencies();\n\t\t}\n\t\telse Pointer.is_local = true;\n\t})\n\n\n\t// enable periodic pointer subscriber cleanup\n\tPointer.enablePeriodicSubscriberCleanup();\n\n\n\t// set runtime endpoint\n\tRuntime._setEndpoint(LOCAL_ENDPOINT)\n\n\t// precompiled dxb\n\tawait Runtime.precompile();\n\n\t// set Runtime ENV (not persistent if globalThis.NO_INIT)\n\tRuntime.ENV = (globalThis as any).NO_INIT ? getDefaultEnv() : await Storage.loadOrCreate(\"Datex.Runtime.ENV\", getDefaultEnv);\n\t(Runtime.ENV as any)[DX_BOUND_LOCAL_SLOT] = \"env\"\n\n\t// workaround, should never happen\n\tif (!Runtime.ENV) {\n\t\tlogger.error(\"Runtime ENV is undefined\");\n\t\tRuntime.ENV = getDefaultEnv()\n\t}\n\n\t// add environment variables to #env (might override existing env settings (LANG))\n\tif (client_type === \"deno\") {\n\t\tfor (const [key, val] of Object.entries(Deno.env.toObject())) {\n\t\t\tif (key == \"LANG\") {\n\t\t\t\tlet lang = val.split(\"-\")[0]?.split(\"_\")[0];\n\t\t\t\tif (lang == \"C\" || lang?.startsWith(\"C.\")) lang = \"en\";\n\t\t\t\tRuntime.ENV[key] = lang;\n\t\t\t}\n\t\t\telse Runtime.ENV[key] = val;\n\t\t}\n\t}\n\n\tRuntime.ENV.DATEX_VERSION = Runtime.VERSION;\n\n\tfunction getDefaultEnv() {\n\t\treturn {\n\t\t\tLANG: globalThis.localStorage?.lang as string ?? globalThis?.navigator?.language?.split(\"-\")[0]?.split(\"_\")[0] ?? 'en',\n\t\t\tDATEX_VERSION: \"\"\n\t\t}\n\t}\n\n\n\t// init persistent memory\n\tRuntime.persistent_memory = (await Storage.loadOrCreate(\"Datex.Runtime.MEMORY\", ()=>new Map())).setAutoDefault(Object);\n\n\n\tif (!(globalThis as any).NO_INIT) {\n\t\tRuntime.init();\n\n\t\t// @ts-ignore\n\t\tglobalThis.print = Runtime.STD_STATIC_SCOPE.print\n\t\t// @ts-ignore\n\t\tglobalThis.printf = Runtime.STD_STATIC_SCOPE.printf\n\t\t// @ts-ignore\n\t\tglobalThis.printn = Runtime.STD_STATIC_SCOPE.printn\n\t}\n\n\t// @ts-ignore NO_INIT\n\tif (!globalThis.NO_INIT) await loadEternalValues();\n\n\t// enables message logger when running with -v\n\tif (verboseArg) MessageLogger.enable();\n\n\tif (client_type == \"deno\" && !(globalThis as any).NO_INIT) {\n\t\tconst { clear } = await import(\"./utils/args.ts\" /*lazy*/);\n\t\tif (clear) {\n\t\t\tawait Storage.clearAndReload();\n\t\t}\n\t}\n\n\t// init cleanup interval to remove crypto entries (endpoint keyss)\n\tCrypto.initCleanup();\n}\n"],"names":["Runtime","Pointer","LOCAL_ENDPOINT","client_type","Storage","registerStorageAsPointerSource","logger","projectRootURL","IndexedDBStorageLocation","LocalStorageLocation","loadEternalValues","DX_BOUND_LOCAL_SLOT","verboseArg","MessageLogger","Path","communicationHub","LocalLoopbackInterface","Crypto","initialized","init","handler","setDatexInHandler","datexIn","bind","setDatexOutHandler","datexOut","addInterface","globalThis","NO_INIT","storageInitModule","fsExists","info","toString","e","console","error","locations","size","warn","addLocation","modes","Mode","SAVE_ON_CHANGE","SAVE_PERIODICALLY","primary","SAVE_ON_EXIT","Deno","env","get","SqliteStorageLocation","db","onEndpointChanged","endpoint","pointer_prefix","getPointerPrefix","is_local","updateEntriesWithUnresolvedLocalDependencies","enablePeriodicSubscriberCleanup","_setEndpoint","precompile","ENV","getDefaultEnv","loadOrCreate","key","val","Object","entries","toObject","lang","split","startsWith","DATEX_VERSION","VERSION","persistent_memory","Map","setAutoDefault","print","STD_STATIC_SCOPE","printf","printn","enable","clear","clearAndReload","initCleanup","LANG","localStorage","navigator","language"],"mappings":"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","sourceRoot":"/lib/datex-core-js-legacy-0.3.15/","file":"init.ts"}