mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-13 14:52:19 +00:00
Keep the library layer namespace in the layer lifecycle package
The core layer lifecycle imported the whole Data Library manifest contract only to check the lib- prefix, so the layer-lifecycle package owned a feature module. The namespace rule (prefix, entry id pattern, the two id helpers) now lives in src/data/libraryLayerIds.js, which the lifecycle owns; the manifest contract imports and re-exports it, so library callers are unchanged.
This commit is contained in:
1 parent
9e57fd84c8
commit
1a657e2a64
4 files changed
+38
-16
No files matched your search
@@ -0,0 +1,22 @@
|
||||
/**
|
||||
* The Data Library's layer namespace, owned by the layer lifecycle: the
|
||||
* manager accepts a late registration only under `lib-<entry id>`, and the
|
||||
* library names its layers with the same rule.
|
||||
*/
|
||||
|
||||
/** A library entry id: lowercase, digits and hyphens, 3–48 characters. */
|
||||
export const LIBRARY_ID_PATTERN = /^[a-z0-9][a-z0-9-]{2,47}$/;
|
||||
export const LIBRARY_LAYER_PREFIX = 'lib-';
|
||||
|
||||
/** The manager id a library entry's layer registers under. */
|
||||
export function libraryLayerId(entryId) {
|
||||
return `${LIBRARY_LAYER_PREFIX}${entryId}`;
|
||||
}
|
||||
|
||||
/** The entry id behind a library layer id, or null. */
|
||||
export function libraryEntryIdOf(layerId) {
|
||||
if (typeof layerId !== 'string' || !layerId.startsWith(LIBRARY_LAYER_PREFIX))
|
||||
return null;
|
||||
const id = layerId.slice(LIBRARY_LAYER_PREFIX.length);
|
||||
return LIBRARY_ID_PATTERN.test(id) ? id : null;
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
import { cancelCameraArrival } from './cameraArrival.js';
|
||||
import { libraryEntryIdOf } from '../library/manifest.js';
|
||||
import { libraryEntryIdOf } from './libraryLayerIds.js';
|
||||
|
||||
function cloneLayerParams(value) {
|
||||
if (Array.isArray(value)) return value.map(cloneLayerParams);
|
||||
|
||||
+13
-14
@@ -10,6 +10,12 @@
|
||||
* this module, so it loads no catalogs and touches no DOM. See
|
||||
* docs/DATA-LIBRARY.md for the authoring guide.
|
||||
*/
|
||||
import {
|
||||
LIBRARY_ID_PATTERN,
|
||||
LIBRARY_LAYER_PREFIX,
|
||||
libraryEntryIdOf,
|
||||
libraryLayerId,
|
||||
} from '../data/libraryLayerIds.js';
|
||||
|
||||
/** The three entry kinds this build renders. */
|
||||
export const LIBRARY_KINDS = Object.freeze(['dataset', 'tiles', 'pack']);
|
||||
@@ -88,8 +94,6 @@ export const LIBRARY_FAMILIES = Object.freeze([
|
||||
/** Host layers a `pack` entry may extend, with the env switch grammar. */
|
||||
export const PACK_HOSTS = Object.freeze(['cctv']);
|
||||
|
||||
export const LIBRARY_ID_PATTERN = /^[a-z0-9][a-z0-9-]{2,47}$/;
|
||||
export const LIBRARY_LAYER_PREFIX = 'lib-';
|
||||
export const DEFAULT_CACHE_SECONDS = 3600;
|
||||
export const MIN_CACHE_SECONDS = 60;
|
||||
export const MAX_CACHE_SECONDS = 86_400;
|
||||
@@ -742,18 +746,13 @@ export function validateLibraryCatalog(manifests) {
|
||||
return { ok: errors.length === 0, errors, entries };
|
||||
}
|
||||
|
||||
/** The manager id a library entry's layer registers under. */
|
||||
export function libraryLayerId(entryId) {
|
||||
return `${LIBRARY_LAYER_PREFIX}${entryId}`;
|
||||
}
|
||||
|
||||
/** The entry id behind a library layer id, or null. */
|
||||
export function libraryEntryIdOf(layerId) {
|
||||
if (typeof layerId !== 'string' || !layerId.startsWith(LIBRARY_LAYER_PREFIX))
|
||||
return null;
|
||||
const id = layerId.slice(LIBRARY_LAYER_PREFIX.length);
|
||||
return LIBRARY_ID_PATTERN.test(id) ? id : null;
|
||||
}
|
||||
// The layer namespace belongs to the layer lifecycle; the library reads it.
|
||||
export {
|
||||
LIBRARY_ID_PATTERN,
|
||||
LIBRARY_LAYER_PREFIX,
|
||||
libraryEntryIdOf,
|
||||
libraryLayerId,
|
||||
};
|
||||
|
||||
/**
|
||||
* Whether the operator switched an opt-in entry on. `GEV_LIBRARY_ENABLE`
|
||||
|
||||
Reference in new issue
Block a user