@basemaps/shared 7.0.0 → 7.3.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/build/__tests__/api.test.d.ts +0 -1
- package/build/__tests__/api.test.js +38 -37
- package/build/__tests__/api.test.js.map +1 -1
- package/build/__tests__/env.test.d.ts +0 -1
- package/build/__tests__/env.test.js +7 -6
- package/build/__tests__/env.test.js.map +1 -1
- package/build/__tests__/fqdn.test.d.ts +1 -0
- package/build/__tests__/fqdn.test.js +39 -0
- package/build/__tests__/fqdn.test.js.map +1 -0
- package/build/__tests__/url.test.d.ts +0 -1
- package/build/__tests__/url.test.js +11 -10
- package/build/__tests__/url.test.js.map +1 -1
- package/build/__tests__/util.test.d.ts +0 -1
- package/build/__tests__/util.test.js +42 -41
- package/build/__tests__/util.test.js.map +1 -1
- package/build/__tests__/vdom.test.d.ts +0 -1
- package/build/__tests__/vdom.test.js +30 -29
- package/build/__tests__/vdom.test.js.map +1 -1
- package/build/api.d.ts +0 -1
- package/build/api.js +1 -1
- package/build/api.js.map +1 -1
- package/build/cli/__tests__/git.tag.test.d.ts +0 -1
- package/build/cli/__tests__/git.tag.test.js +6 -5
- package/build/cli/__tests__/git.tag.test.js.map +1 -1
- package/build/cli/base.d.ts +0 -2
- package/build/cli/base.js +30 -9
- package/build/cli/base.js.map +1 -1
- package/build/cli/git.tag.d.ts +0 -1
- package/build/cli/info.d.ts +0 -2
- package/build/cli/info.js +3 -5
- package/build/cli/info.js.map +1 -1
- package/build/config.d.ts +0 -1
- package/build/config.js +1 -1
- package/build/config.js.map +1 -1
- package/build/const.d.ts +0 -1
- package/build/const.js +1 -1
- package/build/const.js.map +1 -1
- package/build/dynamo/__tests__/config.dynamo.test.d.ts +0 -1
- package/build/dynamo/__tests__/config.dynamo.test.js +71 -41
- package/build/dynamo/__tests__/config.dynamo.test.js.map +1 -1
- package/build/dynamo/__tests__/config.imagery.test.d.ts +0 -1
- package/build/dynamo/__tests__/config.imagery.test.js +41 -47
- package/build/dynamo/__tests__/config.imagery.test.js.map +1 -1
- package/build/dynamo/__tests__/config.provider.test.d.ts +0 -1
- package/build/dynamo/__tests__/config.provider.test.js +6 -5
- package/build/dynamo/__tests__/config.provider.test.js.map +1 -1
- package/build/dynamo/dynamo.config.base.d.ts +0 -1
- package/build/dynamo/dynamo.config.base.js +18 -11
- package/build/dynamo/dynamo.config.base.js.map +1 -1
- package/build/dynamo/dynamo.config.cached.d.ts +0 -1
- package/build/dynamo/dynamo.config.cached.js +6 -1
- package/build/dynamo/dynamo.config.cached.js.map +1 -1
- package/build/dynamo/dynamo.config.d.ts +42 -5
- package/build/dynamo/dynamo.config.js +55 -8
- package/build/dynamo/dynamo.config.js.map +1 -1
- package/build/file.system.d.ts +26 -0
- package/build/file.system.js +98 -0
- package/build/file.system.js.map +1 -0
- package/build/file.system.middleware.d.ts +20 -0
- package/build/file.system.middleware.js +23 -0
- package/build/file.system.middleware.js.map +1 -0
- package/build/imagery.url.d.ts +67 -0
- package/build/imagery.url.js +50 -0
- package/build/imagery.url.js.map +1 -0
- package/build/index.d.ts +12 -10
- package/build/index.js +12 -8
- package/build/index.js.map +1 -1
- package/build/log.d.ts +0 -1
- package/build/log.js +3 -1
- package/build/log.js.map +1 -1
- package/build/logger.fatal.error.d.ts +0 -1
- package/build/logger.fatal.error.js +6 -0
- package/build/logger.fatal.error.js.map +1 -1
- package/build/url.d.ts +0 -1
- package/build/url.js.map +1 -1
- package/build/util.d.ts +0 -1
- package/build/util.js.map +1 -1
- package/build/vdom.d.ts +0 -1
- package/build/vdom.js +25 -0
- package/build/vdom.js.map +1 -1
- package/package.json +17 -13
- package/CHANGELOG.md +0 -1118
- package/build/__tests__/api.test.d.ts.map +0 -1
- package/build/__tests__/env.test.d.ts.map +0 -1
- package/build/__tests__/url.test.d.ts.map +0 -1
- package/build/__tests__/util.test.d.ts.map +0 -1
- package/build/__tests__/vdom.test.d.ts.map +0 -1
- package/build/api.d.ts.map +0 -1
- package/build/cli/__tests__/git.tag.test.d.ts.map +0 -1
- package/build/cli/base.d.ts.map +0 -1
- package/build/cli/git.tag.d.ts.map +0 -1
- package/build/cli/info.d.ts.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/gdal.config.d.ts +0 -51
- package/build/cog/gdal.config.d.ts.map +0 -1
- package/build/cog/gdal.config.js +0 -23
- package/build/cog/gdal.config.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/composite.error.d.ts +0 -2
- package/build/composite.error.d.ts.map +0 -1
- package/build/composite.error.js +0 -2
- package/build/composite.error.js.map +0 -1
- package/build/config.d.ts.map +0 -1
- package/build/const.d.ts.map +0 -1
- package/build/dynamo/__tests__/config.dynamo.test.d.ts.map +0 -1
- package/build/dynamo/__tests__/config.imagery.test.d.ts.map +0 -1
- package/build/dynamo/__tests__/config.provider.test.d.ts.map +0 -1
- package/build/dynamo/dynamo.config.base.d.ts.map +0 -1
- package/build/dynamo/dynamo.config.cached.d.ts.map +0 -1
- package/build/dynamo/dynamo.config.d.ts.map +0 -1
- package/build/file/__tests__/file.local.test.d.ts +0 -2
- package/build/file/__tests__/file.local.test.d.ts.map +0 -1
- package/build/file/__tests__/file.local.test.js +0 -49
- package/build/file/__tests__/file.local.test.js.map +0 -1
- package/build/file/__tests__/file.operator.test.helper.d.ts +0 -22
- package/build/file/__tests__/file.operator.test.helper.d.ts.map +0 -1
- package/build/file/__tests__/file.operator.test.helper.js +0 -56
- package/build/file/__tests__/file.operator.test.helper.js.map +0 -1
- package/build/file/file.config.d.ts +0 -28
- package/build/file/file.config.d.ts.map +0 -1
- package/build/file/file.config.js +0 -11
- package/build/file/file.config.js.map +0 -1
- package/build/file/index.d.ts +0 -11
- package/build/file/index.d.ts.map +0 -1
- package/build/file/index.js +0 -56
- package/build/file/index.js.map +0 -1
- package/build/index.d.ts.map +0 -1
- package/build/log.d.ts.map +0 -1
- package/build/logger.fatal.error.d.ts.map +0 -1
- package/build/url.d.ts.map +0 -1
- package/build/util.d.ts.map +0 -1
- package/build/vdom.d.ts.map +0 -1
|
@@ -1,11 +1,18 @@
|
|
|
1
|
+
import { BatchGetItemCommand, GetItemCommand, PutItemCommand, } from '@aws-sdk/client-dynamodb';
|
|
2
|
+
import { marshall, unmarshall } from '@aws-sdk/util-dynamodb';
|
|
1
3
|
import { BasemapsConfigObject } from '@basemaps/config';
|
|
2
|
-
import DynamoDB from 'aws-sdk/clients/dynamodb.js';
|
|
3
4
|
function toId(id) {
|
|
4
5
|
return { id: { S: id } };
|
|
5
6
|
}
|
|
6
7
|
export class ConfigDynamoBase extends BasemapsConfigObject {
|
|
7
8
|
constructor(cfg, prefix) {
|
|
8
9
|
super(prefix);
|
|
10
|
+
Object.defineProperty(this, "cfg", {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
configurable: true,
|
|
13
|
+
writable: true,
|
|
14
|
+
value: void 0
|
|
15
|
+
});
|
|
9
16
|
this.cfg = cfg;
|
|
10
17
|
}
|
|
11
18
|
/** Ensure the ID is prefixed before querying */
|
|
@@ -21,22 +28,21 @@ export class ConfigDynamoBase extends BasemapsConfigObject {
|
|
|
21
28
|
return true;
|
|
22
29
|
}
|
|
23
30
|
clone(rec) {
|
|
24
|
-
return
|
|
31
|
+
return unmarshall(marshall(rec));
|
|
25
32
|
}
|
|
26
33
|
async get(key) {
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
34
|
+
const req = new GetItemCommand({ Key: { id: { S: this.ensureId(key) } }, TableName: this.cfg.tableName });
|
|
35
|
+
const item = await this.db.send(req);
|
|
36
|
+
// .promise();
|
|
30
37
|
if (item == null || item.Item == null)
|
|
31
38
|
return null;
|
|
32
|
-
const obj =
|
|
39
|
+
const obj = unmarshall(item.Item);
|
|
33
40
|
if (this.is(obj))
|
|
34
41
|
return obj;
|
|
35
42
|
return null;
|
|
36
43
|
}
|
|
37
44
|
/** Get all records with the id */
|
|
38
45
|
async getAll(keys) {
|
|
39
|
-
var _a;
|
|
40
46
|
let mappedKeys = [];
|
|
41
47
|
for (const key of keys)
|
|
42
48
|
mappedKeys.push(toId(this.ensureId(key)));
|
|
@@ -47,12 +53,12 @@ export class ConfigDynamoBase extends BasemapsConfigObject {
|
|
|
47
53
|
mappedKeys = mappedKeys.length > 100 ? mappedKeys.slice(100) : [];
|
|
48
54
|
let RequestItems = { [this.cfg.tableName]: { Keys } };
|
|
49
55
|
while (RequestItems != null && Object.keys(RequestItems).length > 0) {
|
|
50
|
-
const items = await this.db.
|
|
51
|
-
const metadataItems =
|
|
56
|
+
const items = await this.db.send(new BatchGetItemCommand({ RequestItems }));
|
|
57
|
+
const metadataItems = items.Responses?.[this.cfg.tableName];
|
|
52
58
|
if (metadataItems == null)
|
|
53
59
|
throw new Error('Failed to fetch from ' + this.cfg.tableName);
|
|
54
60
|
for (const row of metadataItems) {
|
|
55
|
-
const item =
|
|
61
|
+
const item = unmarshall(row);
|
|
56
62
|
if (this.is(item))
|
|
57
63
|
output.set(item.id, item);
|
|
58
64
|
}
|
|
@@ -64,7 +70,8 @@ export class ConfigDynamoBase extends BasemapsConfigObject {
|
|
|
64
70
|
}
|
|
65
71
|
async put(record) {
|
|
66
72
|
record.updatedAt = Date.now();
|
|
67
|
-
|
|
73
|
+
const req = new PutItemCommand({ TableName: this.cfg.tableName, Item: marshall(record) });
|
|
74
|
+
await this.db.send(req);
|
|
68
75
|
return record.id;
|
|
69
76
|
}
|
|
70
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamo.config.base.js","sourceRoot":"","sources":["../../src/dynamo/dynamo.config.base.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"dynamo.config.base.js","sourceRoot":"","sources":["../../src/dynamo/dynamo.config.base.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,12 @@ import { ConfigDynamoBase } from './dynamo.config.base.js';
|
|
|
2
2
|
export class ConfigDynamoCached extends ConfigDynamoBase {
|
|
3
3
|
constructor() {
|
|
4
4
|
super(...arguments);
|
|
5
|
-
this
|
|
5
|
+
Object.defineProperty(this, "cache", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
configurable: true,
|
|
8
|
+
writable: true,
|
|
9
|
+
value: new Map()
|
|
10
|
+
});
|
|
6
11
|
}
|
|
7
12
|
async get(id) {
|
|
8
13
|
const queryKey = this.ensureId(id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamo.config.cached.js","sourceRoot":"","sources":["../../src/dynamo/dynamo.config.cached.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dynamo.config.cached.js","sourceRoot":"","sources":["../../src/dynamo/dynamo.config.cached.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,OAAO,kBAAyC,SAAQ,gBAAmB;IAAjF;;QACE;;;;mBAAwB,IAAI,GAAG,EAAE;WAAC;IAqCpC,CAAC;IAnCiB,KAAK,CAAC,GAAG,CAAC,EAAU;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,QAAQ,GAAyB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9D,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACrB,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,QAAQ,IAAI,IAAI;gBAAE,OAAO,IAAI,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEe,KAAK,CAAC,MAAM,CAAC,GAAgB;QAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAa,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAElC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC1C,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACxC,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC/B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBACxB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { DynamoDB } from '@aws-sdk/client-dynamodb';
|
|
2
|
+
import { BaseConfig, BasemapsConfigProvider, ConfigPrefix, ConfigProvider, ConfigTileSet, ConfigVectorStyle } from '@basemaps/config';
|
|
3
3
|
import { ConfigDynamoBase } from './dynamo.config.base.js';
|
|
4
4
|
import { ConfigDynamoCached } from './dynamo.config.cached.js';
|
|
5
5
|
export declare class ConfigProviderDynamo extends BasemapsConfigProvider {
|
|
@@ -7,12 +7,49 @@ export declare class ConfigProviderDynamo extends BasemapsConfigProvider {
|
|
|
7
7
|
dynamo: DynamoDB;
|
|
8
8
|
tableName: string;
|
|
9
9
|
type: "dynamo";
|
|
10
|
-
Imagery: ConfigDynamoCached<
|
|
10
|
+
Imagery: ConfigDynamoCached<{
|
|
11
|
+
id: string;
|
|
12
|
+
name: string;
|
|
13
|
+
projection: import("@basemaps/geo").EpsgCode;
|
|
14
|
+
tileMatrix: string;
|
|
15
|
+
title: string;
|
|
16
|
+
uri: string;
|
|
17
|
+
bounds: {
|
|
18
|
+
x: number;
|
|
19
|
+
y: number;
|
|
20
|
+
width: number;
|
|
21
|
+
height: number;
|
|
22
|
+
};
|
|
23
|
+
files: {
|
|
24
|
+
name: string;
|
|
25
|
+
x: number;
|
|
26
|
+
y: number;
|
|
27
|
+
width: number;
|
|
28
|
+
height: number;
|
|
29
|
+
}[];
|
|
30
|
+
updatedAt?: number | undefined;
|
|
31
|
+
virtual?: boolean | undefined;
|
|
32
|
+
category?: string | undefined;
|
|
33
|
+
bands?: ("float16" | "float32" | "uint8" | "uint16")[] | undefined;
|
|
34
|
+
noData?: number | undefined;
|
|
35
|
+
overviews?: {
|
|
36
|
+
path: string;
|
|
37
|
+
minZoom: number;
|
|
38
|
+
maxZoom: number;
|
|
39
|
+
} | undefined;
|
|
40
|
+
}>;
|
|
11
41
|
Style: ConfigDynamoCached<ConfigVectorStyle>;
|
|
12
42
|
TileSet: ConfigDynamoBase<ConfigTileSet>;
|
|
13
43
|
Provider: ConfigDynamoCached<ConfigProvider>;
|
|
14
|
-
ConfigBundle: ConfigDynamoBase<
|
|
44
|
+
ConfigBundle: ConfigDynamoBase<{
|
|
45
|
+
path: string;
|
|
46
|
+
id: string;
|
|
47
|
+
name: string;
|
|
48
|
+
hash: string;
|
|
49
|
+
updatedAt?: number | undefined;
|
|
50
|
+
virtual?: boolean | undefined;
|
|
51
|
+
assets?: string | undefined;
|
|
52
|
+
}>;
|
|
15
53
|
constructor(tableName: string);
|
|
16
54
|
record(): BaseConfig;
|
|
17
55
|
}
|
|
18
|
-
//# sourceMappingURL=dynamo.config.d.ts.map
|
|
@@ -1,17 +1,64 @@
|
|
|
1
|
+
import { DynamoDB } from '@aws-sdk/client-dynamodb';
|
|
1
2
|
import { BasemapsConfigProvider, ConfigPrefix, } from '@basemaps/config';
|
|
2
|
-
import DynamoDB from 'aws-sdk/clients/dynamodb.js';
|
|
3
3
|
import { ConfigDynamoBase } from './dynamo.config.base.js';
|
|
4
4
|
import { ConfigDynamoCached } from './dynamo.config.cached.js';
|
|
5
5
|
export class ConfigProviderDynamo extends BasemapsConfigProvider {
|
|
6
6
|
constructor(tableName) {
|
|
7
7
|
super();
|
|
8
|
-
this
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
Object.defineProperty(this, "Prefix", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
configurable: true,
|
|
11
|
+
writable: true,
|
|
12
|
+
value: ConfigPrefix
|
|
13
|
+
});
|
|
14
|
+
Object.defineProperty(this, "dynamo", {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
configurable: true,
|
|
17
|
+
writable: true,
|
|
18
|
+
value: void 0
|
|
19
|
+
});
|
|
20
|
+
Object.defineProperty(this, "tableName", {
|
|
21
|
+
enumerable: true,
|
|
22
|
+
configurable: true,
|
|
23
|
+
writable: true,
|
|
24
|
+
value: void 0
|
|
25
|
+
});
|
|
26
|
+
Object.defineProperty(this, "type", {
|
|
27
|
+
enumerable: true,
|
|
28
|
+
configurable: true,
|
|
29
|
+
writable: true,
|
|
30
|
+
value: 'dynamo'
|
|
31
|
+
});
|
|
32
|
+
Object.defineProperty(this, "Imagery", {
|
|
33
|
+
enumerable: true,
|
|
34
|
+
configurable: true,
|
|
35
|
+
writable: true,
|
|
36
|
+
value: new ConfigDynamoCached(this, ConfigPrefix.Imagery)
|
|
37
|
+
});
|
|
38
|
+
Object.defineProperty(this, "Style", {
|
|
39
|
+
enumerable: true,
|
|
40
|
+
configurable: true,
|
|
41
|
+
writable: true,
|
|
42
|
+
value: new ConfigDynamoCached(this, ConfigPrefix.Style)
|
|
43
|
+
});
|
|
44
|
+
Object.defineProperty(this, "TileSet", {
|
|
45
|
+
enumerable: true,
|
|
46
|
+
configurable: true,
|
|
47
|
+
writable: true,
|
|
48
|
+
value: new ConfigDynamoBase(this, ConfigPrefix.TileSet)
|
|
49
|
+
});
|
|
50
|
+
Object.defineProperty(this, "Provider", {
|
|
51
|
+
enumerable: true,
|
|
52
|
+
configurable: true,
|
|
53
|
+
writable: true,
|
|
54
|
+
value: new ConfigDynamoCached(this, ConfigPrefix.Provider)
|
|
55
|
+
});
|
|
56
|
+
Object.defineProperty(this, "ConfigBundle", {
|
|
57
|
+
enumerable: true,
|
|
58
|
+
configurable: true,
|
|
59
|
+
writable: true,
|
|
60
|
+
value: new ConfigDynamoBase(this, ConfigPrefix.ConfigBundle)
|
|
61
|
+
});
|
|
15
62
|
this.dynamo = new DynamoDB({ region: 'ap-southeast-2' });
|
|
16
63
|
this.tableName = tableName;
|
|
17
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamo.config.js","sourceRoot":"","sources":["../../src/dynamo/dynamo.config.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"dynamo.config.js","sourceRoot":"","sources":["../../src/dynamo/dynamo.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAEL,sBAAsB,EAGtB,YAAY,GAIb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,MAAM,OAAO,oBAAqB,SAAQ,sBAAsB;IAa9D,YAAY,SAAiB;QAC3B,KAAK,EAAE,CAAC;QAbV;;;;mBAAS,YAAY;WAAC;QAEtB;;;;;WAAiB;QACjB;;;;;WAAkB;QAClB;;;;mBAAO,QAAiB;WAAC;QAEzB;;;;mBAAU,IAAI,kBAAkB,CAAgB,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC;WAAC;QAC5E;;;;mBAAQ,IAAI,kBAAkB,CAAoB,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC;WAAC;QAC5E;;;;mBAAU,IAAI,gBAAgB,CAAgB,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC;WAAC;QAC1E;;;;mBAAW,IAAI,kBAAkB,CAAiB,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC;WAAC;QAC/E;;;;mBAAe,IAAI,gBAAgB,CAAe,IAAI,EAAE,YAAY,CAAC,YAAY,CAAC;WAAC;QAIjF,IAAI,CAAC,MAAM,GAAG,IAAI,QAAQ,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,MAAM;QACJ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IAC9C,CAAC;CACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { FsAwsS3 } from '@chunkd/fs-aws';
|
|
2
|
+
import { SourceCache, SourceChunk } from '@chunkd/middleware';
|
|
3
|
+
import type { SourceCallback, SourceRequest } from '@chunkd/source';
|
|
4
|
+
export declare const s3Fs: FsAwsS3;
|
|
5
|
+
export declare const s3FsPublic: FsAwsS3;
|
|
6
|
+
export declare const Fsa: import("@chunkd/fs/build/src/file.system.abstraction.js").FileSystemAbstraction;
|
|
7
|
+
export declare const FsaChunk: SourceChunk;
|
|
8
|
+
export declare const FsaCache: SourceCache;
|
|
9
|
+
export declare const FsaLog: {
|
|
10
|
+
name: string;
|
|
11
|
+
count: number;
|
|
12
|
+
requests: string[];
|
|
13
|
+
fetch(req: SourceRequest, next: SourceCallback): Promise<ArrayBuffer>;
|
|
14
|
+
reset(): void;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* When chunkd moves to URLs this can be removed
|
|
18
|
+
*
|
|
19
|
+
* But reading a file as a string with `file://....` does not work in node
|
|
20
|
+
* it needs to be converted with `fileURLToPath`
|
|
21
|
+
*/
|
|
22
|
+
export declare function urlToString(u: URL): string;
|
|
23
|
+
/**
|
|
24
|
+
* Ensure a folder has a trailing slash
|
|
25
|
+
**/
|
|
26
|
+
export declare function stringToUrlFolder(str: string): URL;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { fileURLToPath } from 'node:url';
|
|
2
|
+
import { S3Client } from '@aws-sdk/client-s3';
|
|
3
|
+
import { sha256base58 } from '@basemaps/config';
|
|
4
|
+
import { fsa, FsHttp } from '@chunkd/fs';
|
|
5
|
+
import { AwsS3CredentialProvider, FsAwsS3 } from '@chunkd/fs-aws';
|
|
6
|
+
import { SourceCache, SourceChunk } from '@chunkd/middleware';
|
|
7
|
+
import { Env } from './const.js';
|
|
8
|
+
import { Fqdn } from './file.system.middleware.js';
|
|
9
|
+
import { LogConfig } from './log.js';
|
|
10
|
+
export const s3Fs = new FsAwsS3(new S3Client({
|
|
11
|
+
/**
|
|
12
|
+
* We buckets in multiple regions we do not know ahead of time which bucket is in what region
|
|
13
|
+
*
|
|
14
|
+
* So the S3 Client will have to follow the endpoints, this adds a bit of extra latency as requests have to be retried
|
|
15
|
+
*/
|
|
16
|
+
followRegionRedirects: true,
|
|
17
|
+
}));
|
|
18
|
+
// For public URLS use --no-sign-request
|
|
19
|
+
export const s3FsPublic = new FsAwsS3(new S3Client({
|
|
20
|
+
followRegionRedirects: true,
|
|
21
|
+
signer: {
|
|
22
|
+
sign: async (req) => req,
|
|
23
|
+
},
|
|
24
|
+
}));
|
|
25
|
+
/** Ensure middleware are added to all s3 clients that are created */
|
|
26
|
+
function applyS3MiddleWare(fs) {
|
|
27
|
+
if (fs.s3 == null)
|
|
28
|
+
return;
|
|
29
|
+
fs.s3.middlewareStack.add(Fqdn.middleware, { name: 'FQDN', step: 'finalizeRequest' });
|
|
30
|
+
}
|
|
31
|
+
applyS3MiddleWare(s3FsPublic);
|
|
32
|
+
applyS3MiddleWare(s3Fs);
|
|
33
|
+
const credentials = new AwsS3CredentialProvider();
|
|
34
|
+
credentials.onFileSystemCreated = (acc, fs) => {
|
|
35
|
+
LogConfig.get().debug({ prefix: acc.prefix, roleArn: acc.roleArn }, 'FileSystem:Register');
|
|
36
|
+
applyS3MiddleWare(fs);
|
|
37
|
+
fsa.register(acc.prefix, fs);
|
|
38
|
+
};
|
|
39
|
+
const credentialPath = Env.get(Env.AwsRoleConfigPath);
|
|
40
|
+
if (credentialPath)
|
|
41
|
+
credentials.registerConfig(fsa.toUrl(credentialPath), s3Fs);
|
|
42
|
+
s3Fs.credentials = credentials;
|
|
43
|
+
fsa.register('https://', new FsHttp());
|
|
44
|
+
fsa.register('s3://', s3Fs);
|
|
45
|
+
fsa.register('s3://nz-imagery', s3FsPublic);
|
|
46
|
+
fsa.register('s3://nz-elevation', s3FsPublic);
|
|
47
|
+
export const Fsa = fsa;
|
|
48
|
+
export const FsaChunk = new SourceChunk({ size: 128 * 1024 });
|
|
49
|
+
fsa.middleware.push(FsaChunk);
|
|
50
|
+
export const FsaCache = new SourceCache({ size: 256 * 1024 * 1024 }); // 256MB of cache
|
|
51
|
+
fsa.middleware.push(FsaCache);
|
|
52
|
+
// Logging middleware
|
|
53
|
+
export const FsaLog = {
|
|
54
|
+
name: 'logger',
|
|
55
|
+
count: 0,
|
|
56
|
+
requests: [],
|
|
57
|
+
async fetch(req, next) {
|
|
58
|
+
this.count++;
|
|
59
|
+
const requestId = sha256base58(JSON.stringify({ source: req.source.url.href, offset: req.offset, length: req.length }));
|
|
60
|
+
this.requests.push(requestId);
|
|
61
|
+
const startTime = performance.now();
|
|
62
|
+
const res = await next(req);
|
|
63
|
+
LogConfig.get().trace({
|
|
64
|
+
source: req.source.url.href,
|
|
65
|
+
offset: req.offset,
|
|
66
|
+
length: req.length,
|
|
67
|
+
requestId,
|
|
68
|
+
duration: performance.now() - startTime,
|
|
69
|
+
}, 'fetch');
|
|
70
|
+
return res;
|
|
71
|
+
},
|
|
72
|
+
reset() {
|
|
73
|
+
this.count = 0;
|
|
74
|
+
this.requests = [];
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
fsa.middleware.push(FsaLog);
|
|
78
|
+
/**
|
|
79
|
+
* When chunkd moves to URLs this can be removed
|
|
80
|
+
*
|
|
81
|
+
* But reading a file as a string with `file://....` does not work in node
|
|
82
|
+
* it needs to be converted with `fileURLToPath`
|
|
83
|
+
*/
|
|
84
|
+
export function urlToString(u) {
|
|
85
|
+
if (u.protocol === 'file:')
|
|
86
|
+
return fileURLToPath(u);
|
|
87
|
+
return u.href;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Ensure a folder has a trailing slash
|
|
91
|
+
**/
|
|
92
|
+
export function stringToUrlFolder(str) {
|
|
93
|
+
const url = fsa.toUrl(str);
|
|
94
|
+
if (url.pathname.endsWith('/'))
|
|
95
|
+
return url;
|
|
96
|
+
return new URL(url.href + '/');
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=file.system.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.system.js","sourceRoot":"","sources":["../src/file.system.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { FinalizeRequestMiddleware, MetadataBearer } from '@smithy/types';
|
|
2
|
+
/** Force fully qualifed domain names (FQDN) for s3 requests to save DNS lookups */
|
|
3
|
+
interface Fqdn {
|
|
4
|
+
/**
|
|
5
|
+
* Should S3 requests be converted to Fully Qualified domains (FQDN)
|
|
6
|
+
*
|
|
7
|
+
* @default false
|
|
8
|
+
*/
|
|
9
|
+
isForcedFqdn: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* AWS SDK middleware function to force fully qualified domain name on s3 requests
|
|
12
|
+
*
|
|
13
|
+
* AWS S3 inside of kubernetes triggers a lot of DNS requests
|
|
14
|
+
* by forcing a fully qualified domain name lookup (trailing ".")
|
|
15
|
+
* it greatly reduces the number of DNS requests we make
|
|
16
|
+
*/
|
|
17
|
+
middleware: FinalizeRequestMiddleware<object, MetadataBearer>;
|
|
18
|
+
}
|
|
19
|
+
export declare const Fqdn: Fqdn;
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export const Fqdn = {
|
|
2
|
+
isForcedFqdn: false,
|
|
3
|
+
middleware: (next) => {
|
|
4
|
+
return (args) => {
|
|
5
|
+
// Forced FQDN is disabled
|
|
6
|
+
if (Fqdn.isForcedFqdn === false)
|
|
7
|
+
return next(args);
|
|
8
|
+
if (hasHostName(args.request) && args.request.hostname.endsWith('.s3.ap-southeast-2.amazonaws.com')) {
|
|
9
|
+
args.request.hostname += '.';
|
|
10
|
+
}
|
|
11
|
+
return next(args);
|
|
12
|
+
};
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
/** Check to see if hostname exists inside of a object */
|
|
16
|
+
function hasHostName(x) {
|
|
17
|
+
if (x == null)
|
|
18
|
+
return false;
|
|
19
|
+
if (typeof x === 'object' && 'hostname' in x && typeof x.hostname === 'string')
|
|
20
|
+
return true;
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=file.system.middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.system.middleware.js","sourceRoot":"","sources":["../src/file.system.middleware.ts"],"names":[],"mappings":"AAmBA,MAAM,CAAC,MAAM,IAAI,GAAS;IACxB,YAAY,EAAE,KAAK;IACnB,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;QACnB,OAAO,CAAC,IAAI,EAAE,EAAE;YACd,0BAA0B;YAC1B,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK;gBAAE,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;YAEnD,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,kCAAkC,CAAC,EAAE,CAAC;gBACpG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,GAAG,CAAC;YAC/B,CAAC;YACD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,yDAAyD;AACzD,SAAS,WAAW,CAAC,CAAU;IAC7B,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IAC5B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,UAAU,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC5F,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { ConfigImagery } from '@basemaps/config';
|
|
2
|
+
import { Size } from '@basemaps/geo';
|
|
3
|
+
export declare const PreviewSize: {
|
|
4
|
+
width: number;
|
|
5
|
+
height: number;
|
|
6
|
+
};
|
|
7
|
+
export declare function getImageryCenterZoom(im: ConfigImagery, previewSize: Size): {
|
|
8
|
+
lat: number;
|
|
9
|
+
lon: number;
|
|
10
|
+
zoom: number;
|
|
11
|
+
};
|
|
12
|
+
export interface PreviewConfig {
|
|
13
|
+
/** imagery to create a preview URL for */
|
|
14
|
+
imagery: ConfigImagery;
|
|
15
|
+
/** output preview size */
|
|
16
|
+
size?: Size;
|
|
17
|
+
/** optional configuration location */
|
|
18
|
+
config?: string;
|
|
19
|
+
/** optional pipeline to use */
|
|
20
|
+
pipeline?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface PreviewResult {
|
|
23
|
+
/**
|
|
24
|
+
* relative URL to the preview location
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
*
|
|
28
|
+
* "/v1/preview/..."
|
|
29
|
+
*/
|
|
30
|
+
url: string;
|
|
31
|
+
/**
|
|
32
|
+
* standardized name of the layer
|
|
33
|
+
*/
|
|
34
|
+
name: string;
|
|
35
|
+
/**
|
|
36
|
+
* location slug useful for basemaps links
|
|
37
|
+
*
|
|
38
|
+
* @example "@-36.5518610,174.8770907,z8"
|
|
39
|
+
*/
|
|
40
|
+
slug: string;
|
|
41
|
+
/**
|
|
42
|
+
* Components of the slug broken out into their parts
|
|
43
|
+
*/
|
|
44
|
+
location: {
|
|
45
|
+
lat: number;
|
|
46
|
+
lon: number;
|
|
47
|
+
zoom: number;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Query string parameters for t he preview including config and pipeline if needed
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* "?config=s3://...&pipeline=terrain-rgb"
|
|
54
|
+
*/
|
|
55
|
+
query: string;
|
|
56
|
+
}
|
|
57
|
+
export declare function getPreviewUrl(ctx: PreviewConfig): PreviewResult;
|
|
58
|
+
/**
|
|
59
|
+
* Create a query string for a preview URL using pipeline and configuration if they are needed
|
|
60
|
+
*
|
|
61
|
+
* @param ctx
|
|
62
|
+
* @returns a query string prefixed with `?` if it is needed, empty string otherwise
|
|
63
|
+
*/
|
|
64
|
+
export declare function getPreviewQuery(ctx: {
|
|
65
|
+
config?: string | null;
|
|
66
|
+
pipeline?: string | null;
|
|
67
|
+
}): string;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { standardizeLayerName } from '@basemaps/config';
|
|
2
|
+
import { Projection, TileMatrixSets } from '@basemaps/geo';
|
|
3
|
+
export const PreviewSize = { width: 1200, height: 630 };
|
|
4
|
+
export function getImageryCenterZoom(im, previewSize) {
|
|
5
|
+
const center = { x: im.bounds.x + im.bounds.width / 2, y: im.bounds.y + im.bounds.height / 2 };
|
|
6
|
+
// Find a approximate GSD needed to show most of the imagery
|
|
7
|
+
const aspectWidth = im.bounds.width / previewSize.width;
|
|
8
|
+
const aspectHeight = im.bounds.height / previewSize.height;
|
|
9
|
+
const bestAspect = Math.min(aspectHeight, aspectWidth);
|
|
10
|
+
const tms = TileMatrixSets.find(im.tileMatrix);
|
|
11
|
+
if (tms == null)
|
|
12
|
+
throw new Error(`Failed to lookup tileMatrix: ${im.tileMatrix}`);
|
|
13
|
+
const proj = Projection.get(tms);
|
|
14
|
+
const centerLatLon = proj.toWgs84([center.x, center.y]);
|
|
15
|
+
const targetZoom = Math.max(tms.findBestZoom(bestAspect) - 12, 0);
|
|
16
|
+
return { lat: centerLatLon[1], lon: centerLatLon[0], zoom: targetZoom };
|
|
17
|
+
}
|
|
18
|
+
export function getPreviewUrl(ctx) {
|
|
19
|
+
const location = getImageryCenterZoom(ctx.imagery, ctx.size ?? PreviewSize);
|
|
20
|
+
const targetZoom = location.zoom;
|
|
21
|
+
const lat = location.lat.toFixed(7);
|
|
22
|
+
const lon = location.lon.toFixed(7);
|
|
23
|
+
const slug = `@${lat},${lon},z${location.zoom}`;
|
|
24
|
+
const name = standardizeLayerName(ctx.imagery.name);
|
|
25
|
+
const query = getPreviewQuery(ctx);
|
|
26
|
+
return {
|
|
27
|
+
name,
|
|
28
|
+
location,
|
|
29
|
+
slug,
|
|
30
|
+
query,
|
|
31
|
+
url: `/v1/preview/${name}/${ctx.imagery.tileMatrix}/${targetZoom}/${lon}/${lat}${query}`,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Create a query string for a preview URL using pipeline and configuration if they are needed
|
|
36
|
+
*
|
|
37
|
+
* @param ctx
|
|
38
|
+
* @returns a query string prefixed with `?` if it is needed, empty string otherwise
|
|
39
|
+
*/
|
|
40
|
+
export function getPreviewQuery(ctx) {
|
|
41
|
+
const urlSearch = new URLSearchParams();
|
|
42
|
+
if (ctx.config)
|
|
43
|
+
urlSearch.set('config', ctx.config);
|
|
44
|
+
if (ctx.pipeline)
|
|
45
|
+
urlSearch.set('pipeline', ctx.pipeline);
|
|
46
|
+
if (urlSearch.size === 0)
|
|
47
|
+
return '';
|
|
48
|
+
return '?' + urlSearch.toString();
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=imagery.url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imagery.url.js","sourceRoot":"","sources":["../src/imagery.url.ts"],"names":[],"mappings":"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"}
|
package/build/index.d.ts
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
|
+
export * from './api.js';
|
|
2
|
+
export { getDefaultConfig, setDefaultConfig } from './config.js';
|
|
1
3
|
export { Const, Env } from './const.js';
|
|
4
|
+
export { ConfigDynamoBase } from './dynamo/dynamo.config.base.js';
|
|
5
|
+
export { ConfigProviderDynamo } from './dynamo/dynamo.config.js';
|
|
6
|
+
export { Fsa as fsa, FsaCache, FsaChunk, FsaLog, stringToUrlFolder, urlToString } from './file.system.js';
|
|
7
|
+
export { Fqdn } from './file.system.middleware.js';
|
|
8
|
+
export { getImageryCenterZoom, getPreviewQuery, getPreviewUrl, PreviewSize } from './imagery.url.js';
|
|
2
9
|
export { LogConfig, LogType } from './log.js';
|
|
3
|
-
export * from './api.js';
|
|
4
|
-
export { V, VNode, VNodeElement, VNodeText } from './vdom.js';
|
|
5
10
|
export { LoggerFatalError } from './logger.fatal.error.js';
|
|
6
|
-
export { setDefaultConfig, getDefaultConfig } from './config.js';
|
|
7
11
|
export { toQueryString } from './url.js';
|
|
8
|
-
export { CompositeError } from './composite.error.js';
|
|
9
|
-
export { ConfigProviderDynamo } from './dynamo/dynamo.config.js';
|
|
10
|
-
export { ConfigDynamoBase } from './dynamo/dynamo.config.base.js';
|
|
11
|
-
export { CogJobJson, CogBuilderMetadata, CogJob, FeatureCollectionWithCrs, SourceMetadata } from './cog/types.js';
|
|
12
|
-
export { AlignedLevel, CoveringFraction } from './cog/constants.js';
|
|
13
|
-
export * from './file/index.js';
|
|
14
12
|
export * from './util.js';
|
|
15
|
-
|
|
13
|
+
export { V, VNode, VNodeElement, VNodeText } from './vdom.js';
|
|
14
|
+
export { FsMemory } from '@chunkd/fs';
|
|
15
|
+
export { SourceMemory } from '@chunkd/source-memory';
|
|
16
|
+
export { Tiff, TiffTag } from '@cogeotiff/core';
|
|
17
|
+
export { Cotar } from '@cotar/core';
|
package/build/index.js
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
// Force aws-sdk connection reuse
|
|
2
2
|
process.env['AWS_NODEJS_CONNECTION_REUSE_ENABLED'] = '1';
|
|
3
|
+
export * from './api.js';
|
|
4
|
+
export { getDefaultConfig, setDefaultConfig } from './config.js';
|
|
3
5
|
export { Const, Env } from './const.js';
|
|
6
|
+
export { ConfigDynamoBase } from './dynamo/dynamo.config.base.js';
|
|
7
|
+
export { ConfigProviderDynamo } from './dynamo/dynamo.config.js';
|
|
8
|
+
export { Fsa as fsa, FsaCache, FsaChunk, FsaLog, stringToUrlFolder, urlToString } from './file.system.js';
|
|
9
|
+
export { Fqdn } from './file.system.middleware.js';
|
|
10
|
+
export { getImageryCenterZoom, getPreviewQuery, getPreviewUrl, PreviewSize } from './imagery.url.js';
|
|
4
11
|
export { LogConfig } from './log.js';
|
|
5
|
-
export * from './api.js';
|
|
6
|
-
export { V, VNode, VNodeElement, VNodeText } from './vdom.js';
|
|
7
12
|
export { LoggerFatalError } from './logger.fatal.error.js';
|
|
8
|
-
export { setDefaultConfig, getDefaultConfig } from './config.js';
|
|
9
13
|
export { toQueryString } from './url.js';
|
|
10
|
-
export { CompositeError } from './composite.error.js';
|
|
11
|
-
export { ConfigProviderDynamo } from './dynamo/dynamo.config.js';
|
|
12
|
-
export { ConfigDynamoBase } from './dynamo/dynamo.config.base.js';
|
|
13
|
-
export { AlignedLevel, CoveringFraction } from './cog/constants.js';
|
|
14
|
-
export * from './file/index.js';
|
|
15
14
|
export * from './util.js';
|
|
15
|
+
export { V, VNode, VNodeElement, VNodeText } from './vdom.js';
|
|
16
|
+
export { FsMemory } from '@chunkd/fs';
|
|
17
|
+
export { SourceMemory } from '@chunkd/source-memory';
|
|
18
|
+
export { Tiff, TiffTag } from '@cogeotiff/core';
|
|
19
|
+
export { Cotar } from '@cotar/core';
|
|
16
20
|
//# sourceMappingURL=index.js.map
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,GAAG,GAAG,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,GAAG,GAAG,CAAC;AACzD,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,GAAG,IAAI,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC1G,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACrG,OAAO,EAAE,SAAS,EAAW,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC"}
|