@forge/cli-shared 9.4.1-next.3 → 9.4.1-next.3-experimental-e9e08bb

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.
@@ -0,0 +1,39 @@
1
+ import { Logger } from '../ui/logger';
2
+ export interface ComposeCommandResult {
3
+ out?: string;
4
+ err?: string;
5
+ exitCode?: number;
6
+ }
7
+ export interface ComposeOptions {
8
+ cwd: string;
9
+ log: boolean;
10
+ config: string;
11
+ composeOptions: string[];
12
+ callback?: (chunk: Buffer) => void;
13
+ }
14
+ export interface ComposeAdapter {
15
+ pullOne(service: string, options: ComposeOptions): Promise<unknown>;
16
+ exec(command: string, args: string[], options: ComposeOptions): Promise<ComposeCommandResult>;
17
+ down(options: ComposeOptions): Promise<unknown>;
18
+ }
19
+ export interface ComposeServiceState {
20
+ name: string;
21
+ service: string;
22
+ state: string;
23
+ health?: string;
24
+ }
25
+ export declare class ComposeProjectLifecycle {
26
+ private readonly configPath;
27
+ private readonly projectName;
28
+ private readonly logger;
29
+ private readonly adapter;
30
+ constructor(configPath: string, projectName: string, logger: Logger, adapter?: ComposeAdapter);
31
+ private options;
32
+ pull(services: string[]): Promise<void>;
33
+ up(services: string[]): Promise<void>;
34
+ down(): Promise<void>;
35
+ states(): Promise<ComposeServiceState[]>;
36
+ logs(service: string, lines?: number): Promise<string>;
37
+ }
38
+ export declare const parseComposePs: (output: string) => ComposeServiceState[];
39
+ //# sourceMappingURL=compose-project-lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-project-lifecycle.d.ts","sourceRoot":"","sources":["../../src/tunnel/compose-project-lifecycle.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGtC,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC9F,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAYD,qBAAa,uBAAuB;IAEhC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAHP,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,cAA+B;IAG3D,OAAO,CAAC,OAAO;IAUF,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAUvC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQrC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQrB,MAAM,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IASxC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,MAAM,CAAC;CAYhE;AAED,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,mBAAmB,EAyBlE,CAAC"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseComposePs = exports.ComposeProjectLifecycle = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const path = tslib_1.__importStar(require("path"));
6
+ const docker_compose_1 = require("docker-compose");
7
+ const docker_compose_lifecycle_1 = require("./docker-compose-lifecycle");
8
+ const defaultAdapter = {
9
+ pullOne: (service, options) => (0, docker_compose_1.pullOne)(service, options),
10
+ exec: (command, args, options) => (0, docker_compose_1.execCompose)(command, args, options),
11
+ down: (options) => (0, docker_compose_1.downAll)(options)
12
+ };
13
+ class ComposeProjectLifecycle {
14
+ configPath;
15
+ projectName;
16
+ logger;
17
+ adapter;
18
+ constructor(configPath, projectName, logger, adapter = defaultAdapter) {
19
+ this.configPath = configPath;
20
+ this.projectName = projectName;
21
+ this.logger = logger;
22
+ this.adapter = adapter;
23
+ }
24
+ options(log = false) {
25
+ return {
26
+ cwd: path.dirname(this.configPath),
27
+ log,
28
+ config: this.configPath,
29
+ composeOptions: [`-p${this.projectName}`],
30
+ callback: (0, docker_compose_lifecycle_1.createDockerLifecycleLogFilter)(this.logger)
31
+ };
32
+ }
33
+ async pull(services) {
34
+ for (const service of services) {
35
+ try {
36
+ await this.adapter.pullOne(service, this.options());
37
+ }
38
+ catch (error) {
39
+ throw new Error(`Unable to pull the ${service} image: ${(0, docker_compose_lifecycle_1.getDockerComposeErrorMessage)(error)}`);
40
+ }
41
+ }
42
+ }
43
+ async up(services) {
44
+ try {
45
+ await this.adapter.exec('up', ['--detach', '--no-build', '--remove-orphans', ...services], this.options());
46
+ }
47
+ catch (error) {
48
+ throw new Error(`Unable to start the Docker Compose project: ${(0, docker_compose_lifecycle_1.getDockerComposeErrorMessage)(error)}`);
49
+ }
50
+ }
51
+ async down() {
52
+ try {
53
+ await this.adapter.down(this.options());
54
+ }
55
+ catch (error) {
56
+ throw new Error(`Unable to stop the Docker Compose project: ${(0, docker_compose_lifecycle_1.getDockerComposeErrorMessage)(error)}`);
57
+ }
58
+ }
59
+ async states() {
60
+ try {
61
+ const result = await this.adapter.exec('ps', ['--all', '--format', 'json'], this.options());
62
+ return (0, exports.parseComposePs)(result.out ?? '');
63
+ }
64
+ catch (error) {
65
+ throw new Error(`Unable to inspect the Docker Compose project: ${(0, docker_compose_lifecycle_1.getDockerComposeErrorMessage)(error)}`);
66
+ }
67
+ }
68
+ async logs(service, lines = 80) {
69
+ try {
70
+ const result = await this.adapter.exec('logs', ['--no-color', '--tail', lines.toString(), service], this.options());
71
+ return [result.out, result.err].filter(Boolean).join('\n').trim();
72
+ }
73
+ catch (error) {
74
+ return (0, docker_compose_lifecycle_1.getDockerComposeErrorMessage)(error);
75
+ }
76
+ }
77
+ }
78
+ exports.ComposeProjectLifecycle = ComposeProjectLifecycle;
79
+ const parseComposePs = (output) => {
80
+ const trimmed = output.trim();
81
+ if (!trimmed)
82
+ return [];
83
+ const records = (() => {
84
+ try {
85
+ const parsed = JSON.parse(trimmed);
86
+ return Array.isArray(parsed) ? parsed : [parsed];
87
+ }
88
+ catch {
89
+ return trimmed
90
+ .split('\n')
91
+ .filter(Boolean)
92
+ .map((line) => JSON.parse(line));
93
+ }
94
+ })();
95
+ return records.map((item) => {
96
+ const value = item;
97
+ return {
98
+ name: String(value.Name ?? value.name ?? ''),
99
+ service: String(value.Service ?? value.service ?? ''),
100
+ state: String(value.State ?? value.state ?? ''),
101
+ health: value.Health == null && value.health == null ? undefined : String(value.Health ?? value.health)
102
+ };
103
+ });
104
+ };
105
+ exports.parseComposePs = parseComposePs;
@@ -6,6 +6,7 @@ import { ChildProcess } from 'child_process';
6
6
  export declare const PROXY_SIDECAR_VOLUME_DIR = "/forge/container";
7
7
  export declare const CONTAINER_SERVICE_ASSETS = ".container-service-assets";
8
8
  export declare const K8S_AUTH_TOKEN_FILENAME = "local-account";
9
+ export declare const DOCKER_LIFECYCLE_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp];
9
10
  export declare const STARTUP_TIMER_MS: number;
10
11
  export declare const STARTUP_TIMER_BUFFER_MS: number;
11
12
  export declare class InvalidContainerServicePort extends UserError {
@@ -32,7 +33,9 @@ export declare class DockerAuthenticationError extends UserError {
32
33
  export declare const generateContainersDockerComposeFile: (services: Services, appId: string, envId: string) => Promise<Record<string, string>>;
33
34
  export declare const deleteDockerComposeFile: (composeFile: string) => Promise<void>;
34
35
  export declare const startDockerComposeStack: (dockerComposeFilePath: string, serviceKey: string, logger: Logger) => Promise<void>;
36
+ export declare const getDockerComposeErrorMessage: (error: unknown) => string;
35
37
  export declare const determineComposeFlags: (dockerComposeFilePath: string, serviceKey: string, logger: Logger) => Promise<string[]>;
36
38
  export declare const stopDockerComposeStack: (configFile: ConfigFile, logger: Logger, composeFiles?: Record<string, string>) => Promise<void>;
39
+ export declare const createDockerLifecycleLogFilter: (logger: Logger) => (chunk: Buffer) => void;
37
40
  export declare const processDockerAuthentication: (childProcess: ChildProcess) => Promise<void>;
38
41
  //# sourceMappingURL=docker-compose-lifecycle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"docker-compose-lifecycle.d.ts","sourceRoot":"","sources":["../../src/tunnel/docker-compose-lifecycle.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAO3C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAC3D,eAAO,MAAM,wBAAwB,8BAA8B,CAAC;AACpE,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AAgCvD,eAAO,MAAM,gBAAgB,QAAY,CAAC;AAC1C,eAAO,MAAM,uBAAuB,QAAW,CAAC;AAEhD,qBAAa,2BAA4B,SAAQ,SAAS;gBAC5C,UAAU,EAAE,MAAM;CAG/B;AAED,qBAAa,mCAAoC,SAAQ,SAAS;gBACpD,GAAG,CAAC,EAAE,KAAK;CAGxB;AAED,qBAAa,wBAAyB,SAAQ,SAAS;gBACzC,GAAG,CAAC,EAAE,KAAK;CAGxB;AAED,qBAAa,mCAAoC,SAAQ,SAAS;gBACpD,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK;CAG5C;AAED,qBAAa,+BAAgC,SAAQ,SAAS;gBAChD,YAAY,EAAE,MAAM;CAGjC;AAED,qBAAa,sCAAuC,SAAQ,SAAS;gBACvD,YAAY,EAAE,MAAM;CAGjC;AAED,qBAAa,yBAA0B,SAAQ,SAAS;gBAC1C,OAAO,EAAE,MAAM;CAG5B;AAMD,eAAO,MAAM,mCAAmC,GAAU,UAAU,QAAQ,EAAE,OAAO,MAAM,EAAE,OAAO,MAAM,oCAgFzG,CAAC;AAsFF,eAAO,MAAM,uBAAuB,GAAU,aAAa,MAAM,kBAYhE,CAAC;AAOF,eAAO,MAAM,uBAAuB,GAAU,uBAAuB,MAAM,EAAE,YAAY,MAAM,EAAE,QAAQ,MAAM,kBA8B9G,CAAC;AA6BF,eAAO,MAAM,qBAAqB,GAChC,uBAAuB,MAAM,EAC7B,YAAY,MAAM,EAClB,QAAQ,MAAM,KACb,OAAO,CAAC,MAAM,EAAE,CAgBlB,CAAC;AA2LF,eAAO,MAAM,sBAAsB,GACjC,YAAY,UAAU,EACtB,QAAQ,MAAM,EACd,eAAe,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,kBAmCtC,CAAC;AAgCF,eAAO,MAAM,2BAA2B,GAAU,cAAc,YAAY,kBAW3E,CAAC"}
1
+ {"version":3,"file":"docker-compose-lifecycle.d.ts","sourceRoot":"","sources":["../../src/tunnel/docker-compose-lifecycle.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAO3C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAC3D,eAAO,MAAM,wBAAwB,8BAA8B,CAAC;AACpE,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AAsBvD,eAAO,MAAM,yBAAyB,2CAK5B,CAAC;AAKX,eAAO,MAAM,gBAAgB,QAAY,CAAC;AAC1C,eAAO,MAAM,uBAAuB,QAAW,CAAC;AAEhD,qBAAa,2BAA4B,SAAQ,SAAS;gBAC5C,UAAU,EAAE,MAAM;CAG/B;AAED,qBAAa,mCAAoC,SAAQ,SAAS;gBACpD,GAAG,CAAC,EAAE,KAAK;CAGxB;AAED,qBAAa,wBAAyB,SAAQ,SAAS;gBACzC,GAAG,CAAC,EAAE,KAAK;CAGxB;AAED,qBAAa,mCAAoC,SAAQ,SAAS;gBACpD,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK;CAG5C;AAED,qBAAa,+BAAgC,SAAQ,SAAS;gBAChD,YAAY,EAAE,MAAM;CAGjC;AAED,qBAAa,sCAAuC,SAAQ,SAAS;gBACvD,YAAY,EAAE,MAAM;CAGjC;AAED,qBAAa,yBAA0B,SAAQ,SAAS;gBAC1C,OAAO,EAAE,MAAM;CAG5B;AAMD,eAAO,MAAM,mCAAmC,GAAU,UAAU,QAAQ,EAAE,OAAO,MAAM,EAAE,OAAO,MAAM,oCAgFzG,CAAC;AAsFF,eAAO,MAAM,uBAAuB,GAAU,aAAa,MAAM,kBAYhE,CAAC;AAOF,eAAO,MAAM,uBAAuB,GAAU,uBAAuB,MAAM,EAAE,YAAY,MAAM,EAAE,QAAQ,MAAM,kBA8B9G,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAI,OAAO,OAAO,KAAG,MAQ7D,CAAC;AAmBF,eAAO,MAAM,qBAAqB,GAChC,uBAAuB,MAAM,EAC7B,YAAY,MAAM,EAClB,QAAQ,MAAM,KACb,OAAO,CAAC,MAAM,EAAE,CAgBlB,CAAC;AA2LF,eAAO,MAAM,sBAAsB,GACjC,YAAY,UAAU,EACtB,QAAQ,MAAM,EACd,eAAe,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,kBAmCtC,CAAC;AAQF,eAAO,MAAM,8BAA8B,GAAI,QAAQ,MAAM,MAGnD,OAAO,MAAM,SAetB,CAAC;AAMF,eAAO,MAAM,2BAA2B,GAAU,cAAc,YAAY,kBAW3E,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.processDockerAuthentication = exports.stopDockerComposeStack = exports.determineComposeFlags = exports.startDockerComposeStack = exports.deleteDockerComposeFile = exports.generateContainersDockerComposeFile = exports.DockerAuthenticationError = exports.CannotUseBothImageAndBuildContextError = exports.MissingImageOrBuildContextError = exports.UnableToParseDockerComposeFileError = exports.DockerUnableToStartError = exports.DockerUnableToPullProxySidecarImage = exports.InvalidContainerServicePort = exports.STARTUP_TIMER_BUFFER_MS = exports.STARTUP_TIMER_MS = exports.K8S_AUTH_TOKEN_FILENAME = exports.CONTAINER_SERVICE_ASSETS = exports.PROXY_SIDECAR_VOLUME_DIR = void 0;
3
+ exports.processDockerAuthentication = exports.createDockerLifecycleLogFilter = exports.stopDockerComposeStack = exports.determineComposeFlags = exports.getDockerComposeErrorMessage = exports.startDockerComposeStack = exports.deleteDockerComposeFile = exports.generateContainersDockerComposeFile = exports.DockerAuthenticationError = exports.CannotUseBothImageAndBuildContextError = exports.MissingImageOrBuildContextError = exports.UnableToParseDockerComposeFileError = exports.DockerUnableToStartError = exports.DockerUnableToPullProxySidecarImage = exports.InvalidContainerServicePort = exports.STARTUP_TIMER_BUFFER_MS = exports.STARTUP_TIMER_MS = exports.DOCKER_LIFECYCLE_PATTERNS = exports.K8S_AUTH_TOKEN_FILENAME = exports.CONTAINER_SERVICE_ASSETS = exports.PROXY_SIDECAR_VOLUME_DIR = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const fs = tslib_1.__importStar(require("fs"));
6
6
  const path = tslib_1.__importStar(require("path"));
@@ -28,7 +28,7 @@ const PROXY_SIDECAR_REGISTRIES = {
28
28
  };
29
29
  const isStagingEnvironment = () => process.env.FORGE_GRAPHQL_GATEWAY?.startsWith('https://api-private.stg.atlassian.com/graphql') ?? false;
30
30
  const getProxySidecarRegistry = (registryType) => PROXY_SIDECAR_REGISTRIES[registryType][isStagingEnvironment() ? 'staging' : 'production'];
31
- const LIFECYCLE_PATTERNS = [
31
+ exports.DOCKER_LIFECYCLE_PATTERNS = [
32
32
  /Container .* (Starting|Started|Stopping|Stopped|Creating|Created|Recreated)/,
33
33
  /Network .* (Creating|Created|Removing|Removed)/,
34
34
  /Volume .* (Creating|Created|Removing|Removed)/,
@@ -217,7 +217,7 @@ const startDockerComposeStack = async (dockerComposeFilePath, serviceKey, logger
217
217
  await (0, docker_compose_1.pullOne)(PROXY_SIDECAR_SERVICE_NAME, pullOptions);
218
218
  }
219
219
  catch (ecrRegistryError) {
220
- throw new DockerUnableToPullProxySidecarImage(new Error(`Initial pull error: ${getDockerComposeErrorMessage(portableRegistryError)}. Retry error: ${getDockerComposeErrorMessage(ecrRegistryError)}`));
220
+ throw new DockerUnableToPullProxySidecarImage(new Error(`Initial pull error: ${(0, exports.getDockerComposeErrorMessage)(portableRegistryError)}. Retry error: ${(0, exports.getDockerComposeErrorMessage)(ecrRegistryError)}`));
221
221
  }
222
222
  }
223
223
  await waitForContainersToStart(dockerComposeFilePath, serviceKey, logger);
@@ -230,6 +230,7 @@ const getDockerComposeErrorMessage = (error) => {
230
230
  }
231
231
  return error != null ? String(error) : 'Unknown Error Occurred.';
232
232
  };
233
+ exports.getDockerComposeErrorMessage = getDockerComposeErrorMessage;
233
234
  const useEcrProxySidecarImage = (dockerComposeFilePath) => {
234
235
  const composeConfig = yaml.parse(fs.readFileSync(dockerComposeFilePath, 'utf8'));
235
236
  const proxySidecar = composeConfig?.services?.[PROXY_SIDECAR_SERVICE_NAME];
@@ -342,7 +343,7 @@ const waitForContainersToStart = async (dockerComposeFilePath, serviceKey, logge
342
343
  lines.forEach((line) => {
343
344
  if (!line.trim())
344
345
  return;
345
- if (LIFECYCLE_PATTERNS.some((pattern) => pattern.test(line))) {
346
+ if (exports.DOCKER_LIFECYCLE_PATTERNS.some((pattern) => pattern.test(line))) {
346
347
  logger.info(line);
347
348
  }
348
349
  });
@@ -355,7 +356,7 @@ const waitForContainersToStart = async (dockerComposeFilePath, serviceKey, logge
355
356
  callback: logFilter
356
357
  }).catch((error) => {
357
358
  clearTimeout(startupTimer);
358
- reject(new DockerUnableToStartError(new Error(getDockerComposeErrorMessage(error))));
359
+ reject(new DockerUnableToStartError(new Error((0, exports.getDockerComposeErrorMessage)(error))));
359
360
  });
360
361
  setTimeout(async () => {
361
362
  if (containersStarted)
@@ -399,7 +400,7 @@ const stopDockerComposeStack = async (configFile, logger, composeFiles) => {
399
400
  log: false,
400
401
  config: file,
401
402
  composeOptions: [`-p${serviceKey}`],
402
- callback: createCustomLogFilter(logger)
403
+ callback: (0, exports.createDockerLifecycleLogFilter)(logger)
403
404
  });
404
405
  await (0, exports.deleteDockerComposeFile)(file);
405
406
  }
@@ -410,7 +411,7 @@ const stopDockerComposeStack = async (configFile, logger, composeFiles) => {
410
411
  deleteContainerServiceAssetsDir();
411
412
  };
412
413
  exports.stopDockerComposeStack = stopDockerComposeStack;
413
- const createCustomLogFilter = (logger) => {
414
+ const createDockerLifecycleLogFilter = (logger) => {
414
415
  let buffer = '';
415
416
  return (chunk) => {
416
417
  buffer += chunk.toString();
@@ -419,12 +420,13 @@ const createCustomLogFilter = (logger) => {
419
420
  lines.forEach((line) => {
420
421
  if (!line.trim())
421
422
  return;
422
- if (LIFECYCLE_PATTERNS.some((pattern) => pattern.test(line))) {
423
+ if (exports.DOCKER_LIFECYCLE_PATTERNS.some((pattern) => pattern.test(line))) {
423
424
  logger.info(line);
424
425
  }
425
426
  });
426
427
  };
427
428
  };
429
+ exports.createDockerLifecycleLogFilter = createDockerLifecycleLogFilter;
428
430
  const processDockerAuthentication = async (childProcess) => {
429
431
  await new Promise((resolve, reject) => {
430
432
  childProcess.on('close', (code) => {
@@ -1,3 +1,4 @@
1
1
  export * from './docker-compose-lifecycle';
2
+ export * from './compose-project-lifecycle';
2
3
  export * from './tunnel-options';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tunnel/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tunnel/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kBAAkB,CAAC"}
@@ -2,4 +2,5 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  tslib_1.__exportStar(require("./docker-compose-lifecycle"), exports);
5
+ tslib_1.__exportStar(require("./compose-project-lifecycle"), exports);
5
6
  tslib_1.__exportStar(require("./tunnel-options"), exports);
@@ -8,11 +8,13 @@ export type TunnelCommandOptions = {
8
8
  verify?: boolean;
9
9
  url?: string;
10
10
  localPort?: number;
11
+ localStorage?: boolean;
11
12
  };
12
13
  export type TunnelOptions = Omit<TunnelCommandOptions, 'debugStartingPort'> & {
13
14
  debugStartingPort: number;
14
15
  assistantName?: string | null;
15
16
  containersDockerComposeFiles?: Record<string, string>;
17
+ localStorageCleanup?: () => Promise<void>;
16
18
  };
17
19
  export declare const defaultDebugStartingPort = 9229;
18
20
  export declare const defaultDebugHost = "127.0.0.1";
@@ -1 +1 @@
1
- {"version":3,"file":"tunnel-options.d.ts","sourceRoot":"","sources":["../../src/tunnel/tunnel-options.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,GAAG;IAC5E,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,4BAA4B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvD,CAAC;AAEF,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,gBAAgB,cAAc,CAAC;AAC5C,eAAO,MAAM,uBAAuB,QAA8C,CAAC;AACnF,eAAO,MAAM,2BAA2B,EAAE,aAIzC,CAAC;AAEF,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAC/C,eAAO,MAAM,8BAA8B,OAAO,CAAC;AACnD,eAAO,MAAM,2CAA2C,OAAO,CAAC;AAQhE,wBAAsB,cAAc,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQ1G"}
1
+ {"version":3,"file":"tunnel-options.d.ts","sourceRoot":"","sources":["../../src/tunnel/tunnel-options.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,GAAG;IAC5E,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,4BAA4B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C,CAAC;AAEF,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,gBAAgB,cAAc,CAAC;AAC5C,eAAO,MAAM,uBAAuB,QAA8C,CAAC;AACnF,eAAO,MAAM,2BAA2B,EAAE,aAIzC,CAAC;AAEF,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAC/C,eAAO,MAAM,8BAA8B,OAAO,CAAC;AACnD,eAAO,MAAM,2CAA2C,OAAO,CAAC;AAQhE,wBAAsB,cAAc,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQ1G"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/cli-shared",
3
- "version": "9.4.1-next.3",
3
+ "version": "9.4.1-next.3-experimental-e9e08bb",
4
4
  "description": "Common functionality for Forge CLI",
5
5
  "author": "Atlassian",
6
6
  "license": "SEE LICENSE IN LICENSE.txt",
@@ -12,7 +12,7 @@
12
12
  "generate-graphql-types": "graphql-codegen --config src/graphql/codegen.yml"
13
13
  },
14
14
  "dependencies": {
15
- "@forge/manifest": "13.4.0-next.3",
15
+ "@forge/manifest": "13.4.0-next.3-experimental-e9e08bb",
16
16
  "@forge/util": "3.0.0",
17
17
  "@forge/i18n": "1.0.0",
18
18
  "@sentry/node": "7.106.0",