@basemaps/cli 6.46.0 → 7.1.0
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 +10 -108
- package/build/cli/__tests__/util.test.d.ts +0 -1
- package/build/cli/__tests__/util.test.js +11 -10
- package/build/cli/__tests__/util.test.js.map +1 -1
- package/build/cli/bin.d.ts +0 -1
- package/build/cli/config/action.bundle.assets.d.ts +5 -7
- package/build/cli/config/action.bundle.assets.js +34 -21
- package/build/cli/config/action.bundle.assets.js.map +1 -1
- package/build/cli/config/action.bundle.d.ts +1 -1
- package/build/cli/config/action.bundle.js +40 -12
- package/build/cli/config/action.bundle.js.map +1 -1
- package/build/cli/config/action.import.d.ts +4 -9
- package/build/cli/config/action.import.js +131 -110
- package/build/cli/config/action.import.js.map +1 -1
- package/build/cli/config/config.diff.d.ts +2 -2
- package/build/cli/config/config.diff.js +6 -4
- package/build/cli/config/config.diff.js.map +1 -1
- package/build/cli/config/config.update.d.ts +3 -5
- package/build/cli/config/config.update.js +42 -7
- package/build/cli/config/config.update.js.map +1 -1
- package/build/cli/folder.d.ts +0 -1
- package/build/cli/folder.js +1 -2
- package/build/cli/folder.js.map +1 -1
- package/build/cli/index.d.ts +0 -2
- package/build/cli/index.js +2 -17
- package/build/cli/index.js.map +1 -1
- package/build/cli/server/action.serve.d.ts +0 -1
- package/build/cli/server/action.serve.js +27 -4
- package/build/cli/server/action.serve.js.map +1 -1
- package/build/cli/util.d.ts +3 -8
- package/build/cli/util.js +48 -55
- package/build/cli/util.js.map +1 -1
- package/package.json +20 -24
- package/CHANGELOG.md +0 -1589
- package/build/cli/__tests__/util.test.d.ts.map +0 -1
- package/build/cli/base.cli.d.ts +0 -1
- package/build/cli/base.cli.d.ts.map +0 -1
- package/build/cli/base.cli.js +0 -2
- package/build/cli/base.cli.js.map +0 -1
- package/build/cli/bin.d.ts.map +0 -1
- package/build/cli/cogify/__tests__/batch.job.test.d.ts +0 -2
- package/build/cli/cogify/__tests__/batch.job.test.d.ts.map +0 -1
- package/build/cli/cogify/__tests__/batch.job.test.js +0 -92
- package/build/cli/cogify/__tests__/batch.job.test.js.map +0 -1
- package/build/cli/cogify/__tests__/semver.test.d.ts +0 -2
- package/build/cli/cogify/__tests__/semver.test.d.ts.map +0 -1
- package/build/cli/cogify/__tests__/semver.test.js +0 -62
- package/build/cli/cogify/__tests__/semver.test.js.map +0 -1
- package/build/cli/cogify/action.cog.d.ts +0 -20
- package/build/cli/cogify/action.cog.d.ts.map +0 -1
- package/build/cli/cogify/action.cog.js +0 -198
- package/build/cli/cogify/action.cog.js.map +0 -1
- package/build/cli/cogify/action.job.d.ts +0 -28
- package/build/cli/cogify/action.job.d.ts.map +0 -1
- package/build/cli/cogify/action.job.js +0 -176
- package/build/cli/cogify/action.job.js.map +0 -1
- package/build/cli/cogify/action.make.cog.d.ts +0 -23
- package/build/cli/cogify/action.make.cog.d.ts.map +0 -1
- package/build/cli/cogify/action.make.cog.js +0 -218
- package/build/cli/cogify/action.make.cog.js.map +0 -1
- package/build/cli/cogify/action.make.cog.pr.d.ts +0 -25
- package/build/cli/cogify/action.make.cog.pr.d.ts.map +0 -1
- package/build/cli/cogify/action.make.cog.pr.js +0 -96
- package/build/cli/cogify/action.make.cog.pr.js.map +0 -1
- package/build/cli/cogify/batch.job.d.ts +0 -40
- package/build/cli/cogify/batch.job.d.ts.map +0 -1
- package/build/cli/cogify/batch.job.js +0 -205
- package/build/cli/cogify/batch.job.js.map +0 -1
- package/build/cli/cogify/cutline.d.ts +0 -5
- package/build/cli/cogify/cutline.d.ts.map +0 -1
- package/build/cli/cogify/cutline.js +0 -33
- package/build/cli/cogify/cutline.js.map +0 -1
- package/build/cli/cogify/semver.util.d.ts +0 -24
- package/build/cli/cogify/semver.util.d.ts.map +0 -1
- package/build/cli/cogify/semver.util.js +0 -56
- package/build/cli/cogify/semver.util.js.map +0 -1
- package/build/cli/config/action.bundle.assets.d.ts.map +0 -1
- package/build/cli/config/action.bundle.d.ts.map +0 -1
- package/build/cli/config/action.cog.mapsheet.d.ts +0 -12
- package/build/cli/config/action.cog.mapsheet.d.ts.map +0 -1
- package/build/cli/config/action.cog.mapsheet.js +0 -107
- package/build/cli/config/action.cog.mapsheet.js.map +0 -1
- package/build/cli/config/action.imagery.config.d.ts +0 -11
- package/build/cli/config/action.imagery.config.d.ts.map +0 -1
- package/build/cli/config/action.imagery.config.js +0 -142
- package/build/cli/config/action.imagery.config.js.map +0 -1
- package/build/cli/config/action.import.d.ts.map +0 -1
- package/build/cli/config/config.diff.d.ts.map +0 -1
- package/build/cli/config/config.update.d.ts.map +0 -1
- package/build/cli/folder.d.ts.map +0 -1
- package/build/cli/github/github.d.ts +0 -49
- package/build/cli/github/github.d.ts.map +0 -1
- package/build/cli/github/github.js +0 -107
- package/build/cli/github/github.js.map +0 -1
- package/build/cli/github/make.cog.pr.d.ts +0 -42
- package/build/cli/github/make.cog.pr.d.ts.map +0 -1
- package/build/cli/github/make.cog.pr.js +0 -173
- package/build/cli/github/make.cog.pr.js.map +0 -1
- package/build/cli/index.d.ts.map +0 -1
- package/build/cli/overview/__test__/wmts.overview.test.d.ts +0 -2
- package/build/cli/overview/__test__/wmts.overview.test.d.ts.map +0 -1
- package/build/cli/overview/__test__/wmts.overview.test.js +0 -24
- package/build/cli/overview/__test__/wmts.overview.test.js.map +0 -1
- package/build/cli/overview/action.create.overview.d.ts +0 -17
- package/build/cli/overview/action.create.overview.d.ts.map +0 -1
- package/build/cli/overview/action.create.overview.js +0 -174
- package/build/cli/overview/action.create.overview.js.map +0 -1
- package/build/cli/overview/overview.wmts.d.ts +0 -3
- package/build/cli/overview/overview.wmts.d.ts.map +0 -1
- package/build/cli/overview/overview.wmts.js +0 -29
- package/build/cli/overview/overview.wmts.js.map +0 -1
- package/build/cli/overview/tile.generator.d.ts +0 -13
- package/build/cli/overview/tile.generator.d.ts.map +0 -1
- package/build/cli/overview/tile.generator.js +0 -86
- package/build/cli/overview/tile.generator.js.map +0 -1
- package/build/cli/overview/timer.d.ts +0 -14
- package/build/cli/overview/timer.d.ts.map +0 -1
- package/build/cli/overview/timer.js +0 -21
- package/build/cli/overview/timer.js.map +0 -1
- package/build/cli/server/action.serve.d.ts.map +0 -1
- package/build/cli/sprites/action.sprites.d.ts +0 -11
- package/build/cli/sprites/action.sprites.d.ts.map +0 -1
- package/build/cli/sprites/action.sprites.js +0 -42
- package/build/cli/sprites/action.sprites.js.map +0 -1
- package/build/cli/util.d.ts.map +0 -1
- package/build/cog/__tests__/builder.test.d.ts +0 -2
- package/build/cog/__tests__/builder.test.d.ts.map +0 -1
- package/build/cog/__tests__/builder.test.js +0 -81
- package/build/cog/__tests__/builder.test.js.map +0 -1
- package/build/cog/__tests__/cog.stac.job.test.d.ts +0 -2
- package/build/cog/__tests__/cog.stac.job.test.d.ts.map +0 -1
- package/build/cog/__tests__/cog.stac.job.test.js +0 -319
- package/build/cog/__tests__/cog.stac.job.test.js.map +0 -1
- package/build/cog/__tests__/cog.test.d.ts +0 -2
- package/build/cog/__tests__/cog.test.d.ts.map +0 -1
- package/build/cog/__tests__/cog.test.js +0 -91
- package/build/cog/__tests__/cog.test.js.map +0 -1
- package/build/cog/__tests__/cog.vrt.test.d.ts +0 -2
- package/build/cog/__tests__/cog.vrt.test.d.ts.map +0 -1
- package/build/cog/__tests__/cog.vrt.test.js +0 -229
- package/build/cog/__tests__/cog.vrt.test.js.map +0 -1
- package/build/cog/__tests__/cutline.test.d.ts +0 -2
- package/build/cog/__tests__/cutline.test.d.ts.map +0 -1
- package/build/cog/__tests__/cutline.test.js +0 -300
- package/build/cog/__tests__/cutline.test.js.map +0 -1
- package/build/cog/__tests__/projection.loader.test.d.ts +0 -2
- package/build/cog/__tests__/projection.loader.test.d.ts.map +0 -1
- package/build/cog/__tests__/projection.loader.test.js +0 -27
- package/build/cog/__tests__/projection.loader.test.js.map +0 -1
- package/build/cog/__tests__/source.tiff.testhelper.d.ts +0 -8
- package/build/cog/__tests__/source.tiff.testhelper.d.ts.map +0 -1
- package/build/cog/__tests__/source.tiff.testhelper.js +0 -41
- package/build/cog/__tests__/source.tiff.testhelper.js.map +0 -1
- package/build/cog/builder.d.ts +0 -49
- package/build/cog/builder.d.ts.map +0 -1
- package/build/cog/builder.js +0 -177
- package/build/cog/builder.js.map +0 -1
- package/build/cog/cog.d.ts +0 -22
- package/build/cog/cog.d.ts.map +0 -1
- package/build/cog/cog.js +0 -72
- package/build/cog/cog.js.map +0 -1
- package/build/cog/cog.stac.job.d.ts +0 -106
- package/build/cog/cog.stac.job.d.ts.map +0 -1
- package/build/cog/cog.stac.job.js +0 -257
- package/build/cog/cog.stac.job.js.map +0 -1
- package/build/cog/cog.vrt.d.ts +0 -18
- package/build/cog/cog.vrt.d.ts.map +0 -1
- package/build/cog/cog.vrt.js +0 -102
- package/build/cog/cog.vrt.js.map +0 -1
- package/build/cog/constants.d.ts +0 -5
- package/build/cog/constants.d.ts.map +0 -1
- package/build/cog/constants.js +0 -5
- package/build/cog/constants.js.map +0 -1
- package/build/cog/cutline.d.ts +0 -75
- package/build/cog/cutline.d.ts.map +0 -1
- package/build/cog/cutline.js +0 -250
- package/build/cog/cutline.js.map +0 -1
- package/build/cog/job.factory.d.ts +0 -10
- package/build/cog/job.factory.d.ts.map +0 -1
- package/build/cog/job.factory.js +0 -92
- package/build/cog/job.factory.js.map +0 -1
- package/build/cog/projection.loader.d.ts +0 -13
- package/build/cog/projection.loader.d.ts.map +0 -1
- package/build/cog/projection.loader.js +0 -27
- package/build/cog/projection.loader.js.map +0 -1
- package/build/cog/stac.d.ts +0 -32
- package/build/cog/stac.d.ts.map +0 -1
- package/build/cog/stac.js +0 -3
- package/build/cog/stac.js.map +0 -1
- package/build/cog/types.d.ts +0 -83
- package/build/cog/types.d.ts.map +0 -1
- package/build/cog/types.js +0 -2
- package/build/cog/types.js.map +0 -1
- package/build/gdal/__tests__/gdal.progress.test.d.ts +0 -2
- package/build/gdal/__tests__/gdal.progress.test.d.ts.map +0 -1
- package/build/gdal/__tests__/gdal.progress.test.js +0 -22
- package/build/gdal/__tests__/gdal.progress.test.js.map +0 -1
- package/build/gdal/__tests__/gdal.test.d.ts +0 -2
- package/build/gdal/__tests__/gdal.test.d.ts.map +0 -1
- package/build/gdal/__tests__/gdal.test.js +0 -52
- package/build/gdal/__tests__/gdal.test.js.map +0 -1
- package/build/gdal/gdal.cog.d.ts +0 -42
- package/build/gdal/gdal.cog.d.ts.map +0 -1
- package/build/gdal/gdal.cog.js +0 -108
- package/build/gdal/gdal.cog.js.map +0 -1
- package/build/gdal/gdal.command.d.ts +0 -44
- package/build/gdal/gdal.command.d.ts.map +0 -1
- package/build/gdal/gdal.command.js +0 -87
- package/build/gdal/gdal.command.js.map +0 -1
- package/build/gdal/gdal.config.d.ts +0 -51
- package/build/gdal/gdal.config.d.ts.map +0 -1
- package/build/gdal/gdal.config.js +0 -23
- package/build/gdal/gdal.config.js.map +0 -1
- package/build/gdal/gdal.d.ts +0 -19
- package/build/gdal/gdal.d.ts.map +0 -1
- package/build/gdal/gdal.docker.d.ts +0 -18
- package/build/gdal/gdal.docker.d.ts.map +0 -1
- package/build/gdal/gdal.docker.js +0 -82
- package/build/gdal/gdal.docker.js.map +0 -1
- package/build/gdal/gdal.js +0 -28
- package/build/gdal/gdal.js.map +0 -1
- package/build/gdal/gdal.local.d.ts +0 -10
- package/build/gdal/gdal.local.d.ts.map +0 -1
- package/build/gdal/gdal.local.js +0 -22
- package/build/gdal/gdal.local.js.map +0 -1
- package/build/gdal/gdal.progress.d.ts +0 -16
- package/build/gdal/gdal.progress.d.ts.map +0 -1
- package/build/gdal/gdal.progress.js +0 -50
- package/build/gdal/gdal.progress.js.map +0 -1
- package/build/index.d.ts +0 -6
- package/build/index.d.ts.map +0 -1
- package/build/index.js +0 -6
- package/build/index.js.map +0 -1
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { EpsgCode, GoogleTms } from '@basemaps/geo';
|
|
2
|
-
import { CogStacJob } from '../cog.stac.job.js';
|
|
3
|
-
export const SourceTiffTestHelper = {
|
|
4
|
-
makeCogJob() {
|
|
5
|
-
return new CogStacJob({
|
|
6
|
-
source: {
|
|
7
|
-
files: [],
|
|
8
|
-
epsg: EpsgCode.Nztm2000,
|
|
9
|
-
gsd: 0.8,
|
|
10
|
-
},
|
|
11
|
-
output: {
|
|
12
|
-
tileMatrix: GoogleTms.identifier,
|
|
13
|
-
gsd: 0.75,
|
|
14
|
-
addAlpha: true,
|
|
15
|
-
oneCogCovering: false,
|
|
16
|
-
},
|
|
17
|
-
});
|
|
18
|
-
},
|
|
19
|
-
tiffNztmBounds(path = '/path/to') {
|
|
20
|
-
return [
|
|
21
|
-
{
|
|
22
|
-
name: path + '/tiff1.tiff',
|
|
23
|
-
x: 1732000,
|
|
24
|
-
y: 5442000,
|
|
25
|
-
width: 24000,
|
|
26
|
-
height: 36000,
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
name: path + '/tiff2.tiff',
|
|
30
|
-
x: 1756000,
|
|
31
|
-
y: 5442000,
|
|
32
|
-
width: 24000,
|
|
33
|
-
height: 36000,
|
|
34
|
-
},
|
|
35
|
-
];
|
|
36
|
-
},
|
|
37
|
-
namedBoundsToPaths(bounds) {
|
|
38
|
-
return bounds.map(({ name }) => `/path/to/tiff${name}.tiff`);
|
|
39
|
-
},
|
|
40
|
-
};
|
|
41
|
-
//# sourceMappingURL=source.tiff.testhelper.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"source.tiff.testhelper.js","sourceRoot":"","sources":["../../../src/cog/__tests__/source.tiff.testhelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAe,SAAS,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,UAAU;QACR,OAAO,IAAI,UAAU,CAAC;YACpB,MAAM,EAAE;gBACN,KAAK,EAAE,EAAmB;gBAC1B,IAAI,EAAE,QAAQ,CAAC,QAAQ;gBACvB,GAAG,EAAE,GAAG;aACT;YACD,MAAM,EAAE;gBACN,UAAU,EAAE,SAAS,CAAC,UAAU;gBAChC,GAAG,EAAE,IAAI;gBACT,QAAQ,EAAE,IAAI;gBACd,cAAc,EAAE,KAAK;aACtB;SACY,CAAC,CAAC;IACnB,CAAC;IAED,cAAc,CAAC,IAAI,GAAG,UAAU;QAC9B,OAAO;YACL;gBACE,IAAI,EAAE,IAAI,GAAG,aAAa;gBAC1B,CAAC,EAAE,OAAO;gBACV,CAAC,EAAE,OAAO;gBACV,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,KAAK;aACd;YACD;gBACE,IAAI,EAAE,IAAI,GAAG,aAAa;gBAC1B,CAAC,EAAE,OAAO;gBACV,CAAC,EAAE,OAAO;gBACV,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,KAAK;aACd;SACF,CAAC;IACJ,CAAC;IAED,kBAAkB,CAAC,MAAqB;QACtC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAU,EAAE,CAAC,gBAAgB,IAAI,OAAO,CAAC,CAAC;IACvE,CAAC;CACF,CAAC"}
|
package/build/cog/builder.d.ts
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { Epsg, TileMatrixSet } from '@basemaps/geo';
|
|
2
|
-
import { LogType } from '@basemaps/shared';
|
|
3
|
-
import { ChunkSource } from '@chunkd/core';
|
|
4
|
-
import { CogTiff } from '@cogeotiff/core';
|
|
5
|
-
import { LimitFunction } from 'p-limit';
|
|
6
|
-
import { Cutline } from './cutline.js';
|
|
7
|
-
import { CogBuilderMetadata, SourceMetadata } from './types.js';
|
|
8
|
-
export declare const InvalidProjectionCode = 32767;
|
|
9
|
-
/**
|
|
10
|
-
* Attempt to guess the projection based off the WKT
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
*
|
|
14
|
-
* "PCS Name = NZGD_2000_New_Zealand_Transverse_Mercator|GCS Name = GCS_NZGD_2000|Ellipsoid = GRS_1980|Primem = Greenwich||"
|
|
15
|
-
* "NZGD2000_New_Zealand_Transverse_Mercator_2000|GCS Name = GCS_NZGD_2000|Primem = Greenwich||"
|
|
16
|
-
*
|
|
17
|
-
* @param wkt
|
|
18
|
-
*/
|
|
19
|
-
export declare function guessProjection(wkt: string | null): Epsg | null;
|
|
20
|
-
export declare class CogBuilder {
|
|
21
|
-
q: LimitFunction;
|
|
22
|
-
logger: LogType;
|
|
23
|
-
targetTms: TileMatrixSet;
|
|
24
|
-
srcProj?: Epsg;
|
|
25
|
-
wktPreviousGuesses: Set<string>;
|
|
26
|
-
/**
|
|
27
|
-
* @param concurrency number of requests to run at a time
|
|
28
|
-
*/
|
|
29
|
-
constructor(targetTms: TileMatrixSet, concurrency: number, logger: LogType, srcProj?: Epsg);
|
|
30
|
-
/**
|
|
31
|
-
* Get the source bounds a collection of tiffs
|
|
32
|
-
* @param tiffs
|
|
33
|
-
*/
|
|
34
|
-
bounds(sources: ChunkSource[]): Promise<SourceMetadata>;
|
|
35
|
-
findProjection(tiff: CogTiff): Epsg;
|
|
36
|
-
/**
|
|
37
|
-
* Get the nodata value stored in the source tiff
|
|
38
|
-
* @param tiff
|
|
39
|
-
* @param logger
|
|
40
|
-
*/
|
|
41
|
-
findNoData(tiff: CogTiff): number | null;
|
|
42
|
-
/**
|
|
43
|
-
* Generate a list of tiles that need to be generated to cover the source tiffs
|
|
44
|
-
* @param tiffs list of source imagery to be converted
|
|
45
|
-
* @returns List of Tile bounds covering tiffs
|
|
46
|
-
*/
|
|
47
|
-
build(tiffs: ChunkSource[], cutline: Cutline, alignedLevel?: number): Promise<CogBuilderMetadata>;
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=builder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/cog/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAc,aAAa,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAoC,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAuB,MAAM,iBAAiB,CAAC;AAC/D,OAAe,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEhD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhE,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAE3C;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAO/D;AAED,qBAAa,UAAU;IACrB,CAAC,EAAE,aAAa,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,CAAC,EAAE,IAAI,CAAC;IAGf,kBAAkB,cAAqB;IAEvC;;OAEG;gBACS,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,IAAI;IAO1F;;;OAGG;IACG,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAoF7D,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IA6BnC;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAaxC;;;;OAIG;IACG,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAaxG"}
|
package/build/cog/builder.js
DELETED
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
import { Bounds, Epsg, Projection } from '@basemaps/geo';
|
|
2
|
-
import { CompositeError, LoggerFatalError } from '@basemaps/shared';
|
|
3
|
-
import { CogTiff, TiffTag, TiffTagGeo } from '@cogeotiff/core';
|
|
4
|
-
import pLimit from 'p-limit';
|
|
5
|
-
import { basename } from 'path';
|
|
6
|
-
import { ProjectionLoader } from './projection.loader.js';
|
|
7
|
-
export const InvalidProjectionCode = 32767;
|
|
8
|
-
/**
|
|
9
|
-
* Attempt to guess the projection based off the WKT
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
*
|
|
13
|
-
* "PCS Name = NZGD_2000_New_Zealand_Transverse_Mercator|GCS Name = GCS_NZGD_2000|Ellipsoid = GRS_1980|Primem = Greenwich||"
|
|
14
|
-
* "NZGD2000_New_Zealand_Transverse_Mercator_2000|GCS Name = GCS_NZGD_2000|Primem = Greenwich||"
|
|
15
|
-
*
|
|
16
|
-
* @param wkt
|
|
17
|
-
*/
|
|
18
|
-
export function guessProjection(wkt) {
|
|
19
|
-
if (wkt == null)
|
|
20
|
-
return null;
|
|
21
|
-
const searchWkt = wkt.replace(/_/g, ' ');
|
|
22
|
-
if (searchWkt.includes('New Zealand Transverse Mercator'))
|
|
23
|
-
return Epsg.Nztm2000;
|
|
24
|
-
if (searchWkt.includes('Chatham Islands Transverse Mercator 2000'))
|
|
25
|
-
return Epsg.Citm2000;
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
28
|
-
export class CogBuilder {
|
|
29
|
-
/**
|
|
30
|
-
* @param concurrency number of requests to run at a time
|
|
31
|
-
*/
|
|
32
|
-
constructor(targetTms, concurrency, logger, srcProj) {
|
|
33
|
-
// Prevent guessing spamming the logs
|
|
34
|
-
this.wktPreviousGuesses = new Set();
|
|
35
|
-
this.targetTms = targetTms;
|
|
36
|
-
this.logger = logger;
|
|
37
|
-
this.q = pLimit(concurrency);
|
|
38
|
-
this.srcProj = srcProj;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Get the source bounds a collection of tiffs
|
|
42
|
-
* @param tiffs
|
|
43
|
-
*/
|
|
44
|
-
async bounds(sources) {
|
|
45
|
-
let resX = -1;
|
|
46
|
-
let bands = -1;
|
|
47
|
-
let projection = this.srcProj;
|
|
48
|
-
let nodata;
|
|
49
|
-
let count = 0;
|
|
50
|
-
const queue = sources.map((source) => {
|
|
51
|
-
return this.q(async () => {
|
|
52
|
-
count++;
|
|
53
|
-
if (count % 50 === 0)
|
|
54
|
-
this.logger.info({ count, total: sources.length }, 'BoundsProgress');
|
|
55
|
-
this.logger.trace({ source: source.uri }, 'Tiff:Load');
|
|
56
|
-
const tiff = new CogTiff(source);
|
|
57
|
-
await tiff.init(true);
|
|
58
|
-
const image = tiff.getImage(0);
|
|
59
|
-
if (resX === -1 || image.resolution[0] < resX)
|
|
60
|
-
resX = image.resolution[0];
|
|
61
|
-
// Check number of bands to determine alpha layer
|
|
62
|
-
const tiffBandCount = image.value(TiffTag.BitsPerSample);
|
|
63
|
-
if (tiffBandCount != null && tiffBandCount.length > bands) {
|
|
64
|
-
if (bands > -1) {
|
|
65
|
-
this.logger.error({
|
|
66
|
-
firstImage: basename(sources[0].uri),
|
|
67
|
-
bands,
|
|
68
|
-
currentImage: basename(source.uri),
|
|
69
|
-
currentBands: tiffBandCount,
|
|
70
|
-
}, 'Multiple Bands');
|
|
71
|
-
}
|
|
72
|
-
bands = tiffBandCount.length;
|
|
73
|
-
}
|
|
74
|
-
const output = { ...Bounds.fromBbox(image.bbox).toJson(), name: source.uri };
|
|
75
|
-
if (source.close)
|
|
76
|
-
await source.close();
|
|
77
|
-
const imageProjection = this.findProjection(tiff);
|
|
78
|
-
if (imageProjection != null && (projection === null || projection === void 0 ? void 0 : projection.code) !== imageProjection.code) {
|
|
79
|
-
if (projection != null) {
|
|
80
|
-
this.logger.error({
|
|
81
|
-
firstImage: basename(sources[0].uri),
|
|
82
|
-
projection,
|
|
83
|
-
currentImage: basename(source.uri),
|
|
84
|
-
currentProjection: imageProjection,
|
|
85
|
-
}, 'Multiple projections');
|
|
86
|
-
throw new Error('Multiple projections');
|
|
87
|
-
}
|
|
88
|
-
projection = imageProjection;
|
|
89
|
-
}
|
|
90
|
-
const tiffNoData = this.findNoData(tiff);
|
|
91
|
-
if (tiffNoData != null && tiffNoData !== nodata) {
|
|
92
|
-
if (nodata != null)
|
|
93
|
-
throw new Error('Multiple No Data values');
|
|
94
|
-
nodata = tiffNoData;
|
|
95
|
-
}
|
|
96
|
-
return output;
|
|
97
|
-
}).catch((e) => {
|
|
98
|
-
throw new CompositeError('Failed to process image: ' + source.uri, 500, e);
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
const bounds = await Promise.all(queue);
|
|
102
|
-
if (projection == null)
|
|
103
|
-
throw new Error('No projection detected');
|
|
104
|
-
if (resX === -1)
|
|
105
|
-
throw new Error('No resolution detected');
|
|
106
|
-
if (bands === -1)
|
|
107
|
-
throw new Error('No image bands detected');
|
|
108
|
-
return {
|
|
109
|
-
projection: projection.code,
|
|
110
|
-
nodata,
|
|
111
|
-
bands,
|
|
112
|
-
bounds,
|
|
113
|
-
pixelScale: resX,
|
|
114
|
-
resZoom: Projection.getTiffResZoom(this.targetTms, resX),
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
findProjection(tiff) {
|
|
118
|
-
var _a;
|
|
119
|
-
const image = tiff.getImage(0);
|
|
120
|
-
const projection = image.valueGeo(TiffTagGeo.ProjectedCSTypeGeoKey);
|
|
121
|
-
if (projection != null && projection !== InvalidProjectionCode) {
|
|
122
|
-
return (_a = Epsg.tryGet(projection)) !== null && _a !== void 0 ? _a : new Epsg(projection);
|
|
123
|
-
}
|
|
124
|
-
const imgWkt = image.value(TiffTag.GeoAsciiParams);
|
|
125
|
-
const epsg = guessProjection(imgWkt);
|
|
126
|
-
if (imgWkt != null && epsg != null) {
|
|
127
|
-
if (!this.wktPreviousGuesses.has(imgWkt)) {
|
|
128
|
-
this.logger.trace({ tiff: tiff.source.uri, imgWkt, projection }, 'GuessingProjection from GeoAsciiParams');
|
|
129
|
-
}
|
|
130
|
-
this.wktPreviousGuesses.add(imgWkt);
|
|
131
|
-
return epsg;
|
|
132
|
-
}
|
|
133
|
-
if (this.srcProj != null) {
|
|
134
|
-
this.logger.warn({ tiff: tiff.source.uri, projection, imgWkt, defaultProjection: this.srcProj }, 'Default findProjection');
|
|
135
|
-
return this.srcProj;
|
|
136
|
-
}
|
|
137
|
-
this.logger.error({ tiff: tiff.source.uri, projection, imgWkt }, 'Failed findProjection');
|
|
138
|
-
throw new Error('Failed to find projection');
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Get the nodata value stored in the source tiff
|
|
142
|
-
* @param tiff
|
|
143
|
-
* @param logger
|
|
144
|
-
*/
|
|
145
|
-
findNoData(tiff) {
|
|
146
|
-
const noData = tiff.getImage(0).value(TiffTag.GDAL_NODATA);
|
|
147
|
-
if (noData == null)
|
|
148
|
-
return null;
|
|
149
|
-
const noDataNum = parseInt(noData);
|
|
150
|
-
if (isNaN(noDataNum) || noDataNum < 0 || noDataNum > 256) {
|
|
151
|
-
throw new LoggerFatalError({ tiff: tiff.source.uri, noData }, 'Failed converting GDAL_NODATA, defaulting to 255');
|
|
152
|
-
}
|
|
153
|
-
return noDataNum;
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Generate a list of tiles that need to be generated to cover the source tiffs
|
|
157
|
-
* @param tiffs list of source imagery to be converted
|
|
158
|
-
* @returns List of Tile bounds covering tiffs
|
|
159
|
-
*/
|
|
160
|
-
async build(tiffs, cutline, alignedLevel) {
|
|
161
|
-
const metadata = await this.bounds(tiffs);
|
|
162
|
-
// Ensure that the projection definition is loaded
|
|
163
|
-
await ProjectionLoader.load(metadata.projection);
|
|
164
|
-
const files = cutline.optimizeCovering(metadata, alignedLevel);
|
|
165
|
-
let union = null;
|
|
166
|
-
for (const bounds of files) {
|
|
167
|
-
if (union == null)
|
|
168
|
-
union = Bounds.fromJson(bounds);
|
|
169
|
-
else
|
|
170
|
-
union = Bounds.fromJson(bounds).union(union);
|
|
171
|
-
}
|
|
172
|
-
if (union == null)
|
|
173
|
-
throw new Error('Bug! union can not be null');
|
|
174
|
-
return { ...metadata, files, targetBounds: union.toJson() };
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
//# sourceMappingURL=builder.js.map
|
package/build/cog/builder.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/cog/builder.ts"],"names":[],"mappings":"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"}
|
package/build/cog/cog.d.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { LogType } from '@basemaps/shared';
|
|
2
|
-
import { GdalCommand } from '../gdal/gdal.command.js';
|
|
3
|
-
import { CogJob } from './types.js';
|
|
4
|
-
/**
|
|
5
|
-
* Create a onProgress logger
|
|
6
|
-
*
|
|
7
|
-
* @param keys additional keys to log
|
|
8
|
-
* @param logger base logger to use
|
|
9
|
-
*/
|
|
10
|
-
export declare function onProgress(gdal: GdalCommand, keys: Record<string, any>, logger: LogType): void;
|
|
11
|
-
/**
|
|
12
|
-
* Build a COG for a given collection of tiffs
|
|
13
|
-
*
|
|
14
|
-
* @param job the job to process
|
|
15
|
-
* @param name tile name of cog to generate
|
|
16
|
-
* @param vrtLocation Location of the source VRT file
|
|
17
|
-
* @param outputTiffPath Path to where the output tiff will be stored
|
|
18
|
-
* @param logger Logger to use
|
|
19
|
-
* @param execute Whether to actually execute the transformation,
|
|
20
|
-
*/
|
|
21
|
-
export declare function buildCogForName(job: CogJob, name: string, vrtLocation: string, outputTiffPath: string, logger: LogType, execute?: boolean): Promise<void>;
|
|
22
|
-
//# sourceMappingURL=cog.d.ts.map
|
package/build/cog/cog.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cog.d.ts","sourceRoot":"","sources":["../../src/cog/cog.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGpC;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAQ9F;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,OAAO,EACf,OAAO,UAAQ,GACd,OAAO,CAAC,IAAI,CAAC,CA2Df"}
|
package/build/cog/cog.js
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { Bounds, Projection, TileMatrixSet } from '@basemaps/geo';
|
|
2
|
-
import { Env, isConfigS3Role } from '@basemaps/shared';
|
|
3
|
-
import { GdalCogBuilder } from '../gdal/gdal.cog.js';
|
|
4
|
-
import { GdalProgressParser } from '../gdal/gdal.progress.js';
|
|
5
|
-
import { AwsCredentials } from '@chunkd/source-aws-v2';
|
|
6
|
-
/**
|
|
7
|
-
* Create a onProgress logger
|
|
8
|
-
*
|
|
9
|
-
* @param keys additional keys to log
|
|
10
|
-
* @param logger base logger to use
|
|
11
|
-
*/
|
|
12
|
-
export function onProgress(gdal, keys, logger) {
|
|
13
|
-
let lastTime = Date.now();
|
|
14
|
-
gdal.parser = new GdalProgressParser();
|
|
15
|
-
gdal.parser.on('progress', (p) => {
|
|
16
|
-
logger.trace({ ...keys, progress: parseFloat(p.toFixed(2)), progressTime: Date.now() - lastTime }, 'Progress');
|
|
17
|
-
lastTime = Date.now();
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Build a COG for a given collection of tiffs
|
|
22
|
-
*
|
|
23
|
-
* @param job the job to process
|
|
24
|
-
* @param name tile name of cog to generate
|
|
25
|
-
* @param vrtLocation Location of the source VRT file
|
|
26
|
-
* @param outputTiffPath Path to where the output tiff will be stored
|
|
27
|
-
* @param logger Logger to use
|
|
28
|
-
* @param execute Whether to actually execute the transformation,
|
|
29
|
-
*/
|
|
30
|
-
export async function buildCogForName(job, name, vrtLocation, outputTiffPath, logger, execute = false) {
|
|
31
|
-
const startTime = Date.now();
|
|
32
|
-
const { targetZoom, tileMatrix } = job;
|
|
33
|
-
const nb = job.output.files.find((nb) => nb.name === name);
|
|
34
|
-
if (nb == null) {
|
|
35
|
-
throw new Error("Can't find COG named " + name);
|
|
36
|
-
}
|
|
37
|
-
const bounds = Bounds.fromJson(nb);
|
|
38
|
-
const tile = TileMatrixSet.nameToTile(name);
|
|
39
|
-
const blockSize = tileMatrix.tileSize * 2; // FIXME is this blockFactor always 2
|
|
40
|
-
const alignmentLevels = Projection.findAlignmentLevels(tileMatrix, tile, job.source.gsd);
|
|
41
|
-
const cogBuild = new GdalCogBuilder(vrtLocation, outputTiffPath, {
|
|
42
|
-
bbox: [bounds.x, bounds.bottom, bounds.right, bounds.y],
|
|
43
|
-
tileMatrix,
|
|
44
|
-
blockSize,
|
|
45
|
-
targetRes: job.output.gsd,
|
|
46
|
-
alignmentLevels,
|
|
47
|
-
resampling: job.output.resampling,
|
|
48
|
-
quality: job.output.quality,
|
|
49
|
-
});
|
|
50
|
-
onProgress(cogBuild.gdal, { name, target: 'tiff' }, logger);
|
|
51
|
-
logger.info({
|
|
52
|
-
imageSize: Projection.getImagePixelWidth(tileMatrix, tile, targetZoom),
|
|
53
|
-
name,
|
|
54
|
-
tile,
|
|
55
|
-
alignmentLevels,
|
|
56
|
-
}, 'CreateCog');
|
|
57
|
-
const sourceLocation = job.source.location;
|
|
58
|
-
// If required assume role
|
|
59
|
-
if (isConfigS3Role(sourceLocation)) {
|
|
60
|
-
const credentials = AwsCredentials.role(sourceLocation.roleArn, sourceLocation.externalId, Env.getNumber(Env.AwsRoleDurationHours, 8) * 60 * 60);
|
|
61
|
-
cogBuild.gdal.setCredentials(credentials);
|
|
62
|
-
}
|
|
63
|
-
if (cogBuild.gdal.mount != null) {
|
|
64
|
-
for (const file of job.source.files)
|
|
65
|
-
cogBuild.gdal.mount(file.name);
|
|
66
|
-
}
|
|
67
|
-
if (execute) {
|
|
68
|
-
await cogBuild.convert(logger.child({ name }));
|
|
69
|
-
logger.info({ name, duration: Date.now() - startTime }, 'CogCreated');
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
//# sourceMappingURL=cog.js.map
|
package/build/cog/cog.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cog.js","sourceRoot":"","sources":["../../src/cog/cog.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { Epsg, TileMatrixSet } from '@basemaps/geo';
|
|
2
|
-
import { FileConfig, FileConfigPath } from '@basemaps/shared';
|
|
3
|
-
import { MultiPolygon } from '@linzjs/geojson';
|
|
4
|
-
import { GdalCogBuilderResampling } from '../gdal/gdal.config.js';
|
|
5
|
-
import { CogBuilderMetadata, CogJob, CogJobJson, CogOutputProperties, CogSourceProperties, FeatureCollectionWithCrs } from './types.js';
|
|
6
|
-
export declare const MaxConcurrencyDefault = 50;
|
|
7
|
-
export interface JobCreationContext {
|
|
8
|
-
/** Custom Imagery Name if defined */
|
|
9
|
-
imageryName?: string;
|
|
10
|
-
/** Source config */
|
|
11
|
-
sourceLocation: FileConfig | FileConfigPath;
|
|
12
|
-
/** Output config */
|
|
13
|
-
outputLocation: FileConfig;
|
|
14
|
-
/** Should the imagery be cut to a cutline */
|
|
15
|
-
cutline?: {
|
|
16
|
-
href: string;
|
|
17
|
-
blend: number;
|
|
18
|
-
};
|
|
19
|
-
tileMatrix: TileMatrixSet;
|
|
20
|
-
override?: {
|
|
21
|
-
/** Override job id */
|
|
22
|
-
id?: string;
|
|
23
|
-
/**
|
|
24
|
-
* Image quality
|
|
25
|
-
* @default GdalCogBuilderDefaults.quality
|
|
26
|
-
*/
|
|
27
|
-
quality?: number;
|
|
28
|
-
/**
|
|
29
|
-
* Number of threads to use for fetches
|
|
30
|
-
* @default MaxConcurrencyDefault
|
|
31
|
-
*/
|
|
32
|
-
concurrency?: number;
|
|
33
|
-
/**
|
|
34
|
-
* Override the source projection
|
|
35
|
-
*/
|
|
36
|
-
projection?: Epsg;
|
|
37
|
-
/**
|
|
38
|
-
* Override Default aligned zoom level
|
|
39
|
-
*/
|
|
40
|
-
alignedLevel?: number;
|
|
41
|
-
/**
|
|
42
|
-
* Resampling method
|
|
43
|
-
* @Default GdalCogBuilderDefaults.resampling
|
|
44
|
-
*/
|
|
45
|
-
resampling?: GdalCogBuilderResampling;
|
|
46
|
-
};
|
|
47
|
-
/**
|
|
48
|
-
* Should this job be submitted to batch now?
|
|
49
|
-
* @default false
|
|
50
|
-
*/
|
|
51
|
-
batch: boolean;
|
|
52
|
-
/** Should this job ignore source coverage and just produce one big COG for EPSG extent */
|
|
53
|
-
oneCogCovering: boolean;
|
|
54
|
-
}
|
|
55
|
-
export interface CogJobCreateParams {
|
|
56
|
-
/** unique id for imagery set */
|
|
57
|
-
id: string;
|
|
58
|
-
/** name of imagery set */
|
|
59
|
-
imageryName: string;
|
|
60
|
-
/** information about the source */
|
|
61
|
-
metadata: CogBuilderMetadata;
|
|
62
|
-
/** information about the output */
|
|
63
|
-
ctx: JobCreationContext;
|
|
64
|
-
/** the polygon to use to clip the source imagery */
|
|
65
|
-
cutlinePoly: MultiPolygon;
|
|
66
|
-
/** do we need an alpha band added */
|
|
67
|
-
addAlpha: boolean;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Information needed to create cogs
|
|
71
|
-
*/
|
|
72
|
-
export declare class CogStacJob implements CogJob {
|
|
73
|
-
json: CogJobJson;
|
|
74
|
-
private cacheTargetZoom?;
|
|
75
|
-
/**
|
|
76
|
-
* Load the job.json
|
|
77
|
-
|
|
78
|
-
* @param jobpath where to load the job.json from
|
|
79
|
-
*/
|
|
80
|
-
static load(jobpath: string): Promise<CogStacJob>;
|
|
81
|
-
/**
|
|
82
|
-
* Create job.json, collection.json, source.geojson, covering.geojson, cutlint.geojson.gz and
|
|
83
|
-
* stac descriptions of the target COGs
|
|
84
|
-
*/
|
|
85
|
-
static create({ id, imageryName, metadata, ctx, cutlinePoly, addAlpha, }: CogJobCreateParams): Promise<CogStacJob>;
|
|
86
|
-
/**
|
|
87
|
-
* build a FeatureCollection from MultiPolygon
|
|
88
|
-
*/
|
|
89
|
-
static toGeoJson(poly: MultiPolygon, epsg: Epsg): FeatureCollectionWithCrs;
|
|
90
|
-
constructor(json: CogJobJson);
|
|
91
|
-
get id(): string;
|
|
92
|
-
get name(): string;
|
|
93
|
-
get title(): string;
|
|
94
|
-
get description(): string | undefined;
|
|
95
|
-
get source(): CogSourceProperties;
|
|
96
|
-
get output(): CogOutputProperties;
|
|
97
|
-
get tileMatrix(): TileMatrixSet;
|
|
98
|
-
get targetZoom(): number;
|
|
99
|
-
/**
|
|
100
|
-
* Get a nicely formatted folder path based on the job
|
|
101
|
-
*
|
|
102
|
-
* @param key optional file key inside of the job folder
|
|
103
|
-
*/
|
|
104
|
-
getJobPath(key?: string): string;
|
|
105
|
-
}
|
|
106
|
-
//# sourceMappingURL=cog.stac.job.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cog.stac.job.d.ts","sourceRoot":"","sources":["../../src/cog/cog.stac.job.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,IAAI,EAMJ,aAAa,EAEd,MAAM,eAAe,CAAC;AACvB,OAAO,EAGL,UAAU,EACV,cAAc,EAGf,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,YAAY,EAA8C,MAAM,iBAAiB,CAAC;AAC3F,OAAO,EAA0B,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAG1F,OAAO,EACL,kBAAkB,EAClB,MAAM,EACN,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,MAAM,WAAW,kBAAkB;IACjC,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,oBAAoB;IACpB,cAAc,EAAE,UAAU,GAAG,cAAc,CAAC;IAE5C,oBAAoB;IACpB,cAAc,EAAE,UAAU,CAAC;IAE3B,6CAA6C;IAC7C,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IAEF,UAAU,EAAE,aAAa,CAAC;IAE1B,QAAQ,CAAC,EAAE;QACT,sBAAsB;QACtB,EAAE,CAAC,EAAE,MAAM,CAAC;QAEZ;;;WAGG;QACH,OAAO,CAAC,EAAE,MAAM,CAAC;QAEjB;;;WAGG;QACH,WAAW,CAAC,EAAE,MAAM,CAAC;QAErB;;WAEG;QACH,UAAU,CAAC,EAAE,IAAI,CAAC;QAElB;;WAEG;QACH,YAAY,CAAC,EAAE,MAAM,CAAC;QAEtB;;;WAGG;QACH,UAAU,CAAC,EAAE,wBAAwB,CAAC;KACvC,CAAC;IAEF;;;OAGG;IACH,KAAK,EAAE,OAAO,CAAC;IAEf,0FAA0F;IAC1F,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,mCAAmC;IACnC,GAAG,EAAE,kBAAkB,CAAC;IACxB,oDAAoD;IACpD,WAAW,EAAE,YAAY,CAAC;IAC1B,qCAAqC;IACrC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,UAAW,YAAW,MAAM;IACvC,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,CAAC,eAAe,CAAC,CAGtB;IAEF;;;;SAIK;WACQ,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAMvD;;;OAGG;WACU,MAAM,CAAC,EAClB,EAAE,EACF,WAAW,EACX,QAAQ,EACR,GAAG,EACH,WAAW,EACX,QAAQ,GACT,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;IAkM3C;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,GAAG,wBAAwB;gBAS9D,IAAI,EAAE,UAAU;IAI5B,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,WAAW,IAAI,MAAM,GAAG,SAAS,CAEpC;IAED,IAAI,MAAM,IAAI,mBAAmB,CAEhC;IAED,IAAI,MAAM,IAAI,mBAAmB,CAEhC;IAED,IAAI,UAAU,IAAI,aAAa,CAO9B;IAED,IAAI,UAAU,IAAI,MAAM,CAMvB;IAED;;;;OAIG;IACH,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM;CAOjC"}
|