@tileflow/dev 0.1.0-alpha.25 → 0.1.0-alpha.27
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/README.md +16 -5
- package/THIRD_PARTY_NOTICES.md +27 -9
- package/dist/artifacts.d.ts +32 -5
- package/dist/artifacts.js +4 -2
- package/dist/{chunk-MKPSQSMX.js → chunk-73YPFDPC.js} +1 -1
- package/dist/{chunk-D2QWYYIF.js → chunk-EJPVUSX4.js} +242 -22
- package/dist/{chunk-W3X2JXYS.js → chunk-QAMFAM3S.js} +1168 -35
- package/dist/{chunk-3WCEHA27.js → chunk-UCBGTEQV.js} +1 -1
- package/dist/{chunk-LNCTVFUD.js → chunk-XHJBCVBB.js} +6 -1
- package/dist/icons.d.ts +10 -2
- package/dist/icons.js +3 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +9 -5
- package/dist/inspect.js +2 -2
- package/dist/server.d.ts +1 -0
- package/dist/server.js +3 -3
- package/dist/validation.d.ts +2 -0
- package/dist/validation.js +1 -1
- package/docs/bounded-vector-feature-inspection.md +4 -4
- package/docs/local-comparison-workbench-and-compiler-inspection.md +4 -5
- package/docs/native-artifacts.md +258 -0
- package/docs/native-icons.md +129 -0
- package/package.json +3 -3
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
import { realpathSync } from "fs";
|
|
7
7
|
import { isAbsolute, relative, resolve, sep, win32 } from "path";
|
|
8
8
|
import { compareCodeUnits } from "@tileflow/core";
|
|
9
|
+
import { TileflowNativeCompatibilityError } from "@tileflow/core/native-profile";
|
|
9
10
|
var tileflowCommandDocumentSchemaVersion = 1;
|
|
10
11
|
function createTileflowCommandSummary(input) {
|
|
11
12
|
return {
|
|
@@ -21,6 +22,9 @@ function createTileflowCommandSummary(input) {
|
|
|
21
22
|
};
|
|
22
23
|
}
|
|
23
24
|
function createTileflowStructuredDiagnostics(error, cwd, defaults) {
|
|
25
|
+
if (error instanceof TileflowNativeCompatibilityError) {
|
|
26
|
+
return error.issues.map((issue) => ({ ...issue }));
|
|
27
|
+
}
|
|
24
28
|
const inheritedCode = optionalField(error, "code");
|
|
25
29
|
const inheritedDomain = optionalField(error, "domain") ?? optionalField(error, "owner") ?? optionalNestedField(error, "domain") ?? optionalNestedField(error, "owner");
|
|
26
30
|
const inheritedLevel = optionalField(error, "level") ?? optionalNestedField(error, "level");
|
|
@@ -85,7 +89,8 @@ function createTileflowCommandFailureDocument(command, error, cwd, defaults) {
|
|
|
85
89
|
severity: primary.severity,
|
|
86
90
|
message: primary.message,
|
|
87
91
|
suggestion: primary.suggestion,
|
|
88
|
-
diagnostics
|
|
92
|
+
diagnostics,
|
|
93
|
+
...primary.renderer ? { renderer: primary.renderer, profile: primary.profile } : {}
|
|
89
94
|
};
|
|
90
95
|
}
|
|
91
96
|
function serializeTileflowCommandDocument(value) {
|
package/dist/icons.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TileflowIconSetPin, TileflowIconSource, TileflowIconsLockfileV1, TileflowIconCompositionV1, TileflowIconPackageFileName, TileflowIconPackageManifest, TileflowIconDirectory } from '@tileflow/core';
|
|
1
|
+
import { TileflowIconAppearance, TileflowIconLayoutMetadata, TileflowIconSetPin, TileflowIconSpriteIndex, TileflowIconSource, TileflowIconsLockfileV1, TileflowIconCompositionV1, TileflowIconPackageFileName, TileflowIconPackageManifest, TileflowIconDirectory } from '@tileflow/core';
|
|
2
2
|
import { TileflowEffectiveIconSourceIdentity, TileflowBuildCatalog, TileflowPreparedMapAssets } from '@tileflow/core/build';
|
|
3
3
|
|
|
4
4
|
type TileflowRenderedIconCell = {
|
|
@@ -8,6 +8,8 @@ type TileflowRenderedIconCell = {
|
|
|
8
8
|
};
|
|
9
9
|
type TileflowRenderedIcon = {
|
|
10
10
|
id: string;
|
|
11
|
+
appearance?: TileflowIconAppearance;
|
|
12
|
+
layout?: TileflowIconLayoutMetadata;
|
|
11
13
|
oneX: TileflowRenderedIconCell;
|
|
12
14
|
twoX: TileflowRenderedIconCell;
|
|
13
15
|
};
|
|
@@ -36,6 +38,9 @@ declare function loadTileflowIconSetArtifact(input: TileflowIconSetPin, options?
|
|
|
36
38
|
/** Seed or repair a disposable cache using verified generated bytes, never original artwork. */
|
|
37
39
|
declare function storeTileflowIconSetArtifact(input: TileflowIconSetPin, artifact: CompiledTileflowIconPackage, options?: Pick<TileflowIconCacheOptions, 'cacheRoot'>): Promise<VerifiedTileflowIconArtifact>;
|
|
38
40
|
|
|
41
|
+
/** Render a report image without changing the immutable generated sprite. */
|
|
42
|
+
declare function renderTileflowIconAtlasPreview(source: Uint8Array, index: TileflowIconSpriteIndex): Promise<Uint8Array>;
|
|
43
|
+
|
|
39
44
|
/**
|
|
40
45
|
* Read the exact current lock bytes for a compare-and-swap update.
|
|
41
46
|
*
|
|
@@ -150,6 +155,7 @@ type CompiledTileflowIconPackage = {
|
|
|
150
155
|
manifest: TileflowIconPackageManifest;
|
|
151
156
|
};
|
|
152
157
|
type TileflowMapIconPackageBinding = {
|
|
158
|
+
appearances?: Record<string, TileflowIconAppearance>;
|
|
153
159
|
iconIds: readonly string[];
|
|
154
160
|
label: string;
|
|
155
161
|
mapName: string;
|
|
@@ -210,6 +216,8 @@ type TileflowIconCatalogIconSource = {
|
|
|
210
216
|
version: number;
|
|
211
217
|
};
|
|
212
218
|
type TileflowIconCatalogIcon = {
|
|
219
|
+
appearance?: TileflowIconAppearance;
|
|
220
|
+
layout?: TileflowIconLayoutMetadata;
|
|
213
221
|
id: string;
|
|
214
222
|
rendered: {
|
|
215
223
|
oneX: TileflowIconCatalogRenderedDensity;
|
|
@@ -326,4 +334,4 @@ declare function readTileflowIconDirectory(source: TileflowIconDirectory, option
|
|
|
326
334
|
target: TileflowIconCompilationTarget;
|
|
327
335
|
}): Promise<ReadTileflowIconDirectoryResult>;
|
|
328
336
|
|
|
329
|
-
export { type CompileTileflowIconPackagesOptions, type CompileTileflowIconPackagesResult, type CompiledTileflowIconPackage, type CompiledTileflowIconPackageFile, type ComposeTileflowIconSourcesOptions, type InspectTileflowIconCatalogsOptions, type PreparedTileflowBuildCatalog, type PreparedTileflowCatalog, type ReadTileflowIconDirectoryResult, type TileflowBuildAsset, type TileflowComposedIconContributor, type TileflowComposedIconSources, type TileflowComposedIconWinner, type TileflowIconCacheOptions, type TileflowIconCatalog, type TileflowIconCatalogAtlasRectangle, type TileflowIconCatalogContributor, type TileflowIconCatalogIcon, type TileflowIconCatalogIconSource, type TileflowIconCatalogInspection, type TileflowIconCatalogMap, type TileflowIconCatalogRenderedDensity, type TileflowIconCatalogSourceFormat, TileflowIconCompilationError, type TileflowIconCompilationIssue, type TileflowIconCompilationTarget, type TileflowIconDirectoryEntry, type TileflowIconDirectorySourceFile, type TileflowIconReplacement, type TileflowIconResolutionOptions, type TileflowMapIconPackageBinding, type TileflowRenderedIcon, type TileflowRenderedIconCell, type TileflowSourceCatalog, type VerifiedTileflowIconArtifact, compileTileflowIconPackages, composeTileflowIconSources, getTileflowIconCacheDirectory, getTileflowIconWatchPaths, iconFileExtensions, inspectTileflowIconCatalogs, loadTileflowIconSetArtifact, packTileflowRenderedIcons, prepareTileflowCatalogIcons, readTileflowIconDirectory, readTileflowIconsLockfile, readTileflowIconsLockfileText, storeTileflowIconSetArtifact, verifyTileflowIconArtifact, writeTileflowIconsLockfile };
|
|
337
|
+
export { type CompileTileflowIconPackagesOptions, type CompileTileflowIconPackagesResult, type CompiledTileflowIconPackage, type CompiledTileflowIconPackageFile, type ComposeTileflowIconSourcesOptions, type InspectTileflowIconCatalogsOptions, type PreparedTileflowBuildCatalog, type PreparedTileflowCatalog, type ReadTileflowIconDirectoryResult, type TileflowBuildAsset, type TileflowComposedIconContributor, type TileflowComposedIconSources, type TileflowComposedIconWinner, type TileflowIconCacheOptions, type TileflowIconCatalog, type TileflowIconCatalogAtlasRectangle, type TileflowIconCatalogContributor, type TileflowIconCatalogIcon, type TileflowIconCatalogIconSource, type TileflowIconCatalogInspection, type TileflowIconCatalogMap, type TileflowIconCatalogRenderedDensity, type TileflowIconCatalogSourceFormat, TileflowIconCompilationError, type TileflowIconCompilationIssue, type TileflowIconCompilationTarget, type TileflowIconDirectoryEntry, type TileflowIconDirectorySourceFile, type TileflowIconReplacement, type TileflowIconResolutionOptions, type TileflowMapIconPackageBinding, type TileflowRenderedIcon, type TileflowRenderedIconCell, type TileflowSourceCatalog, type VerifiedTileflowIconArtifact, compileTileflowIconPackages, composeTileflowIconSources, getTileflowIconCacheDirectory, getTileflowIconWatchPaths, iconFileExtensions, inspectTileflowIconCatalogs, loadTileflowIconSetArtifact, packTileflowRenderedIcons, prepareTileflowCatalogIcons, readTileflowIconDirectory, readTileflowIconsLockfile, readTileflowIconsLockfileText, renderTileflowIconAtlasPreview, storeTileflowIconSetArtifact, verifyTileflowIconArtifact, writeTileflowIconsLockfile };
|
package/dist/icons.js
CHANGED
|
@@ -12,10 +12,11 @@ import {
|
|
|
12
12
|
readTileflowIconDirectory,
|
|
13
13
|
readTileflowIconsLockfile,
|
|
14
14
|
readTileflowIconsLockfileText,
|
|
15
|
+
renderTileflowIconAtlasPreview,
|
|
15
16
|
storeTileflowIconSetArtifact,
|
|
16
17
|
verifyTileflowIconArtifact,
|
|
17
18
|
writeTileflowIconsLockfile
|
|
18
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-EJPVUSX4.js";
|
|
19
20
|
import "./chunk-7C4F6GAX.js";
|
|
20
21
|
export {
|
|
21
22
|
TileflowIconCompilationError,
|
|
@@ -31,6 +32,7 @@ export {
|
|
|
31
32
|
readTileflowIconDirectory,
|
|
32
33
|
readTileflowIconsLockfile,
|
|
33
34
|
readTileflowIconsLockfileText,
|
|
35
|
+
renderTileflowIconAtlasPreview,
|
|
34
36
|
storeTileflowIconSetArtifact,
|
|
35
37
|
verifyTileflowIconArtifact,
|
|
36
38
|
writeTileflowIconsLockfile
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { CreateTileflowArtifactPlanOptions, TileflowArtifactAcquisition, TileflowArtifactDiagnostic, TileflowArtifactFile, TileflowArtifactInputGraph, TileflowArtifactPlan, TileflowArtifactSession, TileflowArtifactSessionOptions, TileflowArtifactSessionState, TileflowBuildArtifacts, TileflowBuildArtifactsOptions, TileflowBuildStyleInspections, TileflowHostedManifestOverwriteError, TileflowLocalTilesetFile, TileflowLocalTilesetProductionError, TileflowManifestOptions, WriteTileflowArtifactPlanOptions, WriteTileflowBuildArtifactsOptions, assertNoLocalTilesetsForProduction, assertTileflowSelfHostedManifestTarget, createTileflowArtifactDiagnostics, createTileflowArtifactPlan, createTileflowArtifactSession, createTileflowBuildArtifacts, createTileflowBuildProvenance, createTileflowManifest, createTileflowStyle, createTileflowStyles, disposeTileflowBuildArtifacts, getTileflowArtifactFiles, getTileflowAssetBasePath, getTileflowAssetFileName, getTileflowWatchPaths, isTileflowArtifactInputPath, joinTileflowPublicUrl, normalizeTileflowBasePath, prepareTileflowLocalTilesets, refreshTileflowArtifactSession, resolveTileflowArtifactPublicUrls, tileflowArtifactInventoryFileName, tileflowArtifactPlanSchemaVersion, tileflowArtifactSessionSchemaVersion, writeTileflowArtifactPlan, writeTileflowBuildArtifacts } from './artifacts.js';
|
|
1
|
+
export { CreateTileflowArtifactPlanOptions, TileflowArtifactAcquisition, TileflowArtifactDiagnostic, TileflowArtifactFile, TileflowArtifactInputGraph, TileflowArtifactPlan, TileflowArtifactSession, TileflowArtifactSessionOptions, TileflowArtifactSessionState, TileflowBuildArtifacts, TileflowBuildArtifactsOptions, TileflowBuildStyleInspections, TileflowHostedManifestOverwriteError, TileflowLocalTilesetFile, TileflowLocalTilesetProductionError, TileflowManifestOptions, WriteTileflowArtifactPlanOptions, WriteTileflowBuildArtifactsOptions, assertNoLocalTilesetsForProduction, assertTileflowSelfHostedManifestTarget, createTileflowArtifactDiagnostics, createTileflowArtifactPlan, createTileflowArtifactSession, createTileflowBuildArtifacts, createTileflowBuildProvenance, createTileflowManifest, createTileflowStyle, createTileflowStyles, disposeTileflowBuildArtifacts, getTileflowArtifactFiles, getTileflowAssetBasePath, getTileflowAssetFileName, getTileflowWatchPaths, isTileflowArtifactInputPath, joinTileflowPublicUrl, normalizeTileflowBasePath, prepareTileflowHostedNativeDeployment, prepareTileflowLocalTilesets, refreshTileflowArtifactSession, resolveTileflowArtifactPublicUrls, tileflowArtifactInventoryFileName, tileflowArtifactPlanSchemaVersion, tileflowArtifactSessionSchemaVersion, writeTileflowArtifactPlan, writeTileflowBuildArtifacts } from './artifacts.js';
|
|
2
2
|
export { LoadTileflowConfigOptions, LoadedTileflowConfig, TileflowValidationError, assertValidTileflowConfig, defaultTileflowApiUrl, defaultTileflowConfigPath, defaultTileflowManifestPath, getFirstTileflowMapName, getTileflowMapNames, loadTileflowConfig, loadTileflowConfigWithInputs, loadValidTileflowConfig, loadValidTileflowConfigWithInputs } from './config.js';
|
|
3
3
|
export { CompiledTileflowFontBundle, PrepareTileflowStyleFontsOptions, PreparedTileflowStyleFonts, TileflowFontCompilationError, TileflowFontCompilationIssue, TileflowFontCompilationTarget, bindTileflowStyleFontBundle, getTileflowFontWatchPaths, prepareTileflowStyleFonts, replaceTileflowStyleFontSources } from './fonts.js';
|
|
4
|
-
export { CompileTileflowIconPackagesOptions, CompileTileflowIconPackagesResult, CompiledTileflowIconPackage, CompiledTileflowIconPackageFile, ComposeTileflowIconSourcesOptions, InspectTileflowIconCatalogsOptions, PreparedTileflowBuildCatalog, PreparedTileflowCatalog, ReadTileflowIconDirectoryResult, TileflowBuildAsset, TileflowComposedIconContributor, TileflowComposedIconSources, TileflowComposedIconWinner, TileflowIconCacheOptions, TileflowIconCatalog, TileflowIconCatalogAtlasRectangle, TileflowIconCatalogContributor, TileflowIconCatalogIcon, TileflowIconCatalogIconSource, TileflowIconCatalogInspection, TileflowIconCatalogMap, TileflowIconCatalogRenderedDensity, TileflowIconCatalogSourceFormat, TileflowIconCompilationError, TileflowIconCompilationIssue, TileflowIconCompilationTarget, TileflowIconDirectoryEntry, TileflowIconDirectorySourceFile, TileflowIconReplacement, TileflowIconResolutionOptions, TileflowMapIconPackageBinding, TileflowRenderedIcon, TileflowRenderedIconCell, TileflowSourceCatalog, VerifiedTileflowIconArtifact, compileTileflowIconPackages, composeTileflowIconSources, getTileflowIconCacheDirectory, getTileflowIconWatchPaths, iconFileExtensions, inspectTileflowIconCatalogs, loadTileflowIconSetArtifact, packTileflowRenderedIcons, prepareTileflowCatalogIcons, readTileflowIconDirectory, readTileflowIconsLockfile, readTileflowIconsLockfileText, storeTileflowIconSetArtifact, verifyTileflowIconArtifact, writeTileflowIconsLockfile } from './icons.js';
|
|
4
|
+
export { CompileTileflowIconPackagesOptions, CompileTileflowIconPackagesResult, CompiledTileflowIconPackage, CompiledTileflowIconPackageFile, ComposeTileflowIconSourcesOptions, InspectTileflowIconCatalogsOptions, PreparedTileflowBuildCatalog, PreparedTileflowCatalog, ReadTileflowIconDirectoryResult, TileflowBuildAsset, TileflowComposedIconContributor, TileflowComposedIconSources, TileflowComposedIconWinner, TileflowIconCacheOptions, TileflowIconCatalog, TileflowIconCatalogAtlasRectangle, TileflowIconCatalogContributor, TileflowIconCatalogIcon, TileflowIconCatalogIconSource, TileflowIconCatalogInspection, TileflowIconCatalogMap, TileflowIconCatalogRenderedDensity, TileflowIconCatalogSourceFormat, TileflowIconCompilationError, TileflowIconCompilationIssue, TileflowIconCompilationTarget, TileflowIconDirectoryEntry, TileflowIconDirectorySourceFile, TileflowIconReplacement, TileflowIconResolutionOptions, TileflowMapIconPackageBinding, TileflowRenderedIcon, TileflowRenderedIconCell, TileflowSourceCatalog, VerifiedTileflowIconArtifact, compileTileflowIconPackages, composeTileflowIconSources, getTileflowIconCacheDirectory, getTileflowIconWatchPaths, iconFileExtensions, inspectTileflowIconCatalogs, loadTileflowIconSetArtifact, packTileflowRenderedIcons, prepareTileflowCatalogIcons, readTileflowIconDirectory, readTileflowIconsLockfile, readTileflowIconsLockfileText, renderTileflowIconAtlasPreview, storeTileflowIconSetArtifact, verifyTileflowIconArtifact, writeTileflowIconsLockfile } from './icons.js';
|
|
5
5
|
export { TileflowConfigInspection, TileflowConfigInspectionError, TileflowConfigInspectionOptions, TileflowFeatureInspection, TileflowFeatureInspectionOptions, TileflowInspectedFeature, TileflowInspectedProperty, TileflowMapLineageInspection, TileflowMapMergeProvenance, TileflowResolvedMapInspection, TileflowThemeContractInspection, TileflowThemeDifferenceInspection, TileflowThemeInspection, inspectLoadedTileflowConfig, inspectTileflowConfig, inspectTileflowFeatures, sanitizeTileflowInspectableValue } from './inspect.js';
|
|
6
6
|
export { ResolvedTileflowPreview, TileflowLandmark, TileflowLandmarkArchive, TileflowLandmarkAxisConvention, TileflowLandmarkManifestV2, TileflowLandmarkModel, TileflowPreviewSelection, TileflowPreviewSelectionError, normalizeTileflowLandmarkManifest, readBoundedTileflowJsonResponse, readBoundedTileflowResponse, renderTileflowPreviewHtml, resolveTileflowPreview } from './preview.js';
|
|
7
7
|
export { TileflowComparisonMode, TileflowComparisonOptions, TileflowComparisonRequestHandler, TileflowComparisonSide, TileflowDevRequestHandler, TileflowDevRequestHandlerOptions, createTileflowArtifactStatus, createTileflowComparisonRequestHandler, createTileflowDevRequestHandler, createTileflowNodeRequest, getTileflowRequestPath, getTileflowStyleInspectionSelection, getTileflowStyleSelection, isTileflowRequestUrl, tileflowComparisonSchemaVersion, writeTileflowNodeResponse } from './server.js';
|
|
@@ -10,4 +10,5 @@ export { TileflowCommandFailureDocument, TileflowCommandSummary, TileflowDiagnos
|
|
|
10
10
|
import '@tileflow/core';
|
|
11
11
|
import '@tileflow/core/build';
|
|
12
12
|
import '@tileflow/core/manifest';
|
|
13
|
+
import '@tileflow/core/native-profile';
|
|
13
14
|
import 'node:http';
|
package/dist/index.js
CHANGED
|
@@ -4,14 +4,14 @@ import {
|
|
|
4
4
|
inspectTileflowConfig,
|
|
5
5
|
inspectTileflowFeatures,
|
|
6
6
|
sanitizeTileflowInspectableValue
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-73YPFDPC.js";
|
|
8
8
|
import {
|
|
9
9
|
createTileflowCommandFailureDocument,
|
|
10
10
|
createTileflowCommandSummary,
|
|
11
11
|
createTileflowStructuredDiagnostics,
|
|
12
12
|
serializeTileflowCommandDocument,
|
|
13
13
|
tileflowCommandDocumentSchemaVersion
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-XHJBCVBB.js";
|
|
15
15
|
import {
|
|
16
16
|
TileflowPreviewSelectionError,
|
|
17
17
|
normalizeTileflowLandmarkManifest,
|
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
isTileflowRequestUrl,
|
|
32
32
|
tileflowComparisonSchemaVersion,
|
|
33
33
|
writeTileflowNodeResponse
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-UCBGTEQV.js";
|
|
35
35
|
import {
|
|
36
36
|
TileflowHostedManifestOverwriteError,
|
|
37
37
|
TileflowLocalTilesetProductionError,
|
|
@@ -49,6 +49,7 @@ import {
|
|
|
49
49
|
getTileflowArtifactFiles,
|
|
50
50
|
getTileflowWatchPaths,
|
|
51
51
|
isTileflowArtifactInputPath,
|
|
52
|
+
prepareTileflowHostedNativeDeployment,
|
|
52
53
|
prepareTileflowLocalTilesets,
|
|
53
54
|
refreshTileflowArtifactSession,
|
|
54
55
|
tileflowArtifactInventoryFileName,
|
|
@@ -56,7 +57,7 @@ import {
|
|
|
56
57
|
tileflowArtifactSessionSchemaVersion,
|
|
57
58
|
writeTileflowArtifactPlan,
|
|
58
59
|
writeTileflowBuildArtifacts
|
|
59
|
-
} from "./chunk-
|
|
60
|
+
} from "./chunk-QAMFAM3S.js";
|
|
60
61
|
import {
|
|
61
62
|
inspectTileflowPmtiles,
|
|
62
63
|
inspectTileflowPmtilesForLocalUse
|
|
@@ -87,10 +88,11 @@ import {
|
|
|
87
88
|
readTileflowIconDirectory,
|
|
88
89
|
readTileflowIconsLockfile,
|
|
89
90
|
readTileflowIconsLockfileText,
|
|
91
|
+
renderTileflowIconAtlasPreview,
|
|
90
92
|
storeTileflowIconSetArtifact,
|
|
91
93
|
verifyTileflowIconArtifact,
|
|
92
94
|
writeTileflowIconsLockfile
|
|
93
|
-
} from "./chunk-
|
|
95
|
+
} from "./chunk-EJPVUSX4.js";
|
|
94
96
|
import "./chunk-7C4F6GAX.js";
|
|
95
97
|
import {
|
|
96
98
|
TileflowStyleValidationError,
|
|
@@ -178,6 +180,7 @@ export {
|
|
|
178
180
|
normalizeTileflowLandmarkManifest,
|
|
179
181
|
packTileflowRenderedIcons,
|
|
180
182
|
prepareTileflowCatalogIcons,
|
|
183
|
+
prepareTileflowHostedNativeDeployment,
|
|
181
184
|
prepareTileflowLocalTilesets,
|
|
182
185
|
prepareTileflowStyleFonts,
|
|
183
186
|
readBoundedTileflowJsonResponse,
|
|
@@ -186,6 +189,7 @@ export {
|
|
|
186
189
|
readTileflowIconsLockfile,
|
|
187
190
|
readTileflowIconsLockfileText,
|
|
188
191
|
refreshTileflowArtifactSession,
|
|
192
|
+
renderTileflowIconAtlasPreview,
|
|
189
193
|
renderTileflowPreviewHtml,
|
|
190
194
|
replaceTileflowStyleFontSources,
|
|
191
195
|
resolveTileflowArtifactPublicUrls,
|
package/dist/inspect.js
CHANGED
|
@@ -4,8 +4,8 @@ import {
|
|
|
4
4
|
inspectTileflowConfig,
|
|
5
5
|
inspectTileflowFeatures,
|
|
6
6
|
sanitizeTileflowInspectableValue
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-73YPFDPC.js";
|
|
8
|
+
import "./chunk-XHJBCVBB.js";
|
|
9
9
|
import "./chunk-KDFTE4Q5.js";
|
|
10
10
|
import "./chunk-6MGFMKG3.js";
|
|
11
11
|
import "./chunk-D4OE4ITL.js";
|
package/dist/server.d.ts
CHANGED
package/dist/server.js
CHANGED
|
@@ -9,11 +9,11 @@ import {
|
|
|
9
9
|
isTileflowRequestUrl,
|
|
10
10
|
tileflowComparisonSchemaVersion,
|
|
11
11
|
writeTileflowNodeResponse
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-UCBGTEQV.js";
|
|
13
13
|
import {
|
|
14
14
|
createTileflowArtifactDiagnostics,
|
|
15
15
|
tileflowArtifactSessionSchemaVersion
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-QAMFAM3S.js";
|
|
17
17
|
import "./chunk-ONYQNLNA.js";
|
|
18
18
|
import {
|
|
19
19
|
getTileflowAssetBasePath,
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
normalizeTileflowBasePath,
|
|
23
23
|
resolveTileflowArtifactPublicUrls
|
|
24
24
|
} from "./chunk-UTRO4IBQ.js";
|
|
25
|
-
import "./chunk-
|
|
25
|
+
import "./chunk-EJPVUSX4.js";
|
|
26
26
|
import "./chunk-7C4F6GAX.js";
|
|
27
27
|
import "./chunk-KDFTE4Q5.js";
|
|
28
28
|
import "./chunk-6MGFMKG3.js";
|
package/dist/validation.d.ts
CHANGED
|
@@ -30,6 +30,8 @@ type TileflowStructuredDiagnostic = {
|
|
|
30
30
|
severity: TileflowDiagnosticSeverity;
|
|
31
31
|
message: string;
|
|
32
32
|
suggestion: string;
|
|
33
|
+
renderer?: 'native';
|
|
34
|
+
profile?: 'native-v1';
|
|
33
35
|
};
|
|
34
36
|
type TileflowCommandSummary = TileflowStructuredDiagnostic & {
|
|
35
37
|
schemaVersion: typeof tileflowCommandDocumentSchemaVersion;
|
package/dist/validation.js
CHANGED
|
@@ -41,14 +41,14 @@ const result = await compileTileflowIconPackages(internalCatalog, {
|
|
|
41
41
|
|
|
42
42
|
Streets declares `[streetsIcons]` and keeps light/dark image-token targets in that one closure;
|
|
43
43
|
Cyberpunk and Matrix independently declare `[cyberpunkIcons]` and `[matrixIcons]`. Baedeker,
|
|
44
|
-
Ferraris, Härad, Siegfried, Soundings,
|
|
45
|
-
`[ferrarisIcons]`, `[haradIcons]`, `[siegfriedIcons]`, `[soundingsIcons]`,
|
|
46
|
-
`[
|
|
44
|
+
Ferraris, Härad, Siegfried, Soundings, and Blueprint declare only `[baedekerIcons]`,
|
|
45
|
+
`[ferrarisIcons]`, `[haradIcons]`, `[siegfriedIcons]`, `[soundingsIcons]`, and
|
|
46
|
+
`[blueprintIcons]`, respectively. No official root composes another map's assets even though all
|
|
47
47
|
use the semantic compiler ABI. Baedeker's directory contains eight original travel-atlas patterns;
|
|
48
48
|
its browser-derived Mapterhorn contours use runtime terrain tiles and are not part of the icon
|
|
49
49
|
package. Härad's directory contains nine original Tileflow patterns inspired by Lantmäteriet's CC0
|
|
50
50
|
Häradsekonomiska kartan series from 1859–1934. Soundings owns ten original nautical symbols and
|
|
51
|
-
patterns.
|
|
51
|
+
patterns. Blueprint owns four technical blueprint patterns and one schematic POI node; its
|
|
52
52
|
unbundled Mapterhorn contours remain runtime terrain, and its text uses the canonical Noto Sans
|
|
53
53
|
glyph provider. An application map may inherit a root's exact array, replace it, clear it with `[]`,
|
|
54
54
|
or compose it explicitly with a spread.
|
|
@@ -235,11 +235,10 @@ export default defineMap({
|
|
|
235
235
|
Directories apply left to right. `<id>.<ext>` publishes an icon as `<id>`;
|
|
236
236
|
`<id>.pattern.<ext>` publishes the intrinsic-size pattern as `<id>`. The published ID must already
|
|
237
237
|
be canonical lower-kebab-case. A later file replaces an earlier file only for the same exact ID;
|
|
238
|
-
case-only collisions fail. Package maps export `streetsIcons`, `baedekerIcons`, `
|
|
239
|
-
`haradIcons`, `siegfriedIcons`, `soundingsIcons`, `
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
`siegfriedFonts`. Preparation
|
|
238
|
+
case-only collisions fail. Package maps export `streetsIcons`, `baedekerIcons`, `civicaIcons`,
|
|
239
|
+
`ferrarisIcons`, `haradIcons`, `siegfriedIcons`, `soundingsIcons`, `blueprintIcons` directory descriptors from
|
|
240
|
+
`@tileflow/maps`. Baedeker, Cívica, and Siegfried also export
|
|
241
|
+
`baedekerFonts`, `civicaFonts`, and `siegfriedFonts`. Preparation
|
|
243
242
|
resolves package descriptors inside their owning package, checks real-path containment, and
|
|
244
243
|
compiles them through the same pipeline as a config-relative directory. There are no
|
|
245
244
|
built-in/source/sprite selectors, mappings, icon-specific inheritance, or compatibility aliases.
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
# Prepare native map artifacts
|
|
2
|
+
|
|
3
|
+
Use the existing artifact pipeline with `renderer: 'native'` to prepare the `native-v1` static
|
|
4
|
+
profile. The same config loader, inheritance resolver, semantic compiler, icon composition and
|
|
5
|
+
font pipeline are used. There is no separate native map language.
|
|
6
|
+
|
|
7
|
+
Install the packages and create a trusted `tileflow.config.ts` as described in the
|
|
8
|
+
[package README](../README.md). The source version containing this option must be installed;
|
|
9
|
+
a source branch or a successful build does not establish npm availability.
|
|
10
|
+
|
|
11
|
+
## Prepare in memory
|
|
12
|
+
|
|
13
|
+
<!-- docs:check -->
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import {createTileflowBuildArtifacts} from '@tileflow/dev/artifacts';
|
|
17
|
+
|
|
18
|
+
const artifacts = await createTileflowBuildArtifacts({
|
|
19
|
+
config: 'tileflow.config.ts',
|
|
20
|
+
renderer: 'native',
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
try {
|
|
24
|
+
console.log(artifacts.manifest);
|
|
25
|
+
console.log(artifacts.nativeBuild);
|
|
26
|
+
} finally {
|
|
27
|
+
await artifacts.dispose?.();
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
The pipeline checks every concrete theme. A rejected theme fails the complete generation before
|
|
32
|
+
production output is written. Native preparation applies the versioned transformations below;
|
|
33
|
+
other unsupported layers, fonts or protocols are not silently removed.
|
|
34
|
+
Local PMTiles are rejected before creating archive snapshots. URL checks do not fetch remote
|
|
35
|
+
TileJSON, glyphs or tiles and do not prove their content or availability.
|
|
36
|
+
|
|
37
|
+
Font preparation verifies the same licensed source bytes as web preparation, then maps exact full
|
|
38
|
+
names into Native's `font-faces` root property. It does not retain browser `tileflow:fontFaces`
|
|
39
|
+
metadata or claim a system font is equivalent. Sprites keep the original independently generated
|
|
40
|
+
1x and 2x bytes; the native check verifies their pair, dimensions, IDs and existing size limits.
|
|
41
|
+
|
|
42
|
+
## Versioned native lowering
|
|
43
|
+
|
|
44
|
+
Selecting `renderer: 'native'` applies `native-lowering-v1` after shared semantic compilation and
|
|
45
|
+
before final native validation. It never edits the authored map, the official map definitions or
|
|
46
|
+
the shared compiler. Web output is not lowered.
|
|
47
|
+
|
|
48
|
+
A fixed `projection: {type: 'globe'}` is explicitly normalized to Native's implicit Mercator. This
|
|
49
|
+
is a renderer-specific projection change, not equivalent globe rendering. An explicit fixed
|
|
50
|
+
Mercator declaration is also omitted. Adaptive/expression projections and unknown projection
|
|
51
|
+
options remain errors. Every style receipt states which normalization, if any, occurred.
|
|
52
|
+
|
|
53
|
+
For line layers, finite `line-cap` and `line-dasharray` decisions become contiguous physical layers
|
|
54
|
+
with constant values. Supported trees use constant leaves, `literal`, first-match `case`, disjoint
|
|
55
|
+
`match` labels and `step`. Predicates may combine boolean operations, scalar equality, membership,
|
|
56
|
+
`has`, geometry type and typed numeric comparisons/steps. Unchecked feature values are restricted
|
|
57
|
+
to vector sources, whose properties are scalar. Numeric coercion requires an explicit finite
|
|
58
|
+
fallback. Arbitrary feature-valued leaves, continuous interpolation, feature state, unsupported
|
|
59
|
+
operators and any unprovable decision fail with the original property pointer.
|
|
60
|
+
|
|
61
|
+
The partition preserves first-match priority. Each feature accepted by the original filter is
|
|
62
|
+
accepted by exactly one active replacement with the same cap and dash values; all other features
|
|
63
|
+
remain excluded. Existing legacy filters are converted with the pinned Style Spec converter before
|
|
64
|
+
intersection. Source, source-layer, metadata and other layout/paint values are preserved. Existing
|
|
65
|
+
`minzoom`/`maxzoom` are intersected with the decision intervals. Both target properties use integer
|
|
66
|
+
camera-zoom evaluation, so a step at 8.5 changes its value at zoom 9, while an original fractional
|
|
67
|
+
layer visibility bound remains fractional. New branch filters contain no camera-zoom expression.
|
|
68
|
+
|
|
69
|
+
Grouped outcomes use compact boolean decision trees rather than repeated lists of every earlier
|
|
70
|
+
arm's negated guard. Multi-arm cases remain flat to avoid trading size for excessive depth.
|
|
71
|
+
Identical outcomes and adjacent identical intervals are coalesced. IDs derive from the original
|
|
72
|
+
layer ID, the lowering version and deterministic branch order, with collision checks against the
|
|
73
|
+
whole input style. The original layer's replacements stay together; surrounding layers are not
|
|
74
|
+
reordered. Existing sort-key expressions are retained, not simplified or replaced.
|
|
75
|
+
|
|
76
|
+
Work is bounded per property by depth 16, 512 decision visits, 64 decision paths, 16 distinct
|
|
77
|
+
outcomes and 64 dash elements; the product is limited to 32 physical layers and 32 zoom intervals
|
|
78
|
+
per logical layer. Raw compiler input must fit 160,000 JSON nodes before any lowering. Its expanded
|
|
79
|
+
native representation has a separate fixed 540,000-node ceiling, checked after lowering, after
|
|
80
|
+
font preparation and after generation URL retargeting. Both stages retain 4,096 layers, depth 64
|
|
81
|
+
and 8 MiB. No caller option raises either budget and no rejected input is retried under the output
|
|
82
|
+
allowance. A failure occurs before output writes and leaves the previous valid generation intact.
|
|
83
|
+
|
|
84
|
+
This is one shared authored map, not a second mobile catalog: the native-v1 representation adapts
|
|
85
|
+
only finite `line-cap`/`line-dasharray` decisions, together with its explicit fixed-projection
|
|
86
|
+
policy. Unsupported advanced expressions or other properties fail with their native diagnostic
|
|
87
|
+
and JSON Pointer; their web behavior is unchanged. The raw and prepared validators share their
|
|
88
|
+
semantic checks and bounded traversal. See the
|
|
89
|
+
[Core budget contract](https://github.com/tileflow/tileflow-sdk/blob/main/packages/core/docs/native-artifact-profile.md#input-and-prepared-style-budgets)
|
|
90
|
+
for the measured Streets sizes and the approximately 5.2% output margin.
|
|
91
|
+
|
|
92
|
+
The equivalence checks cover per-feature selection, cap/dash values and zoom ranges, **not draw
|
|
93
|
+
order across features**. Copying `line-sort-key` preserves ordering only inside each physical
|
|
94
|
+
layer. If a feature with sort key 1 enters the first branch and a feature with sort key 0 enters
|
|
95
|
+
the second, the physical layers draw them as 1 then 0 instead of 0 then 1. Both features can satisfy
|
|
96
|
+
mutually exclusive filters yet have overlapping geometry. The resulting composition can differ,
|
|
97
|
+
not merely its antialiasing. Even without a sort key, partitioning can change source feature order.
|
|
98
|
+
|
|
99
|
+
The native-lowering-v1 policy permits these bounded partitions without promising identical global
|
|
100
|
+
feature order. Applications requiring exact overlapping-feature order must not treat such an
|
|
101
|
+
artifact as order-equivalent to its web style. Automated checks establish feature selection,
|
|
102
|
+
cap/dash values, zoom ranges, determinism and resource bounds, not pixel equivalence.
|
|
103
|
+
|
|
104
|
+
A small directed iOS/Android rendering check of cap/dash/overlap is required for each accepted
|
|
105
|
+
candidate using the recipe below. Full visual qualification belongs to the general mobile release
|
|
106
|
+
gate; it is not claimed by artifact preparation. Browser capture cannot replace either native
|
|
107
|
+
check, and a few visual samples cannot prove preservation of arbitrary feature order.
|
|
108
|
+
|
|
109
|
+
## Write a separate output
|
|
110
|
+
|
|
111
|
+
<!-- docs:check -->
|
|
112
|
+
|
|
113
|
+
```ts
|
|
114
|
+
import {writeTileflowBuildArtifacts} from '@tileflow/dev/artifacts';
|
|
115
|
+
|
|
116
|
+
await writeTileflowBuildArtifacts({
|
|
117
|
+
config: 'tileflow.config.ts',
|
|
118
|
+
renderer: 'native',
|
|
119
|
+
outDir: 'public/tileflow',
|
|
120
|
+
});
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
This writes `public/tileflow/native/manifest.json`, `build-manifest.json`, `native-build.json` and
|
|
124
|
+
the complete style/asset generation beneath `public/tileflow/native`. The writer adds `native` once
|
|
125
|
+
beneath `outDir`; pass the output parent, not an already renderer-qualified directory. The native
|
|
126
|
+
subdirectory owns a separate inventory. A web build at the parent neither replaces its manifest nor
|
|
127
|
+
collects the native generation, and vice versa.
|
|
128
|
+
|
|
129
|
+
The runtime manifest remains strict version 1 with the same map/theme shape. No renderer/profile
|
|
130
|
+
field is added to it. Native font declarations live in the native styles, not a web font loader.
|
|
131
|
+
`native-build.json` is a separate strict build record that identifies the renderer, profile, selected
|
|
132
|
+
engines, `validation: 'static-artifacts'` and the canonical `build-manifest.json` SHA-256. Its
|
|
133
|
+
schema version is 2 and its `preparationVersion` is `native-lowering-v1`.
|
|
134
|
+
|
|
135
|
+
The `transformations` array is sorted uniquely by map/theme. Each entry records input and lowered
|
|
136
|
+
style SHA-256 values, input/output layer counts, projection normalization, and the input ordinal,
|
|
137
|
+
output start/count and affected properties of each changed layer. Ordinals refer to the complete
|
|
138
|
+
style layer arrays, including unchanged layers. These spans make the deterministic physical IDs
|
|
139
|
+
traceable without duplicating layer definitions in the receipt. The input hash binds shared
|
|
140
|
+
compiler output; the lowered hash precedes native font preparation and generation URL retargeting.
|
|
141
|
+
The build-manifest hash separately binds the final prepared styles and assets. All styles receive
|
|
142
|
+
an entry, including styles for which no lowering was needed. Schema v1 build records do not imply
|
|
143
|
+
this preparation policy and are not parsed as v2.
|
|
144
|
+
|
|
145
|
+
The existing logical map revision remains based on resolved cartography and source asset identity.
|
|
146
|
+
Representation changes, such as native font mapping, change the style hash rather than inventing
|
|
147
|
+
a second logical map. Transport credentials and device state never enter these artifacts.
|
|
148
|
+
|
|
149
|
+
File names in an in-memory plan remain relative to the renderer output root. Relative style/font
|
|
150
|
+
URLs remain relative to their owning documents. An explicit absolute or host-relative
|
|
151
|
+
`styleBaseUrl`/`assetBaseUrl`, such as `/tileflow`, receives the `/native` suffix. The pipeline uses
|
|
152
|
+
an inert `.invalid` document base only to check relative URL syntax; it does not publish that base
|
|
153
|
+
or infer the application's real delivery origin.
|
|
154
|
+
|
|
155
|
+
Omitting `renderer`, or specifying `renderer: 'web'`, preserves the existing web artifact bytes and
|
|
156
|
+
output layout. The native record is absent from web plans.
|
|
157
|
+
|
|
158
|
+
## Retain the last valid generation
|
|
159
|
+
|
|
160
|
+
`createTileflowArtifactSession({renderer: 'native', watch: true})` uses the existing session lifecycle.
|
|
161
|
+
An incompatible edit publishes an `invalid` state with native diagnostic context. It retains the
|
|
162
|
+
previous valid artifacts but does not publish them again as a new successful generation. Acquiring,
|
|
163
|
+
releasing and disposing a generation follow the existing [artifact lifecycle](artifact-lifecycle.md).
|
|
164
|
+
|
|
165
|
+
This is artifact watching, not a native preview server. Do not pass these artifacts to browser
|
|
166
|
+
preview/capture as evidence of a native render. Native inspection sidecars, React Native components,
|
|
167
|
+
Hermes execution, iOS/Android qualification, Hosted authorization and deployment are not supplied.
|
|
168
|
+
|
|
169
|
+
## Audit lowering size and feature order
|
|
170
|
+
|
|
171
|
+
From the SDK source root after installing and building the pinned workspace:
|
|
172
|
+
|
|
173
|
+
```sh
|
|
174
|
+
pnpm exec tsx scripts/native-lowering-audit.ts > native-lowering-audit.json
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
This diagnostic report compiles the unchanged full Streets family through the web preparation
|
|
178
|
+
path, then measures the native representation for **both** dark and light before applying output
|
|
179
|
+
budget assertions. It writes no native artifact generation and is not a compatibility verdict.
|
|
180
|
+
Each theme includes layer counts, visited JSON nodes, UTF-8 bytes and maximum depth before/after;
|
|
181
|
+
every transformed layer is listed with its ID, physical span, branch count and zoom intervals,
|
|
182
|
+
sort-key expression and paint indicators. Simultaneously active branches are marked as an
|
|
183
|
+
unproven feature-order boundary, not as a claim that their geometry is disjoint.
|
|
184
|
+
|
|
185
|
+
Subtree accounts separate copied unchanged layer payload from generated filters and input
|
|
186
|
+
cap/dash decisions. They identify whether predicate expansion or repetition of other properties
|
|
187
|
+
dominates; they are not an additive byte decomposition. The counters include array keys, matching
|
|
188
|
+
the profile's existing node convention. Retain the report with the checkout SHA. An over-budget
|
|
189
|
+
result must not be treated as a successful native build or fixed by dropping layers or weakening
|
|
190
|
+
validation. The test suite prints the two-theme size summary even when a budget assertion fails.
|
|
191
|
+
|
|
192
|
+
## Prepare Streets for a directed native check
|
|
193
|
+
|
|
194
|
+
From a source checkout, install and build the pinned workspace first. The test-only
|
|
195
|
+
`test/fixtures/native-streets.config.ts` exports the unchanged official Streets definition. It
|
|
196
|
+
exists to make artifact generation repeatable without a second compiler, custom map or native
|
|
197
|
+
harness. From the SDK root:
|
|
198
|
+
|
|
199
|
+
```sh
|
|
200
|
+
pnpm --filter @tileflow/dev exec node ../cli/dist/index.js validate \
|
|
201
|
+
--config test/fixtures/native-streets.config.ts --renderer native --target local --json
|
|
202
|
+
pnpm --filter @tileflow/dev exec node ../cli/dist/index.js build \
|
|
203
|
+
--config test/fixtures/native-streets.config.ts --renderer native --target local \
|
|
204
|
+
--out output/native-streets --json
|
|
205
|
+
pnpm exec tsx scripts/native-lowering-audit.ts > /tmp/native-lowering-audit.json
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
The output root is `packages/dev/output/native-streets/native`. It contains
|
|
209
|
+
`styles/streets/dark.json`, `styles/streets/light.json`, their shared sprite/font assets, a version-1
|
|
210
|
+
`manifest.json` and the version-2 `native-build.json` receipt. Keep the complete directory together.
|
|
211
|
+
The manifest points to the content-addressed generation; use those URLs for an actual render.
|
|
212
|
+
Do not copy only the two style files and leave their relative assets behind. Record the checkout
|
|
213
|
+
SHA, both prepared style hashes, engine versions and the resource origin used for the check.
|
|
214
|
+
The fixture and output are source-checkout tools, not a published mobile component or a baseline.
|
|
215
|
+
|
|
216
|
+
Use an existing native test application with the pinned engines and a reachable artifact origin;
|
|
217
|
+
artifact generation starts no server and requests no deployment. Load the same generated manifest
|
|
218
|
+
family independently on iOS and Android. Resolve its style URL against the manifest URL, then each
|
|
219
|
+
relative style resource against that style's URL before passing the style to MapLibre Native. A raw
|
|
220
|
+
style URL does not transfer this ownership to the renderer. The directed artifact check may use a
|
|
221
|
+
test-owned resolver, but that does not qualify a future runtime resolver. A useful starting viewport
|
|
222
|
+
is a dense road/rail junction with visible paths and bridges; select one where the loaded vector data
|
|
223
|
+
actually contains features for the transformed layers listed in
|
|
224
|
+
`/tmp/native-lowering-audit.json`. Use the audit's exact physical IDs, source layers, branch counts
|
|
225
|
+
and zoom intervals rather than assuming that a map location exercises every branch.
|
|
226
|
+
|
|
227
|
+
Check both themes at the same center, viewport, pitch 0 and bearing 0. Exercise at least one cap
|
|
228
|
+
partition, one dashed/solid partition and an overlap between simultaneously active branches. Pan
|
|
229
|
+
slightly and inspect just below/at/above the relevant audit zoom cuts (for example 15.99/16/16.01
|
|
230
|
+
when a selected interval changes at 16). Check that caps and dash patterns are visible, layers do
|
|
231
|
+
not disappear or double-select a feature, theme replacement preserves the scene, and no resource
|
|
232
|
+
or style errors are reported. Inspect overlapping strokes for the documented composition
|
|
233
|
+
trade-off, not for equality with web drawing order. Keep brief per-platform observations and
|
|
234
|
+
explicitly distinguish an unexercised branch from a passed one.
|
|
235
|
+
|
|
236
|
+
This check has not been run by the artifact tests. It neither establishes full iOS/Android visual
|
|
237
|
+
qualification nor creates a screenshot baseline. Renderers, native view lifecycle, network
|
|
238
|
+
transport and mobile distribution remain outside these build tools.
|
|
239
|
+
|
|
240
|
+
## Reproduce the official-map report
|
|
241
|
+
|
|
242
|
+
From an SDK source checkout after installing and building its pinned workspace:
|
|
243
|
+
|
|
244
|
+
```sh
|
|
245
|
+
pnpm exec tsx scripts/native-catalog-report.ts > native-catalog-report.json
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
The report evaluates all ten official maps and each of their themes through the shared pipeline.
|
|
249
|
+
Rows contain either a static-compatible style hash or exact incompatibility diagnostics, sorted by
|
|
250
|
+
map/theme with no timestamp or local path. Each row checks an individual theme; it is not a revision
|
|
251
|
+
receipt for a rewritten single-theme map. Unexpected compilation/tool failures stop report generation
|
|
252
|
+
rather than being relabeled as known incompatibilities. Retain the output together with the checkout
|
|
253
|
+
SHA and lockfile used to produce it. The test suite compares two independent evaluations and requires
|
|
254
|
+
Streets to pass. No unchecked catalog-wide compatibility assertion is implied by the presence of
|
|
255
|
+
this command, and this report is not a device-qualification result.
|
|
256
|
+
|
|
257
|
+
See the [Core profile contract](https://github.com/tileflow/tileflow-sdk/blob/main/packages/core/docs/native-artifact-profile.md)
|
|
258
|
+
for the version intersection, diagnostic codes and unsupported representations.
|