@wix/create-new 0.0.74 → 0.0.75

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.
@@ -13,7 +13,7 @@ import {
13
13
  require_lib,
14
14
  temporaryDirectory,
15
15
  updateEnvFile
16
- } from "./chunk-FUS6MQZW.js";
16
+ } from "./chunk-SP6CBGLK.js";
17
17
  import {
18
18
  __toESM,
19
19
  init_esm_shims
@@ -115,4 +115,4 @@ async function generateApp({
115
115
  export {
116
116
  generateApp
117
117
  };
118
- //# sourceMappingURL=generator-2JIICGOZ.js.map
118
+ //# sourceMappingURL=generator-CUTI2BWL.js.map
package/build/index.js CHANGED
@@ -118,7 +118,7 @@ import {
118
118
  writeJson,
119
119
  writePackageJson,
120
120
  zod_default
121
- } from "./chunk-FUS6MQZW.js";
121
+ } from "./chunk-SP6CBGLK.js";
122
122
  import {
123
123
  __commonJS,
124
124
  __dirname,
@@ -65643,7 +65643,7 @@ ${errorMessage2}`
65643
65643
  }
65644
65644
  );
65645
65645
  },
65646
- ProjectNameArgumentIsInvalid: ({ errorMessage: errorMessage2 }) => {
65646
+ HeadlessArgumentIsInvalid: ({ errorMessage: errorMessage2 }) => {
65647
65647
  return () => /* @__PURE__ */ import_react83.default.createElement(
65648
65648
  ErrorMessage,
65649
65649
  {
@@ -81801,7 +81801,7 @@ function getTasks({
81801
81801
  cause: e2
81802
81802
  });
81803
81803
  }
81804
- const { generateApp } = await import("./generator-2JIICGOZ.js");
81804
+ const { generateApp } = await import("./generator-CUTI2BWL.js");
81805
81805
  await generateApp({
81806
81806
  packageName,
81807
81807
  packageFolder,
@@ -82343,22 +82343,48 @@ import process26 from "node:process";
82343
82343
 
82344
82344
  // ../create-new-packages/headless-command/src/validations/validate-business-name.ts
82345
82345
  init_esm_shims();
82346
+
82347
+ // ../create-new-packages/headless-command/src/project-slug.ts
82348
+ init_esm_shims();
82349
+ var import_kebabCase4 = __toESM(require_kebabCase(), 1);
82350
+ import { randomBytes as randomBytes2 } from "node:crypto";
82351
+ var INVALID_PROJECT_SLUG_MESSAGE = "The business name must include at least one English letter or number so we can generate a valid project URL.";
82352
+ function isProjectSlugValid(name) {
82353
+ const projectSlug = getProjectSlugBase(name);
82354
+ if (!projectSlug) {
82355
+ throw new InvalidArgumentError(INVALID_PROJECT_SLUG_MESSAGE);
82356
+ }
82357
+ }
82358
+ function getProjectSlugBase(name) {
82359
+ return (0, import_kebabCase4.default)(name).replaceAll(/[^a-z0-9-]/gi, "").replace(/^-+/, "").slice(0, 10).replace(/-+$/, "");
82360
+ }
82361
+ function generateProjectSlug(name) {
82362
+ const base = getProjectSlugBase(name);
82363
+ if (!base) {
82364
+ throw new Error(INVALID_PROJECT_SLUG_MESSAGE);
82365
+ }
82366
+ const salt = randomBytes2(4).toString("hex");
82367
+ return `${base}-${salt}`;
82368
+ }
82369
+
82370
+ // ../create-new-packages/headless-command/src/validations/validate-business-name.ts
82346
82371
  var schema3 = external_exports.string().min(1).max(255);
82347
82372
  var validateBusinessName = (value2) => {
82348
82373
  const result = schema3.safeParse(value2);
82349
82374
  if (!result.success) {
82350
82375
  throw new InvalidArgumentError("The name must be 1 to 255 characters long");
82351
82376
  }
82377
+ isProjectSlugValid(value2);
82352
82378
  return value2;
82353
82379
  };
82354
82380
 
82355
- // ../create-new-packages/headless-command/src/validations/validate-project-name.ts
82381
+ // ../create-new-packages/headless-command/src/validations/folder-name.ts
82356
82382
  init_esm_shims();
82357
- var validateProjectName = (value2) => {
82358
- const re = /^[a-z0-9]{3,20}$/;
82383
+ var validateFolderName = (value2) => {
82384
+ const re = /^[a-z0-9][a-z0-9-]*$/;
82359
82385
  if (!re.test(value2)) {
82360
82386
  throw new InvalidArgumentError(
82361
- "The value must be 3 to 20 characters long and contain only lowercase letters, numbers."
82387
+ "The value must contain only lowercase letters, numbers, and hyphens."
82362
82388
  );
82363
82389
  }
82364
82390
  return value2;
@@ -82542,14 +82568,7 @@ var import_variant47 = __toESM(require_lib(), 1);
82542
82568
 
82543
82569
  // ../create-new-packages/headless-command/src/hooks/create-project.ts
82544
82570
  init_esm_shims();
82545
- var import_kebabCase4 = __toESM(require_kebabCase(), 1);
82546
- import { randomBytes as randomBytes2 } from "node:crypto";
82547
82571
  var DEFAULT_ENVIRONMENT_NAME2 = "system_global";
82548
- function generateSlug(projectName) {
82549
- const base = (0, import_kebabCase4.default)(projectName).replaceAll(/[^a-z0-9-]/gi, "").slice(0, 10).replace(/-$/, "");
82550
- const salt = randomBytes2(4).toString("hex");
82551
- return `${base}-${salt}`;
82552
- }
82553
82572
  function truncateName(name, maxLength) {
82554
82573
  if (name.length > maxLength) {
82555
82574
  return `${name.slice(0, maxLength - 3)}...`;
@@ -82563,7 +82582,7 @@ var useCreateProject = (businessId) => {
82563
82582
  const { createAppProject: createAppProject2, upsertAppEnvironment: upsertAppEnvironment2 } = useBackendAsAServiceClient();
82564
82583
  return useAsyncCallback3(
82565
82584
  async (_2, {
82566
- projectName,
82585
+ businessName,
82567
82586
  cloudProviders
82568
82587
  }) => {
82569
82588
  const { id: projectId } = await createCompanionApp();
@@ -82571,8 +82590,8 @@ var useCreateProject = (businessId) => {
82571
82590
  const publicKeyAndSecret = await getAppSecret({ appId: projectId });
82572
82591
  const appProject = await createAppProject2({
82573
82592
  id: projectId,
82574
- displayName: truncateName(projectName, 50),
82575
- slug: generateSlug(projectName),
82593
+ displayName: truncateName(businessName, 50),
82594
+ slug: generateProjectSlug(businessName),
82576
82595
  cloudProvider: cloudProviders?.[0],
82577
82596
  projectType: "HEADLESS"
82578
82597
  });
@@ -82608,7 +82627,7 @@ var useCreateProject = (businessId) => {
82608
82627
  );
82609
82628
  const projectData = {
82610
82629
  projectId,
82611
- projectName,
82630
+ businessName,
82612
82631
  instanceId: appInstall.appInstance.id,
82613
82632
  appSecret: publicKeyAndSecret.appSecret,
82614
82633
  webhookPublicKey: publicKeyAndSecret.webhookPublicKey,
@@ -82621,12 +82640,7 @@ var useCreateProject = (businessId) => {
82621
82640
  };
82622
82641
 
82623
82642
  // ../create-new-packages/headless-command/src/components/CreateProject.tsx
82624
- var CreateProject = ({
82625
- onSubmit,
82626
- projectName: providedProjectName,
82627
- businessId,
82628
- cloudProviders
82629
- }) => {
82643
+ var CreateProject = ({ onSubmit, businessName, businessId, cloudProviders }) => {
82630
82644
  const { status, execute } = useCreateProject(businessId);
82631
82645
  (0, import_react139.useEffect)(() => {
82632
82646
  if ((0, import_variant47.isType)(status, "Success")) {
@@ -82634,27 +82648,11 @@ var CreateProject = ({
82634
82648
  }
82635
82649
  }, [status, onSubmit]);
82636
82650
  (0, import_react139.useEffect)(() => {
82637
- if (providedProjectName) {
82638
- void execute({ projectName: providedProjectName, cloudProviders });
82639
- }
82640
- }, [providedProjectName, cloudProviders, execute]);
82641
- const validate3 = (0, import_react139.useCallback)(async (projectName) => {
82642
- try {
82643
- validateProjectName(projectName);
82644
- return true;
82645
- } catch (e2) {
82646
- return e2.message;
82651
+ if (businessName) {
82652
+ void execute({ businessName, cloudProviders });
82647
82653
  }
82648
- }, []);
82649
- return /* @__PURE__ */ import_react139.default.createElement(import_react139.default.Fragment, null, !providedProjectName && /* @__PURE__ */ import_react139.default.createElement(
82650
- TextInput2,
82651
- {
82652
- label: "Enter the name of your Custom Frontend project.",
82653
- onSubmit: (projectName) => execute({ projectName, cloudProviders }),
82654
- validate: validate3,
82655
- inCreateFlow: true
82656
- }
82657
- ), (0, import_variant47.match)(status, {
82654
+ }, [businessName, cloudProviders, execute]);
82655
+ return /* @__PURE__ */ import_react139.default.createElement(import_react139.default.Fragment, null, (0, import_variant47.match)(status, {
82658
82656
  Error: () => null,
82659
82657
  Loading: () => /* @__PURE__ */ import_react139.default.createElement(Box_default, { marginBottom: 1 }, /* @__PURE__ */ import_react139.default.createElement(Spinner2, { text: "Creating your project..." })),
82660
82658
  Success: () => /* @__PURE__ */ import_react139.default.createElement(Box_default, { marginLeft: -2, marginBottom: 1 }, /* @__PURE__ */ import_react139.default.createElement(Alert, { type: "success" }, /* @__PURE__ */ import_react139.default.createElement(Badge, { skin: "success" }, "Success"), " ", /* @__PURE__ */ import_react139.default.createElement(Text2, null, "Project created."))),
@@ -91874,7 +91872,6 @@ async function hasAstroConfigurationFile(projectFolder) {
91874
91872
  }
91875
91873
  var LinkCommand = ({
91876
91874
  projectFolder,
91877
- projectName: preEnteredProjectName,
91878
91875
  businessName: preEnteredBusinessName
91879
91876
  }) => {
91880
91877
  const [businessName, setBusinessName] = (0, import_react144.useState)(preEnteredBusinessName);
@@ -91934,7 +91931,7 @@ var LinkCommand = ({
91934
91931
  CreateProject,
91935
91932
  {
91936
91933
  businessId,
91937
- projectName: preEnteredProjectName,
91934
+ businessName,
91938
91935
  onSubmit: (data) => setProjectData(data)
91939
91936
  }
91940
91937
  )),
@@ -92044,7 +92041,7 @@ function parseProviderString(cloudProvider) {
92044
92041
  return CloudProvider.KUBERNETES;
92045
92042
  default:
92046
92043
  throw new CliError({
92047
- code: CliErrorCode.ProjectNameArgumentIsInvalid({
92044
+ code: CliErrorCode.HeadlessArgumentIsInvalid({
92048
92045
  errorMessage: `Invalid cloud provider: "${cloudProvider}".`
92049
92046
  }),
92050
92047
  cause: null
@@ -92088,57 +92085,54 @@ async function parseTemplateOptions2(options) {
92088
92085
  return TemplateSource2.HeadlessApp(appTemplate);
92089
92086
  }
92090
92087
  }
92091
- async function parseProjectNameOptions(targetParentFolder2, options) {
92092
- const projectName = options.projectName;
92093
- if (projectName) {
92094
- if (!await validateDirectory2(join12(targetParentFolder2, projectName))) {
92088
+ async function parseFolderNameOptions(targetParentFolder2, options) {
92089
+ const folderName = options.folderName;
92090
+ if (folderName) {
92091
+ if (!await validateDirectory2(join12(targetParentFolder2, folderName))) {
92095
92092
  throw new CliError({
92096
- code: CliErrorCode.ProjectNameArgumentIsInvalid({
92097
- errorMessage: `"${projectName}" directory is not empty`
92093
+ code: CliErrorCode.HeadlessArgumentIsInvalid({
92094
+ errorMessage: `"${folderName}" directory is not empty`
92098
92095
  }),
92099
92096
  cause: void 0
92100
92097
  });
92101
92098
  }
92102
- const npmValidationErrors = await validatePackageName2(projectName);
92099
+ const npmValidationErrors = await validatePackageName2(folderName);
92103
92100
  if ((0, import_variant52.isType)(npmValidationErrors, "Error")) {
92104
92101
  throw new CliError({
92105
- code: CliErrorCode.ProjectNameArgumentIsInvalid({
92106
- errorMessage: `Invalid package name "${projectName}". Fix the following issues: ${npmValidationErrors.payload.join(", ")}`
92102
+ code: CliErrorCode.HeadlessArgumentIsInvalid({
92103
+ errorMessage: `Invalid package name "${folderName}". Fix the following issues: ${npmValidationErrors.payload.join(", ")}`
92107
92104
  }),
92108
92105
  cause: void 0
92109
92106
  });
92110
92107
  }
92111
- return projectName;
92108
+ return folderName;
92112
92109
  }
92113
92110
  return;
92114
92111
  }
92115
92112
  var processPublish = ({
92116
92113
  template,
92117
- projectName,
92114
+ folderName,
92118
92115
  businessName,
92119
92116
  publish
92120
92117
  }) => {
92121
- if (template && projectName && businessName) {
92118
+ if (template && folderName && businessName) {
92122
92119
  return publish ?? false;
92123
92120
  }
92124
92121
  return publish;
92125
92122
  };
92126
92123
  async function parseCommandOptions2(targetParentFolder2, options) {
92127
92124
  const template = await parseTemplateOptions2(options);
92128
- const projectName = await parseProjectNameOptions(
92129
- targetParentFolder2,
92130
- options
92131
- );
92132
92125
  const cloudProviders = parseCloudProviders();
92126
+ const folderName = await parseFolderNameOptions(targetParentFolder2, options);
92133
92127
  const publish = processPublish({
92134
92128
  template,
92135
- projectName,
92129
+ folderName,
92136
92130
  businessName: options.businessName,
92137
92131
  publish: options.publish
92138
92132
  });
92139
92133
  return {
92140
92134
  template,
92141
- projectName,
92135
+ folderName,
92142
92136
  businessName: options.businessName,
92143
92137
  cloudProviders,
92144
92138
  publish
@@ -92198,11 +92192,16 @@ init_esm_shims();
92198
92192
  var import_react145 = __toESM(require_react(), 1);
92199
92193
  var import_variant53 = __toESM(require_lib(), 1);
92200
92194
  import { join as join13 } from "node:path";
92201
- var validateAppDirectory = async (targetParentFolder2, packageName) => {
92202
- if (!await validateDirectory2(join13(targetParentFolder2, packageName))) {
92203
- return `Provided directory "${packageName}" is not empty`;
92195
+ var validateAppFolder = async (targetParentFolder2, appFolder) => {
92196
+ try {
92197
+ validateFolderName(appFolder);
92198
+ } catch (error) {
92199
+ return error.message;
92204
92200
  }
92205
- const npmValidationErrors = await validatePackageName2(packageName);
92201
+ if (!await validateDirectory2(join13(targetParentFolder2, appFolder))) {
92202
+ return `Provided directory "${appFolder}" is not empty`;
92203
+ }
92204
+ const npmValidationErrors = await validatePackageName2(appFolder);
92206
92205
  return (0, import_variant53.match)(npmValidationErrors, {
92207
92206
  Ok: () => true,
92208
92207
  Error: ({ payload: payload7 }) => `Invalid folder name. Fix the following issues: ${payload7.join(", ")}`
@@ -92210,7 +92209,7 @@ var validateAppDirectory = async (targetParentFolder2, packageName) => {
92210
92209
  };
92211
92210
  var ChooseFolder = ({ initialFolderName, targetParentFolder: targetParentFolder2, onSubmit }) => {
92212
92211
  const validate3 = (0, import_react145.useCallback)(
92213
- async (packageName) => validateAppDirectory(targetParentFolder2, packageName),
92212
+ async (appFolder) => validateAppFolder(targetParentFolder2, appFolder),
92214
92213
  [targetParentFolder2]
92215
92214
  );
92216
92215
  return /* @__PURE__ */ import_react145.default.createElement(
@@ -93644,7 +93643,7 @@ var CreateHeadlessSiteCommand = ({
93644
93643
  commandOptions,
93645
93644
  template: defaultTemplate,
93646
93645
  publish,
93647
- projectName: defaultProjectName,
93646
+ folderName: defaultFolderName,
93648
93647
  businessName: defaultBusinessName,
93649
93648
  cloudProviders
93650
93649
  }) => {
@@ -93653,7 +93652,7 @@ var CreateHeadlessSiteCommand = ({
93653
93652
  );
93654
93653
  const [selectedTemplate, setSelectedTemplate] = (0, import_react154.useState)(defaultTemplate);
93655
93654
  const [folderName, setFolderName] = (0, import_react154.useState)(
93656
- defaultProjectName
93655
+ defaultFolderName
93657
93656
  );
93658
93657
  const [businessId, setBusinessId] = (0, import_react154.useState)();
93659
93658
  const [projectData, setProjectData] = (0, import_react154.useState)();
@@ -93711,10 +93710,10 @@ var CreateHeadlessSiteCommand = ({
93711
93710
  onDone: ({ businessId: businessId2 }) => setBusinessId(businessId2)
93712
93711
  }
93713
93712
  )),
93714
- !defaultProjectName && businessName && selectedTemplate && businessId && /* @__PURE__ */ import_react154.default.createElement(
93713
+ !defaultFolderName && businessName && selectedTemplate && businessId && /* @__PURE__ */ import_react154.default.createElement(
93715
93714
  ChooseFolder,
93716
93715
  {
93717
- initialFolderName: (0, import_kebabCase5.default)(businessName),
93716
+ initialFolderName: folderName ?? (0, import_kebabCase5.default)(businessName),
93718
93717
  targetParentFolder: targetParentFolder2,
93719
93718
  onSubmit: ({ folderName: folderName2 }) => setFolderName(folderName2)
93720
93719
  }
@@ -93723,7 +93722,7 @@ var CreateHeadlessSiteCommand = ({
93723
93722
  CreateProject,
93724
93723
  {
93725
93724
  businessId,
93726
- projectName: businessName,
93725
+ businessName,
93727
93726
  cloudProviders,
93728
93727
  onSubmit: (data) => setProjectData(data)
93729
93728
  }
@@ -93778,14 +93777,14 @@ var ProcessCommand = ({ targetParentFolder: targetParentFolder2, commandOptions
93778
93777
  targetParentFolder2,
93779
93778
  commandOptions
93780
93779
  );
93781
- if (result.projectName) {
93782
- const dirValidationResult = await validateAppDirectory(
93780
+ if (result.folderName) {
93781
+ const dirValidationResult = await validateAppFolder(
93783
93782
  targetParentFolder2,
93784
- result.projectName
93783
+ result.folderName
93785
93784
  );
93786
93785
  if (dirValidationResult !== true) {
93787
93786
  throw new CliError({
93788
- code: CliErrorCode.ProjectNameArgumentIsInvalid({
93787
+ code: CliErrorCode.HeadlessArgumentIsInvalid({
93789
93788
  errorMessage: dirValidationResult
93790
93789
  }),
93791
93790
  cause: void 0
@@ -93798,7 +93797,7 @@ var ProcessCommand = ({ targetParentFolder: targetParentFolder2, commandOptions
93798
93797
  Error: () => null,
93799
93798
  Loading: () => /* @__PURE__ */ import_react155.default.createElement(Spinner2, { text: "Loading..." }),
93800
93799
  Success: ({
93801
- result: { template, projectName, businessName, cloudProviders, publish }
93800
+ result: { template, folderName, businessName, cloudProviders, publish }
93802
93801
  }) => {
93803
93802
  return /* @__PURE__ */ import_react155.default.createElement(
93804
93803
  CreateHeadlessSiteCommand,
@@ -93806,7 +93805,7 @@ var ProcessCommand = ({ targetParentFolder: targetParentFolder2, commandOptions
93806
93805
  targetParentFolder: targetParentFolder2,
93807
93806
  commandOptions,
93808
93807
  template,
93809
- projectName,
93808
+ folderName,
93810
93809
  businessName,
93811
93810
  cloudProviders,
93812
93811
  publish
@@ -93924,7 +93923,18 @@ var InitHeadlessSiteCommand = ({ targetParentFolder: targetParentFolder2 }) => {
93924
93923
  });
93925
93924
  }
93926
93925
  const name = basename(targetParentFolder2).trim();
93927
- return { businessName: (0, import_startCase.default)(name).slice(0, 255) };
93926
+ const businessName = (0, import_startCase.default)(name).slice(0, 255);
93927
+ try {
93928
+ validateBusinessName(businessName);
93929
+ } catch (error) {
93930
+ throw new CliError({
93931
+ code: CliErrorCode.BusinessNameArgumentIsInvalid({
93932
+ errorMessage: error.message
93933
+ }),
93934
+ cause: void 0
93935
+ });
93936
+ }
93937
+ return { businessName };
93928
93938
  }, []);
93929
93939
  return (0, import_variant62.match)(status, {
93930
93940
  Error: () => null,
@@ -93952,7 +93962,7 @@ var InitHeadlessSiteCommand = ({ targetParentFolder: targetParentFolder2 }) => {
93952
93962
  CreateProject,
93953
93963
  {
93954
93964
  businessId,
93955
- projectName: businessName,
93965
+ businessName,
93956
93966
  onSubmit: (data) => setProjectData(data)
93957
93967
  }
93958
93968
  )),
@@ -94037,19 +94047,12 @@ var getHeadlessCommand = ({
94037
94047
  "--business-name <business-name>",
94038
94048
  "The name of your business"
94039
94049
  ).argParser(validateBusinessName)
94040
- ).addOption(
94041
- new Option(
94042
- "--project-name <project-name>",
94043
- "The name of your Custom Frontend project"
94044
- ).argParser(validateProjectName)
94045
94050
  ).action(async (options, command) => {
94046
94051
  errorReporter2.setContext("Command Info", {
94047
94052
  Arguments: command.args,
94048
94053
  Options: command.opts()
94049
94054
  });
94050
- assertInteractiveTerminalIfNeeded(
94051
- Boolean(options.businessName && options.projectName)
94052
- );
94055
+ assertInteractiveTerminalIfNeeded(Boolean(options.businessName));
94053
94056
  const { biLogger, reportCommandStartEvent: reportCommandStartEvent2 } = await createBiLogger3({
94054
94057
  errorReporter: errorReporter2,
94055
94058
  cliVersion,
@@ -94065,7 +94068,6 @@ var getHeadlessCommand = ({
94065
94068
  /* @__PURE__ */ import_react159.default.createElement(BiProvider, { value: biLogger }, /* @__PURE__ */ import_react159.default.createElement(ErrorReporterProvider, { value: errorReporter2 }, /* @__PURE__ */ import_react159.default.createElement(PanoramaProvider, { value: panorama2 }, /* @__PURE__ */ import_react159.default.createElement(
94066
94069
  LinkCommand,
94067
94070
  {
94068
- projectName: options.projectName,
94069
94071
  businessName: options.businessName,
94070
94072
  projectFolder: targetParentFolder2
94071
94073
  }
@@ -94117,9 +94119,9 @@ var getHeadlessCommand = ({
94117
94119
  ).argParser(validateBusinessName)
94118
94120
  ).addOption(
94119
94121
  new Option(
94120
- "--project-name <project-name>",
94121
- "The name of your Custom Frontend project"
94122
- ).argParser(validateProjectName)
94122
+ "--folder-name <folder-name>",
94123
+ "The name of your project folder"
94124
+ ).argParser(validateFolderName)
94123
94125
  ).addOption(
94124
94126
  new Option(
94125
94127
  "--no-publish",
@@ -94134,7 +94136,7 @@ var getHeadlessCommand = ({
94134
94136
  });
94135
94137
  assertInteractiveTerminalIfNeeded(
94136
94138
  Boolean(
94137
- options.siteTemplate && options.businessName && options.projectName
94139
+ options.siteTemplate && options.businessName && options.folderName
94138
94140
  )
94139
94141
  );
94140
94142
  const { biLogger, reportCommandStartEvent: reportCommandStartEvent2 } = await createBiLogger3({
@@ -94175,7 +94177,7 @@ import { randomUUID as randomUUID3 } from "node:crypto";
94175
94177
  var package_default = {
94176
94178
  name: "@wix/create-new",
94177
94179
  description: "General entry point for creating Wix projects",
94178
- version: "0.0.74",
94180
+ version: "0.0.75",
94179
94181
  bin: "bin/index.cjs",
94180
94182
  devDependencies: {
94181
94183
  "@commander-js/extra-typings": "^13.0.0",