From 418bc15f6651189d0035f713da2fb4157685e563 Mon Sep 17 00:00:00 2001 From: Chris McGrath <42470403+neoakris@users.noreply.github.com> Date: Mon, 5 May 2025 13:54:59 -0400 Subject: [PATCH 1/5] replaced commented out logic with if statements --- config/eks/higher_envs_eks_config.ts | 15 ++++++++++----- config/eks/lower_envs_eks_config.ts | 15 ++++++++++----- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/config/eks/higher_envs_eks_config.ts b/config/eks/higher_envs_eks_config.ts index 5fe7057..7beed89 100644 --- a/config/eks/higher_envs_eks_config.ts +++ b/config/eks/higher_envs_eks_config.ts @@ -14,10 +14,15 @@ export function apply_config(config: Easy_EKS_Config_Data, stack: cdk.Stack){ // //config.setVpcById("vpc-0dbcacb511f9bac4e", config, stack); //Alternative pre-existing VPC deployment option config.setBaselineMNGSize(2); config.setBaselineMNGType(eks.CapacityType.ON_DEMAND); - //config.addClusterAdminARN(`arn:aws:iam::${process.env.CDK_DEFAULT_ACCOUNT!}:user/example`); - //^--Important Note: identity referenced in ARN must exist or the deployment will fail - // This allows you to create a explicit list of ARNS (representing IAM roles or users) - // That act as EKS Admins of all higher environments. + if(process.env.CDK_DEFAULT_ACCOUNT==="111122223333"){ + config.addClusterAdminARN(`arn:aws:iam::111122223333:user/example`); + /* Note: + config.addClusterAdminARN('...:user/example') should only be used in an if statement, + Because the identity referenced in ARN must exist or the deployment will fail + This allows you to create a explicit list of ARNs (representing IAM roles or users) + That act as EKS Admins of all higher environments. + */ + } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -27,7 +32,7 @@ export function apply_config(config: Easy_EKS_Config_Data, stack: cdk.Stack){ // config.setKubectlLayer(new KubectlV31Layer(stack, 'kubectl')); config.addEKSAddon('kube-proxy', { //spelling matters for all addons addonName: 'kube-proxy', //spelling matter & should match above - addonVersion: 'v1.31.3-eksbuild.2', //Commented out for default (it won't be latest) + addonVersion: 'v1.31.7-eksbuild.7', //Note you can comment this out, but you'll get default instead of latest. // Use this to look up latest // aws eks describe-addon-versions --kubernetes-version=1.31 --addon-name=kube-proxy --query='addons[].addonVersions[].addonVersion' | jq '.[0]' resolveConflicts: 'OVERWRITE', diff --git a/config/eks/lower_envs_eks_config.ts b/config/eks/lower_envs_eks_config.ts index 69c8ceb..d368688 100644 --- a/config/eks/lower_envs_eks_config.ts +++ b/config/eks/lower_envs_eks_config.ts @@ -14,10 +14,15 @@ export function apply_config(config: Easy_EKS_Config_Data, stack: cdk.Stack){ // //config.setVpcById("vpc-0dbcacb511f9bac4e", config, stack); //Alternative pre-existing VPC deployment option config.setBaselineMNGSize(2); config.setBaselineMNGType(eks.CapacityType.SPOT); - //config.addClusterAdminARN(`arn:aws:iam::${process.env.CDK_DEFAULT_ACCOUNT!}:user/example`); - //^--Important Note: identity referenced in ARN must exist or the deployment will fail - // This allows you to create a explicit list of ARNS (representing IAM roles or users) - // That act as EKS Admins of all lower environments. + if(process.env.CDK_DEFAULT_ACCOUNT==="111122223333"){ + config.addClusterAdminARN(`arn:aws:iam::111122223333:user/example`); + /* Note: + config.addClusterAdminARN('...:user/example') should only be used in an if statement, + Because the identity referenced in ARN must exist or the deployment will fail + This allows you to create a explicit list of ARNs (representing IAM roles or users) + That act as EKS Admins of all lower environments. + */ + } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -27,7 +32,7 @@ export function apply_config(config: Easy_EKS_Config_Data, stack: cdk.Stack){ // config.setKubectlLayer(new KubectlV31Layer(stack, 'kubectl')); config.addEKSAddon('kube-proxy', { //spelling matters for all addons addonName: 'kube-proxy', //spelling matter & should match above - addonVersion: 'v1.31.3-eksbuild.2', //Commented out for default (it won't be latest) + addonVersion: 'v1.31.7-eksbuild.7', //Note you can comment this out, but you'll get default instead of latest. // Use this to look up latest // aws eks describe-addon-versions --kubernetes-version=1.31 --addon-name=kube-proxy --query='addons[].addonVersions[].addonVersion' | jq '.[0]' resolveConflicts: 'OVERWRITE', From c74a82c3002c79c1cd28a788d7c704335471aa7f Mon Sep 17 00:00:00 2001 From: Chris McGrath <42470403+neoakris@users.noreply.github.com> Date: Mon, 5 May 2025 14:29:27 -0400 Subject: [PATCH 2/5] added logic to eliminate an edge case where cdk.context.json(cache), being outdated would lead to eks deployment failures. --- lib/Easy_EKS_Config_Data.ts | 29 ++++++++++++++++++++- lib/Opinionated_VPC.ts | 52 ------------------------------------- 2 files changed, 28 insertions(+), 53 deletions(-) diff --git a/lib/Easy_EKS_Config_Data.ts b/lib/Easy_EKS_Config_Data.ts index 598e5cd..1501479 100644 --- a/lib/Easy_EKS_Config_Data.ts +++ b/lib/Easy_EKS_Config_Data.ts @@ -3,7 +3,7 @@ import * as cdk from 'aws-cdk-lib'; import * as eks from 'aws-cdk-lib/aws-eks'; import * as ec2 from 'aws-cdk-lib/aws-ec2'; import * as iam from 'aws-cdk-lib/aws-iam'; - +import { execSync } from 'child_process'; type Optional = Pick, K> & Omit; type EKSAddOnInput = Optional; //makes clusterName Optional parameter @@ -43,9 +43,36 @@ export class Easy_EKS_Config_Data { //This object just holds config data. this.vpc = pre_existing_vpc as ec2.Vpc; } setVpcByName(vpcName: string, config: Easy_EKS_Config_Data, stack: cdk.Stack){ + //Note: The following "normal cdk way of doing things" works 99% of the time + // const pre_existing_vpc = ec2.Vpc.fromLookup(stack,'pre-existing-vpc', { + // isDefault: false, + // tags: { ["Name"]: vpcName }, + // }); + // I've replaced it with an alternative that should work 99.5% of the time, + // by translating name to id, then looking up by id. + //////////////////////////////////////////////////////////////////////////////// + // Explanation of Edge Case Problem: + // .fromLookup() uses cdk.context.json, which functions as a cache. + // An edge case problem exists, where cdk destroy & re-deploy will fail, due + // to outdated cache value, unless the user knows to run + // cdk destroy --> `cdk context --clear` --> cdk re-deploy + // This extra logic translates vpcName to id, then looks up by name and id, + // which effectively eliminates the edge case and need for said specialized + // knowledge of how to handle the edge case. + //////////////////////////////////////////////////////////////////////////////// + const cmd = `aws ec2 describe-vpcs --filter Name=tag:Name,Values=${vpcName} --query "Vpcs[].VpcId" | tr -d '\r\n []"'` + const cmd_results = execSync(cmd).toString(); + // Plausible Values to expect: + // case 1: cmd_results==="" + // ^-- Occurs when vpc name not found. Would cause an error, which is desired behavior as we assume it should be found. + // case 2: cmd_results==="vpc-0f79593fc83da0b82" (Note: If you console.log it you wouldn't see doublequotes) + // ^-- If name is found a single valid id "should" show up. + // I say "should", because a 2nd edge case of 2 VPCs having the same name is technically possible, but unlikey. + const potential_vpc_id=cmd_results; const pre_existing_vpc = ec2.Vpc.fromLookup(stack,'pre-existing-vpc', { isDefault: false, tags: { ["Name"]: vpcName }, + vpcId: potential_vpc_id, }); if(vpcName === "lower-envs-vpc" || vpcName === "higher-envs-vpc"){ cdk.Annotations.of(stack).acknowledgeWarning('@aws-cdk/aws-eks:clusterMustManuallyTagSubnet'); diff --git a/lib/Opinionated_VPC.ts b/lib/Opinionated_VPC.ts index 9fb8f49..1d32e76 100644 --- a/lib/Opinionated_VPC.ts +++ b/lib/Opinionated_VPC.ts @@ -14,7 +14,6 @@ import * as my_orgs_baseline_vpc_config from '../config/vpc/my_orgs_baseline_vpc import * as lower_envs_vpc_config from '../config/vpc/lower_envs_vpc_config'; import * as higher_envs_vpc_config from '../config/vpc/higher_envs_vpc_config'; import { FckNatInstanceProvider } from 'cdk-fck-nat' //source: npm install cdk-fck-nat@latest -import { execSync } from 'child_process'; //work around for vpc lookup issue /////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -38,10 +37,6 @@ export class Opinionated_VPC{ apply_higher_envs_vpc_config(){ higher_envs_vpc_config.apply_config(this.config,this.stack); } deploy_vpc_construct_into_this_objects_stack(){ - //The following is to prevent creation 2 VPCs with the same name: - //Plausible values of this.config.id = "lower-envs-vpc" or "higher-envs-vpc" - check_for_partially_deleted_vpc_to_prevent_error(this.config.id, this.stack); - //https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.VpcProps.html this.vpc = new ec2.Vpc(this.stack, this.config.id, { vpcName: this.config.id, @@ -132,50 +127,3 @@ export class Opinionated_VPC{ }//end class of Opinionated_VPC /////////////////////////////////////////////////////////////////////////////////////////////////// - -function check_for_partially_deleted_vpc_to_prevent_error(vpc_name_tag: string, stack: cdk.Stack){ - /* Why this exists: - Earlier ran into a bug where more than 1 instance of lower-envs-vpcs was created - cdk's ec2.Vpc.fromLookup() is useful for importing pre-existing VPC - but is bad for acting as an existance check, because non-existence triggers error - so using aws cli as more flexible fallback option to try to prevent the issue. - */ - const cmd = `aws ec2 describe-vpcs --filter Name=tag:Name,Values=${vpc_name_tag} --query "Vpcs[].VpcId" | tr -d '\r\n []"'` - //` | jq '.Aliases[] | select(.AliasName == "${kmsKeyAlias}") | .TargetKeyId'` - const cmd_results = execSync(cmd).toString(); - // Plausible Values to expect: - // cmd_results==="" - // cmd_results==="vpc-0f79593fc83da0b82" (Note: If you console.log it you wouldn't see doublequotes) - if(cmd_results===""){ return; } //If no pre-existing vpc detected all good, resume creation. - else{ //if pre-existing vpc detected, check for partially deleted instance of VPC stack to avoid error. - const potential_vpc_id=cmd_results; - let vpc = ec2.Vpc.fromLookup(stack, 'vpc-lookup', { - isDefault: false, - tags: { ["Name"]: vpc_name_tag }, - vpcId: potential_vpc_id, - }); - if(vpc.publicSubnets.length===0){ - const error_msg = `VPC with tag "Name: ${vpc_name_tag}", was detected to have 0 public subnets.\n`+ - "This usually means:\n"+ - "* cdk destroy was run against this vpc, and an incomplete destroy occured.\n"+ - "* If you were to allow this program to continue, by commenting out the error check.\n"+ - " Then you'd end up with 2 VPCs with the same name, and that'd cause EKS provisioning failures.\n"+ - "\n"+ - "So: \n"+ - "* The program has been stopped to show the error sooner rather than later.\n"+ - "\n"+ - "Resolution Options:\n"+ - "* Option 1: Manually fully delete the partially destroyed VPC, then re-run this to re-create.\n"+ - "* Option 2: Manage VPC outside of this program (manually or otherwise) & Import it into eks\n"+ - ` * In ./bin/cdk-main.ts, comment out the vpc stack named ${vpc_name_tag}\n`+ - " * In ./config/eks/lower_envs_eks_config.ts or higher_envs_eks_config.ts\n"+ - ' 1. Comment out config.setVpcByName("lower-envs-vpc", config, stack);\n'+ - ' 2. Set config.setVpcById("vpc-0dbcacb511f9bac4e", config, stack);\n'; - console.log(error_msg); - throw "Edge Case Error Detected: Requesting Human Intervention"; - } - } - return; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// From 3b4369c66931aeb142da1182ec0f24c702c15821 Mon Sep 17 00:00:00 2001 From: Chris McGrath <42470403+neoakris@users.noreply.github.com> Date: Mon, 5 May 2025 14:43:56 -0400 Subject: [PATCH 3/5] copying cdk.context.json into dockerfile to align with cdk best practices --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 28cba39..7fd2a08 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,7 +25,7 @@ ENV AWS_PAGER="" WORKDIR /app # ^-- configure default working directory -COPY cdk.json package.json package-lock.json tsconfig.json /app +COPY cdk.json cdk.context.json package.json package-lock.json tsconfig.json /app RUN npm install ENV PATH="/app/node_modules/.bin:$PATH" # ^-- package.json & package-lock.json tell npm install what dependencies to install From ec3c817e89359efaddecbf4d36e3f97ff0e9a1c4 Mon Sep 17 00:00:00 2001 From: Chris McGrath <42470403+neoakris@users.noreply.github.com> Date: Mon, 5 May 2025 14:47:47 -0400 Subject: [PATCH 4/5] updated dependencies for flox.dev method that uses nix pkgs --- .flox/env/manifest.lock | 427 ++- .flox/env/manifest.toml | 16 +- cdk.context.json | 91 +- .../Recommended_Long-Term_Setup.md | 46 +- package-lock.json | 2923 +---------------- package.json | 2 +- 6 files changed, 407 insertions(+), 3098 deletions(-) diff --git a/.flox/env/manifest.lock b/.flox/env/manifest.lock index 820cee4..e49b7ec 100644 --- a/.flox/env/manifest.lock +++ b/.flox/env/manifest.lock @@ -5,27 +5,26 @@ "install": { "aws": { "pkg-path": "awscli2", - "version": "2.17.42" + "version": "2.26.4" }, "aws_cdk_dependency_nodejs": { "pkg-path": "nodejs", - "version": "20.17.0" + "version": "22.14.0" }, "aws_cdk_dependency_ts": { "pkg-path": "typescript", - "version": "5.6.2" + "version": "5.8.2" }, "cdk": { "pkg-path": "nodePackages.aws-cdk", "pkg-group": "aws-cdk", - "version": "2.159.1" + "version": "2.1004.0" }, "jq": { "pkg-path": "jq", "version": "1.7.1" } }, - "vars": {}, "hook": {}, "profile": {}, "options": { @@ -34,40 +33,34 @@ "aarch64-linux", "x86_64-darwin", "x86_64-linux" - ], - "allow": { - "licenses": [] - }, - "semver": {} - }, - "services": {}, - "build": {} + ] + } }, "packages": [ { "attr_path": "nodePackages.aws-cdk", "broken": false, - "derivation": "/nix/store/avainazy3x49yzjx0m3qkllizfkrs1jk-aws-cdk-2.159.1.drv", - "description": "CDK Toolkit, the command line tool for CDK apps", + "derivation": "/nix/store/wkgx24wdn6bdr6lxadhyx0snk4cyp8cf-aws-cdk-2.1004.0.drv", + "description": "AWS CDK CLI, the command line tool for CDK apps", "install_id": "cdk", "license": "Apache-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=30439d93eb8b19861ccbe3e581abf97bdc91b093", - "name": "aws-cdk-2.159.1", + "locked_url": "https://github.com/flox/nixpkgs?rev=46e634be05ce9dc6d4db8e664515ba10b78151ae", + "name": "aws-cdk-2.1004.0", "pname": "aws-cdk", - "rev": "30439d93eb8b19861ccbe3e581abf97bdc91b093", - "rev_count": 684846, - "rev_date": "2024-09-23T20:13:18Z", - "scrape_date": "2024-09-27T03:18:01Z", + "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", + "rev_count": 791944, + "rev_date": "2025-04-29T12:35:57Z", + "scrape_date": "2025-04-30T04:20:49.483971Z", "stabilities": [ "unstable" ], "unfree": false, - "version": "2.159.1", + "version": "2.1004.0", "outputs_to_install": [ "out" ], "outputs": { - "out": "/nix/store/bg4w7kz1yvva7175w9hv41r3319yq062-aws-cdk-2.159.1" + "out": "/nix/store/kc6ibmh1z1dn12ii9nxmn9dqv041fnx4-aws-cdk-2.1004.0" }, "system": "aarch64-darwin", "group": "aws-cdk", @@ -76,27 +69,27 @@ { "attr_path": "nodePackages.aws-cdk", "broken": false, - "derivation": "/nix/store/02ay54fipzia6pyxb4ddpc64m573ywib-aws-cdk-2.159.1.drv", - "description": "CDK Toolkit, the command line tool for CDK apps", + "derivation": "/nix/store/1fq25q8r6s28rwjxsady07h4k8scz8pi-aws-cdk-2.1004.0.drv", + "description": "AWS CDK CLI, the command line tool for CDK apps", "install_id": "cdk", "license": "Apache-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=30439d93eb8b19861ccbe3e581abf97bdc91b093", - "name": "aws-cdk-2.159.1", + "locked_url": "https://github.com/flox/nixpkgs?rev=46e634be05ce9dc6d4db8e664515ba10b78151ae", + "name": "aws-cdk-2.1004.0", "pname": "aws-cdk", - "rev": "30439d93eb8b19861ccbe3e581abf97bdc91b093", - "rev_count": 684846, - "rev_date": "2024-09-23T20:13:18Z", - "scrape_date": "2024-09-27T03:18:01Z", + "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", + "rev_count": 791944, + "rev_date": "2025-04-29T12:35:57Z", + "scrape_date": "2025-04-30T04:40:10.095761Z", "stabilities": [ "unstable" ], "unfree": false, - "version": "2.159.1", + "version": "2.1004.0", "outputs_to_install": [ "out" ], "outputs": { - "out": "/nix/store/zzg1ynlwi468nbjiwp6qd8dkk1mn10zd-aws-cdk-2.159.1" + "out": "/nix/store/iarrs06jn3zydlrkzz5d4iqvr07xlgly-aws-cdk-2.1004.0" }, "system": "aarch64-linux", "group": "aws-cdk", @@ -105,27 +98,27 @@ { "attr_path": "nodePackages.aws-cdk", "broken": false, - "derivation": "/nix/store/flfa4zzis9bicbl2yd7cp5vkrr6fa139-aws-cdk-2.159.1.drv", - "description": "CDK Toolkit, the command line tool for CDK apps", + "derivation": "/nix/store/6zgd6scrz91m95i8dr6qwigw4jdmjhd0-aws-cdk-2.1004.0.drv", + "description": "AWS CDK CLI, the command line tool for CDK apps", "install_id": "cdk", "license": "Apache-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=30439d93eb8b19861ccbe3e581abf97bdc91b093", - "name": "aws-cdk-2.159.1", + "locked_url": "https://github.com/flox/nixpkgs?rev=46e634be05ce9dc6d4db8e664515ba10b78151ae", + "name": "aws-cdk-2.1004.0", "pname": "aws-cdk", - "rev": "30439d93eb8b19861ccbe3e581abf97bdc91b093", - "rev_count": 684846, - "rev_date": "2024-09-23T20:13:18Z", - "scrape_date": "2024-09-27T03:18:01Z", + "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", + "rev_count": 791944, + "rev_date": "2025-04-29T12:35:57Z", + "scrape_date": "2025-04-30T04:57:11.222241Z", "stabilities": [ "unstable" ], "unfree": false, - "version": "2.159.1", + "version": "2.1004.0", "outputs_to_install": [ "out" ], "outputs": { - "out": "/nix/store/xjm9mq87izhz1fikxjp3qxibxpbrdj40-aws-cdk-2.159.1" + "out": "/nix/store/k7z3ssdfv2plpi24bsyb433plbxa4mr4-aws-cdk-2.1004.0" }, "system": "x86_64-darwin", "group": "aws-cdk", @@ -134,27 +127,27 @@ { "attr_path": "nodePackages.aws-cdk", "broken": false, - "derivation": "/nix/store/2gwdlizl72wqkrjslp48ip84iixxdpi1-aws-cdk-2.159.1.drv", - "description": "CDK Toolkit, the command line tool for CDK apps", + "derivation": "/nix/store/k05y2pkhjswk84mcd0s30imn4rgn858h-aws-cdk-2.1004.0.drv", + "description": "AWS CDK CLI, the command line tool for CDK apps", "install_id": "cdk", "license": "Apache-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=30439d93eb8b19861ccbe3e581abf97bdc91b093", - "name": "aws-cdk-2.159.1", + "locked_url": "https://github.com/flox/nixpkgs?rev=46e634be05ce9dc6d4db8e664515ba10b78151ae", + "name": "aws-cdk-2.1004.0", "pname": "aws-cdk", - "rev": "30439d93eb8b19861ccbe3e581abf97bdc91b093", - "rev_count": 684846, - "rev_date": "2024-09-23T20:13:18Z", - "scrape_date": "2024-09-27T03:18:01Z", + "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", + "rev_count": 791944, + "rev_date": "2025-04-29T12:35:57Z", + "scrape_date": "2025-04-30T05:22:28.205894Z", "stabilities": [ "unstable" ], "unfree": false, - "version": "2.159.1", + "version": "2.1004.0", "outputs_to_install": [ "out" ], "outputs": { - "out": "/nix/store/qkdadnxhfbx9np4rlx2rd10k722dqbln-aws-cdk-2.159.1" + "out": "/nix/store/znkc534li57qa9cppj42kpisgms2bini-aws-cdk-2.1004.0" }, "system": "x86_64-linux", "group": "aws-cdk", @@ -163,28 +156,28 @@ { "attr_path": "awscli2", "broken": false, - "derivation": "/nix/store/n40i1fchz6a8k0dxgpmi2aglzm8x74hp-awscli2-2.17.42.drv", + "derivation": "/nix/store/qfphgznrarbjcibdjqzaskgp0ifyxbs7-awscli2-2.26.4.drv", "description": "Unified tool to manage your AWS services", "install_id": "aws", "license": "Apache-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=30439d93eb8b19861ccbe3e581abf97bdc91b093", - "name": "awscli2-2.17.42", + "locked_url": "https://github.com/flox/nixpkgs?rev=46e634be05ce9dc6d4db8e664515ba10b78151ae", + "name": "awscli2-2.26.4", "pname": "awscli2", - "rev": "30439d93eb8b19861ccbe3e581abf97bdc91b093", - "rev_count": 684846, - "rev_date": "2024-09-23T20:13:18Z", - "scrape_date": "2024-09-27T03:18:01Z", + "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", + "rev_count": 791944, + "rev_date": "2025-04-29T12:35:57Z", + "scrape_date": "2025-04-30T04:19:44.799079Z", "stabilities": [ "unstable" ], "unfree": false, - "version": "2.17.42", + "version": "2.26.4", "outputs_to_install": [ "out" ], "outputs": { - "dist": "/nix/store/n49w8p0ar6869himw49w5xbdv9fi240k-awscli2-2.17.42-dist", - "out": "/nix/store/bqwrbnp6dba3hcwb4pa3js7k8a3qng1d-awscli2-2.17.42" + "dist": "/nix/store/c11ys14ah883c18xp8firkrwm15xqjr8-awscli2-2.26.4-dist", + "out": "/nix/store/mjfpdzngl32082m1yq7jcbx302db3gkg-awscli2-2.26.4" }, "system": "aarch64-darwin", "group": "toplevel", @@ -193,28 +186,28 @@ { "attr_path": "awscli2", "broken": false, - "derivation": "/nix/store/j3kn46fj89vlp5agkxd5vlj573x6pkp0-awscli2-2.17.42.drv", + "derivation": "/nix/store/1r6jkfwvfww8fjw3f96n526xmbxpqhi6-awscli2-2.26.4.drv", "description": "Unified tool to manage your AWS services", "install_id": "aws", "license": "Apache-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=30439d93eb8b19861ccbe3e581abf97bdc91b093", - "name": "awscli2-2.17.42", + "locked_url": "https://github.com/flox/nixpkgs?rev=46e634be05ce9dc6d4db8e664515ba10b78151ae", + "name": "awscli2-2.26.4", "pname": "awscli2", - "rev": "30439d93eb8b19861ccbe3e581abf97bdc91b093", - "rev_count": 684846, - "rev_date": "2024-09-23T20:13:18Z", - "scrape_date": "2024-09-27T03:18:01Z", + "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", + "rev_count": 791944, + "rev_date": "2025-04-29T12:35:57Z", + "scrape_date": "2025-04-30T04:38:30.170099Z", "stabilities": [ "unstable" ], "unfree": false, - "version": "2.17.42", + "version": "2.26.4", "outputs_to_install": [ "out" ], "outputs": { - "dist": "/nix/store/38iakdr6w5jxpawafq8svygcpyakmcmd-awscli2-2.17.42-dist", - "out": "/nix/store/77hg7nmwxi6lyd2vm5v2gimlf1pi9xfd-awscli2-2.17.42" + "dist": "/nix/store/b83jnihkplbxdnmwml86lzr95hj0c23f-awscli2-2.26.4-dist", + "out": "/nix/store/6lgnl2xs5gq7c2y6girysws7dv412118-awscli2-2.26.4" }, "system": "aarch64-linux", "group": "toplevel", @@ -223,28 +216,28 @@ { "attr_path": "awscli2", "broken": false, - "derivation": "/nix/store/in6zvxb1h5bjy7dhacnzj6lrq33blzz5-awscli2-2.17.42.drv", + "derivation": "/nix/store/ly1wd5xkxidb2wbja4gwd77kxqa2in7z-awscli2-2.26.4.drv", "description": "Unified tool to manage your AWS services", "install_id": "aws", "license": "Apache-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=30439d93eb8b19861ccbe3e581abf97bdc91b093", - "name": "awscli2-2.17.42", + "locked_url": "https://github.com/flox/nixpkgs?rev=46e634be05ce9dc6d4db8e664515ba10b78151ae", + "name": "awscli2-2.26.4", "pname": "awscli2", - "rev": "30439d93eb8b19861ccbe3e581abf97bdc91b093", - "rev_count": 684846, - "rev_date": "2024-09-23T20:13:18Z", - "scrape_date": "2024-09-27T03:18:01Z", + "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", + "rev_count": 791944, + "rev_date": "2025-04-29T12:35:57Z", + "scrape_date": "2025-04-30T04:56:06.626675Z", "stabilities": [ "unstable" ], "unfree": false, - "version": "2.17.42", + "version": "2.26.4", "outputs_to_install": [ "out" ], "outputs": { - "dist": "/nix/store/5cnykka5d6p6r67f5k4iy3405mx4n76n-awscli2-2.17.42-dist", - "out": "/nix/store/plmhhai86mbrdj5wbjdifynjcy15f62j-awscli2-2.17.42" + "dist": "/nix/store/hjql7931iny3jd6fmwsd7p9y7zi7kp1r-awscli2-2.26.4-dist", + "out": "/nix/store/x15d44f2vrmvfk7l8dwr0zxw27n1wdil-awscli2-2.26.4" }, "system": "x86_64-darwin", "group": "toplevel", @@ -253,28 +246,28 @@ { "attr_path": "awscli2", "broken": false, - "derivation": "/nix/store/6rlyl21xvavphpzcyhnvyc46h49akqc1-awscli2-2.17.42.drv", + "derivation": "/nix/store/pfm0a3dk0yqvg9sbcb860mrjk1grqg1l-awscli2-2.26.4.drv", "description": "Unified tool to manage your AWS services", "install_id": "aws", "license": "Apache-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=30439d93eb8b19861ccbe3e581abf97bdc91b093", - "name": "awscli2-2.17.42", + "locked_url": "https://github.com/flox/nixpkgs?rev=46e634be05ce9dc6d4db8e664515ba10b78151ae", + "name": "awscli2-2.26.4", "pname": "awscli2", - "rev": "30439d93eb8b19861ccbe3e581abf97bdc91b093", - "rev_count": 684846, - "rev_date": "2024-09-23T20:13:18Z", - "scrape_date": "2024-09-27T03:18:01Z", + "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", + "rev_count": 791944, + "rev_date": "2025-04-29T12:35:57Z", + "scrape_date": "2025-04-30T05:20:36.313662Z", "stabilities": [ "unstable" ], "unfree": false, - "version": "2.17.42", + "version": "2.26.4", "outputs_to_install": [ "out" ], "outputs": { - "dist": "/nix/store/k5jkfl737gv619wcsnwavyyrkjhazl58-awscli2-2.17.42-dist", - "out": "/nix/store/wfpm0k836p09zdqbfy5wk013gvjb2di5-awscli2-2.17.42" + "dist": "/nix/store/k5frj41lmhlzbzc81qvpx1j7wmb2dlgy-awscli2-2.26.4-dist", + "out": "/nix/store/36zi9q6qp1gw2fpiqagxhyvi54d44jm3-awscli2-2.26.4" }, "system": "x86_64-linux", "group": "toplevel", @@ -283,28 +276,29 @@ { "attr_path": "nodejs", "broken": false, - "derivation": "/nix/store/ynhixqy7ih4sjpww3y7ra64fn3s92y6j-nodejs-20.17.0.drv", + "derivation": "/nix/store/5cwk9l1iwpwcisih5ll7mc2i6w42y05m-nodejs-22.14.0.drv", "description": "Event-driven I/O framework for the V8 JavaScript engine", "install_id": "aws_cdk_dependency_nodejs", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=30439d93eb8b19861ccbe3e581abf97bdc91b093", - "name": "nodejs-20.17.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=46e634be05ce9dc6d4db8e664515ba10b78151ae", + "name": "nodejs-22.14.0", "pname": "nodejs", - "rev": "30439d93eb8b19861ccbe3e581abf97bdc91b093", - "rev_count": 684846, - "rev_date": "2024-09-23T20:13:18Z", - "scrape_date": "2024-09-27T03:18:01Z", + "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", + "rev_count": 791944, + "rev_date": "2025-04-29T12:35:57Z", + "scrape_date": "2025-04-30T04:19:48.077100Z", "stabilities": [ "unstable" ], "unfree": false, - "version": "20.17.0", + "version": "22.14.0", "outputs_to_install": [ "out" ], "outputs": { - "libv8": "/nix/store/baf3p9zf8dn2arp6wjkdi3v0g2xgfd6y-nodejs-20.17.0-libv8", - "out": "/nix/store/hxl1k8qgmrm1vfq5f419iv4wybz9szqq-nodejs-20.17.0" + "dev": "/nix/store/zbr4fi11j897pa9jikqpviz57kagvizv-nodejs-22.14.0-dev", + "libv8": "/nix/store/9rp5sb2nb5549qqax4v6ly4glixjm6d5-nodejs-22.14.0-libv8", + "out": "/nix/store/2ribxb3gi87gj4331m6k0ydn0z90zfi7-nodejs-22.14.0" }, "system": "aarch64-darwin", "group": "toplevel", @@ -313,28 +307,29 @@ { "attr_path": "nodejs", "broken": false, - "derivation": "/nix/store/fr04z10588nlfmms64ask1g6nvg48vk1-nodejs-20.17.0.drv", + "derivation": "/nix/store/nyhl0yyi565hhjyrmfispr5hn7ngi5wm-nodejs-22.14.0.drv", "description": "Event-driven I/O framework for the V8 JavaScript engine", "install_id": "aws_cdk_dependency_nodejs", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=30439d93eb8b19861ccbe3e581abf97bdc91b093", - "name": "nodejs-20.17.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=46e634be05ce9dc6d4db8e664515ba10b78151ae", + "name": "nodejs-22.14.0", "pname": "nodejs", - "rev": "30439d93eb8b19861ccbe3e581abf97bdc91b093", - "rev_count": 684846, - "rev_date": "2024-09-23T20:13:18Z", - "scrape_date": "2024-09-27T03:18:01Z", + "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", + "rev_count": 791944, + "rev_date": "2025-04-29T12:35:57Z", + "scrape_date": "2025-04-30T04:38:40.847966Z", "stabilities": [ "unstable" ], "unfree": false, - "version": "20.17.0", + "version": "22.14.0", "outputs_to_install": [ "out" ], "outputs": { - "libv8": "/nix/store/0c57mzp5bqf0pp4a0pdj8wynphsgi92c-nodejs-20.17.0-libv8", - "out": "/nix/store/vc64zpxndmp3xh9699yb2vpbl81pxbk0-nodejs-20.17.0" + "dev": "/nix/store/b975kpw4xq9l4m90qs8gmgvvdblh76hx-nodejs-22.14.0-dev", + "libv8": "/nix/store/spb7cz129wvcq4m236y28p7lai5pfxdc-nodejs-22.14.0-libv8", + "out": "/nix/store/hcblf8qj655kfvnfr5l6py7559w0mp78-nodejs-22.14.0" }, "system": "aarch64-linux", "group": "toplevel", @@ -343,28 +338,29 @@ { "attr_path": "nodejs", "broken": false, - "derivation": "/nix/store/pmw8kl5dckr1zfb4ny27v6gjk9aa9nrp-nodejs-20.17.0.drv", + "derivation": "/nix/store/wrmqrzz9hf83k8hc3jpym5gaw8p5wsgp-nodejs-22.14.0.drv", "description": "Event-driven I/O framework for the V8 JavaScript engine", "install_id": "aws_cdk_dependency_nodejs", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=30439d93eb8b19861ccbe3e581abf97bdc91b093", - "name": "nodejs-20.17.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=46e634be05ce9dc6d4db8e664515ba10b78151ae", + "name": "nodejs-22.14.0", "pname": "nodejs", - "rev": "30439d93eb8b19861ccbe3e581abf97bdc91b093", - "rev_count": 684846, - "rev_date": "2024-09-23T20:13:18Z", - "scrape_date": "2024-09-27T03:18:01Z", + "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", + "rev_count": 791944, + "rev_date": "2025-04-29T12:35:57Z", + "scrape_date": "2025-04-30T04:56:09.879350Z", "stabilities": [ "unstable" ], "unfree": false, - "version": "20.17.0", + "version": "22.14.0", "outputs_to_install": [ "out" ], "outputs": { - "libv8": "/nix/store/n4xvswmgb3ql2440bkl8xk4i3b11w46x-nodejs-20.17.0-libv8", - "out": "/nix/store/lgyrki1i0205nwh51c1h22bhl95x0nyd-nodejs-20.17.0" + "dev": "/nix/store/ip5m8y2wj2cw44r1gh6yc7718qxsjphp-nodejs-22.14.0-dev", + "libv8": "/nix/store/mmyh4261jrk7i9wylz6pjrp1rllvpfvs-nodejs-22.14.0-libv8", + "out": "/nix/store/v0hpyc6r6qdwvydvgybn51jvajxqxz9f-nodejs-22.14.0" }, "system": "x86_64-darwin", "group": "toplevel", @@ -373,28 +369,29 @@ { "attr_path": "nodejs", "broken": false, - "derivation": "/nix/store/3hxn26fh3cpz4rnx3lcwm5cb0vg15rzk-nodejs-20.17.0.drv", + "derivation": "/nix/store/lvmx1yi282jmc8y01zz05vac8h554h34-nodejs-22.14.0.drv", "description": "Event-driven I/O framework for the V8 JavaScript engine", "install_id": "aws_cdk_dependency_nodejs", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=30439d93eb8b19861ccbe3e581abf97bdc91b093", - "name": "nodejs-20.17.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=46e634be05ce9dc6d4db8e664515ba10b78151ae", + "name": "nodejs-22.14.0", "pname": "nodejs", - "rev": "30439d93eb8b19861ccbe3e581abf97bdc91b093", - "rev_count": 684846, - "rev_date": "2024-09-23T20:13:18Z", - "scrape_date": "2024-09-27T03:18:01Z", + "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", + "rev_count": 791944, + "rev_date": "2025-04-29T12:35:57Z", + "scrape_date": "2025-04-30T05:20:49.336914Z", "stabilities": [ "unstable" ], "unfree": false, - "version": "20.17.0", + "version": "22.14.0", "outputs_to_install": [ "out" ], "outputs": { - "libv8": "/nix/store/bsqha32xvv1j20bwkhr2wsnclk4qsi3a-nodejs-20.17.0-libv8", - "out": "/nix/store/w78sh036dyn14f29w8za9ni9syrmwm3q-nodejs-20.17.0" + "dev": "/nix/store/pyhz87g4xnb88rh372p7xxls49hivh57-nodejs-22.14.0-dev", + "libv8": "/nix/store/ac2187x84ggp1vpxnw4y81xy3caqz77s-nodejs-22.14.0-libv8", + "out": "/nix/store/5z0wi8qwah6y9cv3na0fgjzbk9ihh1pz-nodejs-22.14.0" }, "system": "x86_64-linux", "group": "toplevel", @@ -403,27 +400,27 @@ { "attr_path": "typescript", "broken": false, - "derivation": "/nix/store/67kdwa8xhxk0n7h5kk20kwa9shbvrc6q-typescript-5.6.2.drv", + "derivation": "/nix/store/dij24lymx74jslmwmfn2xb6kchf32xfn-typescript-5.8.2.drv", "description": "Superset of JavaScript that compiles to clean JavaScript output", "install_id": "aws_cdk_dependency_ts", "license": "Apache-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=30439d93eb8b19861ccbe3e581abf97bdc91b093", - "name": "typescript-5.6.2", + "locked_url": "https://github.com/flox/nixpkgs?rev=46e634be05ce9dc6d4db8e664515ba10b78151ae", + "name": "typescript-5.8.2", "pname": "typescript", - "rev": "30439d93eb8b19861ccbe3e581abf97bdc91b093", - "rev_count": 684846, - "rev_date": "2024-09-23T20:13:18Z", - "scrape_date": "2024-09-27T03:18:01Z", + "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", + "rev_count": 791944, + "rev_date": "2025-04-29T12:35:57Z", + "scrape_date": "2025-04-30T04:20:36.677314Z", "stabilities": [ "unstable" ], "unfree": false, - "version": "5.6.2", + "version": "5.8.2", "outputs_to_install": [ "out" ], "outputs": { - "out": "/nix/store/z9c43i05b9s5hhx64c7krw2b19v7zq52-typescript-5.6.2" + "out": "/nix/store/z5rynsf0zfw7kj0jpd83367nmjwmbzpv-typescript-5.8.2" }, "system": "aarch64-darwin", "group": "toplevel", @@ -432,27 +429,27 @@ { "attr_path": "typescript", "broken": false, - "derivation": "/nix/store/vsck6n79slhcxhqnrnzrgw4098h3xhji-typescript-5.6.2.drv", + "derivation": "/nix/store/i7qddg1chhp7hj9c7mh08ddmp83aya4h-typescript-5.8.2.drv", "description": "Superset of JavaScript that compiles to clean JavaScript output", "install_id": "aws_cdk_dependency_ts", "license": "Apache-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=30439d93eb8b19861ccbe3e581abf97bdc91b093", - "name": "typescript-5.6.2", + "locked_url": "https://github.com/flox/nixpkgs?rev=46e634be05ce9dc6d4db8e664515ba10b78151ae", + "name": "typescript-5.8.2", "pname": "typescript", - "rev": "30439d93eb8b19861ccbe3e581abf97bdc91b093", - "rev_count": 684846, - "rev_date": "2024-09-23T20:13:18Z", - "scrape_date": "2024-09-27T03:18:01Z", + "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", + "rev_count": 791944, + "rev_date": "2025-04-29T12:35:57Z", + "scrape_date": "2025-04-30T04:39:51.934119Z", "stabilities": [ "unstable" ], "unfree": false, - "version": "5.6.2", + "version": "5.8.2", "outputs_to_install": [ "out" ], "outputs": { - "out": "/nix/store/8piryavaffxlmn4mx0ii4l55xr4i02gr-typescript-5.6.2" + "out": "/nix/store/x56m8s70wfglk9yfcj5aiyhkq818zfsg-typescript-5.8.2" }, "system": "aarch64-linux", "group": "toplevel", @@ -461,27 +458,27 @@ { "attr_path": "typescript", "broken": false, - "derivation": "/nix/store/ak7y49kr5c31dfvsxx0i6rq58n2flwxh-typescript-5.6.2.drv", + "derivation": "/nix/store/81fa8ixd87qqfa03x167pknbbxn1m7ls-typescript-5.8.2.drv", "description": "Superset of JavaScript that compiles to clean JavaScript output", "install_id": "aws_cdk_dependency_ts", "license": "Apache-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=30439d93eb8b19861ccbe3e581abf97bdc91b093", - "name": "typescript-5.6.2", + "locked_url": "https://github.com/flox/nixpkgs?rev=46e634be05ce9dc6d4db8e664515ba10b78151ae", + "name": "typescript-5.8.2", "pname": "typescript", - "rev": "30439d93eb8b19861ccbe3e581abf97bdc91b093", - "rev_count": 684846, - "rev_date": "2024-09-23T20:13:18Z", - "scrape_date": "2024-09-27T03:18:01Z", + "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", + "rev_count": 791944, + "rev_date": "2025-04-29T12:35:57Z", + "scrape_date": "2025-04-30T04:56:58.330780Z", "stabilities": [ "unstable" ], "unfree": false, - "version": "5.6.2", + "version": "5.8.2", "outputs_to_install": [ "out" ], "outputs": { - "out": "/nix/store/70912xcd1qvhsm48vs4s0jicx7v3p8af-typescript-5.6.2" + "out": "/nix/store/h047nnjylx53pld04hmj1n93550f6gx9-typescript-5.8.2" }, "system": "x86_64-darwin", "group": "toplevel", @@ -490,27 +487,27 @@ { "attr_path": "typescript", "broken": false, - "derivation": "/nix/store/dc4prkg5l5jb2g5wih5w4vx99qxwgrrs-typescript-5.6.2.drv", + "derivation": "/nix/store/mrl4fkpiaqb8w0y9mnsh469lh8a9ymg3-typescript-5.8.2.drv", "description": "Superset of JavaScript that compiles to clean JavaScript output", "install_id": "aws_cdk_dependency_ts", "license": "Apache-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=30439d93eb8b19861ccbe3e581abf97bdc91b093", - "name": "typescript-5.6.2", + "locked_url": "https://github.com/flox/nixpkgs?rev=46e634be05ce9dc6d4db8e664515ba10b78151ae", + "name": "typescript-5.8.2", "pname": "typescript", - "rev": "30439d93eb8b19861ccbe3e581abf97bdc91b093", - "rev_count": 684846, - "rev_date": "2024-09-23T20:13:18Z", - "scrape_date": "2024-09-27T03:18:01Z", + "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", + "rev_count": 791944, + "rev_date": "2025-04-29T12:35:57Z", + "scrape_date": "2025-04-30T05:22:08.034483Z", "stabilities": [ "unstable" ], "unfree": false, - "version": "5.6.2", + "version": "5.8.2", "outputs_to_install": [ "out" ], "outputs": { - "out": "/nix/store/29d2fcjcmh4bdizqw1q4mjs0rw7qwrn0-typescript-5.6.2" + "out": "/nix/store/ik5rvpn6yxr67j55bjjlp1nl9z88429r-typescript-5.8.2" }, "system": "x86_64-linux", "group": "toplevel", @@ -519,17 +516,17 @@ { "attr_path": "jq", "broken": false, - "derivation": "/nix/store/54vripjg2szw4n8yb2mprg1q0yfg0a97-jq-1.7.1.drv", + "derivation": "/nix/store/kysqbgfgwgifws19mgz09d4044rzl03f-jq-1.7.1.drv", "description": "Lightweight and flexible command-line JSON processor", "install_id": "jq", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=30439d93eb8b19861ccbe3e581abf97bdc91b093", + "locked_url": "https://github.com/flox/nixpkgs?rev=46e634be05ce9dc6d4db8e664515ba10b78151ae", "name": "jq-1.7.1", "pname": "jq", - "rev": "30439d93eb8b19861ccbe3e581abf97bdc91b093", - "rev_count": 684846, - "rev_date": "2024-09-23T20:13:18Z", - "scrape_date": "2024-09-27T03:18:01Z", + "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", + "rev_count": 791944, + "rev_date": "2025-04-29T12:35:57Z", + "scrape_date": "2025-04-30T04:19:46.122177Z", "stabilities": [ "unstable" ], @@ -540,12 +537,11 @@ "man" ], "outputs": { - "bin": "/nix/store/9h78n0xjxgjmmb37bi8ca6wyikx357fn-jq-1.7.1-bin", - "dev": "/nix/store/87lmnqwvgrbr4mymv790ysnp1fp9dbvc-jq-1.7.1-dev", - "doc": "/nix/store/dgrfyris3jajhimxw0p5qwpmdwsz0k6m-jq-1.7.1-doc", - "lib": "/nix/store/1xx96kscxipvqg02hg5zhkc3p6jg8dax-jq-1.7.1-lib", - "man": "/nix/store/gxakkni5fxplsxkhlpd1y39z848r9w1k-jq-1.7.1-man", - "out": "/nix/store/49pvp5zyzs3kqafdrvl5l8zrr5gxg2ha-jq-1.7.1" + "bin": "/nix/store/d0r880glv6pvpxibssrcl2v7v4sqijfx-jq-1.7.1-bin", + "dev": "/nix/store/d3w37gvgsapsh612vyy0b0lnjq81bhhd-jq-1.7.1-dev", + "doc": "/nix/store/31mydlnw005lpaslc5yqgmxy5mfhzs98-jq-1.7.1-doc", + "man": "/nix/store/51dbhjrpi3dnj3jv9npjk1wvqcjfpz2n-jq-1.7.1-man", + "out": "/nix/store/kd68ckkv7lqnfb46rk1746mhig0hhpl5-jq-1.7.1" }, "system": "aarch64-darwin", "group": "toplevel", @@ -554,17 +550,17 @@ { "attr_path": "jq", "broken": false, - "derivation": "/nix/store/04m8x3cyjrssj00mnfc9qijzvyhaf881-jq-1.7.1.drv", + "derivation": "/nix/store/mf49wmr7dzwax8vncr8gs77lgnajaarx-jq-1.7.1.drv", "description": "Lightweight and flexible command-line JSON processor", "install_id": "jq", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=30439d93eb8b19861ccbe3e581abf97bdc91b093", + "locked_url": "https://github.com/flox/nixpkgs?rev=46e634be05ce9dc6d4db8e664515ba10b78151ae", "name": "jq-1.7.1", "pname": "jq", - "rev": "30439d93eb8b19861ccbe3e581abf97bdc91b093", - "rev_count": 684846, - "rev_date": "2024-09-23T20:13:18Z", - "scrape_date": "2024-09-27T03:18:01Z", + "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", + "rev_count": 791944, + "rev_date": "2025-04-29T12:35:57Z", + "scrape_date": "2025-04-30T04:38:33.055358Z", "stabilities": [ "unstable" ], @@ -575,12 +571,11 @@ "man" ], "outputs": { - "bin": "/nix/store/d53sa7n91q32bj4n3d8yfih66w0cnybk-jq-1.7.1-bin", - "dev": "/nix/store/xwy0g4wfzibz2hv9gnrcmg4hncncg0gx-jq-1.7.1-dev", - "doc": "/nix/store/3scw7wdaz3mnigbqpir7yd81lfx4vb4a-jq-1.7.1-doc", - "lib": "/nix/store/ffrivwacr1y18qq3fyk5gqz4h99hncza-jq-1.7.1-lib", - "man": "/nix/store/m2q5jyh2ifvyy71054kvdq12bq1kny0q-jq-1.7.1-man", - "out": "/nix/store/hsrxl3njwwhi8zcbdrradmzdhf8q8b2c-jq-1.7.1" + "bin": "/nix/store/k8if483b70jz7k45v7r3zgpwx600slaz-jq-1.7.1-bin", + "dev": "/nix/store/l89ym36dx7cr6mxlgxlgzdg9wpi3sfn1-jq-1.7.1-dev", + "doc": "/nix/store/cy1fhm3bshrpa32ld7vv354hwgd4nxlf-jq-1.7.1-doc", + "man": "/nix/store/857krxj0db5bri4z9gks0hfgw6bzv9wg-jq-1.7.1-man", + "out": "/nix/store/vdigqrk4rsyy21wkmcw32np2wg33iq7l-jq-1.7.1" }, "system": "aarch64-linux", "group": "toplevel", @@ -589,17 +584,17 @@ { "attr_path": "jq", "broken": false, - "derivation": "/nix/store/8qnc0ms6sqy7ia66mm4547dn51lqg53r-jq-1.7.1.drv", + "derivation": "/nix/store/h2pw48h5vwkabjrvq7ff08y6gdfl7dqw-jq-1.7.1.drv", "description": "Lightweight and flexible command-line JSON processor", "install_id": "jq", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=30439d93eb8b19861ccbe3e581abf97bdc91b093", + "locked_url": "https://github.com/flox/nixpkgs?rev=46e634be05ce9dc6d4db8e664515ba10b78151ae", "name": "jq-1.7.1", "pname": "jq", - "rev": "30439d93eb8b19861ccbe3e581abf97bdc91b093", - "rev_count": 684846, - "rev_date": "2024-09-23T20:13:18Z", - "scrape_date": "2024-09-27T03:18:01Z", + "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", + "rev_count": 791944, + "rev_date": "2025-04-29T12:35:57Z", + "scrape_date": "2025-04-30T04:56:07.931549Z", "stabilities": [ "unstable" ], @@ -610,12 +605,11 @@ "man" ], "outputs": { - "bin": "/nix/store/vprdq5a3dk284s7blbxgaciqn90j5vgy-jq-1.7.1-bin", - "dev": "/nix/store/mz2z5g6xiji538wkxclm7hxjqcji8kj0-jq-1.7.1-dev", - "doc": "/nix/store/71lp09p1kdcdhk4xvs97w31ik0sjjimr-jq-1.7.1-doc", - "lib": "/nix/store/0lg1w92gx3aam7b1h311ssmjq63p3kd4-jq-1.7.1-lib", - "man": "/nix/store/b7g1b4d9bkrii1l08h7jm42m346rch3n-jq-1.7.1-man", - "out": "/nix/store/m8y9qhibbih84af3vqs4wl72k9dpyiyj-jq-1.7.1" + "bin": "/nix/store/d7scikakdayw3xjw8pm55q8j146qwxwd-jq-1.7.1-bin", + "dev": "/nix/store/h80zvna5sb5klg3q56l22rw2cac35pzm-jq-1.7.1-dev", + "doc": "/nix/store/v51p982wn5hrjvfprr5h5f7ffakj86iq-jq-1.7.1-doc", + "man": "/nix/store/giabrd1iawzw666w62n4dw7czs6k580i-jq-1.7.1-man", + "out": "/nix/store/8fd0arnj59yvp8clz9a14p61dhchp8kk-jq-1.7.1" }, "system": "x86_64-darwin", "group": "toplevel", @@ -624,17 +618,17 @@ { "attr_path": "jq", "broken": false, - "derivation": "/nix/store/njpha4fwzqa2f4zv4fzwbz4vnmq4d6rc-jq-1.7.1.drv", + "derivation": "/nix/store/pv893078nkchi2flra5cfdl04fv2qzcz-jq-1.7.1.drv", "description": "Lightweight and flexible command-line JSON processor", "install_id": "jq", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=30439d93eb8b19861ccbe3e581abf97bdc91b093", + "locked_url": "https://github.com/flox/nixpkgs?rev=46e634be05ce9dc6d4db8e664515ba10b78151ae", "name": "jq-1.7.1", "pname": "jq", - "rev": "30439d93eb8b19861ccbe3e581abf97bdc91b093", - "rev_count": 684846, - "rev_date": "2024-09-23T20:13:18Z", - "scrape_date": "2024-09-27T03:18:01Z", + "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", + "rev_count": 791944, + "rev_date": "2025-04-29T12:35:57Z", + "scrape_date": "2025-04-30T05:20:39.598806Z", "stabilities": [ "unstable" ], @@ -645,12 +639,11 @@ "man" ], "outputs": { - "bin": "/nix/store/x8jzsy0y1zk30mcvav2rh6lrw1gbzzy3-jq-1.7.1-bin", - "dev": "/nix/store/04ca5xwvasz6s3jg0k7njz6rzi0d225w-jq-1.7.1-dev", - "doc": "/nix/store/yfc9bsy7n9k66238s3cy7vw3cw1l1ap8-jq-1.7.1-doc", - "lib": "/nix/store/n2vk1zmfzy726amnpr96jibk4zaya6qq-jq-1.7.1-lib", - "man": "/nix/store/0jpj9xq83imjwhldsrmiyn8pp8wjazp5-jq-1.7.1-man", - "out": "/nix/store/7sy12xv4fwii421d920jxqx63c0ai3w3-jq-1.7.1" + "bin": "/nix/store/3nawavhk39z9p0l87vdpbiarvyirzv01-jq-1.7.1-bin", + "dev": "/nix/store/g53bmywyp08ppwfcr8i0hilpz2v7vby7-jq-1.7.1-dev", + "doc": "/nix/store/hf32jpvi9pg899kz18iwnlw57w83kq78-jq-1.7.1-doc", + "man": "/nix/store/9ym6hfn6id819vmjgffn9lxk980q6xbm-jq-1.7.1-man", + "out": "/nix/store/2y5zfakdg53hqbac3rnvb72vmllpn9zf-jq-1.7.1" }, "system": "x86_64-linux", "group": "toplevel", diff --git a/.flox/env/manifest.toml b/.flox/env/manifest.toml index 91bb563..33a5f0e 100644 --- a/.flox/env/manifest.toml +++ b/.flox/env/manifest.toml @@ -1,30 +1,26 @@ version = 1 # Visit flox.dev/docs/concepts/manifest/ [install] # (List of packages installed in environment) -aws = { pkg-path = "awscli2", version = "2.17.42" } -aws_cdk_dependency_ts = { pkg-path = "typescript", version = "5.6.2" } -aws_cdk_dependency_nodejs = { pkg-path = "nodejs", version = "20.17.0" } #(v20 = LTS, long term support) -cdk = { pkg-path = "nodePackages.aws-cdk", version = "2.159.1", pkg-group = "aws-cdk" } +aws = { pkg-path = "awscli2", version = "2.26.4" } +aws_cdk_dependency_ts = { pkg-path = "typescript", version = "5.8.2" } +aws_cdk_dependency_nodejs = { pkg-path = "nodejs", version = "22.14.0" } #(v22 = LTS, long term support) +cdk = { pkg-path = "nodePackages.aws-cdk", version = "2.1004.0", pkg-group = "aws-cdk" } jq = { pkg-path = "jq", version = "1.7.1" } # Note: pkg-group isolates dependencies to prevent conflict # Note: a cdk specific NixOS pgk bug exists https://github.com/NixOS/nixpkgs/issues/236151 # cdk init app --language typescript # ^-- fails, workaround--v -# npx aws-cdk@2.133.0 init app --language typescript +# npx aws-cdk@2.1004.0 init app --language typescript # If there's ever a need to update pinned versions of above dependencies in the future # cd to the root of this git repo (where /.flox/ exists) # Then run the following commands to see available versions # flox show awscli2 -# flox show nodejs # flox show typescript +# flox show nodejs # flox show nodePackages.aws-cdk # flox show jq ################################################################################## -# ^-- While you're at it try to update the node.js packages -# npm install cdk@2.159.1 -# npm audit fix -################################################################################## diff --git a/cdk.context.json b/cdk.context.json index e50f032..06d5d4e 100644 --- a/cdk.context.json +++ b/cdk.context.json @@ -5,95 +5,10 @@ "ca-central-1d" ], "ami:account=905418347382:filters.image-type.0=machine:filters.name.0=fck-nat-al2023-*-arm64-ebs:filters.state.0=available:owners.0=568608671756:region=ca-central-1": "ami-045d3a84706b8feeb", - "vpc-provider:account=905418347382:filter.isDefault=false:filter.tag:Name=lower-envs-vpc:region=ca-central-1:returnAsymmetricSubnets=true": { - "vpcId": "vpc-0f79593fc83da0b82", - "vpcCidrBlock": "10.99.0.0/16", - "ownerAccountId": "905418347382", - "availabilityZones": [], - "subnetGroups": [ - { - "name": "Private", - "type": "Private", - "subnets": [ - { - "subnetId": "subnet-05cc9568f5db856f2", - "cidr": "10.99.32.0/19", - "availabilityZone": "ca-central-1a", - "routeTableId": "rtb-02272b1ca2d8ad552" - }, - { - "subnetId": "subnet-0cc493d68888b47ca", - "cidr": "10.99.64.0/19", - "availabilityZone": "ca-central-1b", - "routeTableId": "rtb-0cdc4e773fe8cfc21" - }, - { - "subnetId": "subnet-00e3b357b26ccd5d0", - "cidr": "10.99.96.0/19", - "availabilityZone": "ca-central-1d", - "routeTableId": "rtb-08efc0ea91ffab31d" - } - ] - }, - { - "name": "Public", - "type": "Public", - "subnets": [ - { - "subnetId": "subnet-071ff1ffe0c3dd854", - "cidr": "10.99.0.0/23", - "availabilityZone": "ca-central-1a", - "routeTableId": "rtb-0981fc558ab2004b2" - }, - { - "subnetId": "subnet-0ade167af81ba5fc2", - "cidr": "10.99.2.0/23", - "availabilityZone": "ca-central-1b", - "routeTableId": "rtb-069a562753013d2c2" - }, - { - "subnetId": "subnet-060c40cdf18bc529e", - "cidr": "10.99.4.0/23", - "availabilityZone": "ca-central-1d", - "routeTableId": "rtb-05f3c194a62bd6451" - } - ] - } - ] - }, "key-provider:account=905418347382:aliasName=alias/eks/lower-envs:region=ca-central-1": { "keyId": "2c710e12-cad3-42f5-a92f-e7d7980aebea" }, - "vpc-provider:account=905418347382:filter.isDefault=false:filter.tag:Name=lower-envs-vpc:filter.vpc-id=vpc-0f79593fc83da0b82:region=ca-central-1:returnAsymmetricSubnets=true": { - "vpcId": "vpc-0f79593fc83da0b82", - "vpcCidrBlock": "10.99.0.0/16", - "ownerAccountId": "905418347382", - "availabilityZones": [], - "subnetGroups": [ - { - "name": "Private", - "type": "Private", - "subnets": [ - { - "subnetId": "subnet-05cc9568f5db856f2", - "cidr": "10.99.32.0/19", - "availabilityZone": "ca-central-1a", - "routeTableId": "rtb-010c7b9bdb7d1d475" - }, - { - "subnetId": "subnet-0cc493d68888b47ca", - "cidr": "10.99.64.0/19", - "availabilityZone": "ca-central-1b", - "routeTableId": "rtb-010c7b9bdb7d1d475" - }, - { - "subnetId": "subnet-00e3b357b26ccd5d0", - "cidr": "10.99.96.0/19", - "availabilityZone": "ca-central-1d", - "routeTableId": "rtb-010c7b9bdb7d1d475" - } - ] - } - ] - } + "acknowledged-issue-numbers": [ + 32775 + ] } diff --git a/docs/04_Prerequisites/Recommended_Long-Term_Setup.md b/docs/04_Prerequisites/Recommended_Long-Term_Setup.md index 39c3006..addc021 100644 --- a/docs/04_Prerequisites/Recommended_Long-Term_Setup.md +++ b/docs/04_Prerequisites/Recommended_Long-Term_Setup.md @@ -70,21 +70,14 @@ cat /etc/os-release uname -r # ^-- The above commands say we're on an rpm based x86_64 distro of Amazon Linux 2023 -wget https://downloads.flox.dev/by-env/stable/rpm/flox-1.3.2.x86_64-linux.rpm +wget https://downloads.flox.dev/by-env/stable/rpm/flox-1.4.1.x86_64-linux.rpm sudo rpm --import https://downloads.flox.dev/by-env/stable/rpm/flox-archive-keyring.asc sudo rpm -ivh ~/flox-*.rpm flox --version rm ~/flox-*.rpm -# 1.3.2 +# 1.4.1 ``` -4. Install node.js modules -```shell -# flox [flox.dev] -# [admin@workstation:~/easyeks] -npm install -# ^-- will populate a /node_modules/, based on package.json -``` -------------------------------------------------------------------------------------------------------------- @@ -107,7 +100,7 @@ npm install ## Phase 3: Git Repo Setup ### Phase 3A: Git Repo Setup (Generic Overview) -2. Gain the ability to clone a private git repo (here's an example based on private github) +1. Gain the ability to clone a private git repo (here's an example based on private github) 1. create a classic readonly GitHub Token to clone private doit repo * https://github.com/settings/tokens/new * note = test <-- note this value represents TOKEN_NAME @@ -119,7 +112,7 @@ npm install `ghp_jwiZWtzLWNkay1xdWlja3N0YXJ0CgwMjQtMD` ### Phase 3B: Git Repo Setup (Detailed Instructions for Private GitHub Repo) -3. Copy Paste Commands (one line at a time) to clone private github repo from AWS Cloud Shell +1. Copy Paste Commands (one line at a time) to clone private github repo from AWS Cloud Shell ```shell # [ec2-user@ec2-bastion-with-iam-admin-role:~] sudo dnf update -y @@ -130,19 +123,22 @@ export TOKEN_PASS="ghp_jwiZWtzLWNkay1xdWlja3N0YXJ0CgwMjQtMD" cd ~ git clone https://$TOKEN_NAME:$TOKEN_PASS@github.com/doitintl/easyeks.git cd ~/easyeks +cdk context --clear +# ^-- resets cdk.context.json to {} +# (Technically not necessary, done for the sake of housekeeping / keeping things tidy.) ``` -------------------------------------------------------------------------------------------------------------- ## Phase 4: CDK Bootstrap -5. Change current working directory to the repo, which has a .flox folder +1. Change current working directory to the repo, which has a .flox folder ```shell -#[ec2-user@ec2-bastion-with-iam-admin-role:~]# -ls -lah ~/easyeks | grep .flox +#[ec2-user@ec2-bastion-with-iam-admin-role:~/easyeks]# cd ~/easyeks +ls -lah | grep .flox ``` -6. Run flox activate in that folder +1. Run flox activate in that folder ```shell #[ec2-user@ec2-bastion-with-iam-admin-role:~/easyeks]# flox activate @@ -156,13 +152,15 @@ cdk --version npm --version ``` -* Bootstrap cdk +1. Install node.js modules ```shell -export AWS_REGION=ca-central-1 -cdk bootstrap +# flox [flox.dev] +# [admin@workstation:~/easyeks] +npm install +# ^-- will populate a /node_modules/, based on package.json ``` -7. CDK Bootstrap and Deploy +1. Bootstrap CDK ```shell #[ec2-user@ec2-bastion-with-iam-admin-role:~/easyeks]# aws sts get-caller-identity @@ -171,8 +169,16 @@ export AWS_REGION="ca-central-1" # ^-- recommend add a region to ~/.bashrc, or `aws configure` export AWS_ACCOUNT_ID=$(aws sts get-caller-identity | jq .Account | tr -d '\"') echo $AWS_ACCOUNT_ID -cdk bootstrap aws://$AWS_ACCOUNT_ID/ca-central-1 +time cdk bootstrap aws://$AWS_ACCOUNT_ID/$AWS_REGION # ^-- bootstraps the region, after which you'll see a Stack name of "CDKToolkit" # in AWS Web GUI Console > CloudFormation > Stacks (for that region) # Note you can only deploy into region's that have been bootstrapped ``` + +1. Deploy cdk stacks +```shell +#[ec2-user@ec2-bastion-with-iam-admin-role:~/easyeks]# +time cdk list +time cdk deploy lower-envs-vpc +time cdk deploy dev1-eks +``` diff --git a/package-lock.json b/package-lock.json index 2cb8747..faa66f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,23 +9,21 @@ "version": "0.1.0", "dependencies": { "@aws-cdk/lambda-layer-kubectl-v31": "^2.0.3", - "aws-cdk": "^2.1013.0", + "aws-cdk-lib": "2.193.0", "cdk-eks-karpenter": "^1.0.16", "cdk-fck-nat": "^1.5.6", "constructs": "^10.0.0", - "i": "^0.3.7", - "npm": "^10.8.1", - "source-map-support": "^0.5.21", "sync-request-curl": "^3.1.0" }, "bin": { "cdk-main": "bin/cdk-main.js" }, "devDependencies": { - "@types/jest": "^29.5.12", - "@types/node": "^20.16.10", + "@types/jest": "^29.5.14", + "@types/node": "^22.7.9", + "aws-cdk": "^2.1004.0", "jest": "^29.7.0", - "ts-jest": "^29.1.2", + "ts-jest": "^29.2.5", "ts-node": "^10.9.2", "typescript": "~5.8.2" } @@ -48,15 +46,13 @@ "version": "2.2.230", "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.230.tgz", "integrity": "sha512-kUnhKIYu42hqBa6a8x2/7o29ObpJgjYGQy28lZDq9awXyvpR62I2bRxrNKNR3uFUQz3ySuT9JXhGHhuZPdbnFw==", - "license": "Apache-2.0", - "peer": true + "license": "Apache-2.0" }, "node_modules/@aws-cdk/asset-node-proxy-agent-v6": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.1.0.tgz", "integrity": "sha512-7bY3J8GCVxLupn/kNmpPc5VJz8grx+4RKfnnJiO1LG+uxkZfANZG3RMHhE+qQxxwkyQ9/MfPtTpf748UhR425A==", - "license": "Apache-2.0", - "peer": true + "license": "Apache-2.0" }, "node_modules/@aws-cdk/cloud-assembly-schema": { "version": "41.2.0", @@ -67,7 +63,6 @@ "semver" ], "license": "Apache-2.0", - "peer": true, "dependencies": { "jsonschema": "~1.4.1", "semver": "^7.7.1" @@ -80,7 +75,6 @@ "version": "1.4.1", "inBundle": true, "license": "MIT", - "peer": true, "engines": { "node": "*" } @@ -89,7 +83,6 @@ "version": "7.7.1", "inBundle": true, "license": "ISC", - "peer": true, "bin": { "semver": "bin/semver.js" }, @@ -1364,13 +1357,13 @@ } }, "node_modules/@types/node": { - "version": "20.17.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.10.tgz", - "integrity": "sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==", + "version": "22.15.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.3.tgz", + "integrity": "sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "undici-types": "~6.21.0" } }, "node_modules/@types/stack-utils": { @@ -1546,6 +1539,7 @@ "version": "2.1013.0", "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.1013.0.tgz", "integrity": "sha512-cbq4cOoEIZueMWenGgfI4RujS+AQ9GaMCTlW/3CnvEIhMD8j/tgZx7PTtgMuvwYrRoEeb/wTxgLPgUd5FhsoHA==", + "dev": true, "license": "Apache-2.0", "bin": { "cdk": "bin/cdk" @@ -1558,9 +1552,9 @@ } }, "node_modules/aws-cdk-lib": { - "version": "2.191.0", - "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.191.0.tgz", - "integrity": "sha512-MrD937EsVCzT6ZvPr8u82TBVBYdcrvNSx/z8lZ8XvviFDgr6bA2yBWQ6CI+OqiPi/Z+OWizjkqYIb43Lovjixw==", + "version": "2.193.0", + "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.193.0.tgz", + "integrity": "sha512-Bsf11FM85+s9jSAT8JfDNlrSz6LF3Xa2eSNOyMLcXNopI7eVXP1U6opRHK0waaZGLmQfOwsbSp/9XRMKikkazg==", "bundleDependencies": [ "@balena/dockerignore", "case", @@ -1575,7 +1569,6 @@ "mime-types" ], "license": "Apache-2.0", - "peer": true, "dependencies": { "@aws-cdk/asset-awscli-v1": "^2.2.229", "@aws-cdk/asset-node-proxy-agent-v6": "^2.1.0", @@ -1602,14 +1595,12 @@ "node_modules/aws-cdk-lib/node_modules/@balena/dockerignore": { "version": "1.0.2", "inBundle": true, - "license": "Apache-2.0", - "peer": true + "license": "Apache-2.0" }, "node_modules/aws-cdk-lib/node_modules/ajv": { "version": "8.17.1", "inBundle": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -1625,7 +1616,6 @@ "version": "5.0.1", "inBundle": true, "license": "MIT", - "peer": true, "engines": { "node": ">=8" } @@ -1634,7 +1624,6 @@ "version": "4.3.0", "inBundle": true, "license": "MIT", - "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -1649,7 +1638,6 @@ "version": "2.0.0", "inBundle": true, "license": "MIT", - "peer": true, "engines": { "node": ">=8" } @@ -1657,14 +1645,12 @@ "node_modules/aws-cdk-lib/node_modules/balanced-match": { "version": "1.0.2", "inBundle": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/aws-cdk-lib/node_modules/brace-expansion": { "version": "1.1.11", "inBundle": true, "license": "MIT", - "peer": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1674,7 +1660,6 @@ "version": "1.6.3", "inBundle": true, "license": "(MIT OR GPL-3.0-or-later)", - "peer": true, "engines": { "node": ">= 0.8.0" } @@ -1683,7 +1668,6 @@ "version": "2.0.1", "inBundle": true, "license": "MIT", - "peer": true, "dependencies": { "color-name": "~1.1.4" }, @@ -1694,26 +1678,22 @@ "node_modules/aws-cdk-lib/node_modules/color-name": { "version": "1.1.4", "inBundle": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/aws-cdk-lib/node_modules/concat-map": { "version": "0.0.1", "inBundle": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/aws-cdk-lib/node_modules/emoji-regex": { "version": "8.0.0", "inBundle": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/aws-cdk-lib/node_modules/fast-deep-equal": { "version": "3.1.3", "inBundle": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/aws-cdk-lib/node_modules/fast-uri": { "version": "3.0.6", @@ -1728,14 +1708,12 @@ } ], "inBundle": true, - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/aws-cdk-lib/node_modules/fs-extra": { "version": "11.3.0", "inBundle": true, "license": "MIT", - "peer": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -1748,14 +1726,12 @@ "node_modules/aws-cdk-lib/node_modules/graceful-fs": { "version": "4.2.11", "inBundle": true, - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/aws-cdk-lib/node_modules/ignore": { "version": "5.3.2", "inBundle": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 4" } @@ -1764,7 +1740,6 @@ "version": "3.0.0", "inBundle": true, "license": "MIT", - "peer": true, "engines": { "node": ">=8" } @@ -1772,14 +1747,12 @@ "node_modules/aws-cdk-lib/node_modules/json-schema-traverse": { "version": "1.0.0", "inBundle": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/aws-cdk-lib/node_modules/jsonfile": { "version": "6.1.0", "inBundle": true, "license": "MIT", - "peer": true, "dependencies": { "universalify": "^2.0.0" }, @@ -1791,7 +1764,6 @@ "version": "1.5.0", "inBundle": true, "license": "MIT", - "peer": true, "engines": { "node": "*" } @@ -1799,14 +1771,12 @@ "node_modules/aws-cdk-lib/node_modules/lodash.truncate": { "version": "4.4.2", "inBundle": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/aws-cdk-lib/node_modules/mime-db": { "version": "1.52.0", "inBundle": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.6" } @@ -1815,7 +1785,6 @@ "version": "2.1.35", "inBundle": true, "license": "MIT", - "peer": true, "dependencies": { "mime-db": "1.52.0" }, @@ -1827,7 +1796,6 @@ "version": "3.1.2", "inBundle": true, "license": "ISC", - "peer": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1839,7 +1807,6 @@ "version": "2.3.1", "inBundle": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6" } @@ -1848,7 +1815,6 @@ "version": "2.0.2", "inBundle": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -1857,7 +1823,6 @@ "version": "7.7.1", "inBundle": true, "license": "ISC", - "peer": true, "bin": { "semver": "bin/semver.js" }, @@ -1869,7 +1834,6 @@ "version": "4.0.0", "inBundle": true, "license": "MIT", - "peer": true, "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -1886,7 +1850,6 @@ "version": "4.2.3", "inBundle": true, "license": "MIT", - "peer": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -1900,7 +1863,6 @@ "version": "6.0.1", "inBundle": true, "license": "MIT", - "peer": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -1912,7 +1874,6 @@ "version": "6.9.0", "inBundle": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", @@ -1928,7 +1889,6 @@ "version": "2.0.1", "inBundle": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 10.0.0" } @@ -1937,7 +1897,6 @@ "version": "1.10.2", "inBundle": true, "license": "ISC", - "peer": true, "engines": { "node": ">= 6" } @@ -2157,6 +2116,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, "license": "MIT" }, "node_modules/cacache": { @@ -2932,6 +2892,7 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -3140,14 +3101,6 @@ "node": ">=10.17.0" } }, - "node_modules/i": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/i/-/i-0.3.7.tgz", - "integrity": "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q==", - "engines": { - "node": ">=0.4" - } - }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -4800,166 +4753,6 @@ "node": ">=0.10.0" } }, - "node_modules/npm": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/npm/-/npm-10.9.2.tgz", - "integrity": "sha512-iriPEPIkoMYUy3F6f3wwSZAU93E0Eg6cHwIR6jzzOXWSy+SD/rOODEs74cVONHKSx2obXtuUoyidVEhISrisgQ==", - "bundleDependencies": [ - "@isaacs/string-locale-compare", - "@npmcli/arborist", - "@npmcli/config", - "@npmcli/fs", - "@npmcli/map-workspaces", - "@npmcli/package-json", - "@npmcli/promise-spawn", - "@npmcli/redact", - "@npmcli/run-script", - "@sigstore/tuf", - "abbrev", - "archy", - "cacache", - "chalk", - "ci-info", - "cli-columns", - "fastest-levenshtein", - "fs-minipass", - "glob", - "graceful-fs", - "hosted-git-info", - "ini", - "init-package-json", - "is-cidr", - "json-parse-even-better-errors", - "libnpmaccess", - "libnpmdiff", - "libnpmexec", - "libnpmfund", - "libnpmhook", - "libnpmorg", - "libnpmpack", - "libnpmpublish", - "libnpmsearch", - "libnpmteam", - "libnpmversion", - "make-fetch-happen", - "minimatch", - "minipass", - "minipass-pipeline", - "ms", - "node-gyp", - "nopt", - "normalize-package-data", - "npm-audit-report", - "npm-install-checks", - "npm-package-arg", - "npm-pick-manifest", - "npm-profile", - "npm-registry-fetch", - "npm-user-validate", - "p-map", - "pacote", - "parse-conflict-json", - "proc-log", - "qrcode-terminal", - "read", - "semver", - "spdx-expression-parse", - "ssri", - "supports-color", - "tar", - "text-table", - "tiny-relative-date", - "treeverse", - "validate-npm-package-name", - "which", - "write-file-atomic" - ], - "license": "Artistic-2.0", - "workspaces": [ - "docs", - "smoke-tests", - "mock-globals", - "mock-registry", - "workspaces/*" - ], - "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^8.0.0", - "@npmcli/config": "^9.0.0", - "@npmcli/fs": "^4.0.0", - "@npmcli/map-workspaces": "^4.0.2", - "@npmcli/package-json": "^6.1.0", - "@npmcli/promise-spawn": "^8.0.2", - "@npmcli/redact": "^3.0.0", - "@npmcli/run-script": "^9.0.1", - "@sigstore/tuf": "^3.0.0", - "abbrev": "^3.0.0", - "archy": "~1.0.0", - "cacache": "^19.0.1", - "chalk": "^5.3.0", - "ci-info": "^4.1.0", - "cli-columns": "^4.0.0", - "fastest-levenshtein": "^1.0.16", - "fs-minipass": "^3.0.3", - "glob": "^10.4.5", - "graceful-fs": "^4.2.11", - "hosted-git-info": "^8.0.2", - "ini": "^5.0.0", - "init-package-json": "^7.0.2", - "is-cidr": "^5.1.0", - "json-parse-even-better-errors": "^4.0.0", - "libnpmaccess": "^9.0.0", - "libnpmdiff": "^7.0.0", - "libnpmexec": "^9.0.0", - "libnpmfund": "^6.0.0", - "libnpmhook": "^11.0.0", - "libnpmorg": "^7.0.0", - "libnpmpack": "^8.0.0", - "libnpmpublish": "^10.0.1", - "libnpmsearch": "^8.0.0", - "libnpmteam": "^7.0.0", - "libnpmversion": "^7.0.0", - "make-fetch-happen": "^14.0.3", - "minimatch": "^9.0.5", - "minipass": "^7.1.1", - "minipass-pipeline": "^1.2.4", - "ms": "^2.1.2", - "node-gyp": "^11.0.0", - "nopt": "^8.0.0", - "normalize-package-data": "^7.0.0", - "npm-audit-report": "^6.0.0", - "npm-install-checks": "^7.1.1", - "npm-package-arg": "^12.0.0", - "npm-pick-manifest": "^10.0.0", - "npm-profile": "^11.0.1", - "npm-registry-fetch": "^18.0.2", - "npm-user-validate": "^3.0.0", - "p-map": "^4.0.0", - "pacote": "^19.0.1", - "parse-conflict-json": "^4.0.0", - "proc-log": "^5.0.0", - "qrcode-terminal": "^0.12.0", - "read": "^4.0.0", - "semver": "^7.6.3", - "spdx-expression-parse": "^4.0.0", - "ssri": "^12.0.0", - "supports-color": "^9.4.0", - "tar": "^6.2.1", - "text-table": "~0.2.0", - "tiny-relative-date": "^1.3.0", - "treeverse": "^3.0.0", - "validate-npm-package-name": "^6.0.0", - "which": "^5.0.0", - "write-file-atomic": "^6.0.0" - }, - "bin": { - "npm": "bin/npm-cli.js", - "npx": "bin/npx-cli.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -4973,2582 +4766,197 @@ "node": ">=8" } }, - "node_modules/npm/node_modules/@isaacs/cliui": { - "version": "8.0.2", - "inBundle": true, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", "license": "ISC", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" } }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "inBundle": true, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "inBundle": true, - "license": "MIT" + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { + "node_modules/onetime": { "version": "5.1.2", - "inBundle": true, + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=12" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "inBundle": true, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", - "inBundle": true, - "license": "ISC", + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", "dependencies": { - "minipass": "^7.0.4" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/@isaacs/string-locale-compare": { - "version": "1.1.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/@npmcli/agent": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.3" + "p-try": "^2.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "8.0.0", - "inBundle": true, - "license": "ISC", + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "license": "MIT", "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^4.0.0", - "@npmcli/installed-package-contents": "^3.0.0", - "@npmcli/map-workspaces": "^4.0.1", - "@npmcli/metavuln-calculator": "^8.0.0", - "@npmcli/name-from-folder": "^3.0.0", - "@npmcli/node-gyp": "^4.0.0", - "@npmcli/package-json": "^6.0.1", - "@npmcli/query": "^4.0.0", - "@npmcli/redact": "^3.0.0", - "@npmcli/run-script": "^9.0.1", - "bin-links": "^5.0.0", - "cacache": "^19.0.1", - "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^8.0.0", - "json-parse-even-better-errors": "^4.0.0", - "json-stringify-nice": "^1.1.4", - "lru-cache": "^10.2.2", - "minimatch": "^9.0.4", - "nopt": "^8.0.0", - "npm-install-checks": "^7.1.0", - "npm-package-arg": "^12.0.0", - "npm-pick-manifest": "^10.0.0", - "npm-registry-fetch": "^18.0.1", - "pacote": "^19.0.0", - "parse-conflict-json": "^4.0.0", - "proc-log": "^5.0.0", - "proggy": "^3.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^3.0.1", - "read-package-json-fast": "^4.0.0", - "semver": "^7.3.7", - "ssri": "^12.0.0", - "treeverse": "^3.0.0", - "walk-up-path": "^3.0.1" + "aggregate-error": "^3.0.0" }, - "bin": { - "arborist": "bin/index.js" + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=6" } }, - "node_modules/npm/node_modules/@npmcli/config": { - "version": "9.0.0", - "inBundle": true, - "license": "ISC", + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", "dependencies": { - "@npmcli/map-workspaces": "^4.0.1", - "@npmcli/package-json": "^6.0.1", - "ci-info": "^4.0.0", - "ini": "^5.0.0", - "nopt": "^8.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "walk-up-path": "^3.0.1" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/@npmcli/fs": { + "node_modules/path-exists": { "version": "4.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/@npmcli/git": { - "version": "6.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/promise-spawn": "^8.0.0", - "ini": "^5.0.0", - "lru-cache": "^10.0.1", - "npm-pick-manifest": "^10.0.0", - "proc-log": "^5.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^5.0.0" - }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=0.10.0" } }, - "node_modules/npm/node_modules/@npmcli/installed-package-contents": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^4.0.0", - "npm-normalize-package-bin": "^4.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" - }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "4.0.2", - "inBundle": true, - "license": "ISC", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", "dependencies": { - "@npmcli/name-from-folder": "^3.0.0", - "@npmcli/package-json": "^6.0.0", - "glob": "^10.2.2", - "minimatch": "^9.0.0" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "8.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "cacache": "^19.0.0", - "json-parse-even-better-errors": "^4.0.0", - "pacote": "^20.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote": { - "version": "20.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^6.0.0", - "@npmcli/installed-package-contents": "^3.0.0", - "@npmcli/package-json": "^6.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "@npmcli/run-script": "^9.0.0", - "cacache": "^19.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^12.0.0", - "npm-packlist": "^9.0.0", - "npm-pick-manifest": "^10.0.0", - "npm-registry-fetch": "^18.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^3.0.0", - "ssri": "^12.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "bin/index.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/@npmcli/name-from-folder": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/@npmcli/node-gyp": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "6.1.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^6.0.0", - "glob": "^10.2.2", - "hosted-git-info": "^8.0.0", - "json-parse-even-better-errors": "^4.0.0", - "normalize-package-data": "^7.0.0", - "proc-log": "^5.0.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/@npmcli/promise-spawn": { - "version": "8.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "which": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/@npmcli/query": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^6.1.2" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/@npmcli/redact": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "9.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/node-gyp": "^4.0.0", - "@npmcli/package-json": "^6.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "node-gyp": "^11.0.0", - "proc-log": "^5.0.0", - "which": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/npm/node_modules/@sigstore/protobuf-specs": { - "version": "0.3.2", - "inBundle": true, - "license": "Apache-2.0", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@sigstore/tuf": { - "version": "3.0.0", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2", - "tuf-js": "^3.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/@tufjs/canonical-json": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/abbrev": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/agent-base": { - "version": "7.1.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/npm/node_modules/aggregate-error": { - "version": "3.1.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/ansi-regex": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/ansi-styles": { - "version": "6.2.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/npm/node_modules/aproba": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/archy": { - "version": "1.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/balanced-match": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/bin-links": { - "version": "5.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "cmd-shim": "^7.0.0", - "npm-normalize-package-bin": "^4.0.0", - "proc-log": "^5.0.0", - "read-cmd-shim": "^5.0.0", - "write-file-atomic": "^6.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/binary-extensions": { - "version": "2.3.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/brace-expansion": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/npm/node_modules/cacache": { - "version": "19.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^4.0.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^7.0.2", - "ssri": "^12.0.0", - "tar": "^7.4.3", - "unique-filename": "^4.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/cacache/node_modules/chownr": { - "version": "3.0.0", - "inBundle": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/npm/node_modules/cacache/node_modules/minizlib": { - "version": "3.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/npm/node_modules/cacache/node_modules/mkdirp": { - "version": "3.0.1", - "inBundle": true, - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/cacache/node_modules/p-map": { - "version": "7.0.2", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/cacache/node_modules/tar": { - "version": "7.4.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/npm/node_modules/cacache/node_modules/yallist": { - "version": "5.0.0", - "inBundle": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/npm/node_modules/chalk": { - "version": "5.3.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/npm/node_modules/chownr": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/ci-info": { - "version": "4.1.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/cidr-regex": { - "version": "4.1.1", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "ip-regex": "^5.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/npm/node_modules/clean-stack": { - "version": "2.2.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/cli-columns": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/cmd-shim": { - "version": "7.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/color-convert": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/npm/node_modules/color-name": { - "version": "1.1.4", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/common-ancestor-path": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/cross-spawn": { - "version": "7.0.6", - "inBundle": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/cssesc": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm/node_modules/debug": { - "version": "4.3.7", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/npm/node_modules/diff": { - "version": "5.2.0", - "inBundle": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/npm/node_modules/eastasianwidth": { - "version": "0.2.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/emoji-regex": { - "version": "8.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/encoding": { - "version": "0.1.13", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/npm/node_modules/env-paths": { - "version": "2.2.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/err-code": { - "version": "2.0.3", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/exponential-backoff": { - "version": "3.1.1", - "inBundle": true, - "license": "Apache-2.0" - }, - "node_modules/npm/node_modules/fastest-levenshtein": { - "version": "1.0.16", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/npm/node_modules/foreground-child": { - "version": "3.3.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/fs-minipass": { - "version": "3.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/glob": { - "version": "10.4.5", - "inBundle": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/graceful-fs": { - "version": "4.2.11", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/hosted-git-info": { - "version": "8.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/http-cache-semantics": { - "version": "4.1.1", - "inBundle": true, - "license": "BSD-2-Clause" - }, - "node_modules/npm/node_modules/http-proxy-agent": { - "version": "7.0.2", - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/npm/node_modules/https-proxy-agent": { - "version": "7.0.5", - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/npm/node_modules/iconv-lite": { - "version": "0.6.3", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm/node_modules/ignore-walk": { - "version": "7.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/imurmurhash": { - "version": "0.1.4", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/npm/node_modules/indent-string": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/ini": { - "version": "5.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/init-package-json": { - "version": "7.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/package-json": "^6.0.0", - "npm-package-arg": "^12.0.0", - "promzard": "^2.0.0", - "read": "^4.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^6.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/ip-address": { - "version": "9.0.5", - "inBundle": true, - "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/npm/node_modules/ip-regex": { - "version": "5.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/is-cidr": { - "version": "5.1.0", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "cidr-regex": "^4.1.1" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/npm/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/isexe": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/jackspeak": { - "version": "3.4.3", - "inBundle": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/npm/node_modules/jsbn": { - "version": "1.1.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/json-parse-even-better-errors": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/json-stringify-nice": { - "version": "1.1.4", - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/jsonparse": { - "version": "1.3.1", - "engines": [ - "node >= 0.2.0" - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/just-diff": { - "version": "6.0.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/just-diff-apply": { - "version": "5.5.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/libnpmaccess": { - "version": "9.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-package-arg": "^12.0.0", - "npm-registry-fetch": "^18.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/libnpmdiff": { - "version": "7.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^8.0.0", - "@npmcli/installed-package-contents": "^3.0.0", - "binary-extensions": "^2.3.0", - "diff": "^5.1.0", - "minimatch": "^9.0.4", - "npm-package-arg": "^12.0.0", - "pacote": "^19.0.0", - "tar": "^6.2.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/libnpmexec": { - "version": "9.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^8.0.0", - "@npmcli/run-script": "^9.0.1", - "ci-info": "^4.0.0", - "npm-package-arg": "^12.0.0", - "pacote": "^19.0.0", - "proc-log": "^5.0.0", - "read": "^4.0.0", - "read-package-json-fast": "^4.0.0", - "semver": "^7.3.7", - "walk-up-path": "^3.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/libnpmfund": { - "version": "6.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^8.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/libnpmhook": { - "version": "11.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^18.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/libnpmorg": { - "version": "7.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^18.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/libnpmpack": { - "version": "8.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^8.0.0", - "@npmcli/run-script": "^9.0.1", - "npm-package-arg": "^12.0.0", - "pacote": "^19.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/libnpmpublish": { - "version": "10.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "ci-info": "^4.0.0", - "normalize-package-data": "^7.0.0", - "npm-package-arg": "^12.0.0", - "npm-registry-fetch": "^18.0.1", - "proc-log": "^5.0.0", - "semver": "^7.3.7", - "sigstore": "^3.0.0", - "ssri": "^12.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/libnpmsearch": { - "version": "8.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-registry-fetch": "^18.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/libnpmteam": { - "version": "7.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^18.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/libnpmversion": { - "version": "7.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^6.0.1", - "@npmcli/run-script": "^9.0.1", - "json-parse-even-better-errors": "^4.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/lru-cache": { - "version": "10.4.3", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/make-fetch-happen": { - "version": "14.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/agent": "^3.0.0", - "cacache": "^19.0.1", - "http-cache-semantics": "^4.1.1", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^1.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "ssri": "^12.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator": { - "version": "1.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/npm/node_modules/minimatch": { - "version": "9.0.5", - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/minipass": { - "version": "7.1.2", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/npm/node_modules/minipass-collect": { - "version": "2.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/npm/node_modules/minipass-fetch": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^3.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/npm/node_modules/minipass-fetch/node_modules/minizlib": { - "version": "3.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/npm/node_modules/minipass-flush": { - "version": "1.0.5", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-pipeline": { - "version": "1.2.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-sized": { - "version": "1.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minizlib": { - "version": "2.1.2", - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/mkdirp": { - "version": "1.0.4", - "inBundle": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/ms": { - "version": "2.1.3", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/mute-stream": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/node-gyp": { - "version": "11.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^14.0.3", - "nopt": "^8.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "tar": "^7.4.3", - "which": "^5.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/chownr": { - "version": "3.0.0", - "inBundle": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/minizlib": { - "version": "3.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/mkdirp": { - "version": "3.0.1", - "inBundle": true, - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/tar": { - "version": "7.4.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/yallist": { - "version": "5.0.0", - "inBundle": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/npm/node_modules/nopt": { - "version": "8.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "abbrev": "^2.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/nopt/node_modules/abbrev": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/normalize-package-data": { - "version": "7.0.0", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^8.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/npm-audit-report": { - "version": "6.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/npm-bundled": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^4.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/npm-install-checks": { - "version": "7.1.1", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/npm-normalize-package-bin": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/npm-package-arg": { - "version": "12.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^8.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^6.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/npm-packlist": { - "version": "9.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "ignore-walk": "^7.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/npm-pick-manifest": { - "version": "10.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-install-checks": "^7.1.0", - "npm-normalize-package-bin": "^4.0.0", - "npm-package-arg": "^12.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/npm-profile": { - "version": "11.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-registry-fetch": "^18.0.0", - "proc-log": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "18.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/redact": "^3.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^14.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minizlib": "^3.0.1", - "npm-package-arg": "^12.0.0", - "proc-log": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/npm-registry-fetch/node_modules/minizlib": { - "version": "3.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/npm/node_modules/npm-user-validate": { - "version": "3.0.0", - "inBundle": true, - "license": "BSD-2-Clause", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/p-map": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/package-json-from-dist": { - "version": "1.0.1", - "inBundle": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/npm/node_modules/pacote": { - "version": "19.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^6.0.0", - "@npmcli/installed-package-contents": "^3.0.0", - "@npmcli/package-json": "^6.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "@npmcli/run-script": "^9.0.0", - "cacache": "^19.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^12.0.0", - "npm-packlist": "^9.0.0", - "npm-pick-manifest": "^10.0.0", - "npm-registry-fetch": "^18.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^3.0.0", - "ssri": "^12.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "bin/index.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/parse-conflict-json": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^4.0.0", - "just-diff": "^6.0.0", - "just-diff-apply": "^5.2.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/path-key": { - "version": "3.1.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/path-scurry": { - "version": "1.11.1", - "inBundle": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "inBundle": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm/node_modules/proc-log": { - "version": "5.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/proggy": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/promise-all-reject-late": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/promise-call-limit": { - "version": "3.0.2", - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/promise-inflight": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/promise-retry": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/promzard": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "read": "^4.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/qrcode-terminal": { - "version": "0.12.0", - "inBundle": true, - "bin": { - "qrcode-terminal": "bin/qrcode-terminal.js" - } - }, - "node_modules/npm/node_modules/read": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "mute-stream": "^2.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/read-cmd-shim": { - "version": "5.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/read-package-json-fast": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^4.0.0", - "npm-normalize-package-bin": "^4.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/retry": { - "version": "0.12.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/npm/node_modules/rimraf": { - "version": "5.0.10", - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/safer-buffer": { - "version": "2.1.2", - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/npm/node_modules/semver": { - "version": "7.6.3", - "inBundle": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/shebang-command": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/shebang-regex": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/signal-exit": { - "version": "4.1.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/sigstore": { - "version": "3.0.0", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^3.0.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "@sigstore/sign": "^3.0.0", - "@sigstore/tuf": "^3.0.0", - "@sigstore/verify": "^2.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle": { - "version": "3.0.0", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core": { - "version": "2.0.0", - "inBundle": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign": { - "version": "3.0.0", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^3.0.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "make-fetch-happen": "^14.0.1", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify": { - "version": "2.0.0", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^3.0.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/smart-buffer": { - "version": "4.2.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/npm/node_modules/socks": { - "version": "2.8.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "8.0.4", - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.1", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/npm/node_modules/spdx-correct": { - "version": "3.2.0", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/npm/node_modules/spdx-exceptions": { - "version": "2.5.0", - "inBundle": true, - "license": "CC-BY-3.0" - }, - "node_modules/npm/node_modules/spdx-expression-parse": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.20", - "inBundle": true, - "license": "CC0-1.0" - }, - "node_modules/npm/node_modules/sprintf-js": { - "version": "1.1.3", - "inBundle": true, - "license": "BSD-3-Clause" - }, - "node_modules/npm/node_modules/ssri": { - "version": "12.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/string-width": { - "version": "4.2.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/strip-ansi": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/supports-color": { - "version": "9.4.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/npm/node_modules/tar": { - "version": "6.2.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/text-table": { - "version": "0.2.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/tiny-relative-date": { - "version": "1.3.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/treeverse": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/tuf-js": { - "version": "3.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "@tufjs/models": "3.0.1", - "debug": "^4.3.6", - "make-fetch-happen": "^14.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models": { - "version": "3.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.5" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/unique-filename": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/unique-slug": { - "version": "5.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/util-deprecate": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/validate-npm-package-license": { - "version": "3.0.4", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "6.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/walk-up-path": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/which": { - "version": "5.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/which/node_modules/isexe": { - "version": "3.1.1", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/npm/node_modules/wrap-ansi": { - "version": "8.1.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/npm/node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.1.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "9.2.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { - "version": "5.1.2", - "inBundle": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/npm/node_modules/write-file-atomic": { - "version": "6.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/yallist": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "deprecated": "This package is no longer supported.", - "license": "ISC", - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "license": "BlueOak-1.0.0" - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { @@ -7928,21 +5336,12 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -8324,9 +5723,9 @@ } }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, diff --git a/package.json b/package.json index 1033e1c..39b8a93 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "@types/node": "^22.7.9", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "aws-cdk": "2.1013.0", + "aws-cdk": "^2.1004.0", "ts-node": "^10.9.2", "typescript": "~5.8.2" }, From 9431351de274c1d8f477c8f3e20ffd62819a90a1 Mon Sep 17 00:00:00 2001 From: Chris McGrath <42470403+neoakris@users.noreply.github.com> Date: Tue, 6 May 2025 12:30:58 -0400 Subject: [PATCH 5/5] documentation improvements --- README.md | 6 +- .../Project_Goals.md | 2 +- docs/README.md | 133 +++++++++++++----- 3 files changed, 98 insertions(+), 43 deletions(-) diff --git a/README.md b/README.md index 39d33ed..d4043a3 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@ ## What is Easy EKS? An opinionated bundling of automation & Infrastructure as code that aims to: -1. Make it easy to provision EKS clusters that are production ready by default. -2. Maintain a heavily standardized opinionated set of IaC, which makes automation easier. -3. Apply a helm like design pattern to AWS CDK. +1. Make it easy to provision EKS clusters that are nearly production ready by default. +2. Maintain a heavily standardized opinionated set of IaC, which makes automation maintainable. +3. Apply useful design patterns from Helm and Kustomize to IaC based on AWS CDK. ## What is the current status of Easy EKS? Pre-Alpha diff --git a/docs/09_Project_Goals_and_Target_Audience/Project_Goals.md b/docs/09_Project_Goals_and_Target_Audience/Project_Goals.md index f732fa4..7794052 100644 --- a/docs/09_Project_Goals_and_Target_Audience/Project_Goals.md +++ b/docs/09_Project_Goals_and_Target_Audience/Project_Goals.md @@ -1,5 +1,5 @@ # Easy EKS's Project Goals -Easy EKS = EKS + Apps + Config + Infrastructure as Code + Automation + Docs. +Easy EKS = EKS + Kube Apps + Config + Infrastructure as Code + Automation + Docs. ## 1. Make a standardized baseline distribution of EKS * Standardization is a prerequisite for: diff --git a/docs/README.md b/docs/README.md index 3ef40bb..d025d3d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,34 +1,110 @@ # Easy EKS (Pre-Alpha) -## What problem does this solve? +## What is Easy EKS? +**Here are 3 useful answers to that question based on different perspectives:** +(Each answer is clarified further in later sections on this page.) +1. **A Solution:** + Setting up and learning how to implement EKS according to best practices is often said to be hard, + so much so that it crosses the threshold of being problematically difficult and a barrier to + adoption. From this perspective Easy EKS can be seen as a solution to EKS's difficulty problem. +2. **Summarized Technical Description:** + An opionated bundling of automation & IaC (Infrastructure as Code) that aims to: + 1. Make it easy to provision EKS clusters that are nearly production ready by default. + 2. Maintain a heavily standardized opinionated set of IaC, which makes automation maintainable. + 3. Apply useful design patterns from Helm and Kustomize to IaC based on AWS CDK. +3. **General Description:** + A user experience optimized approach to EKS, that aims to make using EKS `simpler`, `accessible`, + and `enjoyable`. + +------------------------------------------------------------------------------------------------------- + +### What problem does Easy EKS solve? * EKS is a double-edged sword: * Good: * It simplifies the setup of a Kubernetes Cluster on AWS. * It works great after it's set up. - * Bad: - * Set up is left to end users who have a high risk of setting it up poorly, taking months, or - both. + * Bad: + * EKS by itself is far from being production ready by default, EKS is more like the virtual + equivalent of receiving a custom PC build project, while wanting a push button server. * It has a terrible FTUX (first time user experience) and OOTB (out of the box) UX (user - experience). -* Easy EKS is a solution to EKS's problems related to its slow and flawed set up process, FTUX, and - OOTB UX. + experience), because end users are left to figure out how to re-invent a production ready setup, + and there's a high risk that they'll set it up poorly, need months to figure it out, or both. +* Easy EKS can be seen as a solution to EKS's problems related to its slow and flawed set up process, + FTUX, and OOTB UX: * https://www.reddit.com/r/aws/comments/qpw36d/aws_eks_rant/ * https://www.reddit.com/r/devops/comments/y5am95/why_is_eks_and_aws_in_general_so_much_more/ * https://matduggan.com/aws-eks/ -## What is Easy EKS? -* Easy EKS is a user experience optimized approach to EKS, where using it becomes `simpler`, `accessible`, and `enjoyable`. +------------------------------------------------------------------------------------------------------- + +### What Specific Technical Benefits does Easy EKS Offer? +* **Currently Available in Pre-Alpha:** + 1. `Useful elements of Helm's design pattern are used:` + * A nice feature of Helm over say Kustomize, Terraform, or common CDK/Pulumi design patterns, is + that it's intuitively clear what parts of the IaC are fine to change vs shouldn't be changed. + * Configuration input parameters have sensible defaults, but can be overridden. + * Some IaC complexity can be hidden, which allows users to focus on well organized config, which + in turn significantly lowers cognitive overhead and improves ease of mangement and accessibility. + * Supports the deployment of Multiple Instances: It's very easy to have multiple clusters per + environment (dev1-eks, dev2-eks, etc.) + * Helm popularized a convention of mixing config values with + [heavy commentary](https://artifacthub.io/packages/helm/prometheus-community/prometheus?modal=values) + which improves accessibility and general user experience, by explaining what a config flag will + do and documenting commented out examples of alternative possible values with correct syntax. + 1. `Useful elements of Kustomize's design pattern are used:` + * Kustomize popularized the [config overlay design pattern](https://kubectl.docs.kubernetes.io/guides/introduction/kustomize/#2-create-variants-using-overlays), + which offers multiple advantages: + * It allows config shared between multiple environments, to be deduplicated which makes it much + easier to avoid unwanted config drift between environments, which improves maintainability. + * It keeps the config well organized, which makes it easier to quickly navigate. + 1. `Two well configured AWS VPCs` + * The VPCs are dualstack(IPv4/v6), and EKS cluster's use IPv6 mode to eliminate problem of running + out of IPs. + * fck-nat: The (f)easible (c)ost (k)onfigurable NAT, is an alternative to AWS's Managed NAT GW, + that's an order of magnitude cheaper. + * lower-envs-vpc defaults to 1 fck-NAT instance + * higher-envs-vpc defaults to 2 fck-NAT instances, and can optionally be set to 3 AWS Managed NAT + GWs. + * node-local-dns-cache and S3 Gateway endpoints are also enabled by default. + 1. `Heavily cost optimized:` + * Easy EKS gives the benefits of EKS's Auto Mode (and more), without Auto Mode's additional costs. + * The baseline costs of a dev cluster is under $100/month. + * EKS control plane cost is $73/month. + * lower-env-vpc's fck-NAT defaults to $3.06/month, and is meant to be shared by multiple clusters. + * 2x t4g.small spot baseline nodes are $10.22/month + * karpenter's lower-envs default config is weighted to prefer spot based ARM bottlerocket nodes. + 1. `UX optimizations:` + * EKS clusters have useful tags. + * Name tags of EC2 instances are nicely organized. + * IAM admins are given EKS viewer access by default for both the EKS web console and kubectl. + * kubectl onboarding is streamlined. + 1. `Production Readiness optimizations:` + * kubernetes secrets stored in etcd get KMS encrypted by default. + * EKS Addons are all installed by default. + * CoreDNS's config is optimized by default in terms of node affinity and autoscaling. + * AWS Load Balancer Controller is installed by default and configured using eks-pod-identity-agent, + which means it doubles as a great IaC reference for pod level IAM rights. + * Karpenter is installed by default and preconfigured to provision spot, on-demand, AMD, or ARM + bottlerocket based worker nodes. +* **Planned for Alpha:** + 1. `The default storage class is preconfigured to provide kms encrypted gp3 ebs volumes.` + 1. `Additional streamlining of kubectl access onboarding` + 1. `Metric Level Observability` + 1. `Log Level Observability` + 1. `Standardize Variable Naming Conventions` ------------------------------------------------------------------------------------------------------- ### Simpler EKS 1. **Deployment and baseline configuration are both automated:** - * `cdk` is used to automate the provisioning of production ready EKS Clusters. -2. **The administrative overhead associated with managing multiple clusters is minimized:** - * A `kustomize inspired` design pattern is used to make the deployment and management over time of multiple clusters much easier. -3. **Complexity is simplified, by shielding the end user engineers from unnecessary complexity that's practical to hide away:** + * `cdk` is used to automate the provisioning of nearly production ready EKS Clusters. +2. **The administrative overhead associated with managing multiple clusters is lower:** + * A `kustomize inspired` design pattern is used to make the deployment and management over time of + multiple clusters much easier. +3. **Complexity is simplified, by shielding the end user engineers from unnecessary complexity that can be practically hidden away:** * A `helm inspired` design pattern to abstract away complexity. - * helm hides complexity in templatized yaml files, and helm values.yaml files, which represent sane default values of input parameters to feed into the templating engine. + * helm hides complexity in templatized yaml files, and helm values.yaml files, which represent + sane default values of input parameters to feed into the templating engine. * Here's an example of how helm allows end uesrs to see a significantly simplified interface: * A 15 line long `kps.helm-values.yaml` file (of values representing overrides of kube-prometheus-stack helm chart's default input parameters) @@ -39,7 +115,8 @@ * /lib/ (a cdk library) * /.flox/ (a recommended, yet optional method of automating dev shell dependencies with `flox activate`) * Easy EKS presents a simplified workflow to end users: - * Edit /config/ (which is an intuitive and simplified end user interface inspired by kustomize and helm values) + * Edit /config/ (which is an intuitive and simplified end user interface inspired by kustomize + and helm values) * `cdk list` * `cdk deploy dev1-eks` @@ -57,7 +134,6 @@ ------------------------------------------------------------------------------------------------------- ### Enjoyable EKS - * User Experience is what makes cars enjoyable products. The same is true for Easy EKS. * Cars have complexity, * But it's the car maker that deals with the complexity. @@ -65,13 +141,13 @@ * It's designed to be intuitive, learning how to drive isn't hard. * Easy EKS has complexity, * But you will be shielded from the majority of the complexity, it's abstrated away where practical. - * `You get to enjoy a turn key, batteries included, production ready user experience`. + * `You get to enjoy a turn key, batteries included, nearly production ready user experience`. * It's designed to be intuitive, and even FTUX (first time user experience) and OUX (onboarding UX) are prioritized to make it easy to learn. * You can enjoy: * Being able to get meaningful work done quick: * Learn the basics within a day. - * Deploy a cluster in under an hour, with a production ready baseline configuration. + * Deploy a cluster in under an hour, with a nearly production ready baseline configuration. * Develop working proficiency in under a week. * Not having to think through engineering toil: * Instead of choices, that make engineer's stress over identifying the best chocie. @@ -86,24 +162,3 @@ * ADR's (Architectural Decision Records) are available to verify reasoning behind all choices. * This isn't just a platform that claims to follow best practices. * It's a platform that includes justifications of why it's practices are best practices. - -------------------------------------------------------------------------------------------------------- - -## Why Easy EKS Exists -| **Basic Functionality you'd expect to see, for normal usage and production readiness:** | **GCP's GKE AutoPilot:**
(a point of reference of what good looks like) | **AWS EKS:**
(The default out of the box user experience is a collection of dumb problems to have) | **Easy EKS**
(Smart solutions to dumb problems that make EKS easier, brought to you by doit.com) | -|-----------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| A well configured VPC | Default VPC ships with Cloud NAT | Default VPC doesn't ship with a NAT GW, and Managed NAT GW is so bad [(link 1)](https://www.lastweekinaws.com/blog/the-aws-managed-nat-gateway-is-unpleasant-and-not-recommended/), that fck-NAT exists [(link 2)](https://fck-nat.dev/stable/). | Ships with fck-NAT (order of magnitude cheaper), and dualstack VPC for IPv6 based EKS, which eliminates potential problem of running out of IPs. | -| Optimized DNS | DNS is optimized by default via Node Local DNS Cache and Cloud DNS | Ships with nothing. A relatively easy install won't be Fault Tolerant, won't have a dns auto-scaler, nor node-local-dns-cache. Figuring out production grade optimizations takes days. | Alpha ships with Node Local DNS Cache, core dns autoscaler, and anti affinity rules for increased fault tolerance.
Planned for Beta: verify/optimize core dns autoscaler's config. | -| Easily populate ~/.kube/config for Kubectl Access | A blue connect button at the top of the Web GUI, shows a command. | Access tends to be a multistep process, so you look up docs for something that should be trivially easy. | When cdk eks blueprints finishes, it outputs a config command. | -| Teammates can easily access to kubectl and Web Console | GCP IAM roles map to GKE's rbac rights by default. | In general, access needs to be explicitly configured per cluster, nuanced limitations make it hard. | Pragmatic workarounds to access limitations are set by default to make access easier. | -| Metric Level Observability | Ships with preconfigured working dashboards | Ships with nothing, figuring out how to set up takes days. | PLANNED (alpha) | -| Log Level Observability | Ships with intuitive centralized logging | Ships with nothing, figuring out how to set up takes days. | PLANNED (alpha) | -| Automatically Provisions storage for stateful workloads | Ships with a preconfigured storageclass | Ships with broken implementation, fixing is relatively easy, but how/why is this not a default functionality baked into the platform? | Ships with KMS Encrypted EBS storageclass | -| Automatically Provision Load Balancers for Ingress | Ships with GKE Ingress Controller and GKE's Gateway API controller | Ships with nothing, and the solution: AWS Load Balancer Controller, is considered a 3rd party add-on, with a complex installation that can take days to figure out. | Ships with AWS Load Balancer Controller | -| Pod Level IAM Identity | Ships with Workload Identity (pod level IAM roles) | Ships with nothing, making it work is relatively easy, seems reasonable to have this be a default baked into the platform. | Ships with Amazon EKS Pod Identity Agent | -| Worker Node Autoscaling | Ships with NAP (Node Auto Provisioner) | Ships with nothing, figuring out how to install cluster autoscaler or karpenter.sh can take days. | Ships with Karpenter.sh (Note: currently an outdated version to avoid compatibility issues, waiting for Karpenter 1.2.x / stable version planned for alpha) | - -------------------------------------------------------------------------------------------------------- - -## How do I get started? -[Check the docs page](/docs)