@igo2/geo 21.0.0-next.2 → 21.0.0-next.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/igo2-geo-offline.mjs +710 -0
- package/fesm2022/igo2-geo-offline.mjs.map +1 -0
- package/fesm2022/igo2-geo.mjs +12406 -12684
- package/fesm2022/igo2-geo.mjs.map +1 -1
- package/locale/en.geo.json +5 -0
- package/locale/fr.geo.json +5 -0
- package/package.json +11 -6
- package/types/igo2-geo-offline.d.ts +190 -0
- package/types/igo2-geo.d.ts +2546 -2578
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"igo2-geo-offline.mjs","sources":["../../../packages/geo/offline/src/geo/geo-data.enums.ts","../../../packages/geo/offline/src/shared/indexed-db/indexed-db.utils.ts","../../../packages/geo/offline/src/geo/geo-db.ts","../../../packages/geo/offline/src/geo/geo-data-sync.service.ts","../../../packages/geo/offline/src/layer/layer-db.ts","../../../packages/geo/offline/src/shared/geo-network.service.ts","../../../packages/geo/offline/src/shared/indexed-db/indexed-db-layer-persistence.service.ts","../../../packages/geo/offline/src/shared/indexed-db/indexed-db-vector-layer.extension.ts","../../../packages/geo/offline/src/offline.interface.ts","../../../packages/geo/offline/src/shared/offline-layer-restore.service.ts","../../../packages/geo/offline/src/offline.provider.ts","../../../packages/geo/offline/src/igo2-geo-offline.ts"],"sourcesContent":["export enum InsertSourceInsertDBEnum {\n System = 'system',\n User = 'user'\n}\n","import { IDBPDatabase, openDB } from 'idb';\n\nimport { IgoDBSchema } from './indexed-db.interface';\n\nexport function createIndexedDb(): Promise<IDBPDatabase<IgoDBSchema>> {\n return openDB<IgoDBSchema>('igo2DB', undefined, {\n upgrade(db) {\n const geoDataStore = db.createObjectStore('geoData', {\n keyPath: 'url',\n autoIncrement: false\n });\n geoDataStore.createIndex('regionID-idx', 'regionID', {\n unique: false\n });\n db.createObjectStore('layerData', {\n keyPath: 'layerId',\n autoIncrement: false\n });\n }\n });\n}\n","import { CompressedData, Compression } from '@igo2/utils';\n\nimport { IDBPDatabase } from 'idb';\nimport {\n Observable,\n Subscription,\n concatMap,\n first,\n from,\n map,\n mergeMap,\n of,\n switchMap,\n zip\n} from 'rxjs';\n\nimport { IgoDBSchema } from '../shared/indexed-db/indexed-db.interface';\nimport { createIndexedDb } from '../shared/indexed-db/indexed-db.utils';\nimport { InsertSourceInsertDBEnum } from './geo-data.enums';\nimport { GeoDBData } from './geo-data.interface';\n\nexport class GeoDB {\n private db$: Observable<IDBPDatabase<IgoDBSchema>>;\n private compression = new Compression();\n public collisionsMap = new Map<number | string, string[]>();\n public _newData = 0;\n private revertObservablesSubscription!: Subscription;\n\n constructor() {\n this.db$ = from(createIndexedDb());\n }\n\n /**\n * Only blob can be compressed\n * @param url\n * @param regionID\n * @param object object to handle\n * @param insertSource type of event user or system\n * @param insertEvent Name of the event where the insert has been triggered\n * @returns\n */\n update(\n url: string,\n regionID: number | string,\n object: object | Blob,\n insertSource: InsertSourceInsertDBEnum,\n insertEvent: string\n ): Observable<GeoDBData> {\n const object$ = (\n object instanceof Blob\n ? this.compression.compressBlob(object)\n : of(object)\n ) as Observable<object | CompressedData>;\n const compress = object instanceof Blob ? true : false;\n\n let geoDBData: GeoDBData;\n const a = this.db$.pipe(\n switchMap((db) => {\n return object$.pipe(\n first(),\n switchMap((object) => {\n geoDBData = {\n url,\n regionID,\n object: object,\n compressed: compress,\n insertSource,\n insertEvent\n } satisfies GeoDBData;\n return this.getGeoDBData(url);\n }),\n concatMap((res: GeoDBData | undefined) => {\n const dbObject = res;\n if (!dbObject) {\n this._newData++;\n return from(db.add('geoData', geoDBData)).pipe(\n map(() => geoDBData)\n );\n } else {\n const currentRegionID = dbObject.regionID;\n if (currentRegionID !== regionID) {\n const collisions = this.collisionsMap.get(currentRegionID);\n if (collisions !== undefined) {\n collisions.push(dbObject.url);\n this.collisionsMap.set(currentRegionID, collisions);\n } else {\n this.collisionsMap.set(currentRegionID, [dbObject.url]);\n }\n }\n return this.customUpdate(geoDBData);\n }\n })\n );\n })\n );\n return a;\n }\n\n private customUpdate(geoDBData: GeoDBData): Observable<GeoDBData> {\n const b = this.delete(geoDBData.url).pipe(\n mergeMap(() => this.add(geoDBData))\n );\n return b;\n }\n\n add(geoDBData: GeoDBData): Observable<GeoDBData> {\n return this.db$.pipe(\n switchMap((db) =>\n from(db?.add('geoData', geoDBData)).pipe(map(() => geoDBData))\n )\n );\n }\n\n put(geoDBData: GeoDBData): Observable<GeoDBData> {\n return this.db$.pipe(\n switchMap((db) =>\n from(db?.put('geoData', geoDBData)).pipe(map(() => geoDBData))\n )\n );\n }\n\n getGeoDBData(url: string): Observable<GeoDBData | undefined> {\n return this.db$.pipe(switchMap((db) => from(db?.get('geoData', url))));\n }\n\n get(url: string): Observable<object | Blob> {\n return this.getGeoDBData(url).pipe(\n mergeMap((data) => {\n const rObj = !data?.compressed\n ? data?.object\n : this.compression.decompressBlob(data?.object as CompressedData);\n return of(rObj as object | Blob);\n })\n );\n }\n\n delete(key: string): Observable<object> {\n return this.db$.pipe(\n switchMap((db) => from(db?.delete('geoData', key))),\n map(() => {\n {\n return { key };\n }\n })\n );\n }\n\n getRegionCountByID(id: number): Observable<number> {\n return this.getRegionByID(id).pipe(\n switchMap((datas) => {\n return of(datas.length);\n })\n );\n }\n\n getRegionByID(id: number): Observable<GeoDBData[]> {\n if (!id) {\n return of([]);\n }\n const IDBKey: IDBKeyRange = IDBKeyRange.only(id);\n return this.db$.pipe(\n switchMap((db) =>\n from(db?.getAllFromIndex('geoData', 'regionID-idx', IDBKey))\n )\n );\n }\n\n deleteByRegionID(id: number): Observable<void[]> {\n if (!id) {\n return of([]);\n }\n return this.db$.pipe(\n switchMap((db) => {\n const tx = db.transaction('geoData', 'readwrite');\n return of(tx);\n }),\n mergeMap((tx) =>\n this.getRegionByID(id).pipe(\n concatMap((datas) => {\n const promises = datas.map((data) => tx.store.delete(data.url));\n promises.push(tx.done);\n return from(Promise.all(promises));\n })\n )\n )\n );\n }\n\n resetCounters() {\n this.resetCollisionsMap();\n this._newData = 0;\n }\n\n resetCollisionsMap() {\n this.collisionsMap = new Map();\n }\n\n revertCollisions(): void {\n if (this.revertObservablesSubscription) {\n this.revertObservablesSubscription.unsubscribe();\n }\n const revertObservables: Observable<GeoDBData>[] = [];\n for (const [regionID, collisions] of this.collisionsMap) {\n for (const url of collisions) {\n revertObservables.push(\n this.getGeoDBData(url).pipe(\n first(),\n concatMap((dbObject: GeoDBData | undefined) => {\n const updatedObject = dbObject!;\n updatedObject.regionID = regionID;\n return this.customUpdate(updatedObject);\n })\n )\n );\n }\n }\n this.revertObservablesSubscription = zip(...revertObservables).subscribe();\n }\n\n get newData(): number {\n return this._newData;\n }\n}\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { ActiveToast, MessageService } from '@igo2/core/message';\n\nimport { default as JSZip } from 'jszip';\nimport { Observable, forkJoin, from, of } from 'rxjs';\nimport { catchError, concatMap } from 'rxjs/operators';\n\nimport { InsertSourceInsertDBEnum } from './geo-data.enums';\nimport { DatasToIDB, GeoDBData, GeoDataToIDB } from './geo-data.interface';\nimport { GeoDB } from './geo-db';\n\n/** Delay before dismissing the \"download completed\" toast, so it stays legible for a moment. */\nconst DOWNLOAD_COMPLETED_DELAY_MS = 2500;\nconst TOAST_TIMEOUT_MS = 40000;\n\ninterface DownloadState {\n toast?: ActiveToast;\n}\n\n@Injectable()\nexport class GeoDataSyncService {\n private http = inject(HttpClient);\n private messageService = inject(MessageService);\n\n load(urlFile: string): void {\n const geoDB = new GeoDB();\n const downloadState: DownloadState = {};\n\n this.http\n .get<DatasToIDB>(urlFile)\n .pipe(\n catchError((error: HttpErrorResponse) =>\n this.handleConfigFileError(urlFile, error)\n ),\n concatMap((datasToIDB) =>\n this.processGeoDatas(geoDB, datasToIDB?.geoDatas ?? [], downloadState)\n )\n )\n .subscribe(() => this.notifyDownloadCompleted(downloadState));\n }\n\n private handleConfigFileError(\n urlFile: string,\n error: HttpErrorResponse\n ): never {\n this.messageService.error(`GeoData file ${urlFile} could not be read`);\n error.error.caught = true;\n throw error;\n }\n\n private processGeoDatas(\n geoDB: GeoDB,\n geoDatas: GeoDataToIDB[],\n downloadState: DownloadState\n ): Observable<unknown> {\n const currentDate = new Date();\n const operations: Observable<unknown>[] = [];\n\n for (const geoData of geoDatas) {\n if (typeof geoData.triggerDate === 'string') {\n geoData.triggerDate = new Date(Date.parse(geoData.triggerDate));\n }\n if (currentDate < geoData.triggerDate) {\n continue;\n }\n\n if (geoData.action === 'update') {\n operations.push(...this.updateGeoData(geoDB, geoData, downloadState));\n } else if (geoData.action === 'delete') {\n operations.push(...geoData.urls.map((url) => geoDB.delete(url)));\n }\n }\n\n return forkJoin(operations);\n }\n\n private updateGeoData(\n geoDB: GeoDB,\n geoData: GeoDataToIDB,\n downloadState: DownloadState\n ): Observable<unknown>[] {\n const insertEvent = `${\n geoData.source || InsertSourceInsertDBEnum.System\n } (${geoData.triggerDate})`;\n\n return geoData.urls.map((url) =>\n geoDB\n .getGeoDBData(url)\n .pipe(\n concatMap((existing: GeoDBData | undefined) =>\n existing?.insertEvent === insertEvent\n ? of(false)\n : this.downloadAndStore(\n geoDB,\n url,\n geoData,\n insertEvent,\n downloadState\n )\n )\n )\n );\n }\n\n private downloadAndStore(\n geoDB: GeoDB,\n url: string,\n geoData: GeoDataToIDB,\n insertEvent: string,\n downloadState: DownloadState\n ): Observable<unknown> {\n this.showDownloadStartMessage(downloadState);\n const isZip = this.isZip(url);\n const download$ = isZip\n ? this.http.get(url, { responseType: 'arraybuffer' })\n : this.http.get<object>(url, { responseType: 'json' });\n\n return download$.pipe(\n catchError((error: HttpErrorResponse) =>\n this.handleDownloadError(downloadState, error)\n ),\n concatMap((response) =>\n isZip\n ? this.storeZippedGeoData(\n geoDB,\n response as ArrayBuffer,\n url,\n geoData,\n insertEvent\n )\n : geoDB.update(\n url,\n url,\n response,\n InsertSourceInsertDBEnum.System,\n insertEvent\n )\n )\n );\n }\n\n private handleDownloadError(\n downloadState: DownloadState,\n error: HttpErrorResponse\n ): never {\n if (downloadState.toast) {\n this.messageService.remove(downloadState.toast.toastId);\n }\n this.messageService.error(\n 'igo.geo.indexedDb.data-download-failed',\n undefined,\n { timeOut: TOAST_TIMEOUT_MS }\n );\n error.error.caught = true;\n throw error;\n }\n\n private storeZippedGeoData(\n geoDB: GeoDB,\n archive: ArrayBuffer,\n url: string,\n geoData: GeoDataToIDB,\n insertEvent: string\n ): Observable<GeoDBData[]> {\n return from(\n this.extractZipGeojsonEntries(archive, geoData.zippedBaseUrl)\n ).pipe(\n concatMap((entries) =>\n forkJoin([\n // the archive itself is tracked so future loads can detect it was already processed\n geoDB.update(\n url,\n url,\n {},\n InsertSourceInsertDBEnum.System,\n insertEvent\n ),\n ...entries.map(({ zippedUrl, geojson }) =>\n geoDB.update(\n zippedUrl,\n url,\n geojson,\n InsertSourceInsertDBEnum.System,\n insertEvent\n )\n )\n ])\n )\n );\n }\n\n private async extractZipGeojsonEntries(\n archive: ArrayBuffer,\n zippedBaseUrl = ''\n ): Promise<{ zippedUrl: string; geojson: object }[]> {\n const zipped = await JSZip.loadAsync(archive);\n const baseUrl = zippedBaseUrl.endsWith('/')\n ? zippedBaseUrl\n : `${zippedBaseUrl}/`;\n const geojsonPaths = Object.keys(zipped.files).filter((relativePath) =>\n relativePath.toLowerCase().endsWith('.geojson')\n );\n\n return Promise.all(\n geojsonPaths.map(async (relativePath) => ({\n zippedUrl: `${baseUrl}${relativePath}`,\n geojson: JSON.parse(await zipped.file(relativePath)!.async('text'))\n }))\n );\n }\n\n private showDownloadStartMessage(downloadState: DownloadState): void {\n if (downloadState.toast) {\n return;\n }\n downloadState.toast = this.messageService.info(\n 'igo.geo.indexedDb.data-download-start',\n undefined,\n {\n disableTimeOut: true,\n progressBar: false,\n closeButton: true,\n tapToDismiss: false\n }\n );\n }\n\n private notifyDownloadCompleted(downloadState: DownloadState): void {\n if (!downloadState.toast) {\n return;\n }\n const toast = downloadState.toast;\n setTimeout(() => {\n this.messageService.remove(toast.toastId);\n this.messageService.success(\n 'igo.geo.indexedDb.data-download-completed',\n undefined,\n { timeOut: TOAST_TIMEOUT_MS }\n );\n }, DOWNLOAD_COMPLETED_DELAY_MS);\n }\n\n private isZip(value: unknown): boolean {\n const regex = /(zip)$/;\n return typeof value === 'string' && regex.test(value.toLowerCase());\n }\n}\n","import type { LayerId } from '@igo2/geo';\n\nimport { IDBPDatabase } from 'idb';\nimport { Observable, from } from 'rxjs';\n\nimport { IgoDBSchema } from '../shared/indexed-db/indexed-db.interface';\nimport { createIndexedDb } from '../shared/indexed-db/indexed-db.utils';\nimport { LayerDBData } from './layer-db.interface';\n\nexport class LayerDB {\n private readonly dbPromise: Promise<IDBPDatabase<IgoDBSchema>>;\n\n constructor() {\n this.dbPromise = createIndexedDb();\n }\n /**\n * This method allow to update the stored layer into the indexeddb (layerData)\n * @param layerDBData\n * @returns\n */\n update(layerDBData: LayerDBData): Observable<LayerDBData> {\n return from(this.updateAsync(layerDBData));\n }\n\n private async updateAsync(layerDBData: LayerDBData): Promise<LayerDBData> {\n const db = await this.dbPromise;\n const existing = await db.get('layerData', layerDBData.layerId);\n if (existing) {\n await db.delete('layerData', layerDBData.layerId);\n }\n await db.add('layerData', layerDBData);\n return layerDBData;\n }\n\n add(layerDBData: LayerDBData): Observable<LayerDBData> {\n return from(this.addAsync(layerDBData));\n }\n\n private async addAsync(layerDBData: LayerDBData): Promise<LayerDBData> {\n const db = await this.dbPromise;\n await db.add('layerData', layerDBData);\n return layerDBData;\n }\n\n /**\n * This method retrieve an idb layer definition\n * @param layerId\n * @returns\n */\n getByID(layerId: LayerId): Observable<LayerDBData | undefined> {\n return from(this.getByIDAsync(layerId));\n }\n\n private async getByIDAsync(\n layerId: LayerId\n ): Promise<LayerDBData | undefined> {\n const db = await this.dbPromise;\n return db.get('layerData', layerId.toString());\n }\n\n /**\n * This method delete an idb layer definition\n * @param key\n * @returns\n */\n delete(key: string): Observable<object> {\n return from(this.deleteAsync(key));\n }\n\n private async deleteAsync(key: string): Promise<object> {\n const db = await this.dbPromise;\n await db.delete('layerData', key);\n return { key };\n }\n\n /**\n * This method retrive all idb layer definition\n * @param layerId\n * @returns\n */\n getAll(): Observable<LayerDBData[]> {\n return from(this.getAllAsync());\n }\n\n private async getAllAsync(): Promise<LayerDBData[]> {\n const db = await this.dbPromise;\n return db.getAll('layerData');\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { ConnectionState, NetworkService } from '@igo2/core/network';\n\nimport { Observable } from 'rxjs';\n\nimport { GeoDB } from '../geo';\n\nexport type ResponseType = 'arraybuffer' | 'json' | 'text' | 'xml' | 'blob';\nexport interface SimpleGetOptions {\n responseType: ResponseType;\n withCredentials?: boolean;\n}\n@Injectable()\nexport class GeoNetworkService {\n private http = inject(HttpClient);\n private networkService = inject(NetworkService);\n\n private networkOnline = true;\n constructor() {\n this.networkService.currentState().subscribe((state: ConnectionState) => {\n this.networkOnline = state.connection;\n });\n }\n\n get(url: string, simpleGetOptions: SimpleGetOptions): Observable<any> {\n if (window.navigator.onLine && this.networkOnline) {\n return this.getOnline(url, simpleGetOptions);\n }\n return this.getOffline(url);\n }\n\n private getOnline(\n url: string,\n simpleGetOptions: SimpleGetOptions\n ): Observable<any> {\n let request;\n switch (simpleGetOptions.responseType) {\n case 'arraybuffer':\n request = this.http.get(url, {\n responseType: 'arraybuffer',\n withCredentials: simpleGetOptions.withCredentials\n });\n break;\n case 'text':\n request = this.http.get(url, {\n responseType: 'text',\n withCredentials: simpleGetOptions.withCredentials\n });\n break;\n case 'json':\n request = this.http.get(url, {\n responseType: 'json',\n withCredentials: simpleGetOptions.withCredentials\n });\n break;\n default:\n request = this.http.get(url, {\n responseType: 'blob',\n withCredentials: simpleGetOptions.withCredentials\n });\n break;\n }\n return request;\n }\n\n private getOffline(url: string): Observable<object | Blob> {\n const geoDB = new GeoDB();\n return geoDB?.get(url);\n }\n\n public isOnline() {\n return this.networkOnline && window.navigator.onLine;\n }\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport type { AnyLayer, LayerPersistence, VectorLayerOptions } from '@igo2/geo';\n\nimport { forkJoin } from 'rxjs';\n\nimport { GeoDB } from '../../geo';\nimport { LayerDB } from '../../layer';\n\n@Injectable()\nexport class IndexedDbLayerPersistenceService implements LayerPersistence {\n private readonly geoDB = inject(GeoDB);\n private readonly layerDB = inject(LayerDB);\n\n isPersistent(layer: AnyLayer): boolean {\n if (layer.type !== 'vector') {\n return false;\n }\n\n const options = layer.options as VectorLayerOptions;\n return options.offline?.enabled === true;\n }\n\n removePersistedData(layer: AnyLayer): void {\n if (!this.isPersistent(layer) || layer.id === undefined) {\n return;\n }\n\n const options = layer.options as VectorLayerOptions;\n const layerId = layer.id.toString();\n const sourceUrl = options.sourceOptions?.url;\n const featureStorageKey =\n typeof sourceUrl === 'string' && sourceUrl.length > 0\n ? sourceUrl\n : layerId;\n\n forkJoin([\n this.geoDB.delete(featureStorageKey),\n this.layerDB.delete(layerId)\n ]).subscribe();\n }\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport {\n VectorLayerExtension,\n VectorLayerExtensionContext,\n VectorLayerExtensionInstance,\n VectorLayerLoadHandler,\n VectorLayerLoadRequest,\n VectorLayerOptions,\n isOlFlatStyleLike\n} from '@igo2/geo';\nimport { ObjectUtils } from '@igo2/utils';\n\nimport OlFeature from 'ol/Feature';\nimport { ObjectEvent } from 'ol/Object';\nimport BaseEvent from 'ol/events/Event';\nimport * as olformat from 'ol/format';\nimport { ReadOptions } from 'ol/format/Feature';\nimport { VectorSourceEvent } from 'ol/source/Vector';\n\nimport { EMPTY, Subscription, defer, fromEvent, merge, of } from 'rxjs';\nimport {\n catchError,\n concatMap,\n debounceTime,\n delay,\n first,\n switchMap,\n tap\n} from 'rxjs/operators';\n\nimport { GeoDB, InsertSourceInsertDBEnum } from '../../geo';\nimport { LayerDB, LayerDBData } from '../../layer';\nimport { GeoNetworkService, ResponseType } from '../geo-network.service';\n\nclass IndexedDbVectorLayerExtensionInstance implements VectorLayerExtensionInstance {\n private subscriptions: Subscription[] = [];\n\n constructor(\n private readonly context: VectorLayerExtensionContext,\n private readonly geoDB: GeoDB,\n private readonly layerDB: LayerDB,\n private readonly geoNetworkService: GeoNetworkService\n ) {\n this.registerPersistence();\n }\n\n interceptLoad(\n request: VectorLayerLoadRequest,\n next: VectorLayerLoadHandler\n ): void {\n if (typeof request.url === 'function') {\n next(request);\n return;\n }\n\n const requestUrl = request.url;\n const storageKey =\n this.context.options.sourceOptions?.url ||\n this.context.id?.toString() ||\n requestUrl;\n\n const responseType = this.context.source\n .getFormat()!\n .getType() as ResponseType;\n const getVectorObs$ = defer(() =>\n this.geoNetworkService.get(requestUrl, { responseType })\n ).pipe(first());\n\n const idbGetVectorObs$ = this.geoDB.get(storageKey).pipe(\n catchError(() => of(undefined)),\n delay(750),\n concatMap((response) => (response ? of(response) : getVectorObs$)),\n tap((content) => this.handleOnLoad(request, content)),\n catchError(() => {\n request.source.removeLoadedExtent(request.extent);\n request.failure();\n return EMPTY;\n })\n );\n\n this.subscriptions.push(idbGetVectorObs$.subscribe());\n }\n\n destroy(): void {\n this.subscriptions.forEach((subscription) => subscription.unsubscribe());\n this.subscriptions = [];\n }\n\n private registerPersistence(): void {\n const sourceReady$ = fromEvent<BaseEvent>(\n this.context.layer,\n 'sourceready'\n );\n\n const featurePersistSubscription = sourceReady$\n .pipe(\n tap(() => {\n if (this.context.source.getFeatures().length > 0) {\n this.maintainFeaturesInIdb();\n }\n this.maintainOptionsInIdb();\n }),\n switchMap(() =>\n merge(\n fromEvent<VectorSourceEvent>(\n this.context.source,\n 'featuresloadend'\n ),\n fromEvent<VectorSourceEvent>(this.context.source, 'addfeature'),\n fromEvent<VectorSourceEvent>(this.context.source, 'changefeature'),\n fromEvent<VectorSourceEvent>(this.context.source, 'clear'),\n fromEvent<VectorSourceEvent>(this.context.source, 'removefeature')\n )\n )\n )\n .pipe(debounceTime(750))\n .subscribe(() => this.maintainFeaturesInIdb());\n\n const optionPersistSubscription = sourceReady$\n .pipe(\n switchMap(() =>\n merge(\n fromEvent<BaseEvent>(this.context.layer, 'change'),\n fromEvent<ObjectEvent>(this.context.layer, 'change:visible'),\n fromEvent<ObjectEvent>(this.context.layer, 'change:opacity'),\n fromEvent<ObjectEvent>(this.context.layer, 'change:zIndex')\n )\n )\n )\n .pipe(debounceTime(750))\n .subscribe(() => this.maintainOptionsInIdb());\n\n this.subscriptions.push(\n featurePersistSubscription,\n optionPersistSubscription\n );\n }\n\n private maintainOptionsInIdb(): void {\n if (this.context.id === undefined) {\n return;\n }\n\n const id = this.context.id;\n const options = this.context.options;\n const offline = this.getOfflineState(options);\n const layerData: LayerDBData = ObjectUtils.removeUndefined({\n layerId: id,\n detailedContextUri: offline.contextUri,\n sourceOptions: {\n id,\n type: 'vector',\n queryable: true,\n url: options.sourceOptions?.url\n },\n layerOptions: {\n workspace: options.workspace,\n zIndex: this.context.layer.getZIndex() ?? 1000000,\n id,\n isIgoInternalLayer: options.isIgoInternalLayer,\n title: options.title,\n visible: this.context.layer.getVisible(),\n opacity: this.context.layer.getOpacity(),\n style: isOlFlatStyleLike(options.style) ? options.style : undefined,\n offline: Object.assign({}, options.offline, {\n enabled: true,\n contextUri: offline.contextUri\n })\n },\n insertEvent: `${options.title}-${id}-${new Date()}`\n }) as LayerDBData;\n\n this.layerDB.update(layerData).pipe(first()).subscribe();\n }\n\n private maintainFeaturesInIdb(): void {\n if (this.context.id === undefined) {\n return;\n }\n\n const sourceFeatures = this.context.source.getFeatures().map((feature) => {\n const persistedFeature = feature.clone();\n persistedFeature.setId(feature.getId());\n persistedFeature.unset('_featureStore', true);\n return persistedFeature;\n });\n\n const geojsonObject = JSON.parse(\n new olformat.GeoJSON().writeFeatures(sourceFeatures, {\n dataProjection: 'EPSG:4326',\n featureProjection: this.context.source.getProjection() || 'EPSG:3857'\n })\n );\n\n this.geoDB\n .update(\n this.context.options.sourceOptions?.url || this.context.id.toString(),\n this.context.id,\n geojsonObject,\n InsertSourceInsertDBEnum.User,\n `${this.context.options.title}-${this.context.id}-${new Date()}`\n )\n .pipe(first())\n .subscribe();\n }\n\n private handleOnLoad(\n request: VectorLayerLoadRequest,\n content: string | object | Blob | ArrayBuffer\n ): void {\n const format = request.source.getFormat()!;\n const type = format.getType();\n let source: string | object | Document | Element | ArrayBuffer | Blob;\n\n switch (type) {\n case 'xml':\n source = new DOMParser().parseFromString(\n content.toString(),\n 'application/xml'\n );\n break;\n case 'json':\n case 'text':\n case 'arraybuffer':\n default:\n source = content;\n break;\n }\n\n const readOptions: ReadOptions = {\n extent: request.extent,\n featureProjection: request.projection\n };\n const features = format.readFeatures(source, readOptions) as OlFeature[];\n\n if (features) {\n request.source.addFeatures(features);\n request.success(features);\n return;\n }\n\n request.success([]);\n }\n\n private getOfflineState(options: VectorLayerOptions): {\n enabled: boolean;\n contextUri: string | undefined;\n } {\n return {\n enabled: options.offline?.enabled === true,\n contextUri: options.offline?.contextUri\n };\n }\n}\n\n@Injectable()\nexport class IndexedDbVectorLayerExtension implements VectorLayerExtension {\n readonly id = 'indexed-db';\n readonly priority = 100;\n private readonly geoDB = inject(GeoDB);\n private readonly layerDB = inject(LayerDB);\n private readonly geoNetworkService = inject(GeoNetworkService);\n\n supports(options: VectorLayerOptions): boolean {\n return options.offline?.enabled === true;\n }\n\n attach(context: VectorLayerExtensionContext): VectorLayerExtensionInstance {\n return new IndexedDbVectorLayerExtensionInstance(\n context,\n this.geoDB,\n this.layerDB,\n this.geoNetworkService\n );\n }\n}\n","import { EnvironmentProviders, Provider } from '@angular/core';\n\nexport const OfflineFeatureKind = ['IndexedDb'] as const;\nexport type OfflineFeatureKind = (typeof OfflineFeatureKind)[number];\n\nexport interface OfflineFeature<KindT extends OfflineFeatureKind> {\n kind: KindT;\n providers: (Provider | EnvironmentProviders)[];\n}\n","import { Injectable, Injector, inject } from '@angular/core';\n\nimport {\n Layer,\n LayerService,\n OfflineLayerRestore,\n VectorLayerOptions\n} from '@igo2/geo';\n\nimport { Observable, combineLatest, of } from 'rxjs';\nimport { concatMap, map } from 'rxjs/operators';\n\nimport { LayerDB } from '../layer';\n\n@Injectable()\nexport class OfflineLayerRestoreService implements OfflineLayerRestore {\n private readonly layerDB = inject(LayerDB);\n private readonly injector = inject(Injector);\n\n createAsyncLayers(contextUri = '*'): Observable<Layer[]> {\n const layerService = this.injector.get(LayerService);\n\n return this.layerDB.getAll().pipe(\n concatMap((persistedLayers) => {\n const filteredPersistedLayers =\n contextUri === '*'\n ? persistedLayers\n : persistedLayers.filter(\n (layer) => layer.detailedContextUri === contextUri\n );\n\n if (!filteredPersistedLayers.length) {\n return of([]);\n }\n\n const layerOptions: VectorLayerOptions[] = filteredPersistedLayers.map(\n (persistedLayer) =>\n ({\n ...(persistedLayer.layerOptions as VectorLayerOptions),\n offline: {\n enabled: true,\n contextUri: persistedLayer.detailedContextUri\n },\n sourceOptions: {\n ...persistedLayer.sourceOptions,\n url: persistedLayer.sourceOptions.url ?? persistedLayer.layerId\n } as VectorLayerOptions['sourceOptions']\n }) satisfies VectorLayerOptions\n );\n\n return combineLatest(\n layerOptions.map((options) => layerService.createAsyncLayer(options))\n ).pipe(map((layers) => layers.filter(Boolean) as Layer[]));\n })\n );\n }\n}\n","import {\n EnvironmentProviders,\n Provider,\n inject,\n makeEnvironmentProviders,\n provideAppInitializer\n} from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\nimport {\n LAYER_PERSISTENCE,\n OFFLINE_LAYER_RESTORE,\n VECTOR_LAYER_EXTENSIONS\n} from '@igo2/geo';\n\nimport { GeoDB, GeoDataSyncService } from './geo';\nimport { LayerDB } from './layer';\nimport { OfflineFeature, OfflineFeatureKind } from './offline.interface';\nimport { GeoNetworkService } from './shared';\nimport {\n IndexedDbLayerPersistenceService,\n IndexedDbVectorLayerExtension,\n createIndexedDb\n} from './shared/indexed-db';\nimport { OfflineLayerRestoreService } from './shared/offline-layer-restore.service';\n\nexport function provideOffline(\n ...features: OfflineFeature<OfflineFeatureKind>[]\n): EnvironmentProviders {\n const providers: (Provider | EnvironmentProviders)[] = [];\n for (const feature of features) {\n providers.push(...feature.providers);\n }\n return makeEnvironmentProviders(providers);\n}\n\nexport function withIndexedDb(): OfflineFeature<'IndexedDb'> {\n return {\n kind: 'IndexedDb',\n providers: [\n provideAppInitializer(indexedDbInitializerFactory),\n provideAppInitializer(configFileToGeoDBInitializerFactory),\n GeoDB,\n LayerDB,\n GeoNetworkService,\n GeoDataSyncService,\n IndexedDbLayerPersistenceService,\n {\n provide: LAYER_PERSISTENCE,\n useExisting: IndexedDbLayerPersistenceService\n },\n OfflineLayerRestoreService,\n {\n provide: OFFLINE_LAYER_RESTORE,\n useExisting: OfflineLayerRestoreService\n },\n IndexedDbVectorLayerExtension,\n {\n provide: VECTOR_LAYER_EXTENSIONS,\n useExisting: IndexedDbVectorLayerExtension,\n multi: true\n }\n ]\n };\n}\n\nfunction indexedDbInitializerFactory() {\n inject(GeoDB);\n inject(LayerDB);\n return createIndexedDb();\n}\n\nasync function configFileToGeoDBInitializerFactory() {\n const configService = inject(ConfigService);\n const configFileToGeoDBService = inject(GeoDataSyncService);\n\n await new Promise<void>((resolve) => {\n configService.isLoaded$.subscribe((loaded) => {\n if (loaded) {\n resolve();\n }\n });\n });\n\n const url: string | undefined = configService.getConfig(\n 'importExport.configFileToGeoDBService'\n );\n if (url) {\n configFileToGeoDBService.load(url);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["concatMap","first","switchMap","map"],"mappings":"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"}
|