@ankhorage/infra-minikube 0.4.128 → 0.4.130

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 (65) hide show
  1. package/README.md +1 -1
  2. package/dist/constants/infra.d.ts +1 -1
  3. package/dist/features/cluster-runtime/adapters/createMinikubeCliControlPlane.d.ts +1 -1
  4. package/dist/features/cluster-runtime/adapters/createMinikubeCliControlPlane.d.ts.map +1 -1
  5. package/dist/features/cluster-runtime/adapters/createMinikubeCliControlPlane.js +4 -4
  6. package/dist/features/cluster-runtime/adapters/createMinikubeCliControlPlane.js.map +1 -1
  7. package/dist/features/cluster-runtime/adapters/createSubprocessMinikubeCommandRunner.d.ts +1 -1
  8. package/dist/features/cluster-runtime/adapters/createSubprocessMinikubeCommandRunner.d.ts.map +1 -1
  9. package/dist/features/cluster-runtime/adapters/createSubprocessMinikubeCommandRunner.js.map +1 -1
  10. package/dist/features/cluster-runtime/adapters/inspectMinikubeAsync.d.ts +1 -1
  11. package/dist/features/cluster-runtime/adapters/inspectMinikubeAsync.d.ts.map +1 -1
  12. package/dist/features/cluster-runtime/adapters/inspectMinikubeAsync.js +1 -1
  13. package/dist/features/cluster-runtime/adapters/inspectMinikubeAsync.js.map +1 -1
  14. package/dist/features/cluster-runtime/adapters/minikubeCliProcess.d.ts +1 -1
  15. package/dist/features/cluster-runtime/adapters/minikubeCliProcess.d.ts.map +1 -1
  16. package/dist/features/cluster-runtime/adapters/minikubeCliProcess.js.map +1 -1
  17. package/dist/features/cluster-runtime/adapters/readMinikubeEndpoints.d.ts +1 -1
  18. package/dist/features/cluster-runtime/adapters/readMinikubeEndpoints.d.ts.map +1 -1
  19. package/dist/features/cluster-runtime/adapters/readMinikubeEndpoints.js.map +1 -1
  20. package/dist/features/cluster-runtime/application/use-cases/destroyMinikubeRuntimeAsync.d.ts +1 -1
  21. package/dist/features/cluster-runtime/application/use-cases/destroyMinikubeRuntimeAsync.d.ts.map +1 -1
  22. package/dist/features/cluster-runtime/application/use-cases/destroyMinikubeRuntimeAsync.js +2 -2
  23. package/dist/features/cluster-runtime/application/use-cases/destroyMinikubeRuntimeAsync.js.map +1 -1
  24. package/dist/features/cluster-runtime/application/use-cases/ensureMinikubeRuntimeAsync.d.ts +1 -1
  25. package/dist/features/cluster-runtime/application/use-cases/ensureMinikubeRuntimeAsync.d.ts.map +1 -1
  26. package/dist/features/cluster-runtime/application/use-cases/ensureMinikubeRuntimeAsync.js +4 -4
  27. package/dist/features/cluster-runtime/application/use-cases/ensureMinikubeRuntimeAsync.js.map +1 -1
  28. package/dist/features/cluster-runtime/application/use-cases/getMinikubeStatusAsync.d.ts +1 -1
  29. package/dist/features/cluster-runtime/application/use-cases/getMinikubeStatusAsync.d.ts.map +1 -1
  30. package/dist/features/cluster-runtime/application/use-cases/getMinikubeStatusAsync.js +3 -3
  31. package/dist/features/cluster-runtime/application/use-cases/getMinikubeStatusAsync.js.map +1 -1
  32. package/dist/features/cluster-runtime/application/use-cases/planMinikubeRuntimeAsync.d.ts +1 -1
  33. package/dist/features/cluster-runtime/application/use-cases/planMinikubeRuntimeAsync.d.ts.map +1 -1
  34. package/dist/features/cluster-runtime/application/use-cases/planMinikubeRuntimeAsync.js +4 -4
  35. package/dist/features/cluster-runtime/application/use-cases/planMinikubeRuntimeAsync.js.map +1 -1
  36. package/dist/features/cluster-runtime/application/use-cases/suspendMinikubeRuntimeAsync.d.ts +1 -1
  37. package/dist/features/cluster-runtime/application/use-cases/suspendMinikubeRuntimeAsync.d.ts.map +1 -1
  38. package/dist/features/cluster-runtime/application/use-cases/suspendMinikubeRuntimeAsync.js +2 -2
  39. package/dist/features/cluster-runtime/application/use-cases/suspendMinikubeRuntimeAsync.js.map +1 -1
  40. package/dist/features/cluster-runtime/application/use-cases/validateMinikubeRuntimeAsync.d.ts +1 -1
  41. package/dist/features/cluster-runtime/application/use-cases/validateMinikubeRuntimeAsync.d.ts.map +1 -1
  42. package/dist/features/cluster-runtime/application/use-cases/validateMinikubeRuntimeAsync.js +1 -1
  43. package/dist/features/cluster-runtime/application/use-cases/validateMinikubeRuntimeAsync.js.map +1 -1
  44. package/dist/features/cluster-runtime/composition/createInfraAdapter.d.ts +1 -1
  45. package/dist/features/cluster-runtime/composition/createInfraAdapter.d.ts.map +1 -1
  46. package/dist/features/cluster-runtime/composition/createInfraAdapter.js +8 -8
  47. package/dist/features/cluster-runtime/composition/createInfraAdapter.js.map +1 -1
  48. package/dist/features/cluster-runtime/utils/createKubernetesDriverRequest.d.ts +1 -1
  49. package/dist/features/cluster-runtime/utils/createKubernetesDriverRequest.d.ts.map +1 -1
  50. package/dist/features/cluster-runtime/utils/createKubernetesDriverRequest.js.map +1 -1
  51. package/dist/features/cluster-runtime/utils/createMinikubeClusterOwner.d.ts +1 -1
  52. package/dist/features/cluster-runtime/utils/createMinikubeClusterOwner.d.ts.map +1 -1
  53. package/dist/features/cluster-runtime/utils/createMinikubeClusterOwner.js.map +1 -1
  54. package/dist/features/cluster-runtime/utils/getMinikubeClusterIdentity.d.ts +1 -1
  55. package/dist/features/cluster-runtime/utils/getMinikubeClusterIdentity.d.ts.map +1 -1
  56. package/dist/features/cluster-runtime/utils/getMinikubeClusterIdentity.js.map +1 -1
  57. package/dist/features/cluster-runtime/utils/getMinikubeClusterSpec.d.ts +1 -1
  58. package/dist/features/cluster-runtime/utils/getMinikubeClusterSpec.d.ts.map +1 -1
  59. package/dist/features/cluster-runtime/utils/getMinikubeClusterSpec.js +1 -1
  60. package/dist/features/cluster-runtime/utils/getMinikubeClusterSpec.js.map +1 -1
  61. package/dist/index.d.ts +4 -4
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +3 -3
  64. package/dist/index.js.map +1 -1
  65. package/package.json +7 -6
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  # @ankhorage/infra-minikube
5
5
 
6
- ![license: MIT](././paradox/badges/license.svg) ![npm: v0.4.128](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![paradox: warnings](././paradox/badges/docs.svg)
6
+ ![license: MIT](././paradox/badges/license.svg) ![npm: v0.4.130](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![paradox: warnings](././paradox/badges/docs.svg)
7
7
 
8
8
  Minikube runtime adapter for provider-neutral Ankhorage infrastructure.
9
9
 
@@ -1,7 +1,7 @@
1
1
  /** Canonical Contracts-backed identity used for adapter discovery and conformance. */
2
2
  export declare const infraAdapterDescriptor: {
3
3
  readonly id: "minikube";
4
- readonly package: "@ankhorage/minikube";
4
+ readonly package: "@ankhorage/infra-minikube";
5
5
  readonly kind: "runtime";
6
6
  readonly configVersion: 1;
7
7
  readonly capabilities: readonly ["runtime", "workloads", "networking"];
@@ -1,4 +1,4 @@
1
- import type { MinikubeCliControlPlaneOptions, MinikubeControlPlane } from '../../../types/minikubeRuntime';
1
+ import type { MinikubeCliControlPlaneOptions, MinikubeControlPlane } from '../../../types/minikubeRuntime.js';
2
2
  /** Create the concrete stateless Minikube CLI control plane. */
3
3
  export declare function createMinikubeCliControlPlane(options?: MinikubeCliControlPlaneOptions): MinikubeControlPlane;
4
4
  //# sourceMappingURL=createMinikubeCliControlPlane.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createMinikubeCliControlPlane.d.ts","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/adapters/createMinikubeCliControlPlane.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,8BAA8B,EAI9B,oBAAoB,EACrB,MAAM,gCAAgC,CAAC;AAiBxC,gEAAgE;AAChE,wBAAgB,6BAA6B,CAC3C,OAAO,GAAE,8BAAmC,GAC3C,oBAAoB,CAYtB"}
1
+ {"version":3,"file":"createMinikubeCliControlPlane.d.ts","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/adapters/createMinikubeCliControlPlane.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,8BAA8B,EAI9B,oBAAoB,EACrB,MAAM,mCAAmC,CAAC;AAiB3C,gEAAgE;AAChE,wBAAgB,6BAA6B,CAC3C,OAAO,GAAE,8BAAmC,GAC3C,oBAAoB,CAYtB"}
@@ -1,7 +1,7 @@
1
- import { createSubprocessMinikubeCommandRunner } from './createSubprocessMinikubeCommandRunner';
2
- import { inspectMinikubeAsync } from './inspectMinikubeAsync';
3
- import { delayMinikubePollAsync, runCheckedMinikubeCommandAsync } from './minikubeCliProcess';
4
- import { readMinikubeEndpoints } from './readMinikubeEndpoints';
1
+ import { createSubprocessMinikubeCommandRunner } from './createSubprocessMinikubeCommandRunner.js';
2
+ import { inspectMinikubeAsync } from './inspectMinikubeAsync.js';
3
+ import { delayMinikubePollAsync, runCheckedMinikubeCommandAsync } from './minikubeCliProcess.js';
4
+ import { readMinikubeEndpoints } from './readMinikubeEndpoints.js';
5
5
  const IMAGE_LOAD_ATTEMPTS = 3;
6
6
  /** Create the concrete stateless Minikube CLI control plane. */
7
7
  export function createMinikubeCliControlPlane(options = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"createMinikubeCliControlPlane.js","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/adapters/createMinikubeCliControlPlane.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InfraResult } from '@ankhorage/contracts/infra';\n\nimport type {\n MinikubeCliControlPlaneOptions,\n MinikubeClusterIdentity,\n MinikubeClusterSpec,\n MinikubeCommandRunner,\n MinikubeControlPlane,\n} from '../../../types/minikubeRuntime';\nimport { createSubprocessMinikubeCommandRunner } from './createSubprocessMinikubeCommandRunner';\nimport { inspectMinikubeAsync } from './inspectMinikubeAsync';\nimport { delayMinikubePollAsync, runCheckedMinikubeCommandAsync } from './minikubeCliProcess';\nimport { readMinikubeEndpoints } from './readMinikubeEndpoints';\n\nconst IMAGE_LOAD_ATTEMPTS = 3;\n\ninterface MinikubeCliContext {\n readonly runner: MinikubeCommandRunner;\n readonly executable: string;\n readonly kubectlExecutable: string;\n readonly kubectlRunner?: MinikubeCliControlPlaneOptions['kubectlRunner'];\n readonly pollIntervalMs: number;\n readonly readinessTimeoutSeconds: number;\n}\n\n/** Create the concrete stateless Minikube CLI control plane. */\nexport function createMinikubeCliControlPlane(\n options: MinikubeCliControlPlaneOptions = {},\n): MinikubeControlPlane {\n const context: MinikubeCliContext = {\n runner: options.runner ?? createSubprocessMinikubeCommandRunner(),\n executable: options.executable ?? 'minikube',\n kubectlExecutable: options.kubectlExecutable ?? 'kubectl',\n ...(options.kubectlRunner === undefined ? {} : { kubectlRunner: options.kubectlRunner }),\n pollIntervalMs: options.pollIntervalMs ?? 500,\n readinessTimeoutSeconds: options.readinessTimeoutSeconds ?? 120,\n };\n assertNonNegativeInteger('pollIntervalMs', context.pollIntervalMs);\n assertPositiveInteger('readinessTimeoutSeconds', context.readinessTimeoutSeconds);\n return createControlPlane(context);\n}\n\nfunction createControlPlane(context: MinikubeCliContext): MinikubeControlPlane {\n return {\n validateAsync: (spec, signal) => validateMinikubeCliAsync(context, spec, signal),\n inspectAsync: (identity, signal) => inspectMinikubeAsync(context, identity, signal),\n ensureAsync: (spec, signal) => ensureMinikubeCliAsync(context, spec, signal),\n waitUntilReadyAsync: (identity, signal) => waitForMinikubeCliAsync(context, identity, signal),\n loadImagesAsync: (identity, images, signal) =>\n loadMinikubeImagesAsync(context, identity, images, signal),\n repairEndpointsAsync: (identity, workloads, publicBaseUrl) =>\n Promise.resolve(readMinikubeEndpoints(identity, workloads, publicBaseUrl)),\n suspendAsync: (identity, signal) => suspendMinikubeCliAsync(context, identity, signal),\n destroyAsync: (identity, signal) => destroyMinikubeCliAsync(context, identity, signal),\n };\n}\n\nasync function validateMinikubeCliAsync(\n context: MinikubeCliContext,\n spec: MinikubeClusterSpec,\n signal?: AbortSignal,\n): Promise<InfraResult<null>> {\n const commands: readonly [string, readonly string[]][] = [\n [context.executable, ['version', '--output=json']],\n [spec.driver, ['info']],\n [context.kubectlExecutable, ['version', '--client=true', '--output=json']],\n ];\n for (const [executable, arguments_] of commands) {\n const result = await runCheckedMinikubeCommandAsync(\n context.runner,\n executable,\n arguments_,\n signal,\n );\n if (!result.ok) return result;\n }\n return { ok: true, value: null, diagnostics: [] };\n}\n\nasync function ensureMinikubeCliAsync(\n context: MinikubeCliContext,\n spec: MinikubeClusterSpec,\n signal?: AbortSignal,\n) {\n const observed = await inspectMinikubeAsync(context, spec, signal);\n if (!observed.ok) return observed;\n if (observed.value.state === 'ready' && observed.value.configurationMatches) return observed;\n const started = await runCheckedMinikubeCommandAsync(\n context.runner,\n context.executable,\n createStartArguments(spec),\n signal,\n );\n if (!started.ok) return started;\n const updated = await inspectMinikubeAsync(context, spec, signal);\n return updated.ok && updated.value.configurationMatches ? updated : profileConfigurationDrift();\n}\n\nasync function waitForMinikubeCliAsync(\n context: MinikubeCliContext,\n identity: MinikubeClusterIdentity,\n signal?: AbortSignal,\n) {\n const deadline = Date.now() + context.readinessTimeoutSeconds * 1_000;\n for (;;) {\n const observed = await inspectMinikubeAsync(context, identity, signal);\n if (!observed.ok) return observed;\n if (observed.value.state === 'ready') return observed;\n if (Date.now() >= deadline) return readinessTimeout();\n await delayMinikubePollAsync(\n Math.min(context.pollIntervalMs, Math.max(0, deadline - Date.now())),\n signal,\n );\n }\n}\n\nasync function loadMinikubeImagesAsync(\n context: MinikubeCliContext,\n identity: MinikubeClusterIdentity,\n images: readonly string[],\n signal?: AbortSignal,\n): Promise<InfraResult<null>> {\n for (const image of images) {\n const loaded = await loadMinikubeImageAsync(context, identity, image, 1, signal);\n if (!loaded.ok) return loaded;\n }\n return { ok: true, value: null, diagnostics: [] };\n}\n\n/*** Load one image with bounded retries because registry-backed image transfer is idempotent. */\nasync function loadMinikubeImageAsync(\n context: MinikubeCliContext,\n identity: MinikubeClusterIdentity,\n image: string,\n attempt: number,\n signal?: AbortSignal,\n): Promise<InfraResult<null>> {\n const loaded = await runCheckedMinikubeCommandAsync(\n context.runner,\n context.executable,\n ['image', 'load', image, '-p', identity.profile],\n signal,\n );\n if (loaded.ok) return { ok: true, value: null, diagnostics: [] };\n if (attempt >= IMAGE_LOAD_ATTEMPTS) return loaded;\n await delayMinikubePollAsync(context.pollIntervalMs, signal);\n return loadMinikubeImageAsync(context, identity, image, attempt + 1, signal);\n}\n\nasync function suspendMinikubeCliAsync(\n context: MinikubeCliContext,\n identity: MinikubeClusterIdentity,\n signal?: AbortSignal,\n): Promise<InfraResult<null>> {\n const observed = await inspectMinikubeAsync(context, identity, signal);\n if (!observed.ok) return observed;\n if (observed.value.state === 'absent' || observed.value.state === 'stopped') {\n return { ok: true, value: null, diagnostics: [] };\n }\n const stopped = await runCheckedMinikubeCommandAsync(\n context.runner,\n context.executable,\n ['stop', '-p', identity.profile, '--output=json'],\n signal,\n );\n return stopped.ok ? { ok: true, value: null, diagnostics: [] } : stopped;\n}\n\nasync function destroyMinikubeCliAsync(\n context: MinikubeCliContext,\n identity: MinikubeClusterIdentity,\n signal?: AbortSignal,\n): Promise<InfraResult<null>> {\n const observed = await inspectMinikubeAsync(context, identity, signal);\n if (!observed.ok) return observed;\n if (observed.value.state === 'absent') {\n return { ok: true, value: null, diagnostics: [] };\n }\n const destroyed = await runCheckedMinikubeCommandAsync(\n context.runner,\n context.executable,\n ['delete', '-p', identity.profile, '--output=json'],\n signal,\n );\n return destroyed.ok ? { ok: true, value: null, diagnostics: [] } : destroyed;\n}\n\nfunction createStartArguments(spec: MinikubeClusterSpec): readonly string[] {\n return [\n 'start',\n '-p',\n spec.profile,\n `--driver=${spec.driver}`,\n '--interactive=false',\n '--addons=ingress',\n ...spec.publishedPorts.map((port) => `--ports=${port}:${port}`),\n ...(spec.cpus === undefined ? [] : [`--cpus=${spec.cpus}`]),\n ...(spec.memoryMiB === undefined ? [] : [`--memory=${spec.memoryMiB}mb`]),\n ];\n}\n\n/*** Refuse to report convergence when an existing profile cannot adopt required port mappings. */\nfunction profileConfigurationDrift(): InfraResult<never> {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'minikube-profile-configuration-drift',\n message:\n 'The existing Minikube profile does not expose the desired workload ports; destroy and recreate the owned profile explicitly.',\n },\n ],\n };\n}\n\nfunction readinessTimeout(): InfraResult<never> {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'minikube-readiness-timeout',\n message: 'Timed out waiting for the Minikube cluster to become ready.',\n },\n ],\n };\n}\n\nfunction assertNonNegativeInteger(name: string, value: number): void {\n if (!Number.isInteger(value) || value < 0) {\n throw new TypeError(`Minikube ${name} must be a non-negative integer.`);\n }\n}\n\nfunction assertPositiveInteger(name: string, value: number): void {\n if (!Number.isInteger(value) || value <= 0) {\n throw new TypeError(`Minikube ${name} must be a positive integer.`);\n }\n}\n"]}
1
+ {"version":3,"file":"createMinikubeCliControlPlane.js","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/adapters/createMinikubeCliControlPlane.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InfraResult } from '@ankhorage/contracts/infra';\n\nimport type {\n MinikubeCliControlPlaneOptions,\n MinikubeClusterIdentity,\n MinikubeClusterSpec,\n MinikubeCommandRunner,\n MinikubeControlPlane,\n} from '../../../types/minikubeRuntime.js';\nimport { createSubprocessMinikubeCommandRunner } from './createSubprocessMinikubeCommandRunner.js';\nimport { inspectMinikubeAsync } from './inspectMinikubeAsync.js';\nimport { delayMinikubePollAsync, runCheckedMinikubeCommandAsync } from './minikubeCliProcess.js';\nimport { readMinikubeEndpoints } from './readMinikubeEndpoints.js';\n\nconst IMAGE_LOAD_ATTEMPTS = 3;\n\ninterface MinikubeCliContext {\n readonly runner: MinikubeCommandRunner;\n readonly executable: string;\n readonly kubectlExecutable: string;\n readonly kubectlRunner?: MinikubeCliControlPlaneOptions['kubectlRunner'];\n readonly pollIntervalMs: number;\n readonly readinessTimeoutSeconds: number;\n}\n\n/** Create the concrete stateless Minikube CLI control plane. */\nexport function createMinikubeCliControlPlane(\n options: MinikubeCliControlPlaneOptions = {},\n): MinikubeControlPlane {\n const context: MinikubeCliContext = {\n runner: options.runner ?? createSubprocessMinikubeCommandRunner(),\n executable: options.executable ?? 'minikube',\n kubectlExecutable: options.kubectlExecutable ?? 'kubectl',\n ...(options.kubectlRunner === undefined ? {} : { kubectlRunner: options.kubectlRunner }),\n pollIntervalMs: options.pollIntervalMs ?? 500,\n readinessTimeoutSeconds: options.readinessTimeoutSeconds ?? 120,\n };\n assertNonNegativeInteger('pollIntervalMs', context.pollIntervalMs);\n assertPositiveInteger('readinessTimeoutSeconds', context.readinessTimeoutSeconds);\n return createControlPlane(context);\n}\n\nfunction createControlPlane(context: MinikubeCliContext): MinikubeControlPlane {\n return {\n validateAsync: (spec, signal) => validateMinikubeCliAsync(context, spec, signal),\n inspectAsync: (identity, signal) => inspectMinikubeAsync(context, identity, signal),\n ensureAsync: (spec, signal) => ensureMinikubeCliAsync(context, spec, signal),\n waitUntilReadyAsync: (identity, signal) => waitForMinikubeCliAsync(context, identity, signal),\n loadImagesAsync: (identity, images, signal) =>\n loadMinikubeImagesAsync(context, identity, images, signal),\n repairEndpointsAsync: (identity, workloads, publicBaseUrl) =>\n Promise.resolve(readMinikubeEndpoints(identity, workloads, publicBaseUrl)),\n suspendAsync: (identity, signal) => suspendMinikubeCliAsync(context, identity, signal),\n destroyAsync: (identity, signal) => destroyMinikubeCliAsync(context, identity, signal),\n };\n}\n\nasync function validateMinikubeCliAsync(\n context: MinikubeCliContext,\n spec: MinikubeClusterSpec,\n signal?: AbortSignal,\n): Promise<InfraResult<null>> {\n const commands: readonly [string, readonly string[]][] = [\n [context.executable, ['version', '--output=json']],\n [spec.driver, ['info']],\n [context.kubectlExecutable, ['version', '--client=true', '--output=json']],\n ];\n for (const [executable, arguments_] of commands) {\n const result = await runCheckedMinikubeCommandAsync(\n context.runner,\n executable,\n arguments_,\n signal,\n );\n if (!result.ok) return result;\n }\n return { ok: true, value: null, diagnostics: [] };\n}\n\nasync function ensureMinikubeCliAsync(\n context: MinikubeCliContext,\n spec: MinikubeClusterSpec,\n signal?: AbortSignal,\n) {\n const observed = await inspectMinikubeAsync(context, spec, signal);\n if (!observed.ok) return observed;\n if (observed.value.state === 'ready' && observed.value.configurationMatches) return observed;\n const started = await runCheckedMinikubeCommandAsync(\n context.runner,\n context.executable,\n createStartArguments(spec),\n signal,\n );\n if (!started.ok) return started;\n const updated = await inspectMinikubeAsync(context, spec, signal);\n return updated.ok && updated.value.configurationMatches ? updated : profileConfigurationDrift();\n}\n\nasync function waitForMinikubeCliAsync(\n context: MinikubeCliContext,\n identity: MinikubeClusterIdentity,\n signal?: AbortSignal,\n) {\n const deadline = Date.now() + context.readinessTimeoutSeconds * 1_000;\n for (;;) {\n const observed = await inspectMinikubeAsync(context, identity, signal);\n if (!observed.ok) return observed;\n if (observed.value.state === 'ready') return observed;\n if (Date.now() >= deadline) return readinessTimeout();\n await delayMinikubePollAsync(\n Math.min(context.pollIntervalMs, Math.max(0, deadline - Date.now())),\n signal,\n );\n }\n}\n\nasync function loadMinikubeImagesAsync(\n context: MinikubeCliContext,\n identity: MinikubeClusterIdentity,\n images: readonly string[],\n signal?: AbortSignal,\n): Promise<InfraResult<null>> {\n for (const image of images) {\n const loaded = await loadMinikubeImageAsync(context, identity, image, 1, signal);\n if (!loaded.ok) return loaded;\n }\n return { ok: true, value: null, diagnostics: [] };\n}\n\n/*** Load one image with bounded retries because registry-backed image transfer is idempotent. */\nasync function loadMinikubeImageAsync(\n context: MinikubeCliContext,\n identity: MinikubeClusterIdentity,\n image: string,\n attempt: number,\n signal?: AbortSignal,\n): Promise<InfraResult<null>> {\n const loaded = await runCheckedMinikubeCommandAsync(\n context.runner,\n context.executable,\n ['image', 'load', image, '-p', identity.profile],\n signal,\n );\n if (loaded.ok) return { ok: true, value: null, diagnostics: [] };\n if (attempt >= IMAGE_LOAD_ATTEMPTS) return loaded;\n await delayMinikubePollAsync(context.pollIntervalMs, signal);\n return loadMinikubeImageAsync(context, identity, image, attempt + 1, signal);\n}\n\nasync function suspendMinikubeCliAsync(\n context: MinikubeCliContext,\n identity: MinikubeClusterIdentity,\n signal?: AbortSignal,\n): Promise<InfraResult<null>> {\n const observed = await inspectMinikubeAsync(context, identity, signal);\n if (!observed.ok) return observed;\n if (observed.value.state === 'absent' || observed.value.state === 'stopped') {\n return { ok: true, value: null, diagnostics: [] };\n }\n const stopped = await runCheckedMinikubeCommandAsync(\n context.runner,\n context.executable,\n ['stop', '-p', identity.profile, '--output=json'],\n signal,\n );\n return stopped.ok ? { ok: true, value: null, diagnostics: [] } : stopped;\n}\n\nasync function destroyMinikubeCliAsync(\n context: MinikubeCliContext,\n identity: MinikubeClusterIdentity,\n signal?: AbortSignal,\n): Promise<InfraResult<null>> {\n const observed = await inspectMinikubeAsync(context, identity, signal);\n if (!observed.ok) return observed;\n if (observed.value.state === 'absent') {\n return { ok: true, value: null, diagnostics: [] };\n }\n const destroyed = await runCheckedMinikubeCommandAsync(\n context.runner,\n context.executable,\n ['delete', '-p', identity.profile, '--output=json'],\n signal,\n );\n return destroyed.ok ? { ok: true, value: null, diagnostics: [] } : destroyed;\n}\n\nfunction createStartArguments(spec: MinikubeClusterSpec): readonly string[] {\n return [\n 'start',\n '-p',\n spec.profile,\n `--driver=${spec.driver}`,\n '--interactive=false',\n '--addons=ingress',\n ...spec.publishedPorts.map((port) => `--ports=${port}:${port}`),\n ...(spec.cpus === undefined ? [] : [`--cpus=${spec.cpus}`]),\n ...(spec.memoryMiB === undefined ? [] : [`--memory=${spec.memoryMiB}mb`]),\n ];\n}\n\n/*** Refuse to report convergence when an existing profile cannot adopt required port mappings. */\nfunction profileConfigurationDrift(): InfraResult<never> {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'minikube-profile-configuration-drift',\n message:\n 'The existing Minikube profile does not expose the desired workload ports; destroy and recreate the owned profile explicitly.',\n },\n ],\n };\n}\n\nfunction readinessTimeout(): InfraResult<never> {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'minikube-readiness-timeout',\n message: 'Timed out waiting for the Minikube cluster to become ready.',\n },\n ],\n };\n}\n\nfunction assertNonNegativeInteger(name: string, value: number): void {\n if (!Number.isInteger(value) || value < 0) {\n throw new TypeError(`Minikube ${name} must be a non-negative integer.`);\n }\n}\n\nfunction assertPositiveInteger(name: string, value: number): void {\n if (!Number.isInteger(value) || value <= 0) {\n throw new TypeError(`Minikube ${name} must be a positive integer.`);\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { MinikubeCommandRunner } from '../../../types/minikubeRuntime';
1
+ import type { MinikubeCommandRunner } from '../../../types/minikubeRuntime.js';
2
2
  /** Create the concrete shell-free subprocess boundary used by Minikube operations. */
3
3
  export declare function createSubprocessMinikubeCommandRunner(): MinikubeCommandRunner;
4
4
  //# sourceMappingURL=createSubprocessMinikubeCommandRunner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createSubprocessMinikubeCommandRunner.d.ts","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/adapters/createSubprocessMinikubeCommandRunner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,qBAAqB,EACtB,MAAM,gCAAgC,CAAC;AAExC,sFAAsF;AACtF,wBAAgB,qCAAqC,IAAI,qBAAqB,CAE7E"}
1
+ {"version":3,"file":"createSubprocessMinikubeCommandRunner.d.ts","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/adapters/createSubprocessMinikubeCommandRunner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,qBAAqB,EACtB,MAAM,mCAAmC,CAAC;AAE3C,sFAAsF;AACtF,wBAAgB,qCAAqC,IAAI,qBAAqB,CAE7E"}
@@ -1 +1 @@
1
- {"version":3,"file":"createSubprocessMinikubeCommandRunner.js","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/adapters/createSubprocessMinikubeCommandRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAQ3C,sFAAsF;AACtF,MAAM,UAAU,qCAAqC;IACnD,OAAO,EAAE,QAAQ,EAAE,CAAC;AACtB,CAAC;AAED,2FAA2F;AAC3F,SAAS,QAAQ,CAAC,OAA+B;IAC/C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE;YAC9D,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YACjC,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;SACpE,CAAC,CAAC;QACH,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC/B,OAAO,CAAC;YACN,QAAQ,EAAE,QAAQ,IAAI,CAAC;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC9C,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC/C,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { spawn } from 'node:child_process';\n\nimport type {\n MinikubeCommandRequest,\n MinikubeCommandResult,\n MinikubeCommandRunner,\n} from '../../../types/minikubeRuntime';\n\n/** Create the concrete shell-free subprocess boundary used by Minikube operations. */\nexport function createSubprocessMinikubeCommandRunner(): MinikubeCommandRunner {\n return { runAsync };\n}\n\n/** Execute one argv-safe command without exposing process output through thrown errors. */\nfunction runAsync(request: MinikubeCommandRequest): Promise<MinikubeCommandResult> {\n return new Promise((resolve, reject) => {\n const child = spawn(request.executable, [...request.arguments], {\n shell: false,\n stdio: ['ignore', 'pipe', 'pipe'],\n ...(request.signal === undefined ? {} : { signal: request.signal }),\n });\n const stdout: Buffer[] = [];\n const stderr: Buffer[] = [];\n child.stdout.on('data', (chunk: Buffer) => stdout.push(chunk));\n child.stderr.on('data', (chunk: Buffer) => stderr.push(chunk));\n child.once('error', reject);\n child.once('close', (exitCode) =>\n resolve({\n exitCode: exitCode ?? 1,\n stdout: Buffer.concat(stdout).toString('utf8'),\n stderr: Buffer.concat(stderr).toString('utf8'),\n }),\n );\n });\n}\n"]}
1
+ {"version":3,"file":"createSubprocessMinikubeCommandRunner.js","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/adapters/createSubprocessMinikubeCommandRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAQ3C,sFAAsF;AACtF,MAAM,UAAU,qCAAqC;IACnD,OAAO,EAAE,QAAQ,EAAE,CAAC;AACtB,CAAC;AAED,2FAA2F;AAC3F,SAAS,QAAQ,CAAC,OAA+B;IAC/C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE;YAC9D,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YACjC,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;SACpE,CAAC,CAAC;QACH,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC/B,OAAO,CAAC;YACN,QAAQ,EAAE,QAAQ,IAAI,CAAC;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC9C,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC/C,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { spawn } from 'node:child_process';\n\nimport type {\n MinikubeCommandRequest,\n MinikubeCommandResult,\n MinikubeCommandRunner,\n} from '../../../types/minikubeRuntime.js';\n\n/** Create the concrete shell-free subprocess boundary used by Minikube operations. */\nexport function createSubprocessMinikubeCommandRunner(): MinikubeCommandRunner {\n return { runAsync };\n}\n\n/** Execute one argv-safe command without exposing process output through thrown errors. */\nfunction runAsync(request: MinikubeCommandRequest): Promise<MinikubeCommandResult> {\n return new Promise((resolve, reject) => {\n const child = spawn(request.executable, [...request.arguments], {\n shell: false,\n stdio: ['ignore', 'pipe', 'pipe'],\n ...(request.signal === undefined ? {} : { signal: request.signal }),\n });\n const stdout: Buffer[] = [];\n const stderr: Buffer[] = [];\n child.stdout.on('data', (chunk: Buffer) => stdout.push(chunk));\n child.stderr.on('data', (chunk: Buffer) => stderr.push(chunk));\n child.once('error', reject);\n child.once('close', (exitCode) =>\n resolve({\n exitCode: exitCode ?? 1,\n stdout: Buffer.concat(stdout).toString('utf8'),\n stderr: Buffer.concat(stderr).toString('utf8'),\n }),\n );\n });\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { InfraResult } from '@ankhorage/contracts/infra';
2
- import type { MinikubeCliControlPlaneOptions, MinikubeClusterIdentity, MinikubeClusterObservation, MinikubeClusterSpec, MinikubeCommandRunner } from '../../../types/minikubeRuntime';
2
+ import type { MinikubeCliControlPlaneOptions, MinikubeClusterIdentity, MinikubeClusterObservation, MinikubeClusterSpec, MinikubeCommandRunner } from '../../../types/minikubeRuntime.js';
3
3
  interface InspectMinikubeOptions {
4
4
  readonly runner: MinikubeCommandRunner;
5
5
  readonly executable: string;
@@ -1 +1 @@
1
- {"version":3,"file":"inspectMinikubeAsync.d.ts","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/adapters/inspectMinikubeAsync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG9D,OAAO,KAAK,EACV,8BAA8B,EAC9B,uBAAuB,EACvB,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,gCAAgC,CAAC;AAaxC,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,8BAA8B,CAAC,eAAe,CAAC,CAAC;CAC1E;AAED,qFAAqF;AACrF,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,sBAAsB,EAC/B,QAAQ,EAAE,uBAAuB,GAAG,mBAAmB,EACvD,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC,CAYlD"}
1
+ {"version":3,"file":"inspectMinikubeAsync.d.ts","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/adapters/inspectMinikubeAsync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG9D,OAAO,KAAK,EACV,8BAA8B,EAC9B,uBAAuB,EACvB,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,mCAAmC,CAAC;AAa3C,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,8BAA8B,CAAC,eAAe,CAAC,CAAC;CAC1E;AAED,qFAAqF;AACrF,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,sBAAsB,EAC/B,QAAQ,EAAE,uBAAuB,GAAG,mBAAmB,EACvD,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC,CAYlD"}
@@ -1,5 +1,5 @@
1
1
  import { createKubectlKubernetesApi } from '@ankhorage/kubernetes';
2
- import { runCheckedMinikubeCommandAsync, runMinikubeCommandAsync } from './minikubeCliProcess';
2
+ import { runCheckedMinikubeCommandAsync, runMinikubeCommandAsync } from './minikubeCliProcess.js';
3
3
  const STATUS_FORMAT = '{{.Host}}|{{.Kubelet}}|{{.APIServer}}|{{.Kubeconfig}}';
4
4
  /** Inspect exact profile configuration and live status without mutating Minikube. */
5
5
  export async function inspectMinikubeAsync(options, identity, signal) {
@@ -1 +1 @@
1
- {"version":3,"file":"inspectMinikubeAsync.js","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/adapters/inspectMinikubeAsync.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InfraResult } from '@ankhorage/contracts/infra';\nimport { createKubectlKubernetesApi } from '@ankhorage/kubernetes';\n\nimport type {\n MinikubeCliControlPlaneOptions,\n MinikubeClusterIdentity,\n MinikubeClusterObservation,\n MinikubeClusterSpec,\n MinikubeCommandRunner,\n} from '../../../types/minikubeRuntime';\nimport { runCheckedMinikubeCommandAsync, runMinikubeCommandAsync } from './minikubeCliProcess';\n\nconst STATUS_FORMAT = '{{.Host}}|{{.Kubelet}}|{{.APIServer}}|{{.Kubeconfig}}';\n\ninterface MinikubeProfile {\n readonly name: string;\n readonly driver?: string;\n readonly cpus?: number;\n readonly memoryMiB?: number;\n readonly publishedPorts: readonly number[];\n}\n\ninterface InspectMinikubeOptions {\n readonly runner: MinikubeCommandRunner;\n readonly executable: string;\n readonly kubectlExecutable: string;\n readonly kubectlRunner?: MinikubeCliControlPlaneOptions['kubectlRunner'];\n}\n\n/** Inspect exact profile configuration and live status without mutating Minikube. */\nexport async function inspectMinikubeAsync(\n options: InspectMinikubeOptions,\n identity: MinikubeClusterIdentity | MinikubeClusterSpec,\n signal?: AbortSignal,\n): Promise<InfraResult<MinikubeClusterObservation>> {\n const listed = await runCheckedMinikubeCommandAsync(\n options.runner,\n options.executable,\n ['profile', 'list', '--light', '--output=json'],\n signal,\n );\n if (!listed.ok) return listed;\n const profile = readProfile(listed.value.stdout, identity.profile);\n if (!profile.ok) return profile;\n if (profile.value === undefined) return absentObservation();\n return inspectExistingMinikubeAsync(options, identity, profile.value, signal);\n}\n\nasync function inspectExistingMinikubeAsync(\n options: InspectMinikubeOptions,\n identity: MinikubeClusterIdentity | MinikubeClusterSpec,\n profile: MinikubeProfile,\n signal?: AbortSignal,\n): Promise<InfraResult<MinikubeClusterObservation>> {\n const status = await runMinikubeCommandAsync(\n options.runner,\n options.executable,\n ['status', '-p', identity.profile, '--format', STATUS_FORMAT],\n signal,\n );\n if (!status.ok) return status;\n const state = readStatus(status.value.stdout);\n return {\n ok: true,\n value: {\n state,\n configurationMatches: profileMatches(profile, identity),\n ...(state === 'ready' ? { api: createKubernetesApi(options, identity.profile) } : {}),\n ...(status.value.exitCode === 0 ? {} : { detail: 'Minikube profile is not ready.' }),\n },\n diagnostics: [],\n };\n}\n\nfunction createKubernetesApi(options: InspectMinikubeOptions, context: string) {\n return createKubectlKubernetesApi({\n context,\n executable: options.kubectlExecutable,\n ...(options.kubectlRunner === undefined ? {} : { runner: options.kubectlRunner }),\n });\n}\n\nfunction absentObservation(): InfraResult<MinikubeClusterObservation> {\n return {\n ok: true,\n value: { state: 'absent', configurationMatches: true },\n diagnostics: [],\n };\n}\n\n/** Compare only user-controlled profile fields; omitted resources accept existing defaults. */\nfunction profileMatches(\n profile: MinikubeProfile,\n identity: MinikubeClusterIdentity | MinikubeClusterSpec,\n): boolean {\n if (!isClusterSpec(identity)) return true;\n return (\n profile.driver === identity.driver &&\n (identity.cpus === undefined || profile.cpus === identity.cpus) &&\n (identity.memoryMiB === undefined || profile.memoryMiB === identity.memoryMiB) &&\n arraysEqual(profile.publishedPorts, identity.publishedPorts)\n );\n}\n\nfunction isClusterSpec(\n identity: MinikubeClusterIdentity | MinikubeClusterSpec,\n): identity is MinikubeClusterSpec {\n return 'driver' in identity;\n}\n\n/** Parse one exact profile from Minikube's machine-readable profile catalog. */\nfunction readProfile(input: string, name: string): InfraResult<MinikubeProfile | undefined> {\n const parsed = parseJson(input);\n if (!parsed.ok) return parsed;\n if (!isRecord(parsed.value)) return invalidOutput();\n const { valid, invalid } = parsed.value;\n const entries: readonly unknown[] = [...toUnknownArray(valid), ...toUnknownArray(invalid)];\n const entry = entries.find((candidate) => isRecord(candidate) && candidate.Name === name);\n if (!isRecord(entry)) return { ok: true, value: undefined, diagnostics: [] };\n const config = isRecord(entry.Config) ? entry.Config : undefined;\n return { ok: true, value: readProfileConfig(name, config), diagnostics: [] };\n}\n\nfunction toUnknownArray(value: unknown): readonly unknown[] {\n return Array.isArray(value) ? (value as readonly unknown[]) : [];\n}\n\nfunction readProfileConfig(\n name: string,\n config: Readonly<Record<string, unknown>> | undefined,\n): MinikubeProfile {\n return {\n name,\n ...(typeof config?.Driver === 'string' ? { driver: config.Driver } : {}),\n ...(typeof config?.CPUs === 'number' ? { cpus: config.CPUs } : {}),\n ...(typeof config?.Memory === 'number' ? { memoryMiB: config.Memory } : {}),\n publishedPorts: readPublishedPorts(config?.ExposedPorts),\n };\n}\n\n/*** Parse Minikube's host-to-profile port mappings into sorted exact host listeners. */\nfunction readPublishedPorts(value: unknown): readonly number[] {\n if (!Array.isArray(value)) return [];\n return value\n .flatMap((entry) => {\n if (typeof entry !== 'string') return [];\n const [, hostPortText] = entry.split(':').reverse();\n const hostPort = Number(hostPortText);\n return Number.isInteger(hostPort) && hostPort > 0 && hostPort <= 65_535 ? [hostPort] : [];\n })\n .sort((left, right) => left - right);\n}\n\n/*** Compare two already sorted numeric port sets exactly. */\nfunction arraysEqual(left: readonly number[], right: readonly number[]): boolean {\n return left.length === right.length && left.join(',') === right.join(',');\n}\n\n/** Map Minikube component status into the provider-neutral lifecycle state. */\nfunction readStatus(input: string): MinikubeClusterObservation['state'] {\n const [host, kubelet, apiServer, kubeconfig] = input.trim().split('|');\n if (\n host === 'Running' &&\n kubelet === 'Running' &&\n apiServer === 'Running' &&\n kubeconfig === 'Configured'\n ) {\n return 'ready';\n }\n if (host === 'Stopped') return 'stopped';\n if (host === 'Running') return 'pending';\n return 'unknown';\n}\n\nfunction parseJson(input: string): InfraResult<unknown> {\n try {\n return { ok: true, value: JSON.parse(input) as unknown, diagnostics: [] };\n } catch {\n return invalidOutput();\n }\n}\n\nfunction isRecord(value: unknown): value is Readonly<Record<string, unknown>> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction invalidOutput(): InfraResult<never> {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'minikube-output-invalid',\n message: 'Minikube returned an invalid machine-readable response.',\n },\n ],\n };\n}\n"]}
1
+ {"version":3,"file":"inspectMinikubeAsync.js","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/adapters/inspectMinikubeAsync.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InfraResult } from '@ankhorage/contracts/infra';\nimport { createKubectlKubernetesApi } from '@ankhorage/kubernetes';\n\nimport type {\n MinikubeCliControlPlaneOptions,\n MinikubeClusterIdentity,\n MinikubeClusterObservation,\n MinikubeClusterSpec,\n MinikubeCommandRunner,\n} from '../../../types/minikubeRuntime.js';\nimport { runCheckedMinikubeCommandAsync, runMinikubeCommandAsync } from './minikubeCliProcess.js';\n\nconst STATUS_FORMAT = '{{.Host}}|{{.Kubelet}}|{{.APIServer}}|{{.Kubeconfig}}';\n\ninterface MinikubeProfile {\n readonly name: string;\n readonly driver?: string;\n readonly cpus?: number;\n readonly memoryMiB?: number;\n readonly publishedPorts: readonly number[];\n}\n\ninterface InspectMinikubeOptions {\n readonly runner: MinikubeCommandRunner;\n readonly executable: string;\n readonly kubectlExecutable: string;\n readonly kubectlRunner?: MinikubeCliControlPlaneOptions['kubectlRunner'];\n}\n\n/** Inspect exact profile configuration and live status without mutating Minikube. */\nexport async function inspectMinikubeAsync(\n options: InspectMinikubeOptions,\n identity: MinikubeClusterIdentity | MinikubeClusterSpec,\n signal?: AbortSignal,\n): Promise<InfraResult<MinikubeClusterObservation>> {\n const listed = await runCheckedMinikubeCommandAsync(\n options.runner,\n options.executable,\n ['profile', 'list', '--light', '--output=json'],\n signal,\n );\n if (!listed.ok) return listed;\n const profile = readProfile(listed.value.stdout, identity.profile);\n if (!profile.ok) return profile;\n if (profile.value === undefined) return absentObservation();\n return inspectExistingMinikubeAsync(options, identity, profile.value, signal);\n}\n\nasync function inspectExistingMinikubeAsync(\n options: InspectMinikubeOptions,\n identity: MinikubeClusterIdentity | MinikubeClusterSpec,\n profile: MinikubeProfile,\n signal?: AbortSignal,\n): Promise<InfraResult<MinikubeClusterObservation>> {\n const status = await runMinikubeCommandAsync(\n options.runner,\n options.executable,\n ['status', '-p', identity.profile, '--format', STATUS_FORMAT],\n signal,\n );\n if (!status.ok) return status;\n const state = readStatus(status.value.stdout);\n return {\n ok: true,\n value: {\n state,\n configurationMatches: profileMatches(profile, identity),\n ...(state === 'ready' ? { api: createKubernetesApi(options, identity.profile) } : {}),\n ...(status.value.exitCode === 0 ? {} : { detail: 'Minikube profile is not ready.' }),\n },\n diagnostics: [],\n };\n}\n\nfunction createKubernetesApi(options: InspectMinikubeOptions, context: string) {\n return createKubectlKubernetesApi({\n context,\n executable: options.kubectlExecutable,\n ...(options.kubectlRunner === undefined ? {} : { runner: options.kubectlRunner }),\n });\n}\n\nfunction absentObservation(): InfraResult<MinikubeClusterObservation> {\n return {\n ok: true,\n value: { state: 'absent', configurationMatches: true },\n diagnostics: [],\n };\n}\n\n/** Compare only user-controlled profile fields; omitted resources accept existing defaults. */\nfunction profileMatches(\n profile: MinikubeProfile,\n identity: MinikubeClusterIdentity | MinikubeClusterSpec,\n): boolean {\n if (!isClusterSpec(identity)) return true;\n return (\n profile.driver === identity.driver &&\n (identity.cpus === undefined || profile.cpus === identity.cpus) &&\n (identity.memoryMiB === undefined || profile.memoryMiB === identity.memoryMiB) &&\n arraysEqual(profile.publishedPorts, identity.publishedPorts)\n );\n}\n\nfunction isClusterSpec(\n identity: MinikubeClusterIdentity | MinikubeClusterSpec,\n): identity is MinikubeClusterSpec {\n return 'driver' in identity;\n}\n\n/** Parse one exact profile from Minikube's machine-readable profile catalog. */\nfunction readProfile(input: string, name: string): InfraResult<MinikubeProfile | undefined> {\n const parsed = parseJson(input);\n if (!parsed.ok) return parsed;\n if (!isRecord(parsed.value)) return invalidOutput();\n const { valid, invalid } = parsed.value;\n const entries: readonly unknown[] = [...toUnknownArray(valid), ...toUnknownArray(invalid)];\n const entry = entries.find((candidate) => isRecord(candidate) && candidate.Name === name);\n if (!isRecord(entry)) return { ok: true, value: undefined, diagnostics: [] };\n const config = isRecord(entry.Config) ? entry.Config : undefined;\n return { ok: true, value: readProfileConfig(name, config), diagnostics: [] };\n}\n\nfunction toUnknownArray(value: unknown): readonly unknown[] {\n return Array.isArray(value) ? (value as readonly unknown[]) : [];\n}\n\nfunction readProfileConfig(\n name: string,\n config: Readonly<Record<string, unknown>> | undefined,\n): MinikubeProfile {\n return {\n name,\n ...(typeof config?.Driver === 'string' ? { driver: config.Driver } : {}),\n ...(typeof config?.CPUs === 'number' ? { cpus: config.CPUs } : {}),\n ...(typeof config?.Memory === 'number' ? { memoryMiB: config.Memory } : {}),\n publishedPorts: readPublishedPorts(config?.ExposedPorts),\n };\n}\n\n/*** Parse Minikube's host-to-profile port mappings into sorted exact host listeners. */\nfunction readPublishedPorts(value: unknown): readonly number[] {\n if (!Array.isArray(value)) return [];\n return value\n .flatMap((entry) => {\n if (typeof entry !== 'string') return [];\n const [, hostPortText] = entry.split(':').reverse();\n const hostPort = Number(hostPortText);\n return Number.isInteger(hostPort) && hostPort > 0 && hostPort <= 65_535 ? [hostPort] : [];\n })\n .sort((left, right) => left - right);\n}\n\n/*** Compare two already sorted numeric port sets exactly. */\nfunction arraysEqual(left: readonly number[], right: readonly number[]): boolean {\n return left.length === right.length && left.join(',') === right.join(',');\n}\n\n/** Map Minikube component status into the provider-neutral lifecycle state. */\nfunction readStatus(input: string): MinikubeClusterObservation['state'] {\n const [host, kubelet, apiServer, kubeconfig] = input.trim().split('|');\n if (\n host === 'Running' &&\n kubelet === 'Running' &&\n apiServer === 'Running' &&\n kubeconfig === 'Configured'\n ) {\n return 'ready';\n }\n if (host === 'Stopped') return 'stopped';\n if (host === 'Running') return 'pending';\n return 'unknown';\n}\n\nfunction parseJson(input: string): InfraResult<unknown> {\n try {\n return { ok: true, value: JSON.parse(input) as unknown, diagnostics: [] };\n } catch {\n return invalidOutput();\n }\n}\n\nfunction isRecord(value: unknown): value is Readonly<Record<string, unknown>> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction invalidOutput(): InfraResult<never> {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'minikube-output-invalid',\n message: 'Minikube returned an invalid machine-readable response.',\n },\n ],\n };\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { InfraResult } from '@ankhorage/contracts/infra';
2
- import type { MinikubeCommandResult, MinikubeCommandRunner } from '../../../types/minikubeRuntime';
2
+ import type { MinikubeCommandResult, MinikubeCommandRunner } from '../../../types/minikubeRuntime.js';
3
3
  /** Run one command, retaining exit status for state-oriented Minikube commands. */
4
4
  export declare function runMinikubeCommandAsync(runner: MinikubeCommandRunner, executable: string, arguments_: readonly string[], signal?: AbortSignal): Promise<InfraResult<MinikubeCommandResult>>;
5
5
  /** Run one command that must exit successfully. */
@@ -1 +1 @@
1
- {"version":3,"file":"minikubeCliProcess.d.ts","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/adapters/minikubeCliProcess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAEnG,mFAAmF;AACnF,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,qBAAqB,EAC7B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,CAW7C;AAED,mDAAmD;AACnD,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,qBAAqB,EAC7B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,CAG7C;AAgBD,0EAA0E;AAC1E,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhG"}
1
+ {"version":3,"file":"minikubeCliProcess.d.ts","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/adapters/minikubeCliProcess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,KAAK,EACV,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,mCAAmC,CAAC;AAE3C,mFAAmF;AACnF,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,qBAAqB,EAC7B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,CAW7C;AAED,mDAAmD;AACnD,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,qBAAqB,EAC7B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,CAG7C;AAgBD,0EAA0E;AAC1E,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhG"}
@@ -1 +1 @@
1
- {"version":3,"file":"minikubeCliProcess.js","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/adapters/minikubeCliProcess.ts"],"names":[],"mappings":"AAIA,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAA6B,EAC7B,UAAkB,EAClB,UAA6B,EAC7B,MAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YAClC,UAAU;YACV,SAAS,EAAE,UAAU;YACrB,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;SAC5C,CAAC,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,sBAAsB,EAAE,CAAC;IAClC,CAAC;AACH,CAAC;AAED,mDAAmD;AACnD,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,MAA6B,EAC7B,UAAkB,EAClB,UAA6B,EAC7B,MAAoB;IAEpB,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACrF,OAAO,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,sBAAsB,EAAE,CAAC;AACtF,CAAC;AAED,8EAA8E;AAC9E,SAAS,sBAAsB;IAC7B,OAAO;QACL,EAAE,EAAE,KAAK;QACT,WAAW,EAAE;YACX;gBACE,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE,mDAAmD;aAC7D;SACF;KACF,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,sBAAsB,CAAC,YAAoB,EAAE,MAAoB;IAC/E,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAC7F,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,YAAY,CAAC,CAAC;QACjB,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,MAAmB;IACrC,OAAO,MAAM,CAAC,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AACnG,CAAC","sourcesContent":["import type { InfraResult } from '@ankhorage/contracts/infra';\n\nimport type { MinikubeCommandResult, MinikubeCommandRunner } from '../../../types/minikubeRuntime';\n\n/** Run one command, retaining exit status for state-oriented Minikube commands. */\nexport async function runMinikubeCommandAsync(\n runner: MinikubeCommandRunner,\n executable: string,\n arguments_: readonly string[],\n signal?: AbortSignal,\n): Promise<InfraResult<MinikubeCommandResult>> {\n try {\n const value = await runner.runAsync({\n executable,\n arguments: arguments_,\n ...(signal === undefined ? {} : { signal }),\n });\n return { ok: true, value, diagnostics: [] };\n } catch {\n return minikubeCommandFailure();\n }\n}\n\n/** Run one command that must exit successfully. */\nexport async function runCheckedMinikubeCommandAsync(\n runner: MinikubeCommandRunner,\n executable: string,\n arguments_: readonly string[],\n signal?: AbortSignal,\n): Promise<InfraResult<MinikubeCommandResult>> {\n const result = await runMinikubeCommandAsync(runner, executable, arguments_, signal);\n return result.ok && result.value.exitCode === 0 ? result : minikubeCommandFailure();\n}\n\n/** Return a provider-safe command failure that excludes stdout and stderr. */\nfunction minikubeCommandFailure(): InfraResult<never> {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'minikube-command-failed',\n message: 'A required Minikube control-plane command failed.',\n },\n ],\n };\n}\n\n/** Wait between status observations and abort promptly when requested. */\nexport function delayMinikubePollAsync(milliseconds: number, signal?: AbortSignal): Promise<void> {\n if (signal === undefined) return new Promise((resolve) => setTimeout(resolve, milliseconds));\n return new Promise((resolve, reject) => {\n if (signal.aborted) {\n reject(abortError(signal));\n return;\n }\n const onAbort = () => {\n clearTimeout(timeout);\n reject(abortError(signal));\n };\n const timeout = setTimeout(() => {\n signal.removeEventListener('abort', onAbort);\n resolve();\n }, milliseconds);\n signal.addEventListener('abort', onAbort, { once: true });\n });\n}\n\nfunction abortError(signal: AbortSignal): Error {\n return signal.reason instanceof Error ? signal.reason : new Error('Minikube operation aborted.');\n}\n"]}
1
+ {"version":3,"file":"minikubeCliProcess.js","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/adapters/minikubeCliProcess.ts"],"names":[],"mappings":"AAOA,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAA6B,EAC7B,UAAkB,EAClB,UAA6B,EAC7B,MAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YAClC,UAAU;YACV,SAAS,EAAE,UAAU;YACrB,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;SAC5C,CAAC,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,sBAAsB,EAAE,CAAC;IAClC,CAAC;AACH,CAAC;AAED,mDAAmD;AACnD,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,MAA6B,EAC7B,UAAkB,EAClB,UAA6B,EAC7B,MAAoB;IAEpB,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACrF,OAAO,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,sBAAsB,EAAE,CAAC;AACtF,CAAC;AAED,8EAA8E;AAC9E,SAAS,sBAAsB;IAC7B,OAAO;QACL,EAAE,EAAE,KAAK;QACT,WAAW,EAAE;YACX;gBACE,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE,mDAAmD;aAC7D;SACF;KACF,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,sBAAsB,CAAC,YAAoB,EAAE,MAAoB;IAC/E,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAC7F,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,YAAY,CAAC,CAAC;QACjB,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,MAAmB;IACrC,OAAO,MAAM,CAAC,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AACnG,CAAC","sourcesContent":["import type { InfraResult } from '@ankhorage/contracts/infra';\n\nimport type {\n MinikubeCommandResult,\n MinikubeCommandRunner,\n} from '../../../types/minikubeRuntime.js';\n\n/** Run one command, retaining exit status for state-oriented Minikube commands. */\nexport async function runMinikubeCommandAsync(\n runner: MinikubeCommandRunner,\n executable: string,\n arguments_: readonly string[],\n signal?: AbortSignal,\n): Promise<InfraResult<MinikubeCommandResult>> {\n try {\n const value = await runner.runAsync({\n executable,\n arguments: arguments_,\n ...(signal === undefined ? {} : { signal }),\n });\n return { ok: true, value, diagnostics: [] };\n } catch {\n return minikubeCommandFailure();\n }\n}\n\n/** Run one command that must exit successfully. */\nexport async function runCheckedMinikubeCommandAsync(\n runner: MinikubeCommandRunner,\n executable: string,\n arguments_: readonly string[],\n signal?: AbortSignal,\n): Promise<InfraResult<MinikubeCommandResult>> {\n const result = await runMinikubeCommandAsync(runner, executable, arguments_, signal);\n return result.ok && result.value.exitCode === 0 ? result : minikubeCommandFailure();\n}\n\n/** Return a provider-safe command failure that excludes stdout and stderr. */\nfunction minikubeCommandFailure(): InfraResult<never> {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'minikube-command-failed',\n message: 'A required Minikube control-plane command failed.',\n },\n ],\n };\n}\n\n/** Wait between status observations and abort promptly when requested. */\nexport function delayMinikubePollAsync(milliseconds: number, signal?: AbortSignal): Promise<void> {\n if (signal === undefined) return new Promise((resolve) => setTimeout(resolve, milliseconds));\n return new Promise((resolve, reject) => {\n if (signal.aborted) {\n reject(abortError(signal));\n return;\n }\n const onAbort = () => {\n clearTimeout(timeout);\n reject(abortError(signal));\n };\n const timeout = setTimeout(() => {\n signal.removeEventListener('abort', onAbort);\n resolve();\n }, milliseconds);\n signal.addEventListener('abort', onAbort, { once: true });\n });\n}\n\nfunction abortError(signal: AbortSignal): Error {\n return signal.reason instanceof Error ? signal.reason : new Error('Minikube operation aborted.');\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { InfraResult, InfraWorkloadSpec } from '@ankhorage/contracts/infra';
2
- import type { MinikubeClusterIdentity, MinikubeEndpointOutput } from '../../../types/minikubeRuntime';
2
+ import type { MinikubeClusterIdentity, MinikubeEndpointOutput } from '../../../types/minikubeRuntime.js';
3
3
  /*** Resolve deterministic reachable URLs for ports exposed by the owned Minikube profile. */
4
4
  export declare function readMinikubeEndpoints(identity: MinikubeClusterIdentity, workloads: readonly InfraWorkloadSpec[], publicBaseUrl?: string): InfraResult<readonly MinikubeEndpointOutput[]>;
5
5
  //# sourceMappingURL=readMinikubeEndpoints.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"readMinikubeEndpoints.d.ts","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/adapters/readMinikubeEndpoints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEjF,OAAO,KAAK,EACV,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,gCAAgC,CAAC;AAExC,6FAA6F;AAC7F,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,uBAAuB,EACjC,SAAS,EAAE,SAAS,iBAAiB,EAAE,EACvC,aAAa,CAAC,EAAE,MAAM,GACrB,WAAW,CAAC,SAAS,sBAAsB,EAAE,CAAC,CAOhD"}
1
+ {"version":3,"file":"readMinikubeEndpoints.d.ts","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/adapters/readMinikubeEndpoints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEjF,OAAO,KAAK,EACV,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,mCAAmC,CAAC;AAE3C,6FAA6F;AAC7F,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,uBAAuB,EACjC,SAAS,EAAE,SAAS,iBAAiB,EAAE,EACvC,aAAa,CAAC,EAAE,MAAM,GACrB,WAAW,CAAC,SAAS,sBAAsB,EAAE,CAAC,CAOhD"}
@@ -1 +1 @@
1
- {"version":3,"file":"readMinikubeEndpoints.js","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/adapters/readMinikubeEndpoints.ts"],"names":[],"mappings":"AAOA,6FAA6F;AAC7F,MAAM,UAAU,qBAAqB,CACnC,QAAiC,EACjC,SAAuC,EACvC,aAAsB;IAEtB,MAAM,eAAe,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;IACnD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;QAC3F,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,SAAS,cAAc,CACrB,QAAiC,EACjC,QAA2B,EAC3B,eAAgC;IAEhC,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;SACvD,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;SACpD,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;IAC3E,IAAI,aAAa,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,WAAW,CAAC,eAAe,EAAE,aAAa,CAAC;QACvD,CAAC,CAAC,eAAe,CAAC,MAAM;QACxB,CAAC,CAAC,oBAAoB,aAAa,EAAE,CAAC;IACxC,OAAO;QACL;YACE,KAAK,EAAE;gBACL,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,OAAO,EAAE,UAAU;gBACnB,UAAU,EAAE,YAAY,QAAQ,CAAC,EAAE,EAAE;aACtC;YACD,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,QAAQ;YACpB,KAAK;SACN;KACF,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,SAAS,WAAW,CAAC,KAAyB;IAC5C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,sEAAsE;AACtE,SAAS,WAAW,CAAC,MAAuB,EAAE,IAAY;IACxD,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,UAAU,GACd,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvF,OAAO,UAAU,KAAK,IAAI,CAAC;AAC7B,CAAC","sourcesContent":["import type { InfraResult, InfraWorkloadSpec } from '@ankhorage/contracts/infra';\n\nimport type {\n MinikubeClusterIdentity,\n MinikubeEndpointOutput,\n} from '../../../types/minikubeRuntime';\n\n/*** Resolve deterministic reachable URLs for ports exposed by the owned Minikube profile. */\nexport function readMinikubeEndpoints(\n identity: MinikubeClusterIdentity,\n workloads: readonly InfraWorkloadSpec[],\n publicBaseUrl?: string,\n): InfraResult<readonly MinikubeEndpointOutput[]> {\n const preferredOrigin = parseOrigin(publicBaseUrl);\n return {\n ok: true,\n value: workloads.flatMap((workload) => createEndpoint(identity, workload, preferredOrigin)),\n diagnostics: [],\n };\n}\n\n/*** Create one output per public workload with a fixed published listener. */\nfunction createEndpoint(\n identity: MinikubeClusterIdentity,\n workload: InfraWorkloadSpec,\n preferredOrigin: URL | undefined,\n): readonly MinikubeEndpointOutput[] {\n const publishedPort = Object.entries(workload.ports ?? {})\n .sort(([left], [right]) => left.localeCompare(right))\n .find(([, port]) => port.publishedPort !== undefined)?.[1].publishedPort;\n if (publishedPort === undefined) return [];\n const value = matchesPort(preferredOrigin, publishedPort)\n ? preferredOrigin.origin\n : `http://127.0.0.1:${publishedPort}`;\n return [\n {\n owner: {\n projectId: identity.projectId,\n environment: identity.environment,\n adapter: 'minikube',\n resourceId: `endpoint:${workload.id}`,\n },\n name: 'localUrl',\n visibility: 'public',\n value,\n },\n ];\n}\n\n/*** Parse the optional desired public origin without inventing endpoint state. */\nfunction parseOrigin(value: string | undefined): URL | undefined {\n if (value === undefined) return undefined;\n try {\n return new URL(value);\n } catch {\n return undefined;\n }\n}\n\n/*** Match default and explicit origin ports to one fixed listener. */\nfunction matchesPort(origin: URL | undefined, port: number): origin is URL {\n if (origin === undefined) return false;\n const originPort =\n origin.port === '' ? (origin.protocol === 'https:' ? 443 : 80) : Number(origin.port);\n return originPort === port;\n}\n"]}
1
+ {"version":3,"file":"readMinikubeEndpoints.js","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/adapters/readMinikubeEndpoints.ts"],"names":[],"mappings":"AAOA,6FAA6F;AAC7F,MAAM,UAAU,qBAAqB,CACnC,QAAiC,EACjC,SAAuC,EACvC,aAAsB;IAEtB,MAAM,eAAe,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;IACnD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;QAC3F,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,SAAS,cAAc,CACrB,QAAiC,EACjC,QAA2B,EAC3B,eAAgC;IAEhC,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;SACvD,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;SACpD,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;IAC3E,IAAI,aAAa,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,WAAW,CAAC,eAAe,EAAE,aAAa,CAAC;QACvD,CAAC,CAAC,eAAe,CAAC,MAAM;QACxB,CAAC,CAAC,oBAAoB,aAAa,EAAE,CAAC;IACxC,OAAO;QACL;YACE,KAAK,EAAE;gBACL,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,OAAO,EAAE,UAAU;gBACnB,UAAU,EAAE,YAAY,QAAQ,CAAC,EAAE,EAAE;aACtC;YACD,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,QAAQ;YACpB,KAAK;SACN;KACF,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,SAAS,WAAW,CAAC,KAAyB;IAC5C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,sEAAsE;AACtE,SAAS,WAAW,CAAC,MAAuB,EAAE,IAAY;IACxD,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,UAAU,GACd,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvF,OAAO,UAAU,KAAK,IAAI,CAAC;AAC7B,CAAC","sourcesContent":["import type { InfraResult, InfraWorkloadSpec } from '@ankhorage/contracts/infra';\n\nimport type {\n MinikubeClusterIdentity,\n MinikubeEndpointOutput,\n} from '../../../types/minikubeRuntime.js';\n\n/*** Resolve deterministic reachable URLs for ports exposed by the owned Minikube profile. */\nexport function readMinikubeEndpoints(\n identity: MinikubeClusterIdentity,\n workloads: readonly InfraWorkloadSpec[],\n publicBaseUrl?: string,\n): InfraResult<readonly MinikubeEndpointOutput[]> {\n const preferredOrigin = parseOrigin(publicBaseUrl);\n return {\n ok: true,\n value: workloads.flatMap((workload) => createEndpoint(identity, workload, preferredOrigin)),\n diagnostics: [],\n };\n}\n\n/*** Create one output per public workload with a fixed published listener. */\nfunction createEndpoint(\n identity: MinikubeClusterIdentity,\n workload: InfraWorkloadSpec,\n preferredOrigin: URL | undefined,\n): readonly MinikubeEndpointOutput[] {\n const publishedPort = Object.entries(workload.ports ?? {})\n .sort(([left], [right]) => left.localeCompare(right))\n .find(([, port]) => port.publishedPort !== undefined)?.[1].publishedPort;\n if (publishedPort === undefined) return [];\n const value = matchesPort(preferredOrigin, publishedPort)\n ? preferredOrigin.origin\n : `http://127.0.0.1:${publishedPort}`;\n return [\n {\n owner: {\n projectId: identity.projectId,\n environment: identity.environment,\n adapter: 'minikube',\n resourceId: `endpoint:${workload.id}`,\n },\n name: 'localUrl',\n visibility: 'public',\n value,\n },\n ];\n}\n\n/*** Parse the optional desired public origin without inventing endpoint state. */\nfunction parseOrigin(value: string | undefined): URL | undefined {\n if (value === undefined) return undefined;\n try {\n return new URL(value);\n } catch {\n return undefined;\n }\n}\n\n/*** Match default and explicit origin ports to one fixed listener. */\nfunction matchesPort(origin: URL | undefined, port: number): origin is URL {\n if (origin === undefined) return false;\n const originPort =\n origin.port === '' ? (origin.protocol === 'https:' ? 443 : 80) : Number(origin.port);\n return originPort === port;\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { InfraDestroyRequest, InfraExecutionContext, InfraReconcileResult, InfraResult } from '@ankhorage/contracts/infra';
2
- import type { MinikubeAdapterOptions, MinikubeDesiredState } from '../../../../types/minikubeRuntime';
2
+ import type { MinikubeAdapterOptions, MinikubeDesiredState } from '../../../../types/minikubeRuntime.js';
3
3
  /*** Remove owned workloads before deleting Minikube, retaining the cluster when data survives. */
4
4
  export declare function destroyMinikubeRuntimeAsync(options: MinikubeAdapterOptions, context: InfraExecutionContext, _desired: MinikubeDesiredState, request: InfraDestroyRequest): Promise<InfraResult<InfraReconcileResult>>;
5
5
  //# sourceMappingURL=destroyMinikubeRuntimeAsync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"destroyMinikubeRuntimeAsync.d.ts","sourceRoot":"","sources":["../../../../../src/features/cluster-runtime/application/use-cases/destroyMinikubeRuntimeAsync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,mCAAmC,CAAC;AAI3C,kGAAkG;AAClG,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAgC5C"}
1
+ {"version":3,"file":"destroyMinikubeRuntimeAsync.d.ts","sourceRoot":"","sources":["../../../../../src/features/cluster-runtime/application/use-cases/destroyMinikubeRuntimeAsync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,sCAAsC,CAAC;AAI9C,kGAAkG;AAClG,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAgC5C"}
@@ -1,6 +1,6 @@
1
1
  import { createKubernetesDriver } from '@ankhorage/kubernetes';
2
- import { createMinikubeClusterOwner } from '../../utils/createMinikubeClusterOwner';
3
- import { getMinikubeClusterIdentity } from '../../utils/getMinikubeClusterIdentity';
2
+ import { createMinikubeClusterOwner } from '../../utils/createMinikubeClusterOwner.js';
3
+ import { getMinikubeClusterIdentity } from '../../utils/getMinikubeClusterIdentity.js';
4
4
  /*** Remove owned workloads before deleting Minikube, retaining the cluster when data survives. */
5
5
  export async function destroyMinikubeRuntimeAsync(options, context, _desired, request) {
6
6
  if (!isConfirmed(context, request))
@@ -1 +1 @@
1
- {"version":3,"file":"destroyMinikubeRuntimeAsync.js","sourceRoot":"","sources":["../../../../../src/features/cluster-runtime/application/use-cases/destroyMinikubeRuntimeAsync.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n InfraDestroyRequest,\n InfraExecutionContext,\n InfraReconcileResult,\n InfraResult,\n} from '@ankhorage/contracts/infra';\nimport { createKubernetesDriver } from '@ankhorage/kubernetes';\n\nimport type {\n MinikubeAdapterOptions,\n MinikubeDesiredState,\n} from '../../../../types/minikubeRuntime';\nimport { createMinikubeClusterOwner } from '../../utils/createMinikubeClusterOwner';\nimport { getMinikubeClusterIdentity } from '../../utils/getMinikubeClusterIdentity';\n\n/*** Remove owned workloads before deleting Minikube, retaining the cluster when data survives. */\nexport async function destroyMinikubeRuntimeAsync(\n options: MinikubeAdapterOptions,\n context: InfraExecutionContext,\n _desired: MinikubeDesiredState,\n request: InfraDestroyRequest,\n): Promise<InfraResult<InfraReconcileResult>> {\n if (!isConfirmed(context, request)) return unconfirmedDestroy();\n const identity = getMinikubeClusterIdentity(context);\n if (!identity.ok) return identity;\n const observed = await options.controlPlane.inspectAsync(identity.value, context.signal);\n if (!observed.ok) return observed;\n const cluster = createMinikubeClusterOwner(context, identity.value);\n if (observed.value.state === 'absent') {\n return { ok: true, value: { resources: [], outputs: [] }, diagnostics: [] };\n }\n const accessible =\n observed.value.api === undefined && observed.value.state !== 'stopped'\n ? await options.controlPlane.waitUntilReadyAsync(identity.value, context.signal)\n : observed;\n if (!accessible.ok) return accessible;\n if (accessible.value.api === undefined) return missingDestroyAccess();\n const removed = await createKubernetesDriver({ api: accessible.value.api }).removeAsync(\n { context, ownerAdapter: 'minikube', workloads: [], availableOutputs: [] },\n request,\n );\n if (!removed.ok) return removed;\n if (removed.value.resources.length > 0) {\n return {\n ok: true,\n value: { resources: [cluster, ...removed.value.resources], outputs: [] },\n diagnostics: [],\n };\n }\n const destroyed = await options.controlPlane.destroyAsync(identity.value, context.signal);\n return destroyed.ok\n ? { ok: true, value: { resources: [], outputs: [] }, diagnostics: [] }\n : destroyed;\n}\n\n/*** Refuse cluster deletion when persistent Kubernetes ownership cannot be inspected. */\nfunction missingDestroyAccess(): InfraResult<never> {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'minikube-destroy-access-required',\n message: 'Minikube must be running so retained Kubernetes resources can be verified.',\n },\n ],\n };\n}\n\n/*** Require exact project and environment confirmation before any destructive inspection. */\nfunction isConfirmed(context: InfraExecutionContext, request: InfraDestroyRequest): boolean {\n return (\n request.projectId === context.projectId &&\n request.environment === context.environment &&\n request.confirmation.projectId === context.projectId &&\n request.confirmation.environment === context.environment\n );\n}\n\n/*** Return the canonical Minikube destructive-confirmation diagnostic. */\nfunction unconfirmedDestroy(): InfraResult<never> {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'minikube-destroy-unconfirmed',\n message: 'Minikube destroy requires exact project and environment confirmation.',\n },\n ],\n };\n}\n"]}
1
+ {"version":3,"file":"destroyMinikubeRuntimeAsync.js","sourceRoot":"","sources":["../../../../../src/features/cluster-runtime/application/use-cases/destroyMinikubeRuntimeAsync.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n InfraDestroyRequest,\n InfraExecutionContext,\n InfraReconcileResult,\n InfraResult,\n} from '@ankhorage/contracts/infra';\nimport { createKubernetesDriver } from '@ankhorage/kubernetes';\n\nimport type {\n MinikubeAdapterOptions,\n MinikubeDesiredState,\n} from '../../../../types/minikubeRuntime.js';\nimport { createMinikubeClusterOwner } from '../../utils/createMinikubeClusterOwner.js';\nimport { getMinikubeClusterIdentity } from '../../utils/getMinikubeClusterIdentity.js';\n\n/*** Remove owned workloads before deleting Minikube, retaining the cluster when data survives. */\nexport async function destroyMinikubeRuntimeAsync(\n options: MinikubeAdapterOptions,\n context: InfraExecutionContext,\n _desired: MinikubeDesiredState,\n request: InfraDestroyRequest,\n): Promise<InfraResult<InfraReconcileResult>> {\n if (!isConfirmed(context, request)) return unconfirmedDestroy();\n const identity = getMinikubeClusterIdentity(context);\n if (!identity.ok) return identity;\n const observed = await options.controlPlane.inspectAsync(identity.value, context.signal);\n if (!observed.ok) return observed;\n const cluster = createMinikubeClusterOwner(context, identity.value);\n if (observed.value.state === 'absent') {\n return { ok: true, value: { resources: [], outputs: [] }, diagnostics: [] };\n }\n const accessible =\n observed.value.api === undefined && observed.value.state !== 'stopped'\n ? await options.controlPlane.waitUntilReadyAsync(identity.value, context.signal)\n : observed;\n if (!accessible.ok) return accessible;\n if (accessible.value.api === undefined) return missingDestroyAccess();\n const removed = await createKubernetesDriver({ api: accessible.value.api }).removeAsync(\n { context, ownerAdapter: 'minikube', workloads: [], availableOutputs: [] },\n request,\n );\n if (!removed.ok) return removed;\n if (removed.value.resources.length > 0) {\n return {\n ok: true,\n value: { resources: [cluster, ...removed.value.resources], outputs: [] },\n diagnostics: [],\n };\n }\n const destroyed = await options.controlPlane.destroyAsync(identity.value, context.signal);\n return destroyed.ok\n ? { ok: true, value: { resources: [], outputs: [] }, diagnostics: [] }\n : destroyed;\n}\n\n/*** Refuse cluster deletion when persistent Kubernetes ownership cannot be inspected. */\nfunction missingDestroyAccess(): InfraResult<never> {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'minikube-destroy-access-required',\n message: 'Minikube must be running so retained Kubernetes resources can be verified.',\n },\n ],\n };\n}\n\n/*** Require exact project and environment confirmation before any destructive inspection. */\nfunction isConfirmed(context: InfraExecutionContext, request: InfraDestroyRequest): boolean {\n return (\n request.projectId === context.projectId &&\n request.environment === context.environment &&\n request.confirmation.projectId === context.projectId &&\n request.confirmation.environment === context.environment\n );\n}\n\n/*** Return the canonical Minikube destructive-confirmation diagnostic. */\nfunction unconfirmedDestroy(): InfraResult<never> {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'minikube-destroy-unconfirmed',\n message: 'Minikube destroy requires exact project and environment confirmation.',\n },\n ],\n };\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { InfraExecutionContext, InfraReconcileResult, InfraResult } from '@ankhorage/contracts/infra';
2
- import type { MinikubeAdapterOptions, MinikubeDesiredState } from '../../../../types/minikubeRuntime';
2
+ import type { MinikubeAdapterOptions, MinikubeDesiredState } from '../../../../types/minikubeRuntime.js';
3
3
  /*** Ensure the Minikube cluster, bridge images, reconcile workloads and repair local endpoints. */
4
4
  export declare function ensureMinikubeRuntimeAsync(options: MinikubeAdapterOptions, context: InfraExecutionContext, desired: MinikubeDesiredState): Promise<InfraResult<InfraReconcileResult>>;
5
5
  //# sourceMappingURL=ensureMinikubeRuntimeAsync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ensureMinikubeRuntimeAsync.d.ts","sourceRoot":"","sources":["../../../../../src/features/cluster-runtime/application/use-cases/ensureMinikubeRuntimeAsync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EAErB,oBAAoB,EACpB,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,mCAAmC,CAAC;AAM3C,mGAAmG;AACnG,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAsC5C"}
1
+ {"version":3,"file":"ensureMinikubeRuntimeAsync.d.ts","sourceRoot":"","sources":["../../../../../src/features/cluster-runtime/application/use-cases/ensureMinikubeRuntimeAsync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EAErB,oBAAoB,EACpB,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,sCAAsC,CAAC;AAM9C,mGAAmG;AACnG,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAsC5C"}
@@ -1,8 +1,8 @@
1
1
  import { createKubernetesDriver } from '@ankhorage/kubernetes';
2
- import { createKubernetesDriverRequest } from '../../utils/createKubernetesDriverRequest';
3
- import { createMinikubeClusterOwner } from '../../utils/createMinikubeClusterOwner';
4
- import { getMinikubeClusterSpec } from '../../utils/getMinikubeClusterSpec';
5
- import { validateMinikubeRuntimeAsync } from './validateMinikubeRuntimeAsync';
2
+ import { createKubernetesDriverRequest } from '../../utils/createKubernetesDriverRequest.js';
3
+ import { createMinikubeClusterOwner } from '../../utils/createMinikubeClusterOwner.js';
4
+ import { getMinikubeClusterSpec } from '../../utils/getMinikubeClusterSpec.js';
5
+ import { validateMinikubeRuntimeAsync } from './validateMinikubeRuntimeAsync.js';
6
6
  /*** Ensure the Minikube cluster, bridge images, reconcile workloads and repair local endpoints. */
7
7
  export async function ensureMinikubeRuntimeAsync(options, context, desired) {
8
8
  const validation = await validateMinikubeRuntimeAsync(options, context, desired);
@@ -1 +1 @@
1
- {"version":3,"file":"ensureMinikubeRuntimeAsync.js","sourceRoot":"","sources":["../../../../../src/features/cluster-runtime/application/use-cases/ensureMinikubeRuntimeAsync.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n InfraExecutionContext,\n InfraOwnedResource,\n InfraReconcileResult,\n InfraResult,\n} from '@ankhorage/contracts/infra';\nimport { createKubernetesDriver } from '@ankhorage/kubernetes';\n\nimport type {\n MinikubeAdapterOptions,\n MinikubeDesiredState,\n} from '../../../../types/minikubeRuntime';\nimport { createKubernetesDriverRequest } from '../../utils/createKubernetesDriverRequest';\nimport { createMinikubeClusterOwner } from '../../utils/createMinikubeClusterOwner';\nimport { getMinikubeClusterSpec } from '../../utils/getMinikubeClusterSpec';\nimport { validateMinikubeRuntimeAsync } from './validateMinikubeRuntimeAsync';\n\n/*** Ensure the Minikube cluster, bridge images, reconcile workloads and repair local endpoints. */\nexport async function ensureMinikubeRuntimeAsync(\n options: MinikubeAdapterOptions,\n context: InfraExecutionContext,\n desired: MinikubeDesiredState,\n): Promise<InfraResult<InfraReconcileResult>> {\n const validation = await validateMinikubeRuntimeAsync(options, context, desired);\n if (!validation.ok) return validation;\n const spec = getMinikubeClusterSpec(context, desired);\n if (!spec.ok) return spec;\n const ensured = await options.controlPlane.ensureAsync(spec.value, context.signal);\n if (!ensured.ok) return ensured;\n const ready = await options.controlPlane.waitUntilReadyAsync(spec.value, context.signal);\n if (!ready.ok) return ready;\n if (ready.value.api === undefined) return missingClusterAccess();\n const images = [...new Set(desired.workloads.map(({ artifact }) => artifact.image))].sort();\n const loaded = await options.controlPlane.loadImagesAsync(spec.value, images, context.signal);\n if (!loaded.ok) return loaded;\n const driver = createKubernetesDriver({ api: ready.value.api });\n const request = createKubernetesDriverRequest(context, desired);\n const reconciled = await driver.reconcileAsync(request);\n if (!reconciled.ok) return reconciled;\n const readiness = await driver.waitUntilReadyAsync(request);\n if (!readiness.ok) return readiness;\n const endpoints = await options.controlPlane.repairEndpointsAsync(\n spec.value,\n desired.workloads.filter(({ exposure }) => exposure === 'public'),\n context.desired.networking?.publicBaseUrl,\n context.signal,\n );\n if (!endpoints.ok) return endpoints;\n const cluster = createMinikubeClusterOwner(context, spec.value);\n return {\n ok: true,\n value: {\n resources: [\n cluster,\n ...reconciled.value.resources.map((owner) => linkRootOwner(owner, cluster)),\n ],\n outputs: [...reconciled.value.outputs, ...endpoints.value],\n },\n diagnostics: [],\n };\n}\n\n/*** Reject a ready cluster observation that omitted authenticated Kubernetes access. */\nfunction missingClusterAccess(): InfraResult<never> {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'minikube-cluster-access-missing',\n message: 'Minikube became ready without authenticated Kubernetes API access.',\n },\n ],\n };\n}\n\n/*** Link root Kubernetes resources to the Minikube cluster owner. */\nfunction linkRootOwner(owner: InfraOwnedResource, cluster: InfraOwnedResource): InfraOwnedResource {\n return owner.dependsOn.length === 0 ? { ...owner, dependsOn: [cluster.identity] } : owner;\n}\n"]}
1
+ {"version":3,"file":"ensureMinikubeRuntimeAsync.js","sourceRoot":"","sources":["../../../../../src/features/cluster-runtime/application/use-cases/ensureMinikubeRuntimeAsync.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAM/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AAC7F,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AAEjF,mGAAmG;AACnG,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAA+B,EAC/B,OAA8B,EAC9B,OAA6B;IAE7B,MAAM,UAAU,GAAG,MAAM,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACjF,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,OAAO,UAAU,CAAC;IACtC,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACnF,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,OAAO,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACzF,IAAI,CAAC,KAAK,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IAC5B,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS;QAAE,OAAO,oBAAoB,EAAE,CAAC;IACjE,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5F,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9F,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC;IAC9B,MAAM,MAAM,GAAG,sBAAsB,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,6BAA6B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACxD,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,OAAO,UAAU,CAAC;IACtC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC5D,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IACpC,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,oBAAoB,CAC/D,IAAI,CAAC,KAAK,EACV,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,KAAK,QAAQ,CAAC,EACjE,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,aAAa,EACzC,OAAO,CAAC,MAAM,CACf,CAAC;IACF,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IACpC,MAAM,OAAO,GAAG,0BAA0B,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAChE,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE;YACL,SAAS,EAAE;gBACT,OAAO;gBACP,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;aAC5E;YACD,OAAO,EAAE,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC;SAC3D;QACD,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC;AAED,wFAAwF;AACxF,SAAS,oBAAoB;IAC3B,OAAO;QACL,EAAE,EAAE,KAAK;QACT,WAAW,EAAE;YACX;gBACE,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,iCAAiC;gBACvC,OAAO,EAAE,oEAAoE;aAC9E;SACF;KACF,CAAC;AACJ,CAAC;AAED,qEAAqE;AACrE,SAAS,aAAa,CAAC,KAAyB,EAAE,OAA2B;IAC3E,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5F,CAAC","sourcesContent":["import type {\n InfraExecutionContext,\n InfraOwnedResource,\n InfraReconcileResult,\n InfraResult,\n} from '@ankhorage/contracts/infra';\nimport { createKubernetesDriver } from '@ankhorage/kubernetes';\n\nimport type {\n MinikubeAdapterOptions,\n MinikubeDesiredState,\n} from '../../../../types/minikubeRuntime.js';\nimport { createKubernetesDriverRequest } from '../../utils/createKubernetesDriverRequest.js';\nimport { createMinikubeClusterOwner } from '../../utils/createMinikubeClusterOwner.js';\nimport { getMinikubeClusterSpec } from '../../utils/getMinikubeClusterSpec.js';\nimport { validateMinikubeRuntimeAsync } from './validateMinikubeRuntimeAsync.js';\n\n/*** Ensure the Minikube cluster, bridge images, reconcile workloads and repair local endpoints. */\nexport async function ensureMinikubeRuntimeAsync(\n options: MinikubeAdapterOptions,\n context: InfraExecutionContext,\n desired: MinikubeDesiredState,\n): Promise<InfraResult<InfraReconcileResult>> {\n const validation = await validateMinikubeRuntimeAsync(options, context, desired);\n if (!validation.ok) return validation;\n const spec = getMinikubeClusterSpec(context, desired);\n if (!spec.ok) return spec;\n const ensured = await options.controlPlane.ensureAsync(spec.value, context.signal);\n if (!ensured.ok) return ensured;\n const ready = await options.controlPlane.waitUntilReadyAsync(spec.value, context.signal);\n if (!ready.ok) return ready;\n if (ready.value.api === undefined) return missingClusterAccess();\n const images = [...new Set(desired.workloads.map(({ artifact }) => artifact.image))].sort();\n const loaded = await options.controlPlane.loadImagesAsync(spec.value, images, context.signal);\n if (!loaded.ok) return loaded;\n const driver = createKubernetesDriver({ api: ready.value.api });\n const request = createKubernetesDriverRequest(context, desired);\n const reconciled = await driver.reconcileAsync(request);\n if (!reconciled.ok) return reconciled;\n const readiness = await driver.waitUntilReadyAsync(request);\n if (!readiness.ok) return readiness;\n const endpoints = await options.controlPlane.repairEndpointsAsync(\n spec.value,\n desired.workloads.filter(({ exposure }) => exposure === 'public'),\n context.desired.networking?.publicBaseUrl,\n context.signal,\n );\n if (!endpoints.ok) return endpoints;\n const cluster = createMinikubeClusterOwner(context, spec.value);\n return {\n ok: true,\n value: {\n resources: [\n cluster,\n ...reconciled.value.resources.map((owner) => linkRootOwner(owner, cluster)),\n ],\n outputs: [...reconciled.value.outputs, ...endpoints.value],\n },\n diagnostics: [],\n };\n}\n\n/*** Reject a ready cluster observation that omitted authenticated Kubernetes access. */\nfunction missingClusterAccess(): InfraResult<never> {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'minikube-cluster-access-missing',\n message: 'Minikube became ready without authenticated Kubernetes API access.',\n },\n ],\n };\n}\n\n/*** Link root Kubernetes resources to the Minikube cluster owner. */\nfunction linkRootOwner(owner: InfraOwnedResource, cluster: InfraOwnedResource): InfraOwnedResource {\n return owner.dependsOn.length === 0 ? { ...owner, dependsOn: [cluster.identity] } : owner;\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { InfraExecutionContext, InfraResourceStatus, InfraResult } from '@ankhorage/contracts/infra';
2
- import type { MinikubeAdapterOptions, MinikubeDesiredState } from '../../../../types/minikubeRuntime';
2
+ import type { MinikubeAdapterOptions, MinikubeDesiredState } from '../../../../types/minikubeRuntime.js';
3
3
  /*** Aggregate Minikube cluster and owned Kubernetes workload status. */
4
4
  export declare function getMinikubeStatusAsync(options: MinikubeAdapterOptions, context: InfraExecutionContext, desired: MinikubeDesiredState): Promise<InfraResult<readonly InfraResourceStatus[]>>;
5
5
  //# sourceMappingURL=getMinikubeStatusAsync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getMinikubeStatusAsync.d.ts","sourceRoot":"","sources":["../../../../../src/features/cluster-runtime/application/use-cases/getMinikubeStatusAsync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACnB,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,mCAAmC,CAAC;AAK3C,wEAAwE;AACxE,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,WAAW,CAAC,SAAS,mBAAmB,EAAE,CAAC,CAAC,CAmBtD"}
1
+ {"version":3,"file":"getMinikubeStatusAsync.d.ts","sourceRoot":"","sources":["../../../../../src/features/cluster-runtime/application/use-cases/getMinikubeStatusAsync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACnB,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,sCAAsC,CAAC;AAK9C,wEAAwE;AACxE,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,WAAW,CAAC,SAAS,mBAAmB,EAAE,CAAC,CAAC,CAmBtD"}
@@ -1,7 +1,7 @@
1
1
  import { createKubernetesDriver } from '@ankhorage/kubernetes';
2
- import { createKubernetesDriverRequest } from '../../utils/createKubernetesDriverRequest';
3
- import { createMinikubeClusterOwner } from '../../utils/createMinikubeClusterOwner';
4
- import { getMinikubeClusterIdentity } from '../../utils/getMinikubeClusterIdentity';
2
+ import { createKubernetesDriverRequest } from '../../utils/createKubernetesDriverRequest.js';
3
+ import { createMinikubeClusterOwner } from '../../utils/createMinikubeClusterOwner.js';
4
+ import { getMinikubeClusterIdentity } from '../../utils/getMinikubeClusterIdentity.js';
5
5
  /*** Aggregate Minikube cluster and owned Kubernetes workload status. */
6
6
  export async function getMinikubeStatusAsync(options, context, desired) {
7
7
  const identity = getMinikubeClusterIdentity(context);
@@ -1 +1 @@
1
- {"version":3,"file":"getMinikubeStatusAsync.js","sourceRoot":"","sources":["../../../../../src/features/cluster-runtime/application/use-cases/getMinikubeStatusAsync.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAM/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,2CAA2C,CAAC;AAC1F,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AACpF,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AAEpF,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAA+B,EAC/B,OAA8B,EAC9B,OAA6B;IAE7B,MAAM,QAAQ,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACzF,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,MAAM,OAAO,GAAG,0BAA0B,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpE,MAAM,aAAa,GAAwB;QACzC,KAAK,EAAE,OAAO,CAAC,QAAQ;QACvB,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK;QAC3B,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;KAClF,CAAC;IACF,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IAC/D,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,CACrF,6BAA6B,CAAC,OAAO,EAAE,OAAO,CAAC,CAChD,CAAC;IACF,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IACpC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,aAAa,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;AACnF,CAAC","sourcesContent":["import type {\n InfraExecutionContext,\n InfraResourceStatus,\n InfraResult,\n} from '@ankhorage/contracts/infra';\nimport { createKubernetesDriver } from '@ankhorage/kubernetes';\n\nimport type {\n MinikubeAdapterOptions,\n MinikubeDesiredState,\n} from '../../../../types/minikubeRuntime';\nimport { createKubernetesDriverRequest } from '../../utils/createKubernetesDriverRequest';\nimport { createMinikubeClusterOwner } from '../../utils/createMinikubeClusterOwner';\nimport { getMinikubeClusterIdentity } from '../../utils/getMinikubeClusterIdentity';\n\n/*** Aggregate Minikube cluster and owned Kubernetes workload status. */\nexport async function getMinikubeStatusAsync(\n options: MinikubeAdapterOptions,\n context: InfraExecutionContext,\n desired: MinikubeDesiredState,\n): Promise<InfraResult<readonly InfraResourceStatus[]>> {\n const identity = getMinikubeClusterIdentity(context);\n if (!identity.ok) return identity;\n const observed = await options.controlPlane.inspectAsync(identity.value, context.signal);\n if (!observed.ok) return observed;\n const cluster = createMinikubeClusterOwner(context, identity.value);\n const clusterStatus: InfraResourceStatus = {\n owner: cluster.identity,\n state: observed.value.state,\n ...(observed.value.detail === undefined ? {} : { detail: observed.value.detail }),\n };\n if (observed.value.api === undefined) {\n return { ok: true, value: [clusterStatus], diagnostics: [] };\n }\n const workloads = await createKubernetesDriver({ api: observed.value.api }).statusAsync(\n createKubernetesDriverRequest(context, desired),\n );\n if (!workloads.ok) return workloads;\n return { ok: true, value: [clusterStatus, ...workloads.value], diagnostics: [] };\n}\n"]}
1
+ {"version":3,"file":"getMinikubeStatusAsync.js","sourceRoot":"","sources":["../../../../../src/features/cluster-runtime/application/use-cases/getMinikubeStatusAsync.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAM/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AAC7F,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AAEvF,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAA+B,EAC/B,OAA8B,EAC9B,OAA6B;IAE7B,MAAM,QAAQ,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACzF,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,MAAM,OAAO,GAAG,0BAA0B,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpE,MAAM,aAAa,GAAwB;QACzC,KAAK,EAAE,OAAO,CAAC,QAAQ;QACvB,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK;QAC3B,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;KAClF,CAAC;IACF,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IAC/D,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,CACrF,6BAA6B,CAAC,OAAO,EAAE,OAAO,CAAC,CAChD,CAAC;IACF,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IACpC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,aAAa,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;AACnF,CAAC","sourcesContent":["import type {\n InfraExecutionContext,\n InfraResourceStatus,\n InfraResult,\n} from '@ankhorage/contracts/infra';\nimport { createKubernetesDriver } from '@ankhorage/kubernetes';\n\nimport type {\n MinikubeAdapterOptions,\n MinikubeDesiredState,\n} from '../../../../types/minikubeRuntime.js';\nimport { createKubernetesDriverRequest } from '../../utils/createKubernetesDriverRequest.js';\nimport { createMinikubeClusterOwner } from '../../utils/createMinikubeClusterOwner.js';\nimport { getMinikubeClusterIdentity } from '../../utils/getMinikubeClusterIdentity.js';\n\n/*** Aggregate Minikube cluster and owned Kubernetes workload status. */\nexport async function getMinikubeStatusAsync(\n options: MinikubeAdapterOptions,\n context: InfraExecutionContext,\n desired: MinikubeDesiredState,\n): Promise<InfraResult<readonly InfraResourceStatus[]>> {\n const identity = getMinikubeClusterIdentity(context);\n if (!identity.ok) return identity;\n const observed = await options.controlPlane.inspectAsync(identity.value, context.signal);\n if (!observed.ok) return observed;\n const cluster = createMinikubeClusterOwner(context, identity.value);\n const clusterStatus: InfraResourceStatus = {\n owner: cluster.identity,\n state: observed.value.state,\n ...(observed.value.detail === undefined ? {} : { detail: observed.value.detail }),\n };\n if (observed.value.api === undefined) {\n return { ok: true, value: [clusterStatus], diagnostics: [] };\n }\n const workloads = await createKubernetesDriver({ api: observed.value.api }).statusAsync(\n createKubernetesDriverRequest(context, desired),\n );\n if (!workloads.ok) return workloads;\n return { ok: true, value: [clusterStatus, ...workloads.value], diagnostics: [] };\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { InfraExecutionContext, InfraPlanAction, InfraResult } from '@ankhorage/contracts/infra';
2
- import type { MinikubeAdapterOptions, MinikubeDesiredState } from '../../../../types/minikubeRuntime';
2
+ import type { MinikubeAdapterOptions, MinikubeDesiredState } from '../../../../types/minikubeRuntime.js';
3
3
  /*** Plan Minikube cluster and standard Kubernetes resources without mutation. */
4
4
  export declare function planMinikubeRuntimeAsync(options: MinikubeAdapterOptions, context: InfraExecutionContext, desired: MinikubeDesiredState): Promise<InfraResult<readonly InfraPlanAction[]>>;
5
5
  //# sourceMappingURL=planMinikubeRuntimeAsync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"planMinikubeRuntimeAsync.d.ts","sourceRoot":"","sources":["../../../../../src/features/cluster-runtime/application/use-cases/planMinikubeRuntimeAsync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,eAAe,EACf,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EACV,sBAAsB,EAEtB,oBAAoB,EACrB,MAAM,mCAAmC,CAAC;AAM3C,iFAAiF;AACjF,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,WAAW,CAAC,SAAS,eAAe,EAAE,CAAC,CAAC,CAsBlD"}
1
+ {"version":3,"file":"planMinikubeRuntimeAsync.d.ts","sourceRoot":"","sources":["../../../../../src/features/cluster-runtime/application/use-cases/planMinikubeRuntimeAsync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,eAAe,EACf,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EACV,sBAAsB,EAEtB,oBAAoB,EACrB,MAAM,sCAAsC,CAAC;AAM9C,iFAAiF;AACjF,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,WAAW,CAAC,SAAS,eAAe,EAAE,CAAC,CAAC,CAsBlD"}
@@ -1,8 +1,8 @@
1
1
  import { createKubernetesDriver, projectKubernetesResourcesAsync } from '@ankhorage/kubernetes';
2
- import { createKubernetesDriverRequest } from '../../utils/createKubernetesDriverRequest';
3
- import { createMinikubeClusterOwner } from '../../utils/createMinikubeClusterOwner';
4
- import { getMinikubeClusterSpec } from '../../utils/getMinikubeClusterSpec';
5
- import { validateMinikubeRuntimeAsync } from './validateMinikubeRuntimeAsync';
2
+ import { createKubernetesDriverRequest } from '../../utils/createKubernetesDriverRequest.js';
3
+ import { createMinikubeClusterOwner } from '../../utils/createMinikubeClusterOwner.js';
4
+ import { getMinikubeClusterSpec } from '../../utils/getMinikubeClusterSpec.js';
5
+ import { validateMinikubeRuntimeAsync } from './validateMinikubeRuntimeAsync.js';
6
6
  /*** Plan Minikube cluster and standard Kubernetes resources without mutation. */
7
7
  export async function planMinikubeRuntimeAsync(options, context, desired) {
8
8
  const validation = await validateMinikubeRuntimeAsync(options, context, desired);
@@ -1 +1 @@
1
- {"version":3,"file":"planMinikubeRuntimeAsync.js","sourceRoot":"","sources":["../../../../../src/features/cluster-runtime/application/use-cases/planMinikubeRuntimeAsync.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,sBAAsB,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AAOhG,OAAO,EAAE,6BAA6B,EAAE,MAAM,2CAA2C,CAAC;AAC1F,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AACpF,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAE9E,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAA+B,EAC/B,OAA8B,EAC9B,OAA6B;IAE7B,MAAM,UAAU,GAAG,MAAM,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACjF,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,OAAO,UAAU,CAAC;IACtC,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACrF,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,MAAM,KAAK,GAAG,0BAA0B,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,6BAA6B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChE,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC1E,OAAO,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG;QACjC,CAAC,CAAC,MAAM,sBAAsB,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;QAC9E,CAAC,CAAC,MAAM,yBAAyB,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7D,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3F,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC;AAED,gEAAgE;AAChE,SAAS,iBAAiB,CACxB,KAAoD,EACpD,QAAoC;IAEpC,MAAM,SAAS,GACb,QAAQ,CAAC,KAAK,KAAK,QAAQ;QACzB,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,QAAQ,CAAC,KAAK,KAAK,OAAO,IAAI,QAAQ,CAAC,oBAAoB;YAC3D,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,QAAQ,CAAC;IACjB,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,QAAQ;QACrB,SAAS;QACT,MAAM,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,MAAM;QAC9D,MAAM,EAAE,oBAAoB,KAAK,CAAC,UAAU,KAAK,SAAS,GAAG;QAC7D,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC;AAED,0FAA0F;AAC1F,SAAS,iBAAiB;IACxB,OAAO;QACL,EAAE,EAAE,KAAK;QACT,WAAW,EAAE;YACX;gBACE,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,+BAA+B;gBACrC,OAAO,EAAE,kFAAkF;aAC5F;SACF;KACF,CAAC;AACJ,CAAC;AAED,gEAAgE;AAChE,KAAK,UAAU,yBAAyB,CACtC,OAA8D,EAC9D,OAAiC;IAEjC,MAAM,UAAU,GAAG,MAAM,+BAA+B,CAAC,OAAO,CAAC,CAAC;IAClE,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,OAAO,UAAU,CAAC;IACtC,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;YACpD,KAAK,EAAE,KAAK,CAAC,QAAQ;YACrB,SAAS,EAAE,QAAQ;YACnB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,uBAAuB,KAAK,CAAC,QAAQ,CAAC,UAAU,WAAW;YACnE,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS;SACtE,CAAC,CAAC;QACH,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC;AAED,mEAAmE;AACnE,SAAS,cAAc,CACrB,MAAuB,EACvB,OAAiC;IAEjC,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AACtF,CAAC","sourcesContent":["import type {\n InfraExecutionContext,\n InfraPlanAction,\n InfraResult,\n} from '@ankhorage/contracts/infra';\nimport { createKubernetesDriver, projectKubernetesResourcesAsync } from '@ankhorage/kubernetes';\n\nimport type {\n MinikubeAdapterOptions,\n MinikubeClusterObservation,\n MinikubeDesiredState,\n} from '../../../../types/minikubeRuntime';\nimport { createKubernetesDriverRequest } from '../../utils/createKubernetesDriverRequest';\nimport { createMinikubeClusterOwner } from '../../utils/createMinikubeClusterOwner';\nimport { getMinikubeClusterSpec } from '../../utils/getMinikubeClusterSpec';\nimport { validateMinikubeRuntimeAsync } from './validateMinikubeRuntimeAsync';\n\n/*** Plan Minikube cluster and standard Kubernetes resources without mutation. */\nexport async function planMinikubeRuntimeAsync(\n options: MinikubeAdapterOptions,\n context: InfraExecutionContext,\n desired: MinikubeDesiredState,\n): Promise<InfraResult<readonly InfraPlanAction[]>> {\n const validation = await validateMinikubeRuntimeAsync(options, context, desired);\n if (!validation.ok) return validation;\n const spec = getMinikubeClusterSpec(context, desired);\n if (!spec.ok) return spec;\n const observed = await options.controlPlane.inspectAsync(spec.value, context.signal);\n if (!observed.ok) return observed;\n const owner = createMinikubeClusterOwner(context, spec.value);\n const cluster = createClusterPlan(owner, observed.value);\n const request = createKubernetesDriverRequest(context, desired);\n if (observed.value.api === undefined && observed.value.state !== 'absent') {\n return missingPlanAccess();\n }\n const workload = observed.value.api\n ? await createKubernetesDriver({ api: observed.value.api }).planAsync(request)\n : await createPreClusterPlanAsync(request, owner.identity);\n if (!workload.ok) return workload;\n return {\n ok: true,\n value: [cluster, ...workload.value.map((action) => linkRootAction(action, owner.identity))],\n diagnostics: [],\n };\n}\n\n/*** Create the plan action for Minikube profile convergence. */\nfunction createClusterPlan(\n owner: ReturnType<typeof createMinikubeClusterOwner>,\n observed: MinikubeClusterObservation,\n): InfraPlanAction {\n const operation =\n observed.state === 'absent'\n ? 'create'\n : observed.state === 'ready' && observed.configurationMatches\n ? 'noop'\n : 'update';\n return {\n owner: owner.identity,\n operation,\n impact: operation === 'update' ? 'interrupts-service' : 'none',\n detail: `Minikube profile ${owner.externalId}: ${operation}.`,\n dependsOn: [],\n };\n}\n\n/*** Refuse to guess at existing workload changes while the cluster API is unavailable. */\nfunction missingPlanAccess(): InfraResult<never> {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'minikube-plan-access-required',\n message: 'Minikube must be running so existing Kubernetes resources can be planned safely.',\n },\n ],\n };\n}\n\n/*** Project create actions before cluster API access exists. */\nasync function createPreClusterPlanAsync(\n request: Parameters<typeof projectKubernetesResourcesAsync>[0],\n cluster: InfraPlanAction['owner'],\n): Promise<InfraResult<readonly InfraPlanAction[]>> {\n const projection = await projectKubernetesResourcesAsync(request);\n if (!projection.ok) return projection;\n return {\n ok: true,\n value: projection.value.resources.map(({ owner }) => ({\n owner: owner.identity,\n operation: 'create',\n impact: 'none',\n detail: `Kubernetes resource ${owner.identity.resourceId}: create.`,\n dependsOn: owner.dependsOn.length === 0 ? [cluster] : owner.dependsOn,\n })),\n diagnostics: [],\n };\n}\n\n/*** Link root Kubernetes actions to the Minikube cluster owner. */\nfunction linkRootAction(\n action: InfraPlanAction,\n cluster: InfraPlanAction['owner'],\n): InfraPlanAction {\n return action.dependsOn.length === 0 ? { ...action, dependsOn: [cluster] } : action;\n}\n"]}
1
+ {"version":3,"file":"planMinikubeRuntimeAsync.js","sourceRoot":"","sources":["../../../../../src/features/cluster-runtime/application/use-cases/planMinikubeRuntimeAsync.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n InfraExecutionContext,\n InfraPlanAction,\n InfraResult,\n} from '@ankhorage/contracts/infra';\nimport { createKubernetesDriver, projectKubernetesResourcesAsync } from '@ankhorage/kubernetes';\n\nimport type {\n MinikubeAdapterOptions,\n MinikubeClusterObservation,\n MinikubeDesiredState,\n} from '../../../../types/minikubeRuntime.js';\nimport { createKubernetesDriverRequest } from '../../utils/createKubernetesDriverRequest.js';\nimport { createMinikubeClusterOwner } from '../../utils/createMinikubeClusterOwner.js';\nimport { getMinikubeClusterSpec } from '../../utils/getMinikubeClusterSpec.js';\nimport { validateMinikubeRuntimeAsync } from './validateMinikubeRuntimeAsync.js';\n\n/*** Plan Minikube cluster and standard Kubernetes resources without mutation. */\nexport async function planMinikubeRuntimeAsync(\n options: MinikubeAdapterOptions,\n context: InfraExecutionContext,\n desired: MinikubeDesiredState,\n): Promise<InfraResult<readonly InfraPlanAction[]>> {\n const validation = await validateMinikubeRuntimeAsync(options, context, desired);\n if (!validation.ok) return validation;\n const spec = getMinikubeClusterSpec(context, desired);\n if (!spec.ok) return spec;\n const observed = await options.controlPlane.inspectAsync(spec.value, context.signal);\n if (!observed.ok) return observed;\n const owner = createMinikubeClusterOwner(context, spec.value);\n const cluster = createClusterPlan(owner, observed.value);\n const request = createKubernetesDriverRequest(context, desired);\n if (observed.value.api === undefined && observed.value.state !== 'absent') {\n return missingPlanAccess();\n }\n const workload = observed.value.api\n ? await createKubernetesDriver({ api: observed.value.api }).planAsync(request)\n : await createPreClusterPlanAsync(request, owner.identity);\n if (!workload.ok) return workload;\n return {\n ok: true,\n value: [cluster, ...workload.value.map((action) => linkRootAction(action, owner.identity))],\n diagnostics: [],\n };\n}\n\n/*** Create the plan action for Minikube profile convergence. */\nfunction createClusterPlan(\n owner: ReturnType<typeof createMinikubeClusterOwner>,\n observed: MinikubeClusterObservation,\n): InfraPlanAction {\n const operation =\n observed.state === 'absent'\n ? 'create'\n : observed.state === 'ready' && observed.configurationMatches\n ? 'noop'\n : 'update';\n return {\n owner: owner.identity,\n operation,\n impact: operation === 'update' ? 'interrupts-service' : 'none',\n detail: `Minikube profile ${owner.externalId}: ${operation}.`,\n dependsOn: [],\n };\n}\n\n/*** Refuse to guess at existing workload changes while the cluster API is unavailable. */\nfunction missingPlanAccess(): InfraResult<never> {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'minikube-plan-access-required',\n message: 'Minikube must be running so existing Kubernetes resources can be planned safely.',\n },\n ],\n };\n}\n\n/*** Project create actions before cluster API access exists. */\nasync function createPreClusterPlanAsync(\n request: Parameters<typeof projectKubernetesResourcesAsync>[0],\n cluster: InfraPlanAction['owner'],\n): Promise<InfraResult<readonly InfraPlanAction[]>> {\n const projection = await projectKubernetesResourcesAsync(request);\n if (!projection.ok) return projection;\n return {\n ok: true,\n value: projection.value.resources.map(({ owner }) => ({\n owner: owner.identity,\n operation: 'create',\n impact: 'none',\n detail: `Kubernetes resource ${owner.identity.resourceId}: create.`,\n dependsOn: owner.dependsOn.length === 0 ? [cluster] : owner.dependsOn,\n })),\n diagnostics: [],\n };\n}\n\n/*** Link root Kubernetes actions to the Minikube cluster owner. */\nfunction linkRootAction(\n action: InfraPlanAction,\n cluster: InfraPlanAction['owner'],\n): InfraPlanAction {\n return action.dependsOn.length === 0 ? { ...action, dependsOn: [cluster] } : action;\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { InfraExecutionContext, InfraReconcileResult, InfraResult } from '@ankhorage/contracts/infra';
2
- import type { MinikubeAdapterOptions, MinikubeDesiredState } from '../../../../types/minikubeRuntime';
2
+ import type { MinikubeAdapterOptions, MinikubeDesiredState } from '../../../../types/minikubeRuntime.js';
3
3
  /*** Stop the Minikube profile while preserving its cluster and persistent data. */
4
4
  export declare function suspendMinikubeRuntimeAsync(options: MinikubeAdapterOptions, context: InfraExecutionContext, _desired: MinikubeDesiredState): Promise<InfraResult<InfraReconcileResult>>;
5
5
  //# sourceMappingURL=suspendMinikubeRuntimeAsync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"suspendMinikubeRuntimeAsync.d.ts","sourceRoot":"","sources":["../../../../../src/features/cluster-runtime/application/use-cases/suspendMinikubeRuntimeAsync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACpB,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,mCAAmC,CAAC;AAI3C,mFAAmF;AACnF,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAU5C"}
1
+ {"version":3,"file":"suspendMinikubeRuntimeAsync.d.ts","sourceRoot":"","sources":["../../../../../src/features/cluster-runtime/application/use-cases/suspendMinikubeRuntimeAsync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACpB,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,sCAAsC,CAAC;AAI9C,mFAAmF;AACnF,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAU5C"}
@@ -1,5 +1,5 @@
1
- import { createMinikubeClusterOwner } from '../../utils/createMinikubeClusterOwner';
2
- import { getMinikubeClusterIdentity } from '../../utils/getMinikubeClusterIdentity';
1
+ import { createMinikubeClusterOwner } from '../../utils/createMinikubeClusterOwner.js';
2
+ import { getMinikubeClusterIdentity } from '../../utils/getMinikubeClusterIdentity.js';
3
3
  /*** Stop the Minikube profile while preserving its cluster and persistent data. */
4
4
  export async function suspendMinikubeRuntimeAsync(options, context, _desired) {
5
5
  const identity = getMinikubeClusterIdentity(context);
@@ -1 +1 @@
1
- {"version":3,"file":"suspendMinikubeRuntimeAsync.js","sourceRoot":"","sources":["../../../../../src/features/cluster-runtime/application/use-cases/suspendMinikubeRuntimeAsync.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AACpF,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AAEpF,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,OAA+B,EAC/B,OAA8B,EAC9B,QAA8B;IAE9B,MAAM,QAAQ,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1F,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IACpC,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,0BAA0B,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;QACxF,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC","sourcesContent":["import type {\n InfraExecutionContext,\n InfraReconcileResult,\n InfraResult,\n} from '@ankhorage/contracts/infra';\n\nimport type {\n MinikubeAdapterOptions,\n MinikubeDesiredState,\n} from '../../../../types/minikubeRuntime';\nimport { createMinikubeClusterOwner } from '../../utils/createMinikubeClusterOwner';\nimport { getMinikubeClusterIdentity } from '../../utils/getMinikubeClusterIdentity';\n\n/*** Stop the Minikube profile while preserving its cluster and persistent data. */\nexport async function suspendMinikubeRuntimeAsync(\n options: MinikubeAdapterOptions,\n context: InfraExecutionContext,\n _desired: MinikubeDesiredState,\n): Promise<InfraResult<InfraReconcileResult>> {\n const identity = getMinikubeClusterIdentity(context);\n if (!identity.ok) return identity;\n const suspended = await options.controlPlane.suspendAsync(identity.value, context.signal);\n if (!suspended.ok) return suspended;\n return {\n ok: true,\n value: { resources: [createMinikubeClusterOwner(context, identity.value)], outputs: [] },\n diagnostics: [],\n };\n}\n"]}
1
+ {"version":3,"file":"suspendMinikubeRuntimeAsync.js","sourceRoot":"","sources":["../../../../../src/features/cluster-runtime/application/use-cases/suspendMinikubeRuntimeAsync.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AAEvF,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,OAA+B,EAC/B,OAA8B,EAC9B,QAA8B;IAE9B,MAAM,QAAQ,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1F,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IACpC,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,0BAA0B,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;QACxF,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC","sourcesContent":["import type {\n InfraExecutionContext,\n InfraReconcileResult,\n InfraResult,\n} from '@ankhorage/contracts/infra';\n\nimport type {\n MinikubeAdapterOptions,\n MinikubeDesiredState,\n} from '../../../../types/minikubeRuntime.js';\nimport { createMinikubeClusterOwner } from '../../utils/createMinikubeClusterOwner.js';\nimport { getMinikubeClusterIdentity } from '../../utils/getMinikubeClusterIdentity.js';\n\n/*** Stop the Minikube profile while preserving its cluster and persistent data. */\nexport async function suspendMinikubeRuntimeAsync(\n options: MinikubeAdapterOptions,\n context: InfraExecutionContext,\n _desired: MinikubeDesiredState,\n): Promise<InfraResult<InfraReconcileResult>> {\n const identity = getMinikubeClusterIdentity(context);\n if (!identity.ok) return identity;\n const suspended = await options.controlPlane.suspendAsync(identity.value, context.signal);\n if (!suspended.ok) return suspended;\n return {\n ok: true,\n value: { resources: [createMinikubeClusterOwner(context, identity.value)], outputs: [] },\n diagnostics: [],\n };\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { InfraExecutionContext, InfraResult } from '@ankhorage/contracts/infra';
2
- import type { MinikubeAdapterOptions, MinikubeDesiredState } from '../../../../types/minikubeRuntime';
2
+ import type { MinikubeAdapterOptions, MinikubeDesiredState } from '../../../../types/minikubeRuntime.js';
3
3
  /*** Validate Minikube selection, portable compute target and local control-plane prerequisites. */
4
4
  export declare function validateMinikubeRuntimeAsync(options: MinikubeAdapterOptions, context: InfraExecutionContext, desired: MinikubeDesiredState): Promise<InfraResult<null>>;
5
5
  //# sourceMappingURL=validateMinikubeRuntimeAsync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validateMinikubeRuntimeAsync.d.ts","sourceRoot":"","sources":["../../../../../src/features/cluster-runtime/application/use-cases/validateMinikubeRuntimeAsync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAErF,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,mCAAmC,CAAC;AAG3C,mGAAmG;AACnG,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAI5B"}
1
+ {"version":3,"file":"validateMinikubeRuntimeAsync.d.ts","sourceRoot":"","sources":["../../../../../src/features/cluster-runtime/application/use-cases/validateMinikubeRuntimeAsync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAErF,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,sCAAsC,CAAC;AAG9C,mGAAmG;AACnG,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAI5B"}
@@ -1,4 +1,4 @@
1
- import { getMinikubeClusterSpec } from '../../utils/getMinikubeClusterSpec';
1
+ import { getMinikubeClusterSpec } from '../../utils/getMinikubeClusterSpec.js';
2
2
  /*** Validate Minikube selection, portable compute target and local control-plane prerequisites. */
3
3
  export async function validateMinikubeRuntimeAsync(options, context, desired) {
4
4
  const spec = getMinikubeClusterSpec(context, desired);
@@ -1 +1 @@
1
- {"version":3,"file":"validateMinikubeRuntimeAsync.js","sourceRoot":"","sources":["../../../../../src/features/cluster-runtime/application/use-cases/validateMinikubeRuntimeAsync.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,mGAAmG;AACnG,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,OAA+B,EAC/B,OAA8B,EAC9B,OAA6B;IAE7B,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AACxE,CAAC","sourcesContent":["import type { InfraExecutionContext, InfraResult } from '@ankhorage/contracts/infra';\n\nimport type {\n MinikubeAdapterOptions,\n MinikubeDesiredState,\n} from '../../../../types/minikubeRuntime';\nimport { getMinikubeClusterSpec } from '../../utils/getMinikubeClusterSpec';\n\n/*** Validate Minikube selection, portable compute target and local control-plane prerequisites. */\nexport async function validateMinikubeRuntimeAsync(\n options: MinikubeAdapterOptions,\n context: InfraExecutionContext,\n desired: MinikubeDesiredState,\n): Promise<InfraResult<null>> {\n const spec = getMinikubeClusterSpec(context, desired);\n if (!spec.ok) return spec;\n return options.controlPlane.validateAsync(spec.value, context.signal);\n}\n"]}
1
+ {"version":3,"file":"validateMinikubeRuntimeAsync.js","sourceRoot":"","sources":["../../../../../src/features/cluster-runtime/application/use-cases/validateMinikubeRuntimeAsync.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAE/E,mGAAmG;AACnG,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,OAA+B,EAC/B,OAA8B,EAC9B,OAA6B;IAE7B,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AACxE,CAAC","sourcesContent":["import type { InfraExecutionContext, InfraResult } from '@ankhorage/contracts/infra';\n\nimport type {\n MinikubeAdapterOptions,\n MinikubeDesiredState,\n} from '../../../../types/minikubeRuntime.js';\nimport { getMinikubeClusterSpec } from '../../utils/getMinikubeClusterSpec.js';\n\n/*** Validate Minikube selection, portable compute target and local control-plane prerequisites. */\nexport async function validateMinikubeRuntimeAsync(\n options: MinikubeAdapterOptions,\n context: InfraExecutionContext,\n desired: MinikubeDesiredState,\n): Promise<InfraResult<null>> {\n const spec = getMinikubeClusterSpec(context, desired);\n if (!spec.ok) return spec;\n return options.controlPlane.validateAsync(spec.value, context.signal);\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { InfraRuntimeAdapter } from '@ankhorage/contracts/infra';
2
- import type { MinikubeAdapterOptions } from '../../../types/minikubeRuntime';
2
+ import type { MinikubeAdapterOptions } from '../../../types/minikubeRuntime.js';
3
3
  /***
4
4
  * Create the canonical Minikube runtime adapter entrypoint.
5
5
  *
@@ -1 +1 @@
1
- {"version":3,"file":"createInfraAdapter.d.ts","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/composition/createInfraAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGtE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAS7E;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,CAAC,EAAE,sBAAsB,GAC/B,mBAAmB,CAAC,UAAU,CAAC,CAYjC"}
1
+ {"version":3,"file":"createInfraAdapter.d.ts","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/composition/createInfraAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGtE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAShF;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,CAAC,EAAE,sBAAsB,GAC/B,mBAAmB,CAAC,UAAU,CAAC,CAYjC"}
@@ -1,11 +1,11 @@
1
- import { infraAdapterDescriptor } from '../../../constants/infra';
2
- import { createMinikubeCliControlPlane } from '../adapters/createMinikubeCliControlPlane';
3
- import { destroyMinikubeRuntimeAsync } from '../application/use-cases/destroyMinikubeRuntimeAsync';
4
- import { ensureMinikubeRuntimeAsync } from '../application/use-cases/ensureMinikubeRuntimeAsync';
5
- import { getMinikubeStatusAsync } from '../application/use-cases/getMinikubeStatusAsync';
6
- import { planMinikubeRuntimeAsync } from '../application/use-cases/planMinikubeRuntimeAsync';
7
- import { suspendMinikubeRuntimeAsync } from '../application/use-cases/suspendMinikubeRuntimeAsync';
8
- import { validateMinikubeRuntimeAsync } from '../application/use-cases/validateMinikubeRuntimeAsync';
1
+ import { infraAdapterDescriptor } from '../../../constants/infra.js';
2
+ import { createMinikubeCliControlPlane } from '../adapters/createMinikubeCliControlPlane.js';
3
+ import { destroyMinikubeRuntimeAsync } from '../application/use-cases/destroyMinikubeRuntimeAsync.js';
4
+ import { ensureMinikubeRuntimeAsync } from '../application/use-cases/ensureMinikubeRuntimeAsync.js';
5
+ import { getMinikubeStatusAsync } from '../application/use-cases/getMinikubeStatusAsync.js';
6
+ import { planMinikubeRuntimeAsync } from '../application/use-cases/planMinikubeRuntimeAsync.js';
7
+ import { suspendMinikubeRuntimeAsync } from '../application/use-cases/suspendMinikubeRuntimeAsync.js';
8
+ import { validateMinikubeRuntimeAsync } from '../application/use-cases/validateMinikubeRuntimeAsync.js';
9
9
  /***
10
10
  * Create the canonical Minikube runtime adapter entrypoint.
11
11
  *
@@ -1 +1 @@
1
- {"version":3,"file":"createInfraAdapter.js","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/composition/createInfraAdapter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,6BAA6B,EAAE,MAAM,2CAA2C,CAAC;AAC1F,OAAO,EAAE,2BAA2B,EAAE,MAAM,sDAAsD,CAAC;AACnG,OAAO,EAAE,0BAA0B,EAAE,MAAM,qDAAqD,CAAC;AACjG,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AACzF,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAC7F,OAAO,EAAE,2BAA2B,EAAE,MAAM,sDAAsD,CAAC;AACnG,OAAO,EAAE,4BAA4B,EAAE,MAAM,uDAAuD,CAAC;AAErG;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAgC;IAEhC,MAAM,QAAQ,GAAG,OAAO,IAAI,EAAE,YAAY,EAAE,6BAA6B,EAAE,EAAE,CAAC;IAC9E,OAAO;QACL,UAAU,EAAE,sBAAsB;QAClC,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,4BAA4B,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;QAC7F,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,wBAAwB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;QACrF,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,0BAA0B,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;QACzF,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,sBAAsB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;QACrF,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,2BAA2B,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;QAC3F,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAC1C,2BAA2B,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;KACnE,CAAC;AACJ,CAAC","sourcesContent":["import type { InfraRuntimeAdapter } from '@ankhorage/contracts/infra';\n\nimport { infraAdapterDescriptor } from '../../../constants/infra';\nimport type { MinikubeAdapterOptions } from '../../../types/minikubeRuntime';\nimport { createMinikubeCliControlPlane } from '../adapters/createMinikubeCliControlPlane';\nimport { destroyMinikubeRuntimeAsync } from '../application/use-cases/destroyMinikubeRuntimeAsync';\nimport { ensureMinikubeRuntimeAsync } from '../application/use-cases/ensureMinikubeRuntimeAsync';\nimport { getMinikubeStatusAsync } from '../application/use-cases/getMinikubeStatusAsync';\nimport { planMinikubeRuntimeAsync } from '../application/use-cases/planMinikubeRuntimeAsync';\nimport { suspendMinikubeRuntimeAsync } from '../application/use-cases/suspendMinikubeRuntimeAsync';\nimport { validateMinikubeRuntimeAsync } from '../application/use-cases/validateMinikubeRuntimeAsync';\n\n/***\n * Create the canonical Minikube runtime adapter entrypoint.\n *\n * The caller supplies a Minikube-specific command boundary. Standard workload projection and\n * reconciliation are delegated to the published Kubernetes driver.\n *\n * @readme\n */\nexport function createInfraAdapter(\n options?: MinikubeAdapterOptions,\n): InfraRuntimeAdapter<'minikube'> {\n const resolved = options ?? { controlPlane: createMinikubeCliControlPlane() };\n return {\n descriptor: infraAdapterDescriptor,\n validateAsync: (context, desired) => validateMinikubeRuntimeAsync(resolved, context, desired),\n planAsync: (context, desired) => planMinikubeRuntimeAsync(resolved, context, desired),\n ensureAsync: (context, desired) => ensureMinikubeRuntimeAsync(resolved, context, desired),\n statusAsync: (context, desired) => getMinikubeStatusAsync(resolved, context, desired),\n suspendAsync: (context, desired) => suspendMinikubeRuntimeAsync(resolved, context, desired),\n destroyAsync: (context, desired, request) =>\n destroyMinikubeRuntimeAsync(resolved, context, desired, request),\n };\n}\n"]}
1
+ {"version":3,"file":"createInfraAdapter.js","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/composition/createInfraAdapter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,OAAO,EAAE,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AAC7F,OAAO,EAAE,2BAA2B,EAAE,MAAM,yDAAyD,CAAC;AACtG,OAAO,EAAE,0BAA0B,EAAE,MAAM,wDAAwD,CAAC;AACpG,OAAO,EAAE,sBAAsB,EAAE,MAAM,oDAAoD,CAAC;AAC5F,OAAO,EAAE,wBAAwB,EAAE,MAAM,sDAAsD,CAAC;AAChG,OAAO,EAAE,2BAA2B,EAAE,MAAM,yDAAyD,CAAC;AACtG,OAAO,EAAE,4BAA4B,EAAE,MAAM,0DAA0D,CAAC;AAExG;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAgC;IAEhC,MAAM,QAAQ,GAAG,OAAO,IAAI,EAAE,YAAY,EAAE,6BAA6B,EAAE,EAAE,CAAC;IAC9E,OAAO;QACL,UAAU,EAAE,sBAAsB;QAClC,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,4BAA4B,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;QAC7F,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,wBAAwB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;QACrF,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,0BAA0B,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;QACzF,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,sBAAsB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;QACrF,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,2BAA2B,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;QAC3F,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAC1C,2BAA2B,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;KACnE,CAAC;AACJ,CAAC","sourcesContent":["import type { InfraRuntimeAdapter } from '@ankhorage/contracts/infra';\n\nimport { infraAdapterDescriptor } from '../../../constants/infra.js';\nimport type { MinikubeAdapterOptions } from '../../../types/minikubeRuntime.js';\nimport { createMinikubeCliControlPlane } from '../adapters/createMinikubeCliControlPlane.js';\nimport { destroyMinikubeRuntimeAsync } from '../application/use-cases/destroyMinikubeRuntimeAsync.js';\nimport { ensureMinikubeRuntimeAsync } from '../application/use-cases/ensureMinikubeRuntimeAsync.js';\nimport { getMinikubeStatusAsync } from '../application/use-cases/getMinikubeStatusAsync.js';\nimport { planMinikubeRuntimeAsync } from '../application/use-cases/planMinikubeRuntimeAsync.js';\nimport { suspendMinikubeRuntimeAsync } from '../application/use-cases/suspendMinikubeRuntimeAsync.js';\nimport { validateMinikubeRuntimeAsync } from '../application/use-cases/validateMinikubeRuntimeAsync.js';\n\n/***\n * Create the canonical Minikube runtime adapter entrypoint.\n *\n * The caller supplies a Minikube-specific command boundary. Standard workload projection and\n * reconciliation are delegated to the published Kubernetes driver.\n *\n * @readme\n */\nexport function createInfraAdapter(\n options?: MinikubeAdapterOptions,\n): InfraRuntimeAdapter<'minikube'> {\n const resolved = options ?? { controlPlane: createMinikubeCliControlPlane() };\n return {\n descriptor: infraAdapterDescriptor,\n validateAsync: (context, desired) => validateMinikubeRuntimeAsync(resolved, context, desired),\n planAsync: (context, desired) => planMinikubeRuntimeAsync(resolved, context, desired),\n ensureAsync: (context, desired) => ensureMinikubeRuntimeAsync(resolved, context, desired),\n statusAsync: (context, desired) => getMinikubeStatusAsync(resolved, context, desired),\n suspendAsync: (context, desired) => suspendMinikubeRuntimeAsync(resolved, context, desired),\n destroyAsync: (context, desired, request) =>\n destroyMinikubeRuntimeAsync(resolved, context, desired, request),\n };\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import type { InfraExecutionContext } from '@ankhorage/contracts/infra';
2
2
  import type { KubernetesDriverRequest } from '@ankhorage/kubernetes';
3
- import type { MinikubeDesiredState } from '../../../types/minikubeRuntime';
3
+ import type { MinikubeDesiredState } from '../../../types/minikubeRuntime.js';
4
4
  /*** Map runtime desired state to the shared Kubernetes driver boundary. */
5
5
  export declare function createKubernetesDriverRequest(context: InfraExecutionContext, desired: MinikubeDesiredState): KubernetesDriverRequest;
6
6
  //# sourceMappingURL=createKubernetesDriverRequest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createKubernetesDriverRequest.d.ts","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/utils/createKubernetesDriverRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAErE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,2EAA2E;AAC3E,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,oBAAoB,GAC5B,uBAAuB,CAOzB"}
1
+ {"version":3,"file":"createKubernetesDriverRequest.d.ts","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/utils/createKubernetesDriverRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAErE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,2EAA2E;AAC3E,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,oBAAoB,GAC5B,uBAAuB,CAOzB"}
@@ -1 +1 @@
1
- {"version":3,"file":"createKubernetesDriverRequest.js","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/utils/createKubernetesDriverRequest.ts"],"names":[],"mappings":"AAKA,2EAA2E;AAC3E,MAAM,UAAU,6BAA6B,CAC3C,OAA8B,EAC9B,OAA6B;IAE7B,OAAO;QACL,OAAO;QACP,YAAY,EAAE,UAAU;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;KAC3C,CAAC;AACJ,CAAC","sourcesContent":["import type { InfraExecutionContext } from '@ankhorage/contracts/infra';\nimport type { KubernetesDriverRequest } from '@ankhorage/kubernetes';\n\nimport type { MinikubeDesiredState } from '../../../types/minikubeRuntime';\n\n/*** Map runtime desired state to the shared Kubernetes driver boundary. */\nexport function createKubernetesDriverRequest(\n context: InfraExecutionContext,\n desired: MinikubeDesiredState,\n): KubernetesDriverRequest {\n return {\n context,\n ownerAdapter: 'minikube',\n workloads: desired.workloads,\n availableOutputs: desired.availableOutputs,\n };\n}\n"]}
1
+ {"version":3,"file":"createKubernetesDriverRequest.js","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/utils/createKubernetesDriverRequest.ts"],"names":[],"mappings":"AAKA,2EAA2E;AAC3E,MAAM,UAAU,6BAA6B,CAC3C,OAA8B,EAC9B,OAA6B;IAE7B,OAAO;QACL,OAAO;QACP,YAAY,EAAE,UAAU;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;KAC3C,CAAC;AACJ,CAAC","sourcesContent":["import type { InfraExecutionContext } from '@ankhorage/contracts/infra';\nimport type { KubernetesDriverRequest } from '@ankhorage/kubernetes';\n\nimport type { MinikubeDesiredState } from '../../../types/minikubeRuntime.js';\n\n/*** Map runtime desired state to the shared Kubernetes driver boundary. */\nexport function createKubernetesDriverRequest(\n context: InfraExecutionContext,\n desired: MinikubeDesiredState,\n): KubernetesDriverRequest {\n return {\n context,\n ownerAdapter: 'minikube',\n workloads: desired.workloads,\n availableOutputs: desired.availableOutputs,\n };\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { InfraExecutionContext, InfraOwnedResource } from '@ankhorage/contracts/infra';
2
- import type { MinikubeClusterIdentity } from '../../../types/minikubeRuntime';
2
+ import type { MinikubeClusterIdentity } from '../../../types/minikubeRuntime.js';
3
3
  /*** Create canonical ownership for the selected Minikube profile. */
4
4
  export declare function createMinikubeClusterOwner(context: InfraExecutionContext, identity: MinikubeClusterIdentity): InfraOwnedResource;
5
5
  //# sourceMappingURL=createMinikubeClusterOwner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createMinikubeClusterOwner.d.ts","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/utils/createMinikubeClusterOwner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAE5F,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAE9E,qEAAqE;AACrE,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,uBAAuB,GAChC,kBAAkB,CAapB"}
1
+ {"version":3,"file":"createMinikubeClusterOwner.d.ts","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/utils/createMinikubeClusterOwner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAE5F,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAEjF,qEAAqE;AACrE,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,uBAAuB,GAChC,kBAAkB,CAapB"}
@@ -1 +1 @@
1
- {"version":3,"file":"createMinikubeClusterOwner.js","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/utils/createMinikubeClusterOwner.ts"],"names":[],"mappings":"AAIA,qEAAqE;AACrE,MAAM,UAAU,0BAA0B,CACxC,OAA8B,EAC9B,QAAiC;IAEjC,OAAO;QACL,QAAQ,EAAE;YACR,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,OAAO,EAAE,UAAU;YACnB,UAAU,EAAE,SAAS;SACtB;QACD,UAAU,EAAE,QAAQ,CAAC,OAAO;QAC5B,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE,QAAQ;QACnB,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC","sourcesContent":["import type { InfraExecutionContext, InfraOwnedResource } from '@ankhorage/contracts/infra';\n\nimport type { MinikubeClusterIdentity } from '../../../types/minikubeRuntime';\n\n/*** Create canonical ownership for the selected Minikube profile. */\nexport function createMinikubeClusterOwner(\n context: InfraExecutionContext,\n identity: MinikubeClusterIdentity,\n): InfraOwnedResource {\n return {\n identity: {\n projectId: context.projectId,\n environment: context.environment,\n adapter: 'minikube',\n resourceId: 'cluster',\n },\n externalId: identity.profile,\n persistent: false,\n retention: 'retain',\n dependsOn: [],\n };\n}\n"]}
1
+ {"version":3,"file":"createMinikubeClusterOwner.js","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/utils/createMinikubeClusterOwner.ts"],"names":[],"mappings":"AAIA,qEAAqE;AACrE,MAAM,UAAU,0BAA0B,CACxC,OAA8B,EAC9B,QAAiC;IAEjC,OAAO;QACL,QAAQ,EAAE;YACR,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,OAAO,EAAE,UAAU;YACnB,UAAU,EAAE,SAAS;SACtB;QACD,UAAU,EAAE,QAAQ,CAAC,OAAO;QAC5B,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE,QAAQ;QACnB,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC","sourcesContent":["import type { InfraExecutionContext, InfraOwnedResource } from '@ankhorage/contracts/infra';\n\nimport type { MinikubeClusterIdentity } from '../../../types/minikubeRuntime.js';\n\n/*** Create canonical ownership for the selected Minikube profile. */\nexport function createMinikubeClusterOwner(\n context: InfraExecutionContext,\n identity: MinikubeClusterIdentity,\n): InfraOwnedResource {\n return {\n identity: {\n projectId: context.projectId,\n environment: context.environment,\n adapter: 'minikube',\n resourceId: 'cluster',\n },\n externalId: identity.profile,\n persistent: false,\n retention: 'retain',\n dependsOn: [],\n };\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { InfraExecutionContext, InfraResult } from '@ankhorage/contracts/infra';
2
- import type { MinikubeClusterIdentity } from '../../../types/minikubeRuntime';
2
+ import type { MinikubeClusterIdentity } from '../../../types/minikubeRuntime.js';
3
3
  /*** Resolve the active Minikube identity from the canonical environment selection. */
4
4
  export declare function getMinikubeClusterIdentity(context: InfraExecutionContext): InfraResult<MinikubeClusterIdentity>;
5
5
  //# sourceMappingURL=getMinikubeClusterIdentity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getMinikubeClusterIdentity.d.ts","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/utils/getMinikubeClusterIdentity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAErF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAE9E,sFAAsF;AACtF,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,qBAAqB,GAC7B,WAAW,CAAC,uBAAuB,CAAC,CAuBtC"}
1
+ {"version":3,"file":"getMinikubeClusterIdentity.d.ts","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/utils/getMinikubeClusterIdentity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAErF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAEjF,sFAAsF;AACtF,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,qBAAqB,GAC7B,WAAW,CAAC,uBAAuB,CAAC,CAuBtC"}
@@ -1 +1 @@
1
- {"version":3,"file":"getMinikubeClusterIdentity.js","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/utils/getMinikubeClusterIdentity.ts"],"names":[],"mappings":"AAIA,sFAAsF;AACtF,MAAM,UAAU,0BAA0B,CACxC,OAA8B;IAE9B,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;IAC/C,IAAI,OAAO,CAAC,WAAW,KAAK,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QACvE,OAAO;YACL,EAAE,EAAE,KAAK;YACT,WAAW,EAAE;gBACX;oBACE,QAAQ,EAAE,OAAO;oBACjB,IAAI,EAAE,4BAA4B;oBAClC,OAAO,EAAE,2EAA2E;iBACrF;aACF;SACF,CAAC;IACJ,CAAC;IACD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE;YACL,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,WAAW,EAAE,OAAO;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,aAAa,CAAC,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;SACzF;QACD,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,CACL,KAAK;SACF,WAAW,EAAE;SACb,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC;SAC7B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,WAAW,CAC1C,CAAC;AACJ,CAAC","sourcesContent":["import type { InfraExecutionContext, InfraResult } from '@ankhorage/contracts/infra';\n\nimport type { MinikubeClusterIdentity } from '../../../types/minikubeRuntime';\n\n/*** Resolve the active Minikube identity from the canonical environment selection. */\nexport function getMinikubeClusterIdentity(\n context: InfraExecutionContext,\n): InfraResult<MinikubeClusterIdentity> {\n const { runtime } = context.desired.deployment;\n if (context.environment !== 'local' || runtime.provider !== 'minikube') {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'minikube-selection-invalid',\n message: 'Minikube requires the canonical local environment and Minikube selection.',\n },\n ],\n };\n }\n return {\n ok: true,\n value: {\n projectId: context.projectId,\n environment: 'local',\n profile: runtime.profile ?? toProfileName(`${context.projectId}-${context.environment}`),\n },\n diagnostics: [],\n };\n}\n\n/*** Normalize a project identity into a deterministic Minikube profile name. */\nfunction toProfileName(value: string): string {\n return (\n value\n .toLowerCase()\n .replace(/[^a-z0-9_-]+/g, '-')\n .replace(/^-+|-+$/g, '') || 'ankhorage'\n );\n}\n"]}
1
+ {"version":3,"file":"getMinikubeClusterIdentity.js","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/utils/getMinikubeClusterIdentity.ts"],"names":[],"mappings":"AAIA,sFAAsF;AACtF,MAAM,UAAU,0BAA0B,CACxC,OAA8B;IAE9B,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;IAC/C,IAAI,OAAO,CAAC,WAAW,KAAK,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QACvE,OAAO;YACL,EAAE,EAAE,KAAK;YACT,WAAW,EAAE;gBACX;oBACE,QAAQ,EAAE,OAAO;oBACjB,IAAI,EAAE,4BAA4B;oBAClC,OAAO,EAAE,2EAA2E;iBACrF;aACF;SACF,CAAC;IACJ,CAAC;IACD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE;YACL,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,WAAW,EAAE,OAAO;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,aAAa,CAAC,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;SACzF;QACD,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,CACL,KAAK;SACF,WAAW,EAAE;SACb,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC;SAC7B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,WAAW,CAC1C,CAAC;AACJ,CAAC","sourcesContent":["import type { InfraExecutionContext, InfraResult } from '@ankhorage/contracts/infra';\n\nimport type { MinikubeClusterIdentity } from '../../../types/minikubeRuntime.js';\n\n/*** Resolve the active Minikube identity from the canonical environment selection. */\nexport function getMinikubeClusterIdentity(\n context: InfraExecutionContext,\n): InfraResult<MinikubeClusterIdentity> {\n const { runtime } = context.desired.deployment;\n if (context.environment !== 'local' || runtime.provider !== 'minikube') {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'minikube-selection-invalid',\n message: 'Minikube requires the canonical local environment and Minikube selection.',\n },\n ],\n };\n }\n return {\n ok: true,\n value: {\n projectId: context.projectId,\n environment: 'local',\n profile: runtime.profile ?? toProfileName(`${context.projectId}-${context.environment}`),\n },\n diagnostics: [],\n };\n}\n\n/*** Normalize a project identity into a deterministic Minikube profile name. */\nfunction toProfileName(value: string): string {\n return (\n value\n .toLowerCase()\n .replace(/[^a-z0-9_-]+/g, '-')\n .replace(/^-+|-+$/g, '') || 'ankhorage'\n );\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { InfraExecutionContext, InfraResult } from '@ankhorage/contracts/infra';
2
- import type { MinikubeClusterSpec, MinikubeDesiredState } from '../../../types/minikubeRuntime';
2
+ import type { MinikubeClusterSpec, MinikubeDesiredState } from '../../../types/minikubeRuntime.js';
3
3
  /*** Validate and create the local Minikube cluster specification. */
4
4
  export declare function getMinikubeClusterSpec(context: InfraExecutionContext, desired: MinikubeDesiredState): InfraResult<MinikubeClusterSpec>;
5
5
  //# sourceMappingURL=getMinikubeClusterSpec.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getMinikubeClusterSpec.d.ts","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/utils/getMinikubeClusterSpec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAErF,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAGhG,qEAAqE;AACrE,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,oBAAoB,GAC5B,WAAW,CAAC,mBAAmB,CAAC,CA4ClC"}
1
+ {"version":3,"file":"getMinikubeClusterSpec.d.ts","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/utils/getMinikubeClusterSpec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAErF,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAGnG,qEAAqE;AACrE,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,oBAAoB,GAC5B,WAAW,CAAC,mBAAmB,CAAC,CA4ClC"}
@@ -1,4 +1,4 @@
1
- import { getMinikubeClusterIdentity } from './getMinikubeClusterIdentity';
1
+ import { getMinikubeClusterIdentity } from './getMinikubeClusterIdentity.js';
2
2
  /*** Validate and create the local Minikube cluster specification. */
3
3
  export function getMinikubeClusterSpec(context, desired) {
4
4
  const identity = getMinikubeClusterIdentity(context);
@@ -1 +1 @@
1
- {"version":3,"file":"getMinikubeClusterSpec.js","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/utils/getMinikubeClusterSpec.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,qEAAqE;AACrE,MAAM,UAAU,sBAAsB,CACpC,OAA8B,EAC9B,OAA6B;IAE7B,MAAM,QAAQ,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CACzC,CAAC,MAAM,EAA+E,EAAE,CACtF,MAAM,CAAC,IAAI,KAAK,YAAY,CAC/B,CAAC;IACF,MAAM,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC;IAC9B,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,WAAW,EAAE;gBACX;oBACE,QAAQ,EAAE,OAAO;oBACjB,IAAI,EAAE,yBAAyB;oBAC/B,OAAO,EAAE,mEAAmE;iBAC7E;aACF;SACF,CAAC;IACJ,CAAC;IACD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE;YACL,GAAG,QAAQ,CAAC,KAAK;YACjB,MAAM;YACN,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,QAAQ;YAC5C,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACjF,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,KAAK,SAAS;gBAC3C,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;YAC/C,cAAc,EAAE;gBACd,GAAG,IAAI,GAAG,CACR,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CACrC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;qBACjC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;qBACpD,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE,CACjC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CACnD,CACJ,CACF;aACF,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC;SACtC;QACD,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC","sourcesContent":["import type { InfraExecutionContext, InfraResult } from '@ankhorage/contracts/infra';\n\nimport type { MinikubeClusterSpec, MinikubeDesiredState } from '../../../types/minikubeRuntime';\nimport { getMinikubeClusterIdentity } from './getMinikubeClusterIdentity';\n\n/*** Validate and create the local Minikube cluster specification. */\nexport function getMinikubeClusterSpec(\n context: InfraExecutionContext,\n desired: MinikubeDesiredState,\n): InfraResult<MinikubeClusterSpec> {\n const identity = getMinikubeClusterIdentity(context);\n if (!identity.ok) return identity;\n const localTargets = desired.targets.filter(\n (target): target is Extract<(typeof desired.targets)[number], { kind: 'local-host' }> =>\n target.kind === 'local-host',\n );\n const [target] = localTargets;\n if (desired.targets.length !== 1 || target === undefined) {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'minikube-target-invalid',\n message: 'Minikube requires exactly one portable local-host compute target.',\n },\n ],\n };\n }\n return {\n ok: true,\n value: {\n ...identity.value,\n target,\n driver: desired.selection.driver ?? 'docker',\n ...(desired.selection.cpus === undefined ? {} : { cpus: desired.selection.cpus }),\n ...(desired.selection.memoryMiB === undefined\n ? {}\n : { memoryMiB: desired.selection.memoryMiB }),\n publishedPorts: [\n ...new Set(\n desired.workloads.flatMap((workload) =>\n Object.entries(workload.ports ?? {})\n .sort(([left], [right]) => left.localeCompare(right))\n .flatMap(([, { publishedPort }]) =>\n publishedPort === undefined ? [] : [publishedPort],\n ),\n ),\n ),\n ].sort((left, right) => left - right),\n },\n diagnostics: [],\n };\n}\n"]}
1
+ {"version":3,"file":"getMinikubeClusterSpec.js","sourceRoot":"","sources":["../../../../src/features/cluster-runtime/utils/getMinikubeClusterSpec.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAE7E,qEAAqE;AACrE,MAAM,UAAU,sBAAsB,CACpC,OAA8B,EAC9B,OAA6B;IAE7B,MAAM,QAAQ,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CACzC,CAAC,MAAM,EAA+E,EAAE,CACtF,MAAM,CAAC,IAAI,KAAK,YAAY,CAC/B,CAAC;IACF,MAAM,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC;IAC9B,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,WAAW,EAAE;gBACX;oBACE,QAAQ,EAAE,OAAO;oBACjB,IAAI,EAAE,yBAAyB;oBAC/B,OAAO,EAAE,mEAAmE;iBAC7E;aACF;SACF,CAAC;IACJ,CAAC;IACD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE;YACL,GAAG,QAAQ,CAAC,KAAK;YACjB,MAAM;YACN,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,QAAQ;YAC5C,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACjF,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,KAAK,SAAS;gBAC3C,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;YAC/C,cAAc,EAAE;gBACd,GAAG,IAAI,GAAG,CACR,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CACrC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;qBACjC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;qBACpD,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE,CACjC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CACnD,CACJ,CACF;aACF,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC;SACtC;QACD,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC","sourcesContent":["import type { InfraExecutionContext, InfraResult } from '@ankhorage/contracts/infra';\n\nimport type { MinikubeClusterSpec, MinikubeDesiredState } from '../../../types/minikubeRuntime.js';\nimport { getMinikubeClusterIdentity } from './getMinikubeClusterIdentity.js';\n\n/*** Validate and create the local Minikube cluster specification. */\nexport function getMinikubeClusterSpec(\n context: InfraExecutionContext,\n desired: MinikubeDesiredState,\n): InfraResult<MinikubeClusterSpec> {\n const identity = getMinikubeClusterIdentity(context);\n if (!identity.ok) return identity;\n const localTargets = desired.targets.filter(\n (target): target is Extract<(typeof desired.targets)[number], { kind: 'local-host' }> =>\n target.kind === 'local-host',\n );\n const [target] = localTargets;\n if (desired.targets.length !== 1 || target === undefined) {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'minikube-target-invalid',\n message: 'Minikube requires exactly one portable local-host compute target.',\n },\n ],\n };\n }\n return {\n ok: true,\n value: {\n ...identity.value,\n target,\n driver: desired.selection.driver ?? 'docker',\n ...(desired.selection.cpus === undefined ? {} : { cpus: desired.selection.cpus }),\n ...(desired.selection.memoryMiB === undefined\n ? {}\n : { memoryMiB: desired.selection.memoryMiB }),\n publishedPorts: [\n ...new Set(\n desired.workloads.flatMap((workload) =>\n Object.entries(workload.ports ?? {})\n .sort(([left], [right]) => left.localeCompare(right))\n .flatMap(([, { publishedPort }]) =>\n publishedPort === undefined ? [] : [publishedPort],\n ),\n ),\n ),\n ].sort((left, right) => left - right),\n },\n diagnostics: [],\n };\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /** Public Minikube runtime adapter package boundary. */
2
- export { infraAdapterDescriptor } from './constants/infra';
3
- export { createMinikubeCliControlPlane } from './features/cluster-runtime/adapters/createMinikubeCliControlPlane';
4
- export { createInfraAdapter } from './features/cluster-runtime/composition/createInfraAdapter';
5
- export type { MinikubeAdapterOptions, MinikubeCliControlPlaneOptions, MinikubeClusterIdentity, MinikubeClusterObservation, MinikubeClusterSpec, MinikubeCommandRequest, MinikubeCommandResult, MinikubeCommandRunner, MinikubeControlPlane, MinikubeDesiredState, MinikubeEndpointOutput, } from './types/minikubeRuntime';
2
+ export { infraAdapterDescriptor } from './constants/infra.js';
3
+ export { createMinikubeCliControlPlane } from './features/cluster-runtime/adapters/createMinikubeCliControlPlane.js';
4
+ export { createInfraAdapter } from './features/cluster-runtime/composition/createInfraAdapter.js';
5
+ export type { MinikubeAdapterOptions, MinikubeCliControlPlaneOptions, MinikubeClusterIdentity, MinikubeClusterObservation, MinikubeClusterSpec, MinikubeCommandRequest, MinikubeCommandResult, MinikubeCommandRunner, MinikubeControlPlane, MinikubeDesiredState, MinikubeEndpointOutput, } from './types/minikubeRuntime.js';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,6BAA6B,EAAE,MAAM,mEAAmE,CAAC;AAClH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2DAA2D,CAAC;AAC/F,YAAY,EACV,sBAAsB,EACtB,8BAA8B,EAC9B,uBAAuB,EACvB,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,6BAA6B,EAAE,MAAM,sEAAsE,CAAC;AACrH,OAAO,EAAE,kBAAkB,EAAE,MAAM,8DAA8D,CAAC;AAClG,YAAY,EACV,sBAAsB,EACtB,8BAA8B,EAC9B,uBAAuB,EACvB,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,4BAA4B,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /** Public Minikube runtime adapter package boundary. */
2
- export { infraAdapterDescriptor } from './constants/infra';
3
- export { createMinikubeCliControlPlane } from './features/cluster-runtime/adapters/createMinikubeCliControlPlane';
4
- export { createInfraAdapter } from './features/cluster-runtime/composition/createInfraAdapter';
2
+ export { infraAdapterDescriptor } from './constants/infra.js';
3
+ export { createMinikubeCliControlPlane } from './features/cluster-runtime/adapters/createMinikubeCliControlPlane.js';
4
+ export { createInfraAdapter } from './features/cluster-runtime/composition/createInfraAdapter.js';
5
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,6BAA6B,EAAE,MAAM,mEAAmE,CAAC;AAClH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2DAA2D,CAAC","sourcesContent":["/** Public Minikube runtime adapter package boundary. */\nexport { infraAdapterDescriptor } from './constants/infra';\nexport { createMinikubeCliControlPlane } from './features/cluster-runtime/adapters/createMinikubeCliControlPlane';\nexport { createInfraAdapter } from './features/cluster-runtime/composition/createInfraAdapter';\nexport type {\n MinikubeAdapterOptions,\n MinikubeCliControlPlaneOptions,\n MinikubeClusterIdentity,\n MinikubeClusterObservation,\n MinikubeClusterSpec,\n MinikubeCommandRequest,\n MinikubeCommandResult,\n MinikubeCommandRunner,\n MinikubeControlPlane,\n MinikubeDesiredState,\n MinikubeEndpointOutput,\n} from './types/minikubeRuntime';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,6BAA6B,EAAE,MAAM,sEAAsE,CAAC;AACrH,OAAO,EAAE,kBAAkB,EAAE,MAAM,8DAA8D,CAAC","sourcesContent":["/** Public Minikube runtime adapter package boundary. */\nexport { infraAdapterDescriptor } from './constants/infra.js';\nexport { createMinikubeCliControlPlane } from './features/cluster-runtime/adapters/createMinikubeCliControlPlane.js';\nexport { createInfraAdapter } from './features/cluster-runtime/composition/createInfraAdapter.js';\nexport type {\n MinikubeAdapterOptions,\n MinikubeCliControlPlaneOptions,\n MinikubeClusterIdentity,\n MinikubeClusterObservation,\n MinikubeClusterSpec,\n MinikubeCommandRequest,\n MinikubeCommandResult,\n MinikubeCommandRunner,\n MinikubeControlPlane,\n MinikubeDesiredState,\n MinikubeEndpointOutput,\n} from './types/minikubeRuntime.js';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ankhorage/infra-minikube",
3
- "version": "0.4.128",
3
+ "version": "0.4.130",
4
4
  "description": "Minikube runtime adapter for provider-neutral Ankhorage infrastructure.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -43,6 +43,7 @@
43
43
  "typecheck": "bun x tsc --noEmit -p tsconfig.json",
44
44
  "check-types": "bun run typecheck",
45
45
  "test": "bun test src",
46
+ "test:packed-consumer": "bun consumer-tests/packedConsumer.ts",
46
47
  "docs": "paradox && ankhorage-prettier --write README.md paradox",
47
48
  "prepack": "bun run build",
48
49
  "lint": "ankhorage-eslint . --max-warnings=0",
@@ -55,14 +56,14 @@
55
56
  "version-packages": "ankhorage-changeset version"
56
57
  },
57
58
  "dependencies": {
58
- "@ankhorage/contracts": "^26.0.2",
59
- "@ankhorage/kubernetes": "^0.8.2"
59
+ "@ankhorage/contracts": "^26.4.0",
60
+ "@ankhorage/kubernetes": "^0.9.0"
60
61
  },
61
62
  "devDependencies": {
62
- "@ankhorage/devtools": "^2.3.29",
63
- "@ankhorage/paradox": "^0.3.5",
63
+ "@ankhorage/devtools": "^2.4.0",
64
+ "@ankhorage/paradox": "^0.3.6",
64
65
  "@types/bun": "^1.4.2",
65
- "@types/node": "^26.6.5",
66
+ "@types/node": "^26.6.6",
66
67
  "typescript": "~6.0.3"
67
68
  },
68
69
  "packageManager": "bun@1.4.2"