@firestartr/cli 2.10.0-snapshot-org-secrets-2 → 2.10.0-snapshot-org-secrets-validation-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/index.js CHANGED
@@ -327753,6 +327753,21 @@ function toJson_FirestartrGithubOrganizationSecretSectionSpecSecretsActionsRef(o
327753
327753
  // filter undefined values
327754
327754
  return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
327755
327755
  }
327756
+ /* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
327757
+ /**
327758
+ * Which repositories can access the secret.
327759
+ *
327760
+ * @schema FirestartrGithubOrganizationSecretSectionSpecSecretsActionsVisibility
327761
+ */
327762
+ var FirestartrGithubOrganizationSecretSectionSpecSecretsActionsVisibility;
327763
+ (function (FirestartrGithubOrganizationSecretSectionSpecSecretsActionsVisibility) {
327764
+ /** all */
327765
+ FirestartrGithubOrganizationSecretSectionSpecSecretsActionsVisibility["ALL"] = "all";
327766
+ /** selected */
327767
+ FirestartrGithubOrganizationSecretSectionSpecSecretsActionsVisibility["SELECTED"] = "selected";
327768
+ /** private */
327769
+ FirestartrGithubOrganizationSecretSectionSpecSecretsActionsVisibility["PRIVATE"] = "private";
327770
+ })(FirestartrGithubOrganizationSecretSectionSpecSecretsActionsVisibility || (FirestartrGithubOrganizationSecretSectionSpecSecretsActionsVisibility = {}));
327756
327771
  /**
327757
327772
  * Converts an object of type 'FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesRef' to JSON representation.
327758
327773
  */
@@ -327769,6 +327784,21 @@ function toJson_FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesRe
327769
327784
  // filter undefined values
327770
327785
  return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
327771
327786
  }
327787
+ /* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
327788
+ /**
327789
+ * Which repositories can access the secret.
327790
+ *
327791
+ * @schema FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesVisibility
327792
+ */
327793
+ var FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesVisibility;
327794
+ (function (FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesVisibility) {
327795
+ /** all */
327796
+ FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesVisibility["ALL"] = "all";
327797
+ /** selected */
327798
+ FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesVisibility["SELECTED"] = "selected";
327799
+ /** private */
327800
+ FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesVisibility["PRIVATE"] = "private";
327801
+ })(FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesVisibility || (FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesVisibility = {}));
327772
327802
  /**
327773
327803
  * Converts an object of type 'FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotRef' to JSON representation.
327774
327804
  */
@@ -327785,6 +327815,21 @@ function toJson_FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotRe
327785
327815
  // filter undefined values
327786
327816
  return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
327787
327817
  }
327818
+ /* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
327819
+ /**
327820
+ * Which repositories can access the secret.
327821
+ *
327822
+ * @schema FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotVisibility
327823
+ */
327824
+ var FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotVisibility;
327825
+ (function (FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotVisibility) {
327826
+ /** all */
327827
+ FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotVisibility["ALL"] = "all";
327828
+ /** selected */
327829
+ FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotVisibility["SELECTED"] = "selected";
327830
+ /** private */
327831
+ FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotVisibility["PRIVATE"] = "private";
327832
+ })(FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotVisibility || (FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotVisibility = {}));
327788
327833
  /**
327789
327834
  * Converts an object of type 'FirestartrGithubOrganizationSecretSectionSpecContextBackendRef' to JSON representation.
327790
327835
  */
@@ -327826,20 +327871,6 @@ var FirestartrGithubOrganizationSecretSectionSpecSecretsActionsRefKind;
327826
327871
  /** Secret */
327827
327872
  FirestartrGithubOrganizationSecretSectionSpecSecretsActionsRefKind["SECRET"] = "Secret";
327828
327873
  })(FirestartrGithubOrganizationSecretSectionSpecSecretsActionsRefKind || (FirestartrGithubOrganizationSecretSectionSpecSecretsActionsRefKind = {}));
327829
- /**
327830
- * Which repositories can access the secret.
327831
- *
327832
- * @schema FirestartrGithubOrganizationSecretSectionSpecSecretsActionsVisibility
327833
- */
327834
- var FirestartrGithubOrganizationSecretSectionSpecSecretsActionsVisibility;
327835
- (function (FirestartrGithubOrganizationSecretSectionSpecSecretsActionsVisibility) {
327836
- /** all */
327837
- FirestartrGithubOrganizationSecretSectionSpecSecretsActionsVisibility["ALL"] = "all";
327838
- /** selected */
327839
- FirestartrGithubOrganizationSecretSectionSpecSecretsActionsVisibility["SELECTED"] = "selected";
327840
- /** private */
327841
- FirestartrGithubOrganizationSecretSectionSpecSecretsActionsVisibility["PRIVATE"] = "private";
327842
- })(FirestartrGithubOrganizationSecretSectionSpecSecretsActionsVisibility || (FirestartrGithubOrganizationSecretSectionSpecSecretsActionsVisibility = {}));
327843
327874
  /**
327844
327875
  * The type of Kubernetes resource to reference.
327845
327876
  *
@@ -327850,20 +327881,6 @@ var FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesRefKind;
327850
327881
  /** Secret */
327851
327882
  FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesRefKind["SECRET"] = "Secret";
327852
327883
  })(FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesRefKind || (FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesRefKind = {}));
327853
- /**
327854
- * Which repositories can access the secret.
327855
- *
327856
- * @schema FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesVisibility
327857
- */
327858
- var FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesVisibility;
327859
- (function (FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesVisibility) {
327860
- /** all */
327861
- FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesVisibility["ALL"] = "all";
327862
- /** selected */
327863
- FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesVisibility["SELECTED"] = "selected";
327864
- /** private */
327865
- FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesVisibility["PRIVATE"] = "private";
327866
- })(FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesVisibility || (FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesVisibility = {}));
327867
327884
  /**
327868
327885
  * The type of Kubernetes resource to reference.
327869
327886
  *
@@ -327874,20 +327891,6 @@ var FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotRefKind;
327874
327891
  /** Secret */
327875
327892
  FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotRefKind["SECRET"] = "Secret";
327876
327893
  })(FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotRefKind || (FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotRefKind = {}));
327877
- /**
327878
- * Which repositories can access the secret.
327879
- *
327880
- * @schema FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotVisibility
327881
- */
327882
- var FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotVisibility;
327883
- (function (FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotVisibility) {
327884
- /** all */
327885
- FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotVisibility["ALL"] = "all";
327886
- /** selected */
327887
- FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotVisibility["SELECTED"] = "selected";
327888
- /** private */
327889
- FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotVisibility["PRIVATE"] = "private";
327890
- })(FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotVisibility || (FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotVisibility = {}));
327891
327894
  /**
327892
327895
  * @schema FirestartrGithubOrganizationSecretSectionSpecContextBackendRefKind
327893
327896
  */
@@ -332476,12 +332479,16 @@ function renameVariantCrFiles(outputDir, renderedMap) {
332476
332479
 
332477
332480
  const IS_COMPONENT_CLAIM_REF = new RegExp(/^ComponentClaim-/);
332478
332481
  const IS_TF_WORKSPACE = new RegExp(/^TFWorkspaceClaim-/);
332482
+ const IS_ORG_SETTINGS_CLAIM = new RegExp(/^OrgSettingsClaim-/);
332483
+ const COMPONENT_REF_PATTERN = /^component:(.+)$/;
332479
332484
  function validateSubReferences(renderClaims) {
332480
332485
  for (const ref of Object.keys(renderClaims)) {
332481
332486
  if (IS_COMPONENT_CLAIM_REF.test(ref))
332482
332487
  validateClaimsSecretsRefs(ref, renderClaims);
332483
332488
  else if (IS_TF_WORKSPACE.test(ref))
332484
332489
  validateTFClaimsSecretsRefs(ref, renderClaims);
332490
+ else if (IS_ORG_SETTINGS_CLAIM.test(ref))
332491
+ validateOrgSettingsComponentRefs(ref, renderClaims);
332485
332492
  }
332486
332493
  }
332487
332494
  function validateTFClaimsSecretsRefs(ref, renderClaims) {
@@ -332533,6 +332540,57 @@ function searchSecretKey(secretClaim, key) {
332533
332540
  }
332534
332541
  return found;
332535
332542
  }
332543
+ function validateOrgSettingsComponentRefs(ref, renderClaims) {
332544
+ const claim = renderClaims[ref].claim;
332545
+ validateOrgSecretsSelectedRepositories(claim, renderClaims);
332546
+ validateActionsVariablesSelectedRepositories(claim, renderClaims);
332547
+ }
332548
+ function validateOrgSecretsSelectedRepositories(claim, renderClaims) {
332549
+ const orgSecrets = claim?.providers?.github?.org_secrets;
332550
+ if (!orgSecrets || typeof orgSecrets !== 'object')
332551
+ return;
332552
+ for (const section of ['actions', 'codespaces', 'dependabot']) {
332553
+ const secrets = orgSecrets[section];
332554
+ if (!Array.isArray(secrets))
332555
+ continue;
332556
+ for (const secret of secrets) {
332557
+ if (!secret.selected_repositories)
332558
+ continue;
332559
+ for (const repoRef of secret.selected_repositories) {
332560
+ const match = repoRef.match(COMPONENT_REF_PATTERN);
332561
+ if (!match)
332562
+ continue;
332563
+ const [, componentName] = match;
332564
+ const expectedKey = `ComponentClaim-${componentName}`;
332565
+ if (!renderClaims[expectedKey]) {
332566
+ throw new Error(`CrossReference error: OrgSettingsClaim/${claim.name} references a non-existent component "${componentName}" in org_secrets.${section}.${secret.name}.selected_repositories`);
332567
+ }
332568
+ }
332569
+ }
332570
+ }
332571
+ }
332572
+ function validateActionsVariablesSelectedRepositories(claim, renderClaims) {
332573
+ const actionsVariables = claim?.providers?.github?.actions_variables;
332574
+ if (!Array.isArray(actionsVariables))
332575
+ return;
332576
+ for (const variable of actionsVariables) {
332577
+ if (variable.visibility !== 'selected')
332578
+ continue;
332579
+ const selectedRepos = variable.selected_repositories;
332580
+ if (!Array.isArray(selectedRepos) || selectedRepos.length === 0)
332581
+ continue;
332582
+ for (const ref of selectedRepos) {
332583
+ const match = ref.match(COMPONENT_REF_PATTERN);
332584
+ if (!match)
332585
+ continue;
332586
+ const componentName = match[1];
332587
+ const expectedKey = `ComponentClaim-${componentName}`;
332588
+ if (!renderClaims[expectedKey]) {
332589
+ throw new Error(`CrossReference error: OrgSettingsClaim/${claim.name} references a non-existent component "${componentName}" in actions_variables.${variable.name}.selected_repositories`);
332590
+ }
332591
+ }
332592
+ }
332593
+ }
332536
332594
 
332537
332595
  ;// CONCATENATED MODULE: ../cdk8s_renderer/src/validations/componentPagesPath.ts
332538
332596
  /**
@@ -332585,7 +332643,6 @@ function validateGithubOrgSettingsSingleton(crs) {
332585
332643
  const GITHUB_ORG_VARIABLE_SECTION_KIND = 'FirestartrGithubOrganizationVariableSection';
332586
332644
  const githubOrgVariableSection_FIRESTARTR_CLAIM_REF_ANNOTATION = 'firestartr.dev/claim-ref';
332587
332645
  const githubOrgVariableSection_CLAIM_REF_LABEL = 'claim-ref';
332588
- const COMPONENT_REF_PATTERN = /^component:(.+)$/;
332589
332646
  function githubOrgVariableSection_formatResourceRef(name, claimRef) {
332590
332647
  return claimRef ? `${name} (claim: ${claimRef})` : name;
332591
332648
  }
@@ -332641,34 +332698,6 @@ function validateActionsVariablesUniqueness(crs) {
332641
332698
  }
332642
332699
  }
332643
332700
  }
332644
- function validateActionsVariablesSelectedRepositories(renderClaims) {
332645
- for (const claimKey of Object.keys(renderClaims)) {
332646
- if (!claimKey.startsWith('OrgSettingsClaim-'))
332647
- continue;
332648
- const claimData = renderClaims[claimKey];
332649
- const claim = claimData?.claim;
332650
- const actionsVariables = claim?.providers?.github?.actions_variables;
332651
- if (!Array.isArray(actionsVariables))
332652
- continue;
332653
- for (const variable of actionsVariables) {
332654
- if (variable.visibility !== 'selected')
332655
- continue;
332656
- const selectedRepos = variable.selected_repositories;
332657
- if (!Array.isArray(selectedRepos) || selectedRepos.length === 0)
332658
- continue;
332659
- for (const ref of selectedRepos) {
332660
- const match = ref.match(COMPONENT_REF_PATTERN);
332661
- if (!match)
332662
- continue;
332663
- const componentName = match[1];
332664
- const expectedKey = `ComponentClaim-${componentName}`;
332665
- if (!renderClaims[expectedKey]) {
332666
- throw new Error(`CrossReference error: OrgSettingsClaim/${claim.name} references a non-existent component "${componentName}" in actions_variables.${variable.name}.selected_repositories`);
332667
- }
332668
- }
332669
- }
332670
- }
332671
- }
332672
332701
 
332673
332702
  ;// CONCATENATED MODULE: ../cdk8s_renderer/src/validations/githubOrgSecretSection.ts
332674
332703
  const GITHUB_ORG_SECRET_SECTION_KIND = 'FirestartrGithubOrganizationSecretSection';
@@ -332813,7 +332842,6 @@ async function renderer_render(catalogScope, firestartrScope, claimList) {
332813
332842
  try {
332814
332843
  validateSubReferences(data.renderClaims);
332815
332844
  validateComponentPagesPath(data.renderClaims);
332816
- validateActionsVariablesSelectedRepositories(data.renderClaims);
332817
332845
  validateOrgSecretsCrossReferences(data.renderClaims);
332818
332846
  validateTfStateKeyUniqueness(result);
332819
332847
  validateGithubOrgSettingsSingleton(fullCrSet);
@@ -526232,7 +526260,7 @@ const crsStatusSubcommand = {
526232
526260
  };
526233
526261
 
526234
526262
  ;// CONCATENATED MODULE: ./package.json
526235
- const package_namespaceObject = JSON.parse('{"i8":"2.10.0-snapshot-org-secrets-2"}');
526263
+ const package_namespaceObject = JSON.parse('{"i8":"2.10.0-snapshot-org-secrets-validation-1"}');
526236
526264
  ;// CONCATENATED MODULE: ../../package.json
526237
526265
  const package_namespaceObject_1 = {"i8":"2.9.0"};
526238
526266
  // EXTERNAL MODULE: ../../node_modules/semver/index.js
@@ -841,6 +841,19 @@ export interface FirestartrGithubOrganizationSecretSectionSpecSecretsActionsRef
841
841
  * Converts an object of type 'FirestartrGithubOrganizationSecretSectionSpecSecretsActionsRef' to JSON representation.
842
842
  */
843
843
  export declare function toJson_FirestartrGithubOrganizationSecretSectionSpecSecretsActionsRef(obj: FirestartrGithubOrganizationSecretSectionSpecSecretsActionsRef | undefined): Record<string, any> | undefined;
844
+ /**
845
+ * Which repositories can access the secret.
846
+ *
847
+ * @schema FirestartrGithubOrganizationSecretSectionSpecSecretsActionsVisibility
848
+ */
849
+ export declare enum FirestartrGithubOrganizationSecretSectionSpecSecretsActionsVisibility {
850
+ /** all */
851
+ ALL = "all",
852
+ /** selected */
853
+ SELECTED = "selected",
854
+ /** private */
855
+ PRIVATE = "private"
856
+ }
844
857
  /**
845
858
  * A reference to the Kubernetes Secret resource that contains the value.
846
859
  *
@@ -870,6 +883,19 @@ export interface FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesR
870
883
  * Converts an object of type 'FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesRef' to JSON representation.
871
884
  */
872
885
  export declare function toJson_FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesRef(obj: FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesRef | undefined): Record<string, any> | undefined;
886
+ /**
887
+ * Which repositories can access the secret.
888
+ *
889
+ * @schema FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesVisibility
890
+ */
891
+ export declare enum FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesVisibility {
892
+ /** all */
893
+ ALL = "all",
894
+ /** selected */
895
+ SELECTED = "selected",
896
+ /** private */
897
+ PRIVATE = "private"
898
+ }
873
899
  /**
874
900
  * A reference to the Kubernetes Secret resource that contains the value.
875
901
  *
@@ -899,6 +925,19 @@ export interface FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotR
899
925
  * Converts an object of type 'FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotRef' to JSON representation.
900
926
  */
901
927
  export declare function toJson_FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotRef(obj: FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotRef | undefined): Record<string, any> | undefined;
928
+ /**
929
+ * Which repositories can access the secret.
930
+ *
931
+ * @schema FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotVisibility
932
+ */
933
+ export declare enum FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotVisibility {
934
+ /** all */
935
+ ALL = "all",
936
+ /** selected */
937
+ SELECTED = "selected",
938
+ /** private */
939
+ PRIVATE = "private"
940
+ }
902
941
  /**
903
942
  * @schema FirestartrGithubOrganizationSecretSectionSpecContextBackendRef
904
943
  */
@@ -942,19 +981,6 @@ export declare enum FirestartrGithubOrganizationSecretSectionSpecSecretsActionsR
942
981
  /** Secret */
943
982
  SECRET = "Secret"
944
983
  }
945
- /**
946
- * Which repositories can access the secret.
947
- *
948
- * @schema FirestartrGithubOrganizationSecretSectionSpecSecretsActionsVisibility
949
- */
950
- export declare enum FirestartrGithubOrganizationSecretSectionSpecSecretsActionsVisibility {
951
- /** all */
952
- ALL = "all",
953
- /** selected */
954
- SELECTED = "selected",
955
- /** private */
956
- PRIVATE = "private"
957
- }
958
984
  /**
959
985
  * The type of Kubernetes resource to reference.
960
986
  *
@@ -964,19 +990,6 @@ export declare enum FirestartrGithubOrganizationSecretSectionSpecSecretsCodespac
964
990
  /** Secret */
965
991
  SECRET = "Secret"
966
992
  }
967
- /**
968
- * Which repositories can access the secret.
969
- *
970
- * @schema FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesVisibility
971
- */
972
- export declare enum FirestartrGithubOrganizationSecretSectionSpecSecretsCodespacesVisibility {
973
- /** all */
974
- ALL = "all",
975
- /** selected */
976
- SELECTED = "selected",
977
- /** private */
978
- PRIVATE = "private"
979
- }
980
993
  /**
981
994
  * The type of Kubernetes resource to reference.
982
995
  *
@@ -986,19 +999,6 @@ export declare enum FirestartrGithubOrganizationSecretSectionSpecSecretsDependab
986
999
  /** Secret */
987
1000
  SECRET = "Secret"
988
1001
  }
989
- /**
990
- * Which repositories can access the secret.
991
- *
992
- * @schema FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotVisibility
993
- */
994
- export declare enum FirestartrGithubOrganizationSecretSectionSpecSecretsDependabotVisibility {
995
- /** all */
996
- ALL = "all",
997
- /** selected */
998
- SELECTED = "selected",
999
- /** private */
1000
- PRIVATE = "private"
1001
- }
1002
1002
  /**
1003
1003
  * @schema FirestartrGithubOrganizationSecretSectionSpecContextBackendRefKind
1004
1004
  */
@@ -1,4 +1,3 @@
1
- import { RenderClaims, RenderedCrMap } from '../renderer/types';
1
+ import { RenderedCrMap } from '../renderer/types';
2
2
  export declare function validateGithubOrgVariableSectionSingleton(crs: RenderedCrMap): void;
3
3
  export declare function validateActionsVariablesUniqueness(crs: RenderedCrMap): void;
4
- export declare function validateActionsVariablesSelectedRepositories(renderClaims: RenderClaims): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@firestartr/cli",
3
- "version": "2.10.0-snapshot-org-secrets-2",
3
+ "version": "2.10.0-snapshot-org-secrets-validation-1",
4
4
  "private": false,
5
5
  "description": "Commandline tool",
6
6
  "main": "build/main.js",