{
  "version": 3,
  "sources": ["../src/index.ts", "../src/geopackage-format.ts", "../src/lib/parse-geopackage.ts", "../src/geopackage-loader.ts"],
  "sourcesContent": ["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport {GeoPackageFormat} from './geopackage-format';\nexport type {GeoPackageLoaderOptions} from './geopackage-loader';\nexport {GeoPackageLoader} from './geopackage-loader';\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Format} from '@loaders.gl/loader-utils';\n\nexport const GeoPackageFormat = {\n  id: 'geopackage',\n  name: 'GeoPackage',\n  module: 'geopackage',\n  extensions: ['gpkg'],\n  mimeTypes: ['application/geopackage+sqlite3'],\n  category: 'geometry'\n} as const satisfies Format;\n", "/* eslint-disable camelcase, @typescript-eslint/no-use-before-define */\nimport {isBrowser} from '@loaders.gl/loader-utils';\nimport type {\n  Schema,\n  Field,\n  Geometry,\n  DataType,\n  Tables,\n  GeoJSONTable,\n  Feature\n} from '@loaders.gl/schema';\nimport {convertWKBToGeometry, transformGeoJsonCoords} from '@loaders.gl/gis';\nimport {Proj4Projection} from '@math.gl/proj4';\nimport initSqlJs, {SqlJsStatic, Database, Statement} from 'sql.js';\n\nimport type {GeoPackageLoaderOptions} from '../geopackage-loader';\nimport {\n  GeometryColumnsRow,\n  ContentsRow,\n  SpatialRefSysRow,\n  ProjectionMapping,\n  GeometryBitFlags,\n  DataColumnsRow,\n  DataColumnsMapping,\n  PragmaTableInfoRow,\n  SQLiteTypes,\n  GeoPackageGeometryTypes\n} from './types';\n\nconst SQL_JS_VERSION = '1.8.0';\n\n/**\n * We pin to the same version as sql.js that we use.\n * As of March 2022, versions 1.6.0, 1.6.1, and 1.6.2 of sql.js appeared not to work.\n */\nexport const DEFAULT_SQLJS_CDN = isBrowser\n  ? `https://cdnjs.cloudflare.com/ajax/libs/sql.js/${SQL_JS_VERSION}/`\n  : null;\n\n// https://www.geopackage.org/spec121/#flags_layout\nconst ENVELOPE_BYTE_LENGTHS = {\n  0: 0,\n  1: 32,\n  2: 48,\n  3: 48,\n  4: 64,\n  // values 5-7 are invalid and _should_ never show up\n  5: 0,\n  6: 0,\n  7: 0\n};\n\n// Documentation: https://www.geopackage.org/spec130/index.html#table_column_data_types\nconst SQL_TYPE_MAPPING: Record<SQLiteTypes | GeoPackageGeometryTypes, DataType> = {\n  BOOLEAN: 'bool',\n  TINYINT: 'int8',\n  SMALLINT: 'int16',\n  MEDIUMINT: 'int32',\n  INT: 'int32',\n  INTEGER: 'int32',\n  FLOAT: 'float32',\n  DOUBLE: 'float64',\n  REAL: 'float64',\n  TEXT: 'utf8',\n  BLOB: 'binary',\n  DATE: 'utf8',\n  DATETIME: 'utf8',\n  GEOMETRY: 'binary',\n  POINT: 'binary',\n  LINESTRING: 'binary',\n  POLYGON: 'binary',\n  MULTIPOINT: 'binary',\n  MULTILINESTRING: 'binary',\n  MULTIPOLYGON: 'binary',\n  GEOMETRYCOLLECTION: 'binary'\n};\n\nexport async function parseGeoPackage(\n  arrayBuffer: ArrayBuffer,\n  options?: GeoPackageLoaderOptions\n): Promise<GeoJSONTable | Tables<GeoJSONTable>> {\n  const {sqlJsCDN = DEFAULT_SQLJS_CDN} = options?.geopackage || {};\n  const {reproject = false, _targetCrs = 'WGS84'} = options?.gis || {};\n\n  const db = await loadDatabase(arrayBuffer, sqlJsCDN);\n  const tables = listVectorTables(db);\n  const projections = getProjections(db);\n\n  const selectedTable = tables.find((table) => table.table_name === options?.geopackage?.table);\n  const tableName = selectedTable ? selectedTable.table_name : tables[0].table_name;\n\n  const shape = options?.geopackage?.shape;\n  switch (shape) {\n    case 'geojson-table':\n      return getVectorTable(db, tableName, projections, {\n        reproject,\n        _targetCrs\n      });\n\n    case 'tables':\n      // Mapping from tableName to geojson feature collection\n      const outputTables: Tables<GeoJSONTable> = {\n        shape: 'tables',\n        tables: []\n      };\n\n      for (const table of tables) {\n        const {table_name: tableName} = table;\n        outputTables.tables.push({\n          name: tableName,\n          table: getVectorTable(db, tableName, projections, {\n            reproject,\n            _targetCrs\n          })\n        });\n      }\n\n      return outputTables;\n\n    default:\n      throw new Error(shape);\n  }\n}\n\n/**\n * Initialize SQL.js and create database\n *\n * @param arrayBuffer input bytes\n * @return SQL.js database object\n */\nasync function loadDatabase(arrayBuffer: ArrayBuffer, sqlJsCDN: string | null): Promise<Database> {\n  // In Node, `locateFile` must not be passed\n  let SQL: SqlJsStatic;\n  if (sqlJsCDN) {\n    SQL = await initSqlJs({\n      locateFile: (file) => `${sqlJsCDN}${file}`\n    });\n  } else {\n    SQL = await initSqlJs();\n  }\n  return new SQL.Database(new Uint8Array(arrayBuffer));\n}\n\n/**\n * Find all vector tables in GeoPackage\n * This queries the `gpkg_contents` table to find a list of vector tables\n *\n * @param db GeoPackage to query\n * @return list of table references\n */\nfunction listVectorTables(db: Database): ContentsRow[] {\n  // The gpkg_contents table can have at least three categorical values for\n  // data_type.\n  // - 'features' refers to a vector geometry table\n  // (https://www.geopackage.org/spec121/#_contents_2)\n  // - 'tiles' refers to a raster table\n  // (https://www.geopackage.org/spec121/#_contents_3)\n  // - 'attributes' refers to a data table with no geometry\n  // (https://www.geopackage.org/spec121/#_contents_4).\n\n  // We hard code 'features' because for now we don't support raster data or pure attribute data\n  // eslint-disable-next-line quotes\n  const stmt = db.prepare(\"SELECT * FROM gpkg_contents WHERE data_type='features';\");\n\n  const vectorTablesInfo: ContentsRow[] = [];\n  while (stmt.step()) {\n    const vectorTableInfo = stmt.getAsObject() as unknown as ContentsRow;\n    vectorTablesInfo.push(vectorTableInfo);\n  }\n\n  return vectorTablesInfo;\n}\n\n/**\n * Load geometries from vector table\n *\n * @param db GeoPackage object\n * @param tableName name of vector table to query\n * @param projections keys are srs_id values, values are WKT strings\n * @returns Array of GeoJSON Feature objects\n */\nfunction getVectorTable(\n  db: Database,\n  tableName: string,\n  projections: ProjectionMapping,\n  {reproject, _targetCrs}: {reproject: boolean; _targetCrs: string}\n): GeoJSONTable {\n  const dataColumns = getDataColumns(db, tableName);\n  const geomColumn = getGeometryColumn(db, tableName);\n  const featureIdColumn = getFeatureIdName(db, tableName);\n\n  // Get vector features from table\n  // Don't think it's possible to parameterize the table name in SQLite?\n  const {columns, values} = db.exec(`SELECT * FROM \\`${tableName}\\`;`)[0];\n\n  let projection;\n  if (reproject) {\n    const geomColumnProjStr = projections[geomColumn.srs_id];\n    projection = new Proj4Projection({\n      from: geomColumnProjStr,\n      to: _targetCrs\n    });\n  }\n\n  const geojsonFeatures: Feature<Geometry | null>[] = [];\n  for (const row of values) {\n    const geojsonFeature = constructGeoJsonFeature(\n      columns,\n      row,\n      geomColumn,\n      // @ts-ignore\n      dataColumns,\n      featureIdColumn\n    );\n    geojsonFeatures.push(geojsonFeature);\n  }\n\n  const schema = getSchema(db, tableName);\n  if (projection) {\n    return {\n      shape: 'geojson-table',\n      type: 'FeatureCollection',\n      // @ts-expect-error TODO - null geometries causing problems...\n      features: transformGeoJsonCoords(geojsonFeatures, projection.project),\n      schema\n    };\n  }\n\n  return {\n    shape: 'geojson-table',\n    schema,\n    type: 'FeatureCollection',\n    // @ts-expect-error TODO - null features\n    features: geojsonFeatures\n  };\n}\n\n/**\n * Find all projections defined in GeoPackage\n * This queries the gpkg_spatial_ref_sys table\n * @param db GeoPackage object\n * @returns mapping from srid to WKT projection string\n */\nfunction getProjections(db: Database): ProjectionMapping {\n  // Query gpkg_spatial_ref_sys to get srid: srtext mappings\n  const stmt = db.prepare('SELECT * FROM gpkg_spatial_ref_sys;');\n\n  const projectionMapping: ProjectionMapping = {};\n  while (stmt.step()) {\n    const srsInfo = stmt.getAsObject() as unknown as SpatialRefSysRow;\n    const {srs_id, definition} = srsInfo;\n    projectionMapping[srs_id] = definition;\n  }\n\n  return projectionMapping;\n}\n\n/**\n * Construct single GeoJSON feature given row's data\n * @param columns array of ordered column identifiers\n * @param row array of ordered values representing row's data\n * @param geomColumn geometry column metadata\n * @param dataColumns mapping from table column names to property name\n * @returns GeoJSON Feature object\n */\nfunction constructGeoJsonFeature(\n  columns: string[],\n  row: any[],\n  geomColumn: GeometryColumnsRow,\n  dataColumns: DataColumnsMapping,\n  featureIdColumn: string\n): Feature<Geometry | null> {\n  // Find feature id\n  const idIdx = columns.indexOf(featureIdColumn);\n  const id = row[idIdx];\n\n  // Parse geometry columns to geojson\n  const geomColumnIdx = columns.indexOf(geomColumn.column_name);\n  const geometry = parseGeometry(row[geomColumnIdx].buffer);\n\n  const properties = {};\n  if (dataColumns) {\n    for (const [key, value] of Object.entries(dataColumns)) {\n      const idx = columns.indexOf(key);\n      // @ts-ignore TODO - Check what happens if null?\n      properties[value] = row[idx];\n    }\n  } else {\n    // Put all columns except for the feature id and geometry in properties\n    for (let i = 0; i < columns.length; i++) {\n      if (i === idIdx || i === geomColumnIdx) {\n        // eslint-disable-next-line no-continue\n        continue;\n      }\n\n      const columnName = columns[i];\n      properties[columnName] = row[i];\n    }\n  }\n\n  return {\n    id,\n    type: 'Feature',\n    geometry,\n    properties\n  };\n}\n\n/**\n * Get GeoPackage version from database\n * @param db database\n * @returns version string. One of '1.0', '1.1', '1.2'\n */\n\n// @ts-ignore\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction getGeopackageVersion(db: Database): string | null {\n  const textDecoder = new TextDecoder();\n\n  // Read application id from SQLite metadata\n  const applicationIdQuery = db.exec('PRAGMA application_id;')[0];\n  const applicationId = applicationIdQuery.values[0][0];\n\n  // Convert 4-byte signed int32 application id to text\n  const buffer = new ArrayBuffer(4);\n  const view = new DataView(buffer);\n  view.setInt32(0, Number(applicationId));\n  const versionString = textDecoder.decode(buffer);\n\n  if (versionString === 'GP10') {\n    return '1.0';\n  }\n\n  if (versionString === 'GP11') {\n    return '1.1';\n  }\n\n  // If versionString is GPKG, then read user_version\n  const userVersionQuery = db.exec('PRAGMA user_version;')[0];\n  const userVersionInt = userVersionQuery.values[0][0];\n\n  if (userVersionInt && typeof userVersionInt === 'number' && userVersionInt < 10300) {\n    return '1.2';\n  }\n\n  return null;\n}\n\n/**\n * Find name of feature id column in table\n * The feature ID is the primary key of the table.\n * http://www.geopackage.org/spec121/#feature_user_tables\n *\n * @param db database\n * @param tableName name of table\n * @return name of feature id column\n */\nfunction getFeatureIdName(db: Database, tableName: string): string | null {\n  // Again, not possible to parameterize table name?\n  const stmt = db.prepare(`PRAGMA table_info(\\`${tableName}\\`)`);\n\n  while (stmt.step()) {\n    const pragmaTableInfo = stmt.getAsObject() as unknown as PragmaTableInfoRow;\n    const {name, pk} = pragmaTableInfo;\n    if (pk) {\n      return name;\n    }\n  }\n\n  // Is it guaranteed for there always to be at least one primary key column in the table?\n  return null;\n}\n\n/**\n * Parse geometry buffer\n * GeoPackage vector geometries are slightly extended past the WKB standard\n * See: https://www.geopackage.org/spec121/#gpb_format\n *\n * @param arrayBuffer geometry buffer\n * @return GeoJSON geometry (in original CRS)\n */\nfunction parseGeometry(arrayBuffer: ArrayBuffer): Geometry | null {\n  const view = new DataView(arrayBuffer);\n  const {envelopeLength, emptyGeometry} = parseGeometryBitFlags(view.getUint8(3));\n\n  // A Feature object has a member with the name \"geometry\".  The value of the\n  // geometry member SHALL be either a Geometry object as defined above or, in\n  // the case that the Feature is unlocated, a JSON null value.\n  /** @see https://tools.ietf.org/html/rfc7946#section-3.2 */\n  if (emptyGeometry) {\n    return null;\n  }\n\n  // Do I need to find the srid here? Is it necessarily the same for every\n  // geometry in a table?\n  // const srid = view.getInt32(4, littleEndian);\n\n  // 2 byte magic, 1 byte version, 1 byte flags, 4 byte int32 srid\n  const wkbOffset = 8 + envelopeLength;\n\n  const wkbBytes = arrayBuffer.slice(wkbOffset);\n  return convertWKBToGeometry(wkbBytes);\n}\n\n/**\n * Parse geometry header flags\n * https://www.geopackage.org/spec121/#flags_layout\n *\n * @param byte uint8 number representing flags\n * @return object representing information from bit flags\n */\nfunction parseGeometryBitFlags(byte: number): GeometryBitFlags {\n  // Are header values little endian?\n  const envelopeValue = (byte & 0b00001110) / 2;\n\n  // TODO: Not sure the best way to handle this. Throw an error if envelopeValue outside 0-7?\n  const envelopeLength = ENVELOPE_BYTE_LENGTHS[envelopeValue] as number;\n\n  return {\n    littleEndian: Boolean(byte & 0b00000001),\n    envelopeLength,\n    emptyGeometry: Boolean(byte & 0b00010000),\n    extendedGeometryType: Boolean(byte & 0b00100000)\n  };\n}\n\n/**\n * Find geometry column in given vector table\n *\n * @param db GeoPackage object\n * @param tableName Name of vector table\n * @returns Array of geometry column definitions\n */\nfunction getGeometryColumn(db: Database, tableName: string): GeometryColumnsRow {\n  const stmt = db.prepare('SELECT * FROM gpkg_geometry_columns WHERE table_name=:tableName;');\n  stmt.bind({':tableName': tableName});\n\n  // > Requirement 30\n  // > A feature table SHALL have only one geometry column.\n  // https://www.geopackage.org/spec121/#feature_user_tables\n  // So we should need one and only one step, given that we use the WHERE clause in the SQL query\n  // above\n  stmt.step();\n  const geometryColumn = stmt.getAsObject() as unknown as GeometryColumnsRow;\n  return geometryColumn;\n}\n\n/**\n * Find property columns in given vector table\n * @param db GeoPackage object\n * @param tableName Name of vector table\n * @returns Mapping from table column names to property name\n */\nfunction getDataColumns(db: Database, tableName: string): DataColumnsMapping | null {\n  // gpkg_data_columns is not required to exist\n  // https://www.geopackage.org/spec121/#extension_schema\n  let stmt: Statement;\n  try {\n    stmt = db.prepare('SELECT * FROM gpkg_data_columns WHERE table_name=:tableName;');\n  } catch (error) {\n    if ((error as Error).message.includes('no such table')) {\n      return null;\n    }\n\n    throw error;\n  }\n\n  stmt.bind({':tableName': tableName});\n\n  // Convert DataColumnsRow object this to a key-value {column_name: name}\n  const result: DataColumnsMapping = {};\n  while (stmt.step()) {\n    const column = stmt.getAsObject() as unknown as DataColumnsRow;\n    const {column_name, name} = column;\n    result[column_name] = name || null;\n  }\n\n  return result;\n}\n\n/**\n * Get arrow schema\n * @param db GeoPackage object\n * @param tableName  table name\n * @returns Arrow-like Schema\n */\nfunction getSchema(db: Database, tableName: string): Schema {\n  const stmt = db.prepare(`PRAGMA table_info(\\`${tableName}\\`)`);\n\n  const fields: Field[] = [];\n  while (stmt.step()) {\n    const pragmaTableInfo = stmt.getAsObject() as unknown as PragmaTableInfoRow;\n    const {name, type: sqlType, notnull} = pragmaTableInfo;\n    const type = SQL_TYPE_MAPPING[sqlType];\n    const field = {name, type, nullable: !notnull};\n    fields.push(field);\n  }\n\n  return {fields, metadata: {}};\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport {Tables, GeoJSONTable} from '@loaders.gl/schema';\nimport {parseGeoPackage, DEFAULT_SQLJS_CDN} from './lib/parse-geopackage';\nimport {GeoPackageFormat} from './geopackage-format';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\n// const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\nconst VERSION = 'latest';\n\nexport type GeoPackageLoaderOptions = LoaderOptions & {\n  /** Options for the geopackage loader */\n  geopackage?: {\n    /** Shape of returned data */\n    shape?: 'geojson-table' | 'tables';\n    /** Name of table to load (defaults to first table), unless shape==='tables' */\n    table?: string;\n    /** Use null in Node */\n    sqlJsCDN?: string | null;\n    /** Override the URL to the worker bundle (by default loads from unpkg.com) */\n    workerUrl?: string;\n  };\n  gis?: {\n    reproject?: boolean;\n    _targetCrs?: string;\n  };\n};\n\nexport const GeoPackageLoader = {\n  ...GeoPackageFormat,\n\n  dataType: null as unknown as GeoJSONTable | Tables<GeoJSONTable>,\n  batchType: null as never,\n\n  version: VERSION,\n  parse: parseGeoPackage,\n  options: {\n    geopackage: {\n      sqlJsCDN: DEFAULT_SQLJS_CDN,\n      shape: 'tables'\n    },\n    gis: {}\n  }\n} as const satisfies LoaderWithParser<\n  GeoJSONTable | Tables<GeoJSONTable>,\n  never,\n  GeoPackageLoaderOptions\n>;\n"],
  "mappings": "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",
  "names": ["_a", "tableName", "initSqlJs"]
}
