@basemaps/cli 7.16.0 → 8.0.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.
Files changed (34) hide show
  1. package/README.md +4 -28
  2. package/build/cli/bin.js +9 -2
  3. package/build/cli/bin.js.map +1 -1
  4. package/build/cli/index.d.ts +245 -4
  5. package/build/cli/index.js +11 -19
  6. package/build/cli/index.js.map +1 -1
  7. package/package.json +6 -27
  8. package/build/cli/__tests__/util.test.d.ts +0 -1
  9. package/build/cli/__tests__/util.test.js +0 -15
  10. package/build/cli/__tests__/util.test.js.map +0 -1
  11. package/build/cli/config/action.bundle.assets.d.ts +0 -14
  12. package/build/cli/config/action.bundle.assets.js +0 -111
  13. package/build/cli/config/action.bundle.assets.js.map +0 -1
  14. package/build/cli/config/action.bundle.d.ts +0 -12
  15. package/build/cli/config/action.bundle.js +0 -76
  16. package/build/cli/config/action.bundle.js.map +0 -1
  17. package/build/cli/config/action.import.d.ts +0 -59
  18. package/build/cli/config/action.import.js +0 -378
  19. package/build/cli/config/action.import.js.map +0 -1
  20. package/build/cli/config/config.diff.d.ts +0 -27
  21. package/build/cli/config/config.diff.js +0 -146
  22. package/build/cli/config/config.diff.js.map +0 -1
  23. package/build/cli/config/config.update.d.ts +0 -24
  24. package/build/cli/config/config.update.js +0 -115
  25. package/build/cli/config/config.update.js.map +0 -1
  26. package/build/cli/folder.d.ts +0 -4
  27. package/build/cli/folder.js +0 -17
  28. package/build/cli/folder.js.map +0 -1
  29. package/build/cli/server/action.serve.d.ts +0 -11
  30. package/build/cli/server/action.serve.js +0 -69
  31. package/build/cli/server/action.serve.js.map +0 -1
  32. package/build/cli/util.d.ts +0 -23
  33. package/build/cli/util.js +0 -136
  34. package/build/cli/util.js.map +0 -1
@@ -1,24 +0,0 @@
1
- import { BaseConfig, BasemapsConfigObject, BasemapsConfigProvider, ConfigImagery, ConfigPrefix, ConfigProvider, ConfigTileSet, ConfigVectorStyle } from '@basemaps/config';
2
- import { LogType } from '@basemaps/shared';
3
- export declare const Q: import("p-limit").LimitFunction;
4
- export declare class Updater<S extends BaseConfig = BaseConfig> {
5
- config: S;
6
- _oldData?: Promise<ConfigImagery | ConfigTileSet | ConfigProvider | ConfigVectorStyle | null>;
7
- prefix: ConfigPrefix;
8
- isCommit: boolean;
9
- logger: LogType;
10
- cfg: BasemapsConfigProvider;
11
- /**
12
- * Class to apply an TileSetConfig source to the tile metadata db
13
- * @param config a string or TileSetConfig to use
14
- */
15
- constructor(config: S, oldConfig: BasemapsConfigProvider, isCommit: boolean);
16
- getDB(): BasemapsConfigObject<ConfigTileSet | ConfigImagery | ConfigProvider | ConfigVectorStyle>;
17
- getConfig(): ConfigTileSet | ConfigImagery | ConfigProvider | ConfigVectorStyle;
18
- invalidatePath(): string;
19
- getOldData(): Promise<ConfigImagery | ConfigTileSet | ConfigProvider | ConfigVectorStyle | null>;
20
- /**
21
- * Reconcile the differences between the config and the tile metadata DB and update if changed.
22
- */
23
- reconcile(): Promise<boolean>;
24
- }
@@ -1,115 +0,0 @@
1
- import { ConfigId, ConfigPrefix, } from '@basemaps/config';
2
- import { ConfigDynamoBase, LogConfig } from '@basemaps/shared';
3
- import PLimit from 'p-limit';
4
- import { ConfigDiff } from './config.diff.js';
5
- export const Q = PLimit(10);
6
- export class Updater {
7
- /**
8
- * Class to apply an TileSetConfig source to the tile metadata db
9
- * @param config a string or TileSetConfig to use
10
- */
11
- constructor(config, oldConfig, isCommit) {
12
- Object.defineProperty(this, "config", {
13
- enumerable: true,
14
- configurable: true,
15
- writable: true,
16
- value: void 0
17
- });
18
- Object.defineProperty(this, "_oldData", {
19
- enumerable: true,
20
- configurable: true,
21
- writable: true,
22
- value: void 0
23
- });
24
- Object.defineProperty(this, "prefix", {
25
- enumerable: true,
26
- configurable: true,
27
- writable: true,
28
- value: void 0
29
- });
30
- Object.defineProperty(this, "isCommit", {
31
- enumerable: true,
32
- configurable: true,
33
- writable: true,
34
- value: void 0
35
- });
36
- Object.defineProperty(this, "logger", {
37
- enumerable: true,
38
- configurable: true,
39
- writable: true,
40
- value: void 0
41
- });
42
- Object.defineProperty(this, "cfg", {
43
- enumerable: true,
44
- configurable: true,
45
- writable: true,
46
- value: void 0
47
- });
48
- this.config = config;
49
- this.cfg = oldConfig;
50
- const prefix = ConfigId.getPrefix(config.id);
51
- if (prefix == null)
52
- throw new Error(`Incorrect Config Id ${config.id}`);
53
- this.prefix = prefix;
54
- this.isCommit = isCommit ? isCommit : false;
55
- this.logger = LogConfig.get();
56
- }
57
- getDB() {
58
- if (this.prefix === ConfigPrefix.Imagery)
59
- return this.cfg.Imagery;
60
- if (this.prefix === ConfigPrefix.TileSet)
61
- return this.cfg.TileSet;
62
- if (this.prefix === ConfigPrefix.Provider)
63
- return this.cfg.Provider;
64
- if (this.prefix === ConfigPrefix.Style)
65
- return this.cfg.Style;
66
- throw Error(`Unable to find the database table for prefix ${this.prefix}`);
67
- }
68
- getConfig() {
69
- if (this.prefix === ConfigPrefix.Imagery)
70
- return this.config;
71
- if (this.prefix === ConfigPrefix.TileSet)
72
- return this.config;
73
- if (this.prefix === ConfigPrefix.Provider)
74
- return this.config;
75
- if (this.prefix === ConfigPrefix.Style)
76
- return this.config;
77
- throw Error(`Failed to cast the config ${this.prefix}`);
78
- }
79
- invalidatePath() {
80
- if (this.prefix === ConfigPrefix.Provider)
81
- return '/v1/*/WMTSCapabilities.xml';
82
- else if (this.prefix === ConfigPrefix.Style)
83
- return `/v1/tiles/togographic/style/${this.config.id.slice(3)}.json`;
84
- else
85
- return `/v1/tiles/${this.config.id.slice(3)}/*`;
86
- }
87
- getOldData() {
88
- if (this._oldData)
89
- return this._oldData;
90
- this._oldData = this.getDB().get(this.config.id);
91
- return this._oldData;
92
- }
93
- /**
94
- * Reconcile the differences between the config and the tile metadata DB and update if changed.
95
- */
96
- async reconcile() {
97
- const newData = this.getConfig();
98
- const db = this.getDB();
99
- const oldData = await this.getOldData();
100
- if (oldData == null || ConfigDiff.showDiff(db.prefix, oldData, newData, this.logger)) {
101
- const operation = oldData == null ? 'Insert' : 'Update';
102
- this.logger.info({ type: db.prefix, record: newData.id, description: newData.name, commit: this.isCommit }, `Change:${operation}`);
103
- if (this.isCommit) {
104
- if (db instanceof ConfigDynamoBase)
105
- await db.put(newData);
106
- else
107
- throw new Error('Unable to commit changes to: ' + db.prefix);
108
- }
109
- return true;
110
- }
111
- this.logger.trace({ type: db.prefix, record: newData.id }, 'NoChanges');
112
- return false;
113
- }
114
- }
115
- //# sourceMappingURL=config.update.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.update.js","sourceRoot":"","sources":["../../../src/cli/config/config.update.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- /** Make a temp folder inside TEMP_FOLDER's path */
2
- export declare function makeTempFolder(folder: string): Promise<string>;
3
- /** Make a tiff folder inside TEMP_FOLDER's path */
4
- export declare function makeTiffFolder(tmpFolder: string, name: string): Promise<string>;
@@ -1,17 +0,0 @@
1
- import { Env } from '@basemaps/shared';
2
- import { promises as fs } from 'fs';
3
- import * as path from 'path';
4
- /** Make a temp folder inside TEMP_FOLDER's path */
5
- export async function makeTempFolder(folder) {
6
- const tempPath = Env.get(Env.TempFolder) ?? '/tmp';
7
- const folderPath = path.join(tempPath, folder);
8
- await fs.mkdir(folderPath, { recursive: true });
9
- return folderPath;
10
- }
11
- /** Make a tiff folder inside TEMP_FOLDER's path */
12
- export async function makeTiffFolder(tmpFolder, name) {
13
- const folderPath = path.join(tmpFolder, name);
14
- await fs.mkdir(folderPath, { recursive: true });
15
- return folderPath;
16
- }
17
- //# sourceMappingURL=folder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"folder.js","sourceRoot":"","sources":["../../src/cli/folder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,mDAAmD;AACnD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAc;IACjD,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC;IACnD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAE/C,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,mDAAmD;AACnD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAiB,EAAE,IAAY;IAClE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAE9C,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -1,11 +0,0 @@
1
- import { CommandLineAction, CommandLineFlagParameter, CommandLineIntegerParameter, CommandLineStringParameter } from '@rushstack/ts-command-line';
2
- /** @deprecated 2024-09 Use the basemaps/server container directly now, and deprecate this later. */
3
- export declare class CommandServe extends CommandLineAction {
4
- config: CommandLineStringParameter;
5
- assets: CommandLineStringParameter;
6
- port: CommandLineIntegerParameter;
7
- noConfig: CommandLineFlagParameter;
8
- constructor();
9
- protected onDefineParameters(): void;
10
- protected onExecute(): Promise<void>;
11
- }
@@ -1,69 +0,0 @@
1
- import { createServer } from '@basemaps/server';
2
- import { Const, Env, LogConfig } from '@basemaps/shared';
3
- import { CommandLineAction, } from '@rushstack/ts-command-line';
4
- const DefaultPort = 5000;
5
- /** @deprecated 2024-09 Use the basemaps/server container directly now, and deprecate this later. */
6
- export class CommandServe extends CommandLineAction {
7
- constructor() {
8
- super({
9
- actionName: 'serve',
10
- summary: 'Cli tool to create sprite sheet',
11
- documentation: 'Create a sprite sheet from a folder of sprites',
12
- });
13
- Object.defineProperty(this, "config", {
14
- enumerable: true,
15
- configurable: true,
16
- writable: true,
17
- value: void 0
18
- });
19
- Object.defineProperty(this, "assets", {
20
- enumerable: true,
21
- configurable: true,
22
- writable: true,
23
- value: void 0
24
- });
25
- Object.defineProperty(this, "port", {
26
- enumerable: true,
27
- configurable: true,
28
- writable: true,
29
- value: void 0
30
- });
31
- Object.defineProperty(this, "noConfig", {
32
- enumerable: true,
33
- configurable: true,
34
- writable: true,
35
- value: void 0
36
- });
37
- }
38
- onDefineParameters() {
39
- this.config = this.defineStringParameter({
40
- argumentName: 'CONFIG',
41
- parameterLongName: '--config',
42
- description: 'Configuration source to use',
43
- });
44
- this.assets = this.defineStringParameter({
45
- argumentName: 'ASSETS',
46
- parameterLongName: '--assets',
47
- description: 'Where the assets (sprites, fonts) are located',
48
- });
49
- this.port = this.defineIntegerParameter({
50
- argumentName: 'PORT',
51
- parameterLongName: '--port',
52
- description: 'port to use',
53
- defaultValue: DefaultPort,
54
- });
55
- }
56
- async onExecute() {
57
- const logger = LogConfig.get();
58
- const config = this.config.value ?? 'dynamodb://' + Const.TileMetadata.TableName;
59
- const port = this.port.value;
60
- const assets = this.assets.value;
61
- // Force a default url base so WMTS requests know their relative url
62
- const ServerUrl = Env.get(Env.PublicUrlBase) ?? `http://localhost:${port}`;
63
- process.env[Env.PublicUrlBase] = ServerUrl;
64
- const server = await createServer({ config, assets }, logger);
65
- await server.listen({ port: port ?? DefaultPort, host: '0.0.0.0' });
66
- logger.info({ url: ServerUrl }, 'ServerStarted');
67
- }
68
- }
69
- //# sourceMappingURL=action.serve.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"action.serve.js","sourceRoot":"","sources":["../../../src/cli/server/action.serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EACL,iBAAiB,GAIlB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,GAAG,IAAI,CAAC;AAEzB,oGAAoG;AACpG,MAAM,OAAO,YAAa,SAAQ,iBAAiB;IAMjD;QACE,KAAK,CAAC;YACJ,UAAU,EAAE,OAAO;YACnB,OAAO,EAAE,iCAAiC;YAC1C,aAAa,EAAE,gDAAgD;SAChE,CAAC,CAAC;QAVL;;;;;WAAoC;QACpC;;;;;WAAoC;QACpC;;;;;WAAmC;QACnC;;;;;WAAoC;IAQpC,CAAC;IAES,kBAAkB;QAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC;YACvC,YAAY,EAAE,QAAQ;YACtB,iBAAiB,EAAE,UAAU;YAC7B,WAAW,EAAE,6BAA6B;SAC3C,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC;YACvC,YAAY,EAAE,QAAQ;YACtB,iBAAiB,EAAE,UAAU;YAC7B,WAAW,EAAE,+CAA+C;SAC7D,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,sBAAsB,CAAC;YACtC,YAAY,EAAE,MAAM;YACpB,iBAAiB,EAAE,QAAQ;YAC3B,WAAW,EAAE,aAAa;YAC1B,YAAY,EAAE,WAAW;SAC1B,CAAC,CAAC;IACL,CAAC;IAES,KAAK,CAAC,SAAS;QACvB,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC;QAE/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,aAAa,GAAG,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC;QACjF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAEjC,oEAAoE;QACpE,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,oBAAoB,IAAI,EAAE,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC;QAC9D,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,eAAe,CAAC,CAAC;IACnD,CAAC;CACF"}
@@ -1,23 +0,0 @@
1
- export declare function isRecord<T = unknown>(value: unknown): value is Record<string, T>;
2
- /**
3
- * Invalidate the cloudfront distribution cache when updating imagery sets
4
- */
5
- export declare function invalidateCache(path: string | string[], commit?: boolean): Promise<void>;
6
- export declare const HashKey = "linz-hash";
7
- export declare function getHash(Bucket: string, Key: string): Promise<string | null>;
8
- export declare function getStaticBucket(): Promise<string>;
9
- /**
10
- * Upload a file to the static bucket
11
- * @param path source file
12
- * @param target target key @example '/foo/bar.html'
13
- * @param contentType http content type @example 'application/json'
14
- * @param cacheControl cache control headers @example 'public, max-age=604800, immutable'
15
- * @returns whether the item was updated
16
- */
17
- export declare function uploadStaticFile(filePath: URL, target: string, contentType: string, cacheControl: string): Promise<boolean>;
18
- /**
19
- * Make a tile imagery title as imagery name
20
- * @example
21
- * 'Tasman rural 2018-19 0.3m' => 'tasman_rural_2018-19_0-3m'
22
- */
23
- export declare function nameImageryTitle(title: string): string;
package/build/cli/util.js DELETED
@@ -1,136 +0,0 @@
1
- import { CloudFormationClient, DescribeStacksCommand } from '@aws-sdk/client-cloudformation';
2
- import { CloudFrontClient, CreateInvalidationCommand, ListDistributionsCommand } from '@aws-sdk/client-cloudfront';
3
- import { HeadObjectCommand, PutObjectCommand, S3Client } from '@aws-sdk/client-s3';
4
- import { fsa, LogConfig } from '@basemaps/shared';
5
- import { CliId } from '@basemaps/shared/build/cli/info.js';
6
- import crypto from 'crypto';
7
- import path from 'path';
8
- import slugify from 'slugify';
9
- import { promisify } from 'util';
10
- import { gzip } from 'zlib';
11
- // Cloudfront has to be defined in us-east-1
12
- const cloudFormationClient = new CloudFormationClient({ region: 'us-east-1' });
13
- const cloudFrontClient = new CloudFrontClient({ region: 'us-east-1' });
14
- const s3Client = new S3Client({ region: 'us-east-1' });
15
- /** cloudfront invalidation references need to be unique */
16
- let InvalidationId = 0;
17
- export function isRecord(value) {
18
- return typeof value === 'object' && value !== null;
19
- }
20
- /**
21
- * Invalidate the cloudfront distribution cache when updating imagery sets
22
- */
23
- export async function invalidateCache(path, commit = false) {
24
- const command = new DescribeStacksCommand({ StackName: 'Edge' });
25
- const response = await cloudFormationClient.send(command);
26
- if (response.Stacks?.[0].Outputs == null) {
27
- LogConfig.get().warn('Unable to find cloud front distribution');
28
- return;
29
- }
30
- const cloudFrontDomain = response.Stacks[0].Outputs.find((f) => f.OutputKey === 'CloudFrontDomain');
31
- const listDistributionCommand = new ListDistributionsCommand({});
32
- const cloudFrontDistributions = await cloudFrontClient.send(listDistributionCommand);
33
- const cf = cloudFrontDistributions.DistributionList?.Items?.find((f) => f.DomainName === cloudFrontDomain?.OutputValue);
34
- if (cloudFrontDomain == null || cf == null) {
35
- LogConfig.get().warn('Unable to find cloud front distribution');
36
- return;
37
- }
38
- LogConfig.get().info({ path, cfId: cf.Id }, 'Invalidating');
39
- const Items = Array.isArray(path) ? path : [path];
40
- if (commit) {
41
- const invalidationCommand = new CreateInvalidationCommand({
42
- DistributionId: cf.Id,
43
- InvalidationBatch: {
44
- Paths: { Quantity: Items.length, Items },
45
- CallerReference: `${CliId}-${InvalidationId++}`,
46
- },
47
- });
48
- await cloudFrontClient.send(invalidationCommand);
49
- }
50
- }
51
- export const HashKey = 'linz-hash';
52
- export async function getHash(Bucket, Key) {
53
- try {
54
- const command = new HeadObjectCommand({ Bucket, Key });
55
- const obj = await s3Client.send(command);
56
- return obj.Metadata?.[HashKey] ?? null;
57
- }
58
- catch (e) {
59
- if (isRecord(e) && isRecord(e['$metadata']) && typeof e['$metadata']['httpStatusCode'] === 'number') {
60
- if (e['$metadata']['httpStatusCode'] === 404)
61
- return null;
62
- }
63
- throw e;
64
- }
65
- }
66
- /**
67
- * Lookup the static bucket from cloudformation
68
- * @returns
69
- */
70
- let staticBucket;
71
- export function getStaticBucket() {
72
- if (staticBucket == null) {
73
- // Since the bucket is generated inside of CDK lets look up the bucket name
74
- const command = new DescribeStacksCommand({ StackName: 'Edge' });
75
- staticBucket = cloudFormationClient.send(command).then((stackInfo) => {
76
- const val = stackInfo.Stacks?.[0]?.Outputs?.find((f) => f.OutputKey === 'CloudFrontBucket')?.OutputValue;
77
- if (val == null)
78
- throw new Error('Failed to find EdgeBucket');
79
- return val;
80
- });
81
- }
82
- return staticBucket;
83
- }
84
- /** Extensions that should be gzipped before uploading */
85
- const CompressExt = new Set(['.js', '.html', '.css', '.map', '.json', '.svg']);
86
- const gzipPromise = promisify(gzip);
87
- /**
88
- * Upload a file to the static bucket
89
- * @param path source file
90
- * @param target target key @example '/foo/bar.html'
91
- * @param contentType http content type @example 'application/json'
92
- * @param cacheControl cache control headers @example 'public, max-age=604800, immutable'
93
- * @returns whether the item was updated
94
- */
95
- export async function uploadStaticFile(filePath, target, contentType, cacheControl) {
96
- const fileData = await fsa.read(filePath);
97
- const hash = crypto.createHash('sha512').update(fileData).digest('base64');
98
- // S3 keys should not start with a `/`
99
- if (target.startsWith('/'))
100
- target = target.slice(1);
101
- const bucket = await getStaticBucket();
102
- if (bucket == null)
103
- throw new Error('Unable to find static bucket');
104
- const existing = await getHash(bucket, target);
105
- if (hash === existing)
106
- return false;
107
- // Should we compress the file before uploading
108
- const ext = path.extname(target);
109
- const contentEncoding = CompressExt.has(ext) ? 'gzip' : undefined;
110
- const command = new PutObjectCommand({
111
- Bucket: bucket,
112
- Key: target,
113
- Body: contentEncoding === 'gzip' ? await gzipPromise(fileData, { level: 9 }) : fileData,
114
- Metadata: { [HashKey]: hash },
115
- ContentType: contentType,
116
- CacheControl: cacheControl,
117
- ContentEncoding: contentEncoding,
118
- });
119
- await s3Client.send(command);
120
- return true;
121
- }
122
- /**
123
- * Make a tile imagery title as imagery name
124
- * @example
125
- * 'Tasman rural 2018-19 0.3m' => 'tasman_rural_2018-19_0-3m'
126
- */
127
- export function nameImageryTitle(title) {
128
- return slugify
129
- .default(title.replace(/\.+/g, '-'), {
130
- replacement: '_',
131
- lower: true,
132
- trim: true,
133
- })
134
- .replace(/[^\w-_]/gi, '');
135
- }
136
- //# sourceMappingURL=util.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/cli/util.ts"],"names":[],"mappings":"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"}