@todesktop/cli 1.12.3 → 1.13.0-0

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/dist/cli.js CHANGED
@@ -21,7 +21,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
21
21
  // src/index.ts
22
22
  var import_commander = require("commander");
23
23
  var import_ink39 = require("ink");
24
- var import_react25 = require("react");
24
+ var import_react24 = require("react");
25
25
  var import_register = require("source-map-support/register");
26
26
 
27
27
  // src/commands/build/components/Build.tsx
@@ -1511,24 +1511,125 @@ var schema_default = {
1511
1511
  required: ["id", "icon", "schemaVersion"]
1512
1512
  },
1513
1513
  properties: {
1514
+ $schema: {
1515
+ type: "string",
1516
+ description: "To enable JSON validation and IntelliSense for your `todesktop.json` file in compatible code editors, your editor needs to know where the schema file is located. You can add a `$schema` property to the top of your `todesktop.json` file, pointing to a version of the schema. This can be a local path or a hosted URL.",
1517
+ examples: [
1518
+ "https://unpkg.com/@todesktop/cli@1.12.5/schemas/schema.json",
1519
+ "./node_modules/@todesktop/cli/schemas/schema.json"
1520
+ ]
1521
+ },
1514
1522
  appBuilderLibVersion: {
1523
+ $ref: "#/definitions/appBuilderLibVersionProperty"
1524
+ },
1525
+ appId: { $ref: "#/definitions/appIdProperty" },
1526
+ appFiles: { $ref: "#/definitions/appFilesProperty" },
1527
+ appProtocolScheme: { $ref: "#/definitions/appProtocolSchemeProperty" },
1528
+ appPath: { $ref: "#/definitions/appPathProperty" },
1529
+ asar: { $ref: "#/definitions/asarProperty" },
1530
+ asarUnpack: { $ref: "#/definitions/asarUnpackProperty" },
1531
+ buildVersion: { $ref: "#/definitions/buildVersionProperty" },
1532
+ copyright: { $ref: "#/definitions/copyrightProperty" },
1533
+ electronMirror: { $ref: "#/definitions/electronMirrorProperty" },
1534
+ electronVersion: { $ref: "#/definitions/electronVersionProperty" },
1535
+ extends: {
1536
+ type: "string",
1537
+ minLength: 1,
1538
+ description: "This is the path to a base configuration file. This is especially useful for configuration sharing between staging and production builds. The base configuration file can be a relative path from the project root or an absolute path.",
1539
+ examples: ["./todesktop.staging.json"],
1540
+ default: null
1541
+ },
1542
+ extraContentFiles: { $ref: "#/definitions/extraContentFilesProperty" },
1543
+ extraResources: { $ref: "#/definitions/extraResourcesProperty" },
1544
+ fileAssociations: { $ref: "#/definitions/fileAssociationsProperty" },
1545
+ updateUrlBase: { $ref: "#/definitions/updateUrlBaseProperty" },
1546
+ filesForDistribution: {
1547
+ $ref: "#/definitions/filesForDistributionProperty"
1548
+ },
1549
+ icon: {
1550
+ type: "string",
1551
+ description: "The path to your application's desktop icon. It must be an ICNS or PNG.",
1552
+ examples: ["./appIcon.png"],
1553
+ file: {
1554
+ extensions: ["icns", "png"],
1555
+ mustBeFile: true
1556
+ },
1557
+ minLength: 3
1558
+ },
1559
+ linux: { $ref: "#/definitions/linuxConfigProperty" },
1560
+ id: {
1561
+ type: "string",
1562
+ minLength: 1,
1563
+ description: "Your ToDesktop application ID. This is used to identify your app. This would have been generated when you first created your ToDesktop application via the web interface.",
1564
+ examples: ["2005223bd1nqpl7"]
1565
+ },
1566
+ includeSubNodeModules: {
1567
+ $ref: "#/definitions/includeSubNodeModulesProperty"
1568
+ },
1569
+ mac: { $ref: "#/definitions/macConfigProperty" },
1570
+ mas: { $ref: "#/definitions/masConfigProperty" },
1571
+ dmg: { $ref: "#/definitions/dmgConfigProperty" },
1572
+ nodeVersion: { $ref: "#/definitions/nodeVersionProperty" },
1573
+ npmVersion: { $ref: "#/definitions/npmVersionProperty" },
1574
+ pnpmVersion: { $ref: "#/definitions/pnpmVersionProperty" },
1575
+ packageJson: { $ref: "#/definitions/packageJsonProperty" },
1576
+ packageManager: { $ref: "#/definitions/packageManagerProperty" },
1577
+ rebuildLibrary: { $ref: "#/definitions/rebuildLibraryProperty" },
1578
+ schemaVersion: {
1579
+ type: "number",
1580
+ minimum: 1,
1581
+ maximum: 1,
1582
+ description: "This is the `todesktop.json` schema version. This must be `1`.",
1583
+ examples: [1]
1584
+ },
1585
+ snap: { $ref: "#/definitions/snapConfigProperty" },
1586
+ uploadSizeLimit: { $ref: "#/definitions/uploadSizeLimitProperty" },
1587
+ windows: { $ref: "#/definitions/windowsConfigProperty" },
1588
+ platformOverrides: {
1589
+ type: "object",
1590
+ additionalProperties: false,
1591
+ description: "This option allows you to specify platform-specific configurations for Windows, macOS, and Linux builds. Most top-level configuration fields available in `todesktop.json` can be overridden within the `windows`, `mac`, or `linux` objects under `platformOverrides`.",
1592
+ default: {},
1593
+ properties: {
1594
+ windows: {
1595
+ $ref: "#/definitions/platformOverridableProperties"
1596
+ },
1597
+ mac: {
1598
+ $ref: "#/definitions/platformOverridableProperties"
1599
+ },
1600
+ linux: {
1601
+ $ref: "#/definitions/platformOverridableProperties"
1602
+ }
1603
+ }
1604
+ }
1605
+ },
1606
+ definitions: {
1607
+ appBuilderLibVersionProperty: {
1515
1608
  type: "string",
1516
1609
  validSemver: {},
1517
- minLength: 1
1610
+ minLength: 1,
1611
+ description: "The version of app-builder-lib that ToDesktop should use for building your app. This can be useful if you need to use a specific version that includes certain features or fixes.",
1612
+ examples: ["22.14.13"]
1518
1613
  },
1519
- appId: {
1614
+ appIdProperty: {
1520
1615
  type: "string",
1521
- minLength: 1
1616
+ minLength: 1,
1617
+ description: "Your application ID. Omit this unless you know what you're doing. It's used as the [CFBundleIdentifier](https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/20001431-102070) for MacOS and as the [Application User Model ID](<https://msdn.microsoft.com/en-us/library/windows/desktop/dd378459(v=vs.85).aspx>) for Windows.",
1618
+ examples: ["com.microsoft.word"],
1619
+ default: "auto-generated"
1522
1620
  },
1523
- appFiles: {
1621
+ appFilesProperty: {
1524
1622
  type: "array",
1623
+ description: "This option allows you to decide which files get uploaded to be built on the ToDesktop servers. By default, all files in your app path are included in your app, except for `node_modules` and `.git`. Dependencies are installed on our build servers as there could be platform-specific postinstall steps.",
1624
+ default: ["**"],
1625
+ examples: ['["dist/**", "!static/**"]'],
1525
1626
  items: {
1526
1627
  type: "string",
1527
1628
  minLength: 1
1528
1629
  },
1529
1630
  minItems: 1
1530
1631
  },
1531
- appProtocolScheme: {
1632
+ appProtocolSchemeProperty: {
1532
1633
  oneOf: [
1533
1634
  {
1534
1635
  type: "string",
@@ -1542,20 +1643,27 @@ var schema_default = {
1542
1643
  },
1543
1644
  minItems: 1
1544
1645
  }
1545
- ]
1646
+ ],
1647
+ description: 'If you want to register a protocol for your application (e.g. `example://`) and or support deeplinking, you will need to use this option. If your desired protocol is `example://`, you would set `"appProtocolScheme": "example"`. NOTE: these features also require additional application logic.',
1648
+ examples: ["word", '["word", "excel"]'],
1649
+ default: "no protocol scheme is registered"
1546
1650
  },
1547
- appPath: {
1651
+ appPathProperty: {
1548
1652
  type: "string",
1653
+ description: "This is the path to your Electron application directory. Omit this unless your project setup is complicated. This is the directory that the CLI uploads.",
1654
+ default: ".",
1655
+ examples: ["./dist"],
1549
1656
  file: {
1550
1657
  isOptional: true,
1551
1658
  mustBeElectronApp: true
1552
1659
  }
1553
1660
  },
1554
- asar: {
1661
+ asarProperty: {
1555
1662
  type: "boolean",
1556
- default: true
1663
+ default: true,
1664
+ description: "Whether to package your application's source code within an asar archive. You should only turn this off if you have a good reason to."
1557
1665
  },
1558
- asarUnpack: {
1666
+ asarUnpackProperty: {
1559
1667
  oneOf: [
1560
1668
  {
1561
1669
  type: "boolean"
@@ -1568,30 +1676,41 @@ var schema_default = {
1568
1676
  },
1569
1677
  minItems: 1
1570
1678
  }
1571
- ]
1679
+ ],
1680
+ description: "This option allows you to decide which files get unpacked from the asar archive. By default we unpack all native `*.node` files.",
1681
+ default: ["**/*.node"]
1572
1682
  },
1573
- buildVersion: {
1683
+ buildVersionProperty: {
1574
1684
  type: "string",
1575
- minLength: 1
1685
+ minLength: 1,
1686
+ description: "The build version. Maps to the CFBundleVersion on macOS, and FileVersion metadata property on Windows.",
1687
+ default: "auto-generated from build id"
1576
1688
  },
1577
- copyright: {
1689
+ copyrightProperty: {
1578
1690
  type: "string",
1579
- minLength: 1
1691
+ minLength: 1,
1692
+ description: "The human-readable copyright line for the app.",
1693
+ examples: ["Copyright \xA9 1995 Walt Disney"],
1694
+ default: "The `package.json` [productName](#recommendations-for-app-packagejson) / `name`."
1580
1695
  },
1581
- electronMirror: {
1696
+ electronMirrorProperty: {
1582
1697
  type: "string",
1583
- format: "uri"
1698
+ format: "uri",
1699
+ description: "The base URL of the mirror to download Electron from. This may be a mirror geographically closer to you or even your own mirror which contains custom Electron builds. The version downloaded is the Electron version specified in `devDependencies` in your app's `package.json`. Alternatively you can explicitly specify an `electronVersion` in `todesktop.json` as described below.",
1700
+ examples: ["https://cdn.npm.taobao.org/dist/electron/"],
1701
+ default: "Electron is downloaded from the main official source."
1584
1702
  },
1585
- electronVersion: {
1703
+ electronVersionProperty: {
1586
1704
  type: "string",
1587
- minLength: 1
1705
+ minLength: 1,
1706
+ description: "The version of Electron to use. In most cases you should not specify an `electronVersion` property. Only specify this option if you wish to override the version that is specified in `package.json`.",
1707
+ examples: ["12.0.7-beta.17"],
1708
+ default: "Electron version specified in `devDependencies` in your app's `package.json`"
1588
1709
  },
1589
- extends: {
1590
- type: "string",
1591
- minLength: 1
1592
- },
1593
- extraContentFiles: {
1710
+ extraContentFilesProperty: {
1594
1711
  type: "array",
1712
+ description: "This option allows you specify files to be copied into the application's content directory (`Contents` for MacOS, root directory for Linux and Windows).",
1713
+ default: [],
1595
1714
  items: {
1596
1715
  type: "object",
1597
1716
  required: ["from"],
@@ -1607,8 +1726,10 @@ var schema_default = {
1607
1726
  }
1608
1727
  }
1609
1728
  },
1610
- extraResources: {
1729
+ extraResourcesProperty: {
1611
1730
  type: "array",
1731
+ description: "This option allows you to specify files to be copied into the application's resources directory (`Contents/Resources` for MacOS, `resources` for Linux and Windows). It works just like the `extraContentFiles` option, except the files go to a different directory.",
1732
+ default: [],
1612
1733
  items: {
1613
1734
  type: "object",
1614
1735
  required: ["from"],
@@ -1626,8 +1747,9 @@ var schema_default = {
1626
1747
  }
1627
1748
  }
1628
1749
  },
1629
- fileAssociations: {
1750
+ fileAssociationsProperty: {
1630
1751
  type: "array",
1752
+ description: "Associate a file type with your Electron app.",
1631
1753
  items: {
1632
1754
  type: "object",
1633
1755
  required: ["ext"],
@@ -1646,69 +1768,84 @@ var schema_default = {
1646
1768
  minLength: 1
1647
1769
  }
1648
1770
  }
1649
- ]
1771
+ ],
1772
+ description: "The extension (minus the leading period). e.g. png."
1650
1773
  },
1651
1774
  description: {
1652
1775
  type: "string",
1653
- minLength: 1
1776
+ minLength: 1,
1777
+ description: "windows-only. The description."
1654
1778
  },
1655
1779
  name: {
1656
1780
  type: "string",
1657
- minLength: 1
1781
+ minLength: 1,
1782
+ description: "The name. e.g. PNG. Defaults to value of `ext`."
1658
1783
  },
1659
1784
  mimeType: {
1660
1785
  type: "string",
1661
- minLength: 1
1786
+ minLength: 1,
1787
+ description: "linux-only. The mime-type."
1662
1788
  },
1663
1789
  icon: {
1664
1790
  type: "string",
1665
- minLength: 1
1791
+ minLength: 1,
1792
+ description: 'macOS and windows. Icon file name without extension. It points to ico file for Windows and icns for macOS. For example, if the `icon` value is `"icons/py"` then it will look for both `"icons/py.ico"` and `"icons/py.icns"` in your project directory.'
1666
1793
  },
1667
1794
  role: {
1668
1795
  type: "string",
1669
- minLength: 1
1796
+ minLength: 1,
1797
+ description: "macOS-only. The app's role with respect to the type. The value can be `Editor`, `Viewer`, `Shell`, or `None`. Corresponds to `CFBundleTypeRole`.",
1798
+ default: "Editor"
1670
1799
  },
1671
1800
  isPackage: {
1672
- type: "boolean"
1801
+ type: "boolean",
1802
+ description: "macOS-only. Whether the document is distributed as a bundle. If set to true, the bundle directory is treated as a file. Corresponds to `LSTypeIsPackage`."
1673
1803
  },
1674
1804
  rank: {
1675
1805
  type: "string",
1676
- enum: ["Owner", "Default", "Alternate", "None"]
1806
+ enum: ["Owner", "Default", "Alternate", "None"],
1807
+ description: "macOS-only. Determines how Launch Services ranks this app among the apps that declare themselves editors or viewers of files of this type. The possible values are: `Owner` (this app is the primary creator of files of this type), `Default` (this app is an opener of files of this type; this value is also used if no rank is specified), `Alternate` (this app is a secondary viewer of files of this type), and `None` (this app is never selected to open files of this type, but it accepts drops of files of this type).",
1808
+ default: "Default"
1677
1809
  }
1678
1810
  }
1679
1811
  },
1680
1812
  minItems: 1
1681
1813
  },
1682
- updateUrlBase: {
1814
+ updateUrlBaseProperty: {
1683
1815
  type: "string",
1684
- format: "uri"
1816
+ format: "uri",
1817
+ description: "The URL to check for updates. You should only set this if you want to use your own self-hosted update server instead of ToDesktop's built-in update service. See https://www.github.com/ToDesktop/self-hosted for more information.",
1818
+ examples: ["https://example.com/updates"],
1819
+ default: "ToDesktop's auto-update URL."
1685
1820
  },
1686
- filesForDistribution: {
1821
+ filesForDistributionProperty: {
1687
1822
  type: "array",
1823
+ description: "This option allows you to explicitly exclude or include certain files in the packaged version of your app. These files are filtered _after_ the build step which happens on the ToDesktop servers.",
1824
+ examples: [
1825
+ '["!**/node_modules/realm/android/**", "!**/design/**"]'
1826
+ ],
1688
1827
  items: {
1689
1828
  type: "string",
1690
1829
  minLength: 1
1691
1830
  },
1692
1831
  minItems: 1
1693
1832
  },
1694
- icon: {
1695
- type: "string",
1696
- file: {
1697
- extensions: ["icns", "png"],
1698
- mustBeFile: true
1699
- },
1700
- minLength: 3
1701
- },
1702
- linux: {
1833
+ linuxConfigProperty: {
1703
1834
  type: "object",
1835
+ description: "This object contains some options that only apply to the building & releasing for Linux.",
1836
+ examples: ['{ "category": "Utility"}'],
1704
1837
  additionalProperties: false,
1705
1838
  properties: {
1706
1839
  category: {
1707
1840
  type: "string",
1708
- minLength: 1
1841
+ minLength: 1,
1842
+ description: "The [application category](https://specifications.freedesktop.org/menu-spec/latest/apa.html#main-category-registry).",
1843
+ examples: ["Utility"]
1709
1844
  },
1710
1845
  icon: {
1711
1846
  type: "string",
1847
+ description: "The path to your application's Linux desktop icon. It must be an ICNS or PNG.",
1848
+ examples: ["./linux-icon.png"],
1712
1849
  file: {
1713
1850
  extensions: ["icns", "png"],
1714
1851
  mustBeFile: true
@@ -1717,31 +1854,40 @@ var schema_default = {
1717
1854
  },
1718
1855
  imageVersion: {
1719
1856
  type: "string",
1720
- minLength: 1
1857
+ minLength: 1,
1858
+ description: "The version of the Linux image that ToDesktop should use to build your app.",
1859
+ examples: ["0.1.0"],
1860
+ default: "0.0.11"
1721
1861
  },
1722
1862
  noSandbox: {
1723
- type: "boolean"
1863
+ type: "boolean",
1864
+ description: "This option allows you to configure whether your app should run in a sandboxed environment.",
1865
+ default: true
1724
1866
  }
1725
1867
  }
1726
1868
  },
1727
- id: {
1728
- type: "string",
1729
- minLength: 1
1730
- },
1731
- includeSubNodeModules: {
1869
+ includeSubNodeModulesProperty: {
1732
1870
  type: "boolean",
1733
- default: false
1871
+ default: false,
1872
+ description: "Whether to include **all** of the submodules node_modules directories"
1734
1873
  },
1735
- mac: {
1874
+ macConfigProperty: {
1736
1875
  type: "object",
1876
+ description: "This object contains some options that only apply to the building & releasing for MacOS.",
1877
+ examples: ['{ "entitlements": "./entitlements.mac.plist" }'],
1737
1878
  additionalProperties: false,
1738
1879
  properties: {
1739
1880
  category: {
1740
1881
  type: "string",
1741
- minLength: 1
1882
+ minLength: 1,
1883
+ description: "The application category type, as shown in the Finder via _View -> Arrange by Application Category_ when viewing the Applications directory.",
1884
+ examples: ["public.app-category.productivity"]
1742
1885
  },
1743
1886
  additionalBinariesToSign: {
1744
1887
  type: "array",
1888
+ description: "Paths of any extra binaries that need to be signed. These could be files in your own app code or `node_modules`.",
1889
+ examples: ['["./node_modules/example-package/example-file"]'],
1890
+ default: [],
1745
1891
  items: {
1746
1892
  type: "string",
1747
1893
  minLength: 1
@@ -1749,6 +1895,9 @@ var schema_default = {
1749
1895
  },
1750
1896
  entitlements: {
1751
1897
  type: "string",
1898
+ description: "The path to an entitlements file for signing your application. It must be a plist file.",
1899
+ examples: ["./entitlements.mac.plist"],
1900
+ default: "A sane minimal entitlements file we've put together.",
1752
1901
  file: {
1753
1902
  extensions: ["plist"],
1754
1903
  mustBeFile: true
@@ -1757,6 +1906,9 @@ var schema_default = {
1757
1906
  },
1758
1907
  entitlementsInherit: {
1759
1908
  type: "string",
1909
+ description: "The path to a child entitlements file for signing your application. It must be a plist file.",
1910
+ examples: ["./entitlementsInherit.mac.plist"],
1911
+ default: "No entitlements file is provided by default.",
1760
1912
  file: {
1761
1913
  extensions: ["plist"],
1762
1914
  mustBeFile: true
@@ -1764,10 +1916,15 @@ var schema_default = {
1764
1916
  minLength: 1
1765
1917
  },
1766
1918
  extendInfo: {
1767
- type: "object"
1919
+ type: "object",
1920
+ description: "Extra entries for `Info.plist`.",
1921
+ examples: ['{ "NSUserNotificationAlertStyle": "alert" }'],
1922
+ default: {}
1768
1923
  },
1769
1924
  icon: {
1770
1925
  type: "string",
1926
+ description: "The path to your application's Mac desktop icon. It must be an ICNS or PNG.",
1927
+ examples: ["./mac-icon.png"],
1771
1928
  file: {
1772
1929
  extensions: ["icns", "png"],
1773
1930
  mustBeFile: true
@@ -1776,6 +1933,9 @@ var schema_default = {
1776
1933
  },
1777
1934
  requirements: {
1778
1935
  type: "string",
1936
+ description: "The path to the [requirements file](https://developer.apple.com/library/archive/documentation/Security/Conceptual/CodeSigningGuide/RequirementLang/RequirementLang.html) used when signing your application.",
1937
+ examples: ["./requirements.txt"],
1938
+ default: "No requirements file is used by default.",
1779
1939
  file: {
1780
1940
  extensions: ["txt"],
1781
1941
  mustBeFile: true
@@ -1784,12 +1944,17 @@ var schema_default = {
1784
1944
  }
1785
1945
  }
1786
1946
  },
1787
- mas: {
1947
+ masConfigProperty: {
1788
1948
  type: "object",
1949
+ description: "This object contains options that only apply to building the application for Mac App Store.",
1950
+ examples: ['{ "type": "development" }'],
1789
1951
  additionalProperties: false,
1790
1952
  properties: {
1791
1953
  entitlements: {
1792
1954
  type: "string",
1955
+ description: "The path to an entitlements file for signing your application. It must be a plist file.",
1956
+ examples: ["./entitlements.mas.plist"],
1957
+ default: "No entitlements file is provided by default.",
1793
1958
  file: {
1794
1959
  extensions: ["plist"],
1795
1960
  mustBeFile: true
@@ -1798,6 +1963,9 @@ var schema_default = {
1798
1963
  },
1799
1964
  entitlementsInherit: {
1800
1965
  type: "string",
1966
+ description: "The path to a child entitlements file for signing your application. It must be a plist file.",
1967
+ examples: ["./entitlementsInherit.mas.plist"],
1968
+ default: "No entitlements file is provided by default.",
1801
1969
  file: {
1802
1970
  extensions: ["plist"],
1803
1971
  mustBeFile: true
@@ -1806,6 +1974,9 @@ var schema_default = {
1806
1974
  },
1807
1975
  provisioningProfile: {
1808
1976
  type: "string",
1977
+ description: "The path to a provisioning profile for authorizing your application.",
1978
+ examples: ["./mas.provisionprofile"],
1979
+ default: "No provisioning profile is used by default.",
1809
1980
  file: {
1810
1981
  extensions: ["provisionprofile"],
1811
1982
  mustBeFile: true
@@ -1814,19 +1985,29 @@ var schema_default = {
1814
1985
  },
1815
1986
  type: {
1816
1987
  type: "string",
1817
- enum: ["development", "distribution"]
1988
+ enum: ["development", "distribution"],
1989
+ description: "Whether to sign app for development or for distribution.",
1990
+ examples: ["distribution"],
1991
+ default: "development"
1818
1992
  },
1819
1993
  x64ArchFiles: {
1820
- type: "string"
1994
+ type: "string",
1995
+ description: "Minimatch pattern of paths that are allowed to be x64 binaries in both ASAR files.",
1996
+ examples: ["Contents/Resources/foobar/**"],
1997
+ default: "not defined"
1821
1998
  }
1822
1999
  }
1823
2000
  },
1824
- dmg: {
2001
+ dmgConfigProperty: {
1825
2002
  type: "object",
2003
+ description: "Options for customizing the macOS DMG (disk image) installer.",
1826
2004
  additionalProperties: false,
1827
2005
  properties: {
1828
2006
  background: {
1829
2007
  type: "string",
2008
+ description: "The path to the DMG installer's background image. It must be a `.tiff` file. The resolution of this file determines the resolution of the installer window. Typically, backgrounds are 540x380.",
2009
+ examples: ["./mac-dmg-background.tiff"],
2010
+ default: "undefined",
1830
2011
  file: {
1831
2012
  extensions: ["tiff"],
1832
2013
  mustBeFile: true
@@ -1835,94 +2016,124 @@ var schema_default = {
1835
2016
  },
1836
2017
  artifactName: {
1837
2018
  type: "string",
1838
- minLength: 1
2019
+ minLength: 1,
2020
+ description: "The artifact name of the DMG file. Macros ${productName}, ${version}, ${name} are supported."
1839
2021
  },
1840
2022
  backgroundColor: {
1841
2023
  type: "string",
1842
- minLength: 1
2024
+ minLength: 1,
2025
+ description: 'The background color (accepts css colors). Defaults to "`#ffffff`" (white) if no background image.',
2026
+ default: "#ffffff"
1843
2027
  },
1844
2028
  iconSize: {
1845
- type: "number"
2029
+ type: "number",
2030
+ description: "The size of all the icons inside the DMG. Defaults to `80`.",
2031
+ default: 80
1846
2032
  },
1847
2033
  iconTextSize: {
1848
- type: "number"
2034
+ type: "number",
2035
+ description: "The size of all the icon texts inside the DMG. Defaults to `12`.",
2036
+ default: 12
1849
2037
  },
1850
2038
  title: {
1851
2039
  type: "string",
1852
- minLength: 1
2040
+ minLength: 1,
2041
+ description: "The title of the produced DMG, which will be shown when mounted (volume name). Macro `${productName}`, `${version}` and `${name}` are supported.",
2042
+ default: "${productName} ${version}"
1853
2043
  },
1854
2044
  contents: {
1855
2045
  type: "array",
2046
+ description: "Customize icon locations. The x and y coordinates refer to the position of the center of the icon (at 1x scale), and do not take the label into account.",
1856
2047
  items: {
1857
2048
  type: "object",
1858
2049
  additionalProperties: false,
1859
2050
  properties: {
1860
2051
  x: {
1861
- type: "number"
2052
+ type: "number",
2053
+ description: "The device-independent pixel offset from the left of the window to the center of the icon."
1862
2054
  },
1863
2055
  y: {
1864
- type: "number"
2056
+ type: "number",
2057
+ description: "The device-independent pixel offset from the top of the window to the center of the icon."
1865
2058
  }
1866
2059
  }
1867
2060
  }
1868
2061
  },
1869
2062
  window: {
1870
2063
  type: "object",
2064
+ description: "The DMG windows position and size. In most cases, you will only want to specify a `height` and `width` value but not `x` and `y`.",
1871
2065
  additionalProperties: false,
1872
2066
  properties: {
1873
2067
  x: {
1874
- type: "number"
2068
+ type: "number",
2069
+ description: "The X position relative to left of the screen."
1875
2070
  },
1876
2071
  y: {
1877
- type: "number"
2072
+ type: "number",
2073
+ description: "The Y position relative to top of the screen."
1878
2074
  },
1879
2075
  width: {
1880
- type: "number"
2076
+ type: "number",
2077
+ description: "The width. Defaults to background image width or 540."
1881
2078
  },
1882
2079
  height: {
1883
- type: "number"
2080
+ type: "number",
2081
+ description: "The height. Defaults to background image height or 380."
1884
2082
  }
1885
2083
  }
1886
2084
  }
1887
2085
  }
1888
2086
  },
1889
- nodeVersion: {
2087
+ nodeVersionProperty: {
1890
2088
  type: "string",
1891
2089
  validSemver: {},
1892
- minLength: 1
2090
+ minLength: 1,
2091
+ description: "The version of Node.js that ToDesktop should use to build your app.",
2092
+ examples: ["18.12.1"]
1893
2093
  },
1894
- npmVersion: {
2094
+ npmVersionProperty: {
1895
2095
  type: "string",
1896
2096
  validSemver: {},
1897
- minLength: 1
2097
+ minLength: 1,
2098
+ description: "The version of NPM that ToDesktop should use for installation.",
2099
+ examples: ["9.8.1"]
1898
2100
  },
1899
- pnpmVersion: {
2101
+ pnpmVersionProperty: {
1900
2102
  type: "string",
1901
2103
  validSemver: {},
1902
- minLength: 1
2104
+ minLength: 1,
2105
+ description: "The version of pnpm that ToDesktop should use for installation.",
2106
+ examples: ["8.10.5"]
1903
2107
  },
1904
- packageJson: {
1905
- type: "object"
2108
+ packageJsonProperty: {
2109
+ type: "object",
2110
+ description: "If you want to override the default `package.json` configuration, use the `packageJson` property. For example, you can use this to override the `productName` or `version` properties.",
2111
+ default: {}
1906
2112
  },
1907
- packageManager: {
2113
+ packageManagerProperty: {
1908
2114
  type: "string",
1909
- enum: ["npm", "yarn", "pnpm"]
2115
+ enum: ["npm", "yarn", "pnpm"],
2116
+ description: "The package manager to use when installing dependencies. Valid values are `npm`, `yarn` or `pnpm`.",
2117
+ examples: ["yarn"],
2118
+ default: "If `yarn.lock` exists, `yarn` is used. If `pnpm-lock.yaml` or `shrinkwrap.yaml` exists, `pnpm` is used. Otherwise, `npm` is used."
1910
2119
  },
1911
- rebuildLibrary: {
2120
+ rebuildLibraryProperty: {
1912
2121
  type: "string",
1913
- enum: ["app-builder", "@electron/rebuild"]
1914
- },
1915
- schemaVersion: {
1916
- type: "number",
1917
- minimum: 1,
1918
- maximum: 1
2122
+ enum: ["app-builder", "@electron/rebuild"],
2123
+ description: "The library that ToDesktop should use for rebuilding native modules. Valid values are `app-builder` or `@electron/rebuild`.",
2124
+ default: "app-builder"
1919
2125
  },
1920
- snap: {
2126
+ snapConfigProperty: {
1921
2127
  type: "object",
2128
+ description: "This object contains some options that only apply to the building for the [Snap Store](https://snapcraft.io/store).",
2129
+ examples: ['{ "confinement": "classic", "grade": "devel" }'],
1922
2130
  additionalProperties: false,
1923
2131
  properties: {
1924
2132
  after: {
1925
2133
  type: "array",
2134
+ description: "Ensures that all the part names listed are staged before the app part begins its [lifecycle](https://snapcraft.io/docs/parts-lifecycle#heading--steps).",
2135
+ default: ["desktop-gtk2"],
2136
+ examples: ['["launch-scripts"]'],
1926
2137
  items: {
1927
2138
  type: "string",
1928
2139
  minLength: 1
@@ -1930,6 +2141,9 @@ var schema_default = {
1930
2141
  },
1931
2142
  appPartStage: {
1932
2143
  type: "array",
2144
+ description: "Specifies which files from the app part to stage and which to exclude. Individual files, directories, wildcards, globstars, and exclusions are accepted. See [Snapcraft filesets](https://snapcraft.io/docs/snapcraft-filesets) to learn more about the format.",
2145
+ examples: ['["-usr/lib/python*"]'],
2146
+ default: "See [snap.ts](https://github.com/electron-userland/electron-builder/blob/master/packages/app-builder-lib/templates/snap/snapcraft.yaml#L29).",
1933
2147
  items: {
1934
2148
  type: "string",
1935
2149
  minLength: 1
@@ -1948,16 +2162,30 @@ var schema_default = {
1948
2162
  minLength: 1
1949
2163
  }
1950
2164
  }
1951
- ]
2165
+ ],
2166
+ description: "The list of features that must be supported by the core in order for this snap to install. To learn more, see the [Snapcraft docs](https://snapcraft.io/docs/snapcraft-top-level-metadata#heading--assumes).",
2167
+ examples: ["snapd2.38"],
2168
+ default: "undefined"
1952
2169
  },
1953
2170
  autoStart: {
1954
- type: "boolean"
2171
+ type: "boolean",
2172
+ description: "Whether or not the snap should automatically start on login.",
2173
+ default: false,
2174
+ examples: [true]
1955
2175
  },
1956
2176
  base: {
1957
- type: "string"
2177
+ type: "string",
2178
+ description: "The base snap to use for building this snap.",
2179
+ default: "core18",
2180
+ examples: ["core20"]
1958
2181
  },
1959
2182
  buildPackages: {
1960
2183
  type: "array",
2184
+ description: "The list of debian packages needs to be installed for building this snap.",
2185
+ default: [],
2186
+ examples: [
2187
+ '["libssl-dev", "libssh-dev", "libncursesw5-dev"]'
2188
+ ],
1961
2189
  items: {
1962
2190
  type: "string",
1963
2191
  minLength: 1
@@ -1965,20 +2193,50 @@ var schema_default = {
1965
2193
  },
1966
2194
  confinement: {
1967
2195
  type: "string",
1968
- enum: ["classic", "devmode", "strict"]
2196
+ enum: ["classic", "devmode", "strict"],
2197
+ description: "The type of [confinement](https://snapcraft.io/docs/reference/confinement) supported by the snap. `devmode`, `strict`, or `classic`.",
2198
+ default: "strict",
2199
+ examples: ["classic"]
1969
2200
  },
1970
2201
  environment: {
1971
- type: "object"
2202
+ type: "object",
2203
+ description: "The custom environment. If you set this, it will be merged with the default.",
2204
+ default: { TMPDIR: "$XDG_RUNTIME_DIR" },
2205
+ examples: ['{"TMPDIR": "$XDG_RUNTIME_DIR"}']
1972
2206
  },
1973
2207
  grade: {
1974
2208
  type: "string",
1975
- enum: ["devel", "stable"]
2209
+ enum: ["devel", "stable"],
2210
+ description: 'The quality grade of the snap. It can be either `devel` (i.e. a development version of the snap, so not to be published to the "stable" or "candidate" channels) or `stable` (i.e. a stable release or release candidate, which can be released to all channels).',
2211
+ default: "stable",
2212
+ examples: ["devel"]
1976
2213
  },
1977
2214
  layout: {
1978
- type: "object"
2215
+ type: "object",
2216
+ description: "Specifies any files to make accessible from locations such as `/usr`, `/var`, and `/etc`. See [snap layouts](https://snapcraft.io/docs/snap-layouts) to learn more.",
2217
+ default: "undefined",
2218
+ examples: [
2219
+ '{ "/var/lib/foo": { "bind": "$SNAP_DATA/var/lib/foo" } }'
2220
+ ]
1979
2221
  },
1980
2222
  plugs: {
1981
2223
  type: "array",
2224
+ description: 'The list of [plugs](https://snapcraft.io/docs/reference/interfaces). If list contains `default`, it will be replaced with the default list, so, `["default", "foo"]` can be used to add a custom plug `foo` in addition to the default list.',
2225
+ default: [
2226
+ "desktop",
2227
+ "desktop-legacy",
2228
+ "home",
2229
+ "x11",
2230
+ "unity7",
2231
+ "browser-support",
2232
+ "network",
2233
+ "gsettings",
2234
+ "pulseaudio",
2235
+ "opengl"
2236
+ ],
2237
+ examples: [
2238
+ '[ "default", { "browser-sandbox": { "interface": "browser-support", "allow-sandbox": true } }, "another-simple-plug-name" ]'
2239
+ ],
1982
2240
  items: {
1983
2241
  anyOf: [
1984
2242
  {
@@ -1993,6 +2251,19 @@ var schema_default = {
1993
2251
  },
1994
2252
  stagePackages: {
1995
2253
  type: "array",
2254
+ description: 'The list of Ubuntu packages to use that are needed to support the app part creation. Like `depends` for deb. If list contains `default`, it will be replaced with the default list, so, `["default", "foo"]` can be used to add custom package `foo` in addition to the defaults.',
2255
+ default: [
2256
+ "libasound2",
2257
+ "libgconf2-4",
2258
+ "libnotify4",
2259
+ "libnspr4",
2260
+ "libnss3",
2261
+ "libpcre3",
2262
+ "libpulse0",
2263
+ "libxss1",
2264
+ "libxtst6"
2265
+ ],
2266
+ examples: ['["default", "depends"]'],
1996
2267
  items: {
1997
2268
  type: "string",
1998
2269
  minLength: 1
@@ -2000,22 +2271,35 @@ var schema_default = {
2000
2271
  },
2001
2272
  summary: {
2002
2273
  type: "string",
2003
- maxLength: 78
2274
+ maxLength: 78,
2275
+ description: "A sentence summarising the snap. Max len. 78 characters, describing the snap in short and simple terms.",
2276
+ default: "The [productName](#recommendations-for-app-packagejson).",
2277
+ examples: ["The super cat generator"]
2004
2278
  },
2005
2279
  useTemplateApp: {
2006
- type: "boolean"
2280
+ type: "boolean",
2281
+ description: "Whether to use a template snap.",
2282
+ default: "true if `stagePackages` is not specified.",
2283
+ examples: [false]
2007
2284
  }
2008
2285
  }
2009
2286
  },
2010
- uploadSizeLimit: {
2011
- type: "number"
2287
+ uploadSizeLimitProperty: {
2288
+ type: "number",
2289
+ description: "The max upload size (in MB). Before uploading your files to our servers, we check that the total file size is less than this number. If you are accidentally including unneccesary files in your app, check out the `appPath` and `appFiles` options.",
2290
+ default: 20,
2291
+ examples: [35]
2012
2292
  },
2013
- windows: {
2293
+ windowsConfigProperty: {
2014
2294
  type: "object",
2295
+ description: "This object contains some options that only apply to the building & releasing for Windows.",
2296
+ examples: ['{ "icon": "./icon.ico" }'],
2015
2297
  additionalProperties: false,
2016
2298
  properties: {
2017
2299
  icon: {
2018
2300
  type: "string",
2301
+ description: "The path to your application's Windows desktop icon. It must be an ICO, ICNS, or PNG.",
2302
+ examples: ["./icon.ico"],
2019
2303
  file: {
2020
2304
  extensions: ["icns", "png", "icon"],
2021
2305
  mustBeFile: true
@@ -2024,24 +2308,33 @@ var schema_default = {
2024
2308
  },
2025
2309
  nsisCustomBinary: {
2026
2310
  type: "object",
2311
+ description: "Allows you to provide your own makensis, such as one with support for debug logging via LogSet and LogText. (Logging also requires option debugLogging = true). It's not recommended to use it for production build.",
2312
+ default: "undefined",
2027
2313
  additionalProperties: false,
2028
2314
  properties: {
2029
2315
  checksum: {
2030
- type: "string"
2316
+ type: "string",
2317
+ description: "Checksum for the custom NSIS binary."
2031
2318
  },
2032
2319
  debugLogging: {
2033
- type: "boolean"
2320
+ type: "boolean",
2321
+ description: "Enable debug logging with the custom NSIS binary."
2034
2322
  },
2035
2323
  url: {
2036
- type: "string"
2324
+ type: "string",
2325
+ description: "URL to download the custom NSIS binary (e.g., a .7z archive)."
2037
2326
  },
2038
2327
  version: {
2039
- type: "string"
2328
+ type: "string",
2329
+ description: "Version of the custom NSIS binary."
2040
2330
  }
2041
2331
  }
2042
2332
  },
2043
2333
  nsisInclude: {
2044
2334
  type: "string",
2335
+ description: "The path to NSIS script to customize installer.",
2336
+ examples: ["build/installer.nsh"],
2337
+ default: "undefined",
2045
2338
  file: {
2046
2339
  extensions: ["nsh"],
2047
2340
  mustBeFile: true
@@ -2049,12 +2342,64 @@ var schema_default = {
2049
2342
  },
2050
2343
  publisherName: {
2051
2344
  type: "array",
2345
+ description: "The publisher name, exactly as in your code signing certificate. Several names can be provided. Defaults to common name from your code signing certificate. You should typically not include this property in your configuration unless you wish to transition to a new certificate in the future.",
2346
+ examples: ['["ABC Limited"]'],
2347
+ default: "Default to the common name from your code signing certificate.",
2052
2348
  items: {
2053
2349
  type: "string",
2054
2350
  minLength: 1
2055
2351
  }
2056
2352
  }
2057
2353
  }
2354
+ },
2355
+ platformOverridableProperties: {
2356
+ type: "object",
2357
+ additionalProperties: false,
2358
+ description: "Defines properties that can be overridden on a per-platform basis under the 'platformOverrides' field.",
2359
+ properties: {
2360
+ appBuilderLibVersion: {
2361
+ $ref: "#/definitions/appBuilderLibVersionProperty"
2362
+ },
2363
+ appId: { $ref: "#/definitions/appIdProperty" },
2364
+ appFiles: { $ref: "#/definitions/appFilesProperty" },
2365
+ appProtocolScheme: {
2366
+ $ref: "#/definitions/appProtocolSchemeProperty"
2367
+ },
2368
+ appPath: { $ref: "#/definitions/appPathProperty" },
2369
+ asar: { $ref: "#/definitions/asarProperty" },
2370
+ asarUnpack: { $ref: "#/definitions/asarUnpackProperty" },
2371
+ buildVersion: { $ref: "#/definitions/buildVersionProperty" },
2372
+ copyright: { $ref: "#/definitions/copyrightProperty" },
2373
+ electronMirror: { $ref: "#/definitions/electronMirrorProperty" },
2374
+ electronVersion: { $ref: "#/definitions/electronVersionProperty" },
2375
+ extraContentFiles: {
2376
+ $ref: "#/definitions/extraContentFilesProperty"
2377
+ },
2378
+ extraResources: { $ref: "#/definitions/extraResourcesProperty" },
2379
+ fileAssociations: {
2380
+ $ref: "#/definitions/fileAssociationsProperty"
2381
+ },
2382
+ updateUrlBase: { $ref: "#/definitions/updateUrlBaseProperty" },
2383
+ filesForDistribution: {
2384
+ $ref: "#/definitions/filesForDistributionProperty"
2385
+ },
2386
+ linux: { $ref: "#/definitions/linuxConfigProperty" },
2387
+ includeSubNodeModules: {
2388
+ $ref: "#/definitions/includeSubNodeModulesProperty"
2389
+ },
2390
+ mac: { $ref: "#/definitions/macConfigProperty" },
2391
+ mas: { $ref: "#/definitions/masConfigProperty" },
2392
+ dmg: { $ref: "#/definitions/dmgConfigProperty" },
2393
+ nodeVersion: { $ref: "#/definitions/nodeVersionProperty" },
2394
+ npmVersion: { $ref: "#/definitions/npmVersionProperty" },
2395
+ pnpmVersion: { $ref: "#/definitions/pnpmVersionProperty" },
2396
+ packageJson: { $ref: "#/definitions/packageJsonProperty" },
2397
+ packageManager: { $ref: "#/definitions/packageManagerProperty" },
2398
+ rebuildLibrary: { $ref: "#/definitions/rebuildLibraryProperty" },
2399
+ snap: { $ref: "#/definitions/snapConfigProperty" },
2400
+ uploadSizeLimit: { $ref: "#/definitions/uploadSizeLimitProperty" },
2401
+ windows: { $ref: "#/definitions/windowsConfigProperty" }
2402
+ }
2058
2403
  }
2059
2404
  }
2060
2405
  };
@@ -2904,35 +3249,24 @@ function Build({
2904
3249
  }
2905
3250
  }
2906
3251
 
2907
- // src/utilities/checkIfReactIsUsable.ts
2908
- var import_react7 = require("react");
2909
- var checkIfReactIsUsable_default = ({ cons = console, proc = process } = {}) => {
2910
- try {
2911
- (0, import_react7.useState)(null);
2912
- } catch (e) {
2913
- cons.error(e);
2914
- proc.exit(1);
2915
- }
2916
- };
2917
-
2918
3252
  // src/components/LoginHOC.tsx
2919
3253
  var import_ink16 = require("ink");
2920
- var import_react10 = require("react");
3254
+ var import_react9 = require("react");
2921
3255
  var import_prop_types9 = __toESM(require("prop-types"));
2922
3256
  var import_is_ci4 = __toESM(require("is-ci"));
2923
3257
 
2924
3258
  // src/components/Login.tsx
2925
3259
  var import_ink14 = require("ink");
2926
3260
  var import_prop_types8 = __toESM(require("prop-types"));
2927
- var import_react9 = require("react");
3261
+ var import_react8 = require("react");
2928
3262
  var import_react_final_form = require("react-final-form");
2929
3263
 
2930
3264
  // src/components/TextInput.tsx
2931
3265
  var import_ink_text_input = __toESM(require("ink-text-input"));
2932
- var import_react8 = __toESM(require("react"));
3266
+ var import_react7 = __toESM(require("react"));
2933
3267
  var import_jsx_runtime13 = require("react/jsx-runtime");
2934
3268
  var TextInput = ({ onBlur, onFocus, ...props }) => {
2935
- import_react8.default.useEffect(() => {
3269
+ import_react7.default.useEffect(() => {
2936
3270
  onFocus();
2937
3271
  return onBlur;
2938
3272
  }, [onFocus, onBlur]);
@@ -2966,10 +3300,10 @@ var loginFields = [
2966
3300
  }
2967
3301
  ];
2968
3302
  var Login = ({ setIsLoggedIn }) => {
2969
- const [activeField, setActiveField] = (0, import_react9.useState)(0);
2970
- const [error, setError] = (0, import_react9.useState)(null);
2971
- const [failureMessage, setFailureMessage] = (0, import_react9.useState)(null);
2972
- const [isSubmittingForm, setIsSubmittingForm] = (0, import_react9.useState)(false);
3303
+ const [activeField, setActiveField] = (0, import_react8.useState)(0);
3304
+ const [error, setError] = (0, import_react8.useState)(null);
3305
+ const [failureMessage, setFailureMessage] = (0, import_react8.useState)(null);
3306
+ const [isSubmittingForm, setIsSubmittingForm] = (0, import_react8.useState)(false);
2973
3307
  const onFailure = (message2) => {
2974
3308
  setIsSubmittingForm(false);
2975
3309
  setFailureMessage(message2);
@@ -3068,11 +3402,11 @@ var LoadingText_default = LoadingText;
3068
3402
  // src/components/LoginHOC.tsx
3069
3403
  var import_jsx_runtime16 = require("react/jsx-runtime");
3070
3404
  var LoginHOC = ({ children, isInteractive = true }) => {
3071
- const [isLoggedIn, setIsLoggedIn] = (0, import_react10.useState)(false);
3072
- const [isEffectDone, setEffectDone] = (0, import_react10.useState)(false);
3073
- const [error, setError] = (0, import_react10.useState)(null);
3405
+ const [isLoggedIn, setIsLoggedIn] = (0, import_react9.useState)(false);
3406
+ const [isEffectDone, setEffectDone] = (0, import_react9.useState)(false);
3407
+ const [error, setError] = (0, import_react9.useState)(null);
3074
3408
  const { isRawModeSupported } = (0, import_ink16.useStdin)();
3075
- (0, import_react10.useEffect)(() => {
3409
+ (0, import_react9.useEffect)(() => {
3076
3410
  async function isAccessTokenValid() {
3077
3411
  const { accessToken, email, jwtToken } = getAuthConfig();
3078
3412
  let userCreds = null;
@@ -3149,9 +3483,9 @@ LoginHOC.propTypes = {
3149
3483
  var LoginHOC_default = LoginHOC;
3150
3484
 
3151
3485
  // src/components/ErrorBoundary.tsx
3152
- var import_react11 = __toESM(require("react"));
3486
+ var import_react10 = __toESM(require("react"));
3153
3487
  var Sentry2 = __toESM(require("@sentry/node"));
3154
- var ErrorBoundary = class extends import_react11.default.Component {
3488
+ var ErrorBoundary = class extends import_react10.default.Component {
3155
3489
  constructor(props) {
3156
3490
  super(props);
3157
3491
  this.state = { eventId: null, error: null };
@@ -3179,7 +3513,7 @@ var ErrorBoundary_default = ErrorBoundary;
3179
3513
  var import_ink20 = require("ink");
3180
3514
  var import_ink_select_input = __toESM(require("ink-select-input"));
3181
3515
  var import_prop_types11 = __toESM(require("prop-types"));
3182
- var import_react13 = require("react");
3516
+ var import_react12 = require("react");
3183
3517
 
3184
3518
  // src/components/CustomSelectInputIndicator.tsx
3185
3519
  var import_ink17 = require("ink");
@@ -3206,7 +3540,7 @@ function CustomSelectInputItem({
3206
3540
  // src/components/ViewBuild.tsx
3207
3541
  var import_ink19 = require("ink");
3208
3542
  var import_prop_types10 = __toESM(require("prop-types"));
3209
- var import_react12 = require("react");
3543
+ var import_react11 = require("react");
3210
3544
 
3211
3545
  // src/utilities/getLatestBuildId.ts
3212
3546
  async function getLatestBuildId({
@@ -3301,7 +3635,7 @@ var ViewBuild = ({ commandUsed, id, configPath }) => {
3301
3635
  isLoading
3302
3636
  },
3303
3637
  setState
3304
- ] = (0, import_react12.useState)({
3638
+ ] = (0, import_react11.useState)({
3305
3639
  appId: null,
3306
3640
  arbitraryMessageComponent: null,
3307
3641
  build: null,
@@ -3317,7 +3651,7 @@ var ViewBuild = ({ commandUsed, id, configPath }) => {
3317
3651
  error: error2
3318
3652
  }));
3319
3653
  };
3320
- (0, import_react12.useEffect)(() => {
3654
+ (0, import_react11.useEffect)(() => {
3321
3655
  let firebaseUnsubscribe;
3322
3656
  async function viewBuild() {
3323
3657
  let config2;
@@ -3374,12 +3708,12 @@ var ViewBuild = ({ commandUsed, id, configPath }) => {
3374
3708
  }
3375
3709
  };
3376
3710
  }, [id, configPath]);
3377
- (0, import_react12.useEffect)(() => {
3711
+ (0, import_react11.useEffect)(() => {
3378
3712
  if (hasBuildEverFailed && shouldExitOnBuildFailure_default(build)) {
3379
3713
  setTimeout(() => exit(new Error("Build has failed")), 10);
3380
3714
  }
3381
3715
  }, [build, exit, hasBuildEverFailed]);
3382
- (0, import_react12.useEffect)(() => {
3716
+ (0, import_react11.useEffect)(() => {
3383
3717
  if (arbitraryMessageComponent) {
3384
3718
  setTimeout(() => exit(new Error("Validation failed")), 10);
3385
3719
  }
@@ -3458,14 +3792,14 @@ var OngoingBuildGuard = ({
3458
3792
  const { isRawModeSupported } = (0, import_ink20.useStdin)();
3459
3793
  const onInput = useInput_default();
3460
3794
  const exit = useExit_default();
3461
- const [{ appId, builds, error, isLoading, itemChosen }, setState] = (0, import_react13.useState)({
3795
+ const [{ appId, builds, error, isLoading, itemChosen }, setState] = (0, import_react12.useState)({
3462
3796
  appId: null,
3463
3797
  builds: [],
3464
3798
  error: null,
3465
3799
  isLoading: true,
3466
3800
  itemChosen: null
3467
3801
  });
3468
- (0, import_react13.useEffect)(() => {
3802
+ (0, import_react12.useEffect)(() => {
3469
3803
  if (!isLoading) {
3470
3804
  return;
3471
3805
  }
@@ -3588,9 +3922,9 @@ OngoingBuildGuard.propTypes = {
3588
3922
  var OngoingBuildGuard_default = OngoingBuildGuard;
3589
3923
 
3590
3924
  // src/utilities/useAnalytics.ts
3591
- var import_react14 = require("react");
3925
+ var import_react13 = require("react");
3592
3926
  var useAnalyticsCommand = (command, flags = {}, properties = {}) => {
3593
- const [hasAttemptedTracking, setTrackingAttempt] = (0, import_react14.useState)(false);
3927
+ const [hasAttemptedTracking, setTrackingAttempt] = (0, import_react13.useState)(false);
3594
3928
  logger_default.info({ command, flags, properties }, "useAnalyticsCommand");
3595
3929
  try {
3596
3930
  if (flags.projectPath) {
@@ -3601,7 +3935,7 @@ var useAnalyticsCommand = (command, flags = {}, properties = {}) => {
3601
3935
  }
3602
3936
  } catch (err) {
3603
3937
  }
3604
- (0, import_react14.useEffect)(() => {
3938
+ (0, import_react13.useEffect)(() => {
3605
3939
  const authUnsubscribe = onUserAuth(async (user) => {
3606
3940
  if (user.uid) {
3607
3941
  identify(
@@ -3636,7 +3970,6 @@ function BuildCommand({
3636
3970
  configPath,
3637
3971
  flags
3638
3972
  }) {
3639
- checkIfReactIsUsable_default();
3640
3973
  useAnalyticsCommand("build", {
3641
3974
  async: flags.exitAfterUploading,
3642
3975
  codeSign: flags.shouldCodeSign,
@@ -3657,7 +3990,7 @@ function BuildCommand({
3657
3990
  // src/components/ViewBuilds.tsx
3658
3991
  var import_ink26 = require("ink");
3659
3992
  var import_prop_types17 = __toESM(require("prop-types"));
3660
- var import_react16 = require("react");
3993
+ var import_react15 = require("react");
3661
3994
 
3662
3995
  // src/components/Table.tsx
3663
3996
  var import_ink24 = require("ink");
@@ -3681,7 +4014,7 @@ var TableEnd_default = TableEnd;
3681
4014
  // src/components/TableHead.tsx
3682
4015
  var import_ink22 = require("ink");
3683
4016
  var import_prop_types13 = __toESM(require("prop-types"));
3684
- var import_react15 = require("react");
4017
+ var import_react14 = require("react");
3685
4018
  var import_jsx_runtime23 = require("react/jsx-runtime");
3686
4019
  var TableHead = ({ keyDetails, ...props }) => {
3687
4020
  let topLine = "\u250C";
@@ -3689,7 +4022,7 @@ var TableHead = ({ keyDetails, ...props }) => {
3689
4022
  topLine += "\u2510";
3690
4023
  const contentLineElements = Object.values(keyDetails).map(
3691
4024
  ({ key, width }, index) => {
3692
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_react15.Fragment, { children: [
4025
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_react14.Fragment, { children: [
3693
4026
  index > 0 ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_ink22.Text, { children: " \u2502 " }) : null,
3694
4027
  /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_ink22.Box, { width, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_ink22.Text, { bold: true, children: key }) })
3695
4028
  ] }, key);
@@ -3923,7 +4256,7 @@ var ViewBuilds = ({
3923
4256
  user
3924
4257
  },
3925
4258
  setState
3926
- ] = (0, import_react16.useState)({
4259
+ ] = (0, import_react15.useState)({
3927
4260
  builds: [],
3928
4261
  error: null,
3929
4262
  hasMoreToLoad: true,
@@ -3948,7 +4281,7 @@ var ViewBuilds = ({
3948
4281
  }));
3949
4282
  }
3950
4283
  });
3951
- (0, import_react16.useEffect)(() => {
4284
+ (0, import_react15.useEffect)(() => {
3952
4285
  async function viewBuilds() {
3953
4286
  if (error || isLoading || isInitialLoadComplete && (!hasMoreToLoad || !startAfter)) {
3954
4287
  return;
@@ -4023,12 +4356,12 @@ var ViewBuilds = ({
4023
4356
  format,
4024
4357
  count
4025
4358
  ]);
4026
- (0, import_react16.useEffect)(() => {
4359
+ (0, import_react15.useEffect)(() => {
4027
4360
  if (!hasMoreToLoad) {
4028
4361
  setTimeout(exit, 10);
4029
4362
  }
4030
4363
  }, [exit, hasMoreToLoad]);
4031
- (0, import_react16.useEffect)(() => {
4364
+ (0, import_react15.useEffect)(() => {
4032
4365
  if (!isLoading && isInitialLoadComplete && shouldExitAfterViewingBuilds) {
4033
4366
  setTimeout(exit, 10);
4034
4367
  }
@@ -4114,7 +4447,6 @@ var BuildsCommand = ({
4114
4447
  format = "table",
4115
4448
  exit
4116
4449
  }) => {
4117
- checkIfReactIsUsable_default();
4118
4450
  useAnalyticsCommand("builds", {
4119
4451
  id,
4120
4452
  shouldViewLatest,
@@ -4156,15 +4488,14 @@ var BuildsCommand = ({
4156
4488
  var BuildsCommand_default = BuildsCommand;
4157
4489
 
4158
4490
  // src/commands/LogoutCommand.tsx
4159
- var import_react17 = require("react");
4491
+ var import_react16 = require("react");
4160
4492
  var import_ink27 = require("ink");
4161
4493
  var import_jsx_runtime30 = require("react/jsx-runtime");
4162
4494
  var Logout = () => {
4163
4495
  const exit = useExit_default();
4164
4496
  const { hasAttemptedTracking } = useAnalyticsCommand("logout");
4165
- checkIfReactIsUsable_default();
4166
4497
  deleteAuthConfig();
4167
- (0, import_react17.useEffect)(() => {
4498
+ (0, import_react16.useEffect)(() => {
4168
4499
  if (hasAttemptedTracking) {
4169
4500
  exit();
4170
4501
  }
@@ -4178,7 +4509,7 @@ var LogoutCommand_default = LogoutWrapper;
4178
4509
 
4179
4510
  // src/components/BuildPicker.tsx
4180
4511
  var import_ink29 = require("ink");
4181
- var import_react18 = require("react");
4512
+ var import_react17 = require("react");
4182
4513
 
4183
4514
  // src/components/SelectTable.tsx
4184
4515
  var import_ink28 = require("ink");
@@ -4296,11 +4627,11 @@ function BuildPicker({
4296
4627
  const exit = useExit_default();
4297
4628
  const onInput = useInput_default();
4298
4629
  const isRealIdPassed = buildId && buildId !== "latest";
4299
- const [state, setState] = (0, import_react18.useState)({
4630
+ const [state, setState] = (0, import_react17.useState)({
4300
4631
  selectedBuildId: isRealIdPassed ? buildId : void 0,
4301
4632
  state: isRealIdPassed ? "selected" : "loading"
4302
4633
  });
4303
- (0, import_react18.useEffect)(() => {
4634
+ (0, import_react17.useEffect)(() => {
4304
4635
  loadData({
4305
4636
  buildFilter,
4306
4637
  buildId,
@@ -4415,7 +4746,7 @@ async function getBuildItems({
4415
4746
  }
4416
4747
 
4417
4748
  // src/commands/release/components/ReleaseBuildLogic.tsx
4418
- var import_react19 = require("react");
4749
+ var import_react18 = require("react");
4419
4750
 
4420
4751
  // src/utilities/getBuildAttributes.ts
4421
4752
  async function getBuildAttributes({
@@ -4552,8 +4883,8 @@ function ReleaseBuildLogic({
4552
4883
  configPath
4553
4884
  }) {
4554
4885
  const exit = useExit_default();
4555
- const [state, setState] = (0, import_react19.useState)({ state: "loading" });
4556
- (0, import_react19.useEffect)(() => {
4886
+ const [state, setState] = (0, import_react18.useState)({ state: "loading" });
4887
+ (0, import_react18.useEffect)(() => {
4557
4888
  releaseBuildWorkflow({ configPath, buildId, updateState }).catch(
4558
4889
  logger_default.error
4559
4890
  );
@@ -4591,7 +4922,7 @@ async function releaseBuildWorkflow({
4591
4922
 
4592
4923
  // src/commands/release/components/ReleaseConfirmation.tsx
4593
4924
  var import_ink34 = require("ink");
4594
- var import_react21 = require("react");
4925
+ var import_react20 = require("react");
4595
4926
 
4596
4927
  // src/commands/smoke-test/utilities/build.ts
4597
4928
  var import_semver = __toESM(require("semver"));
@@ -4750,15 +5081,15 @@ function analyzeRelease({
4750
5081
  // src/commands/release/components/DowngradeConfirmation.tsx
4751
5082
  var import_ink32 = require("ink");
4752
5083
  var import_ink_text_input2 = __toESM(require("ink-text-input"));
4753
- var import_react20 = require("react");
5084
+ var import_react19 = require("react");
4754
5085
  var import_jsx_runtime36 = require("react/jsx-runtime");
4755
5086
  function DowngradeConfirmation({
4756
5087
  build,
4757
5088
  latestReleasedBuild,
4758
5089
  confirmDowngrade: confirmDowngrade2
4759
5090
  }) {
4760
- const [confirmText, setConfirmText] = (0, import_react20.useState)("");
4761
- const [showError, setShowError] = (0, import_react20.useState)(false);
5091
+ const [confirmText, setConfirmText] = (0, import_react19.useState)("");
5092
+ const [showError, setShowError] = (0, import_react19.useState)(false);
4762
5093
  const buildVersion = build.appVersion;
4763
5094
  const latestVersion2 = latestReleasedBuild.appVersion;
4764
5095
  function onType(text) {
@@ -4843,10 +5174,10 @@ function ReleaseConfirmation({
4843
5174
  loadData = loadBuildsData
4844
5175
  }) {
4845
5176
  var _a;
4846
- const [state, setState] = (0, import_react21.useState)({
5177
+ const [state, setState] = (0, import_react20.useState)({
4847
5178
  state: disabled ? "bypass" : "loading"
4848
5179
  });
4849
- (0, import_react21.useEffect)(() => {
5180
+ (0, import_react20.useEffect)(() => {
4850
5181
  confirmationWorkflow({
4851
5182
  buildId,
4852
5183
  configPath,
@@ -5026,7 +5357,6 @@ function ReleaseCommand({
5026
5357
  configPath,
5027
5358
  shouldConfirm
5028
5359
  }) {
5029
- checkIfReactIsUsable_default();
5030
5360
  useAnalyticsCommand("release", {
5031
5361
  buildId,
5032
5362
  shouldConfirm,
@@ -5069,11 +5399,11 @@ function isBuildReleasable(opts) {
5069
5399
  }
5070
5400
 
5071
5401
  // src/commands/smoke-test/SmokeTestCommand.tsx
5072
- var import_react23 = require("react");
5402
+ var import_react22 = require("react");
5073
5403
 
5074
5404
  // src/commands/smoke-test/components/Cancellation.tsx
5075
5405
  var import_ink35 = require("ink");
5076
- var import_react22 = require("react");
5406
+ var import_react21 = require("react");
5077
5407
  var import_jsx_runtime40 = require("react/jsx-runtime");
5078
5408
  function Cancellation({
5079
5409
  children,
@@ -5093,8 +5423,8 @@ function Cancellation({
5093
5423
  renderError = (e) => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(ErrorDisplay, { error: e }),
5094
5424
  subject
5095
5425
  }) {
5096
- const [state, setState] = (0, import_react22.useState)("normal");
5097
- const [error, setError] = (0, import_react22.useState)();
5426
+ const [state, setState] = (0, import_react21.useState)("normal");
5427
+ const [error, setError] = (0, import_react21.useState)();
5098
5428
  const onInput = useInput_default();
5099
5429
  const exit = useExit_default();
5100
5430
  onInput(async (input, key) => {
@@ -5331,7 +5661,6 @@ function SmokeTestCommand({
5331
5661
  buildId,
5332
5662
  configPath
5333
5663
  }) {
5334
- checkIfReactIsUsable_default();
5335
5664
  useAnalyticsCommand("smoke-test", { buildId, configPath });
5336
5665
  const command = `todesktop release ${buildId === "latest" ? "--latest" : "<id>"}`;
5337
5666
  return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(ErrorBoundary_default, { children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(LoginHOC_default, { children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
@@ -5359,13 +5688,13 @@ function SmokeTestContainer({
5359
5688
  configPath
5360
5689
  }) {
5361
5690
  const exit = useExit_default();
5362
- const [state, setState] = (0, import_react23.useState)({
5691
+ const [state, setState] = (0, import_react22.useState)({
5363
5692
  buildId,
5364
5693
  state: "loading"
5365
5694
  });
5366
- const [abortController] = (0, import_react23.useState)(new AbortController());
5695
+ const [abortController] = (0, import_react22.useState)(new AbortController());
5367
5696
  const abortSignal = abortController.signal;
5368
- (0, import_react23.useEffect)(() => {
5697
+ (0, import_react22.useEffect)(() => {
5369
5698
  smokeTestWorkflow({ abortSignal, buildId, configPath, updateState }).catch(
5370
5699
  logger_default.error
5371
5700
  );
@@ -5456,15 +5785,14 @@ function isCancelable(state) {
5456
5785
  }
5457
5786
 
5458
5787
  // src/commands/WhoamiCommand.tsx
5459
- var import_react24 = require("react");
5788
+ var import_react23 = require("react");
5460
5789
  var import_ink38 = require("ink");
5461
5790
  var import_jsx_runtime45 = require("react/jsx-runtime");
5462
5791
  var WhoAmI = () => {
5463
5792
  const exit = useExit_default();
5464
- checkIfReactIsUsable_default();
5465
5793
  const auth = getAuthConfig();
5466
5794
  const { hasAttemptedTracking } = useAnalyticsCommand("whoami", {}, {});
5467
- (0, import_react24.useEffect)(() => {
5795
+ (0, import_react23.useEffect)(() => {
5468
5796
  if (hasAttemptedTracking) {
5469
5797
  exit();
5470
5798
  }
@@ -5515,7 +5843,7 @@ var package_default = {
5515
5843
  access: "public"
5516
5844
  },
5517
5845
  name: "@todesktop/cli",
5518
- version: "1.12.2",
5846
+ version: "1.12.5",
5519
5847
  license: "MIT",
5520
5848
  author: "Dave Jeffery <dave@todesktop.com> (http://www.todesktop.com/)",
5521
5849
  homepage: "https://todesktop.com/cli",
@@ -5539,20 +5867,18 @@ var package_default = {
5539
5867
  format: "prettier --write .",
5540
5868
  "lint:types": "tsc && tsc-strict",
5541
5869
  "lint--fix": "eslint src test --fix",
5542
- release: "npm run build && npx np --tag=latest",
5543
- "release-beta": "npm run build && npx np --any-branch --no-tests --tag=beta",
5870
+ "docs:generate": "node scripts/generate-readme.js",
5871
+ release: "npm run docs:generate && npm run build && npx np --tag=latest",
5872
+ "release-beta": "npm run docs:generate && npm run build && npx np --any-branch --no-tests --tag=beta",
5544
5873
  test: "ava",
5545
5874
  "test--watch": "npm test -- --watch",
5546
5875
  postinstall: "node scripts/postinstall.js"
5547
5876
  },
5548
5877
  files: [
5549
- "scripts",
5878
+ "scripts/postinstall.js",
5550
5879
  "schemas",
5551
5880
  "dist",
5552
- "docs",
5553
- ".env",
5554
- "LICENSE",
5555
- "README.md"
5881
+ ".env"
5556
5882
  ],
5557
5883
  dependencies: {
5558
5884
  "@sentry/node": "^8.35.0",
@@ -5816,7 +6142,7 @@ import_commander.program.command("whoami").description("Prints the email of the
5816
6142
  });
5817
6143
  var runCommand = (component, props = null, { exitIfOutOfDate = true } = {}) => {
5818
6144
  onCommand_default({ exitIfOutOfDate });
5819
- const { waitUntilExit } = (0, import_ink39.render)((0, import_react25.createElement)(component, props));
6145
+ const { waitUntilExit } = (0, import_ink39.render)((0, import_react24.createElement)(component, props));
5820
6146
  waitUntilExit().catch((error) => {
5821
6147
  console.error(error.stack);
5822
6148
  });