@loaders.gl/scan 5.0.0-alpha.3 → 5.0.0-alpha.4

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.
@@ -41,16 +41,19 @@ export type ScanEngine = ScanBackend & {
41
41
  queryAsync: (sourceTable: ArrowTable, options?: ArrowQueryOptions) => Promise<ArrowTable>;
42
42
  };
43
43
 
44
- const scanBackendLoaders = new Map<ScanBackendName, ScanBackendLoader>();
44
+ const scanBackends = new Map<ScanBackendName, ScanBackend | ScanBackendLoader>();
45
45
 
46
46
  const arrowScanBackend: ScanBackend = Object.freeze({
47
47
  name: 'arrow',
48
48
  query: queryArrowTable,
49
- queryAsync: async (sourceTable, options) => queryArrowTable(sourceTable, options),
49
+ queryAsync: (sourceTable, options) =>
50
+ Promise.resolve().then(queryArrowTable.bind(null, sourceTable, options)),
50
51
  explain: explainArrowTableQuery
51
52
  });
52
53
 
53
- scanBackendLoaders.set('arrow', () => arrowScanBackend);
54
+ // Store the built-in backend directly. Apart from avoiding needless indirection, this keeps
55
+ // coverage stable when browser shards transform this shared module independently.
56
+ scanBackends.set('arrow', arrowScanBackend);
54
57
 
55
58
  /**
56
59
  * Registers a lazy scan backend without adding it to the default bundle.
@@ -63,7 +66,7 @@ export function registerScanBackend(name: ScanBackendName, loader: ScanBackendLo
63
66
  if (!name || !loader) {
64
67
  throw new Error('A scan backend name and loader are required');
65
68
  }
66
- scanBackendLoaders.set(name, loader);
69
+ scanBackends.set(name, loader);
67
70
  }
68
71
 
69
72
  /**
@@ -74,13 +77,14 @@ export function registerScanBackend(name: ScanBackendName, loader: ScanBackendLo
74
77
  */
75
78
  export async function createScanEngine(options: ScanEngineOptions = {}): Promise<ScanEngine> {
76
79
  const backendName = options.backend || 'arrow';
77
- const loader = scanBackendLoaders.get(backendName);
78
- if (!loader) {
80
+ const registeredBackend = scanBackends.get(backendName);
81
+ if (!registeredBackend) {
79
82
  throw new Error(
80
83
  `Scan backend "${backendName}" is not registered. The built-in backend is "arrow".`
81
84
  );
82
85
  }
83
- const backend = await loader();
86
+ const backend =
87
+ typeof registeredBackend === 'function' ? await registeredBackend() : registeredBackend;
84
88
  if (backend.name !== backendName) {
85
89
  throw new Error(
86
90
  `Scan backend loader returned "${backend.name}" while "${backendName}" was requested.`