@loopress/cli 0.34.0 → 0.35.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.
Files changed (44) hide show
  1. package/README.md +190 -174
  2. package/dist/commands/doctor.js +2 -2
  3. package/dist/commands/form/push.js +3 -2
  4. package/dist/commands/option/list.js +6 -1
  5. package/dist/commands/plugin/audit.d.ts +1 -1
  6. package/dist/commands/plugin/audit.js +45 -23
  7. package/dist/commands/plugin/outdated.d.ts +22 -0
  8. package/dist/commands/plugin/outdated.js +67 -0
  9. package/dist/commands/plugin/push.d.ts +2 -1
  10. package/dist/commands/plugin/push.js +70 -19
  11. package/dist/commands/plugin/update.d.ts +36 -0
  12. package/dist/commands/plugin/update.js +121 -0
  13. package/dist/commands/push.js +12 -1
  14. package/dist/commands/snippet/push.js +3 -2
  15. package/dist/lib/base.d.ts +1 -0
  16. package/dist/lib/base.js +22 -1
  17. package/dist/lib/capabilities.d.ts +5 -0
  18. package/dist/lib/capabilities.js +16 -0
  19. package/dist/lib/load-snippets.js +1 -4
  20. package/dist/lib/push-command.d.ts +22 -0
  21. package/dist/lib/push-command.js +41 -11
  22. package/dist/lib/validate-local.js +4 -4
  23. package/dist/lib/wp-client.d.ts +1 -0
  24. package/dist/lib/wp-client.js +30 -10
  25. package/dist/types/plugin.d.ts +2 -1
  26. package/dist/types/plugin.js +32 -1
  27. package/dist/utils/option-format.d.ts +1 -0
  28. package/dist/utils/option-format.js +14 -1
  29. package/dist/utils/plugins.d.ts +3 -0
  30. package/dist/utils/plugins.js +6 -1
  31. package/dist/utils/rename-retry.d.ts +1 -0
  32. package/dist/utils/rename-retry.js +20 -0
  33. package/dist/utils/version.d.ts +2 -0
  34. package/dist/utils/version.js +21 -0
  35. package/dist/utils/wporg.d.ts +5 -0
  36. package/dist/utils/wporg.js +41 -0
  37. package/oclif.manifest.json +1401 -1301
  38. package/package.json +10 -10
  39. package/dist/commands/api/publish.d.ts +0 -9
  40. package/dist/commands/api/publish.js +0 -45
  41. package/dist/commands/snippet/publish.d.ts +0 -10
  42. package/dist/commands/snippet/publish.js +0 -62
  43. package/dist/lib/resolve-linked-project.d.ts +0 -8
  44. package/dist/lib/resolve-linked-project.js +0 -27
@@ -1246,36 +1246,6 @@
1246
1246
  "list.js"
1247
1247
  ]
1248
1248
  },
1249
- "api:publish": {
1250
- "aliases": [],
1251
- "args": {
1252
- "path": {
1253
- "description": "Path to api directory (overrides project config)",
1254
- "name": "path"
1255
- }
1256
- },
1257
- "description": "Publish custom API routes to your Loopress account so they can be deployed to other projects. Does not touch any WordPress site.",
1258
- "examples": [
1259
- "$ lps api publish",
1260
- "$ lps api publish ./api"
1261
- ],
1262
- "flags": {},
1263
- "hasDynamicHelp": false,
1264
- "hiddenAliases": [],
1265
- "id": "api:publish",
1266
- "pluginAlias": "@loopress/cli",
1267
- "pluginName": "@loopress/cli",
1268
- "pluginType": "core",
1269
- "strict": true,
1270
- "enableJsonFlag": false,
1271
- "isESM": true,
1272
- "relativePath": [
1273
- "dist",
1274
- "commands",
1275
- "api",
1276
- "publish.js"
1277
- ]
1278
- },
1279
1249
  "api:pull": {
1280
1250
  "aliases": [],
1281
1251
  "args": {
@@ -1645,97 +1615,12 @@
1645
1615
  "rollback.js"
1646
1616
  ]
1647
1617
  },
1648
- "block:diff": {
1649
- "aliases": [],
1650
- "args": {
1651
- "path": {
1652
- "description": "Path to blocks directory (overrides project config)",
1653
- "name": "path"
1654
- }
1655
- },
1656
- "description": "Show what differs in dynamic blocks between your local blocks/ folders and a WordPress environment, or between two environments",
1657
- "examples": [
1658
- "$ lps block diff",
1659
- "$ lps block diff --env staging",
1660
- "$ lps block diff --env staging --against production"
1661
- ],
1662
- "flags": {
1663
- "json": {
1664
- "description": "Format output as json.",
1665
- "helpGroup": "GLOBAL",
1666
- "name": "json",
1667
- "allowNo": false,
1668
- "type": "boolean"
1669
- },
1670
- "env": {
1671
- "description": "Target environment by name (default: \"local\", or the project's only environment)",
1672
- "name": "env",
1673
- "hasDynamicHelp": false,
1674
- "multiple": false,
1675
- "type": "option"
1676
- },
1677
- "against": {
1678
- "description": "Compare the primary environment against this second environment instead of against local files",
1679
- "name": "against",
1680
- "hasDynamicHelp": false,
1681
- "multiple": false,
1682
- "type": "option"
1683
- }
1684
- },
1685
- "hasDynamicHelp": false,
1686
- "hiddenAliases": [],
1687
- "id": "block:diff",
1688
- "pluginAlias": "@loopress/cli",
1689
- "pluginName": "@loopress/cli",
1690
- "pluginType": "core",
1691
- "strict": true,
1692
- "enableJsonFlag": true,
1693
- "dryRunFlag": {
1694
- "dry-run": {
1695
- "char": "d",
1696
- "description": "Show what would change without making changes",
1697
- "allowNo": false,
1698
- "type": "boolean"
1699
- }
1700
- },
1701
- "honorsExclude": true,
1702
- "skipUnsupportedFlag": {
1703
- "skip-unsupported": {
1704
- "description": "Skip the resources the project uses but this site can't hold (a missing plugin, a Full feature on Light) instead of failing, and warn about each",
1705
- "allowNo": false,
1706
- "type": "boolean"
1707
- }
1708
- },
1709
- "yesFlag": {
1710
- "yes": {
1711
- "char": "y",
1712
- "description": "Answer yes to confirmation prompts",
1713
- "allowNo": false,
1714
- "type": "boolean"
1715
- }
1716
- },
1717
- "againstFlag": {
1718
- "against": {
1719
- "description": "Compare the primary environment against this second environment instead of against local files",
1720
- "input": [],
1721
- "multiple": false,
1722
- "type": "option"
1723
- }
1724
- },
1725
- "isESM": true,
1726
- "relativePath": [
1727
- "dist",
1728
- "commands",
1729
- "block",
1730
- "diff.js"
1731
- ]
1732
- },
1733
- "block:list": {
1618
+ "app:list": {
1734
1619
  "aliases": [],
1735
1620
  "args": {},
1736
- "description": "List the dynamic blocks Loopress registers on WordPress (loopress/<slug>), with their load and render errors",
1621
+ "description": "List single-page apps deployed to WordPress",
1737
1622
  "examples": [
1738
- "$ lps block list"
1623
+ "$ lps app list"
1739
1624
  ],
1740
1625
  "flags": {
1741
1626
  "json": {
@@ -1755,7 +1640,7 @@
1755
1640
  },
1756
1641
  "hasDynamicHelp": false,
1757
1642
  "hiddenAliases": [],
1758
- "id": "block:list",
1643
+ "id": "app:list",
1759
1644
  "pluginAlias": "@loopress/cli",
1760
1645
  "pluginName": "@loopress/cli",
1761
1646
  "pluginType": "core",
@@ -1789,21 +1674,21 @@
1789
1674
  "relativePath": [
1790
1675
  "dist",
1791
1676
  "commands",
1792
- "block",
1677
+ "app",
1793
1678
  "list.js"
1794
1679
  ]
1795
1680
  },
1796
- "block:pull": {
1681
+ "app:pull": {
1797
1682
  "aliases": [],
1798
1683
  "args": {
1799
1684
  "path": {
1800
- "description": "Path to blocks directory (overrides project config)",
1685
+ "description": "Path to apps directory (overrides project config)",
1801
1686
  "name": "path"
1802
1687
  }
1803
1688
  },
1804
- "description": "Pull the dynamic blocks Loopress registers on WordPress into blocks/<slug>/ folders",
1689
+ "description": "Pull single-page app bundles from WordPress into local files",
1805
1690
  "examples": [
1806
- "$ lps block pull"
1691
+ "$ lps app pull"
1807
1692
  ],
1808
1693
  "flags": {
1809
1694
  "json": {
@@ -1837,7 +1722,7 @@
1837
1722
  },
1838
1723
  "hasDynamicHelp": false,
1839
1724
  "hiddenAliases": [],
1840
- "id": "block:pull",
1725
+ "id": "app:pull",
1841
1726
  "pluginAlias": "@loopress/cli",
1842
1727
  "pluginName": "@loopress/cli",
1843
1728
  "pluginType": "core",
@@ -1871,22 +1756,23 @@
1871
1756
  "relativePath": [
1872
1757
  "dist",
1873
1758
  "commands",
1874
- "block",
1759
+ "app",
1875
1760
  "pull.js"
1876
1761
  ]
1877
1762
  },
1878
- "block:push": {
1763
+ "app:push": {
1879
1764
  "aliases": [],
1880
1765
  "args": {
1881
- "path": {
1882
- "description": "Path to blocks directory (overrides project config)",
1883
- "name": "path"
1766
+ "name": {
1767
+ "description": "Push only this app (defaults to every app in the directory)",
1768
+ "name": "name"
1884
1769
  }
1885
1770
  },
1886
- "description": "Push local dynamic blocks (blocks/<slug>/ holding block.json, render.php, and optionally style.css and view.js) to WordPress, registered as loopress/<slug> and placed with <!-- wp:loopress/<slug> /-->. Each block is replaced as a whole. Create or update only, never deletes a block (use `lps block rm`).",
1771
+ "description": "Build and push single-page app bundles to WordPress. Each app is an `apps/<name>/` directory holding a loopress.app.json and a dist/ folder. When the app has a package.json with a `build` script, it runs first (use --no-build to skip it). Only files whose content changed are uploaded.",
1887
1772
  "examples": [
1888
- "$ lps block push",
1889
- "$ lps block push --dry-run"
1773
+ "$ lps app push",
1774
+ "$ lps app push search",
1775
+ "$ lps app push --no-build"
1890
1776
  ],
1891
1777
  "flags": {
1892
1778
  "json": {
@@ -1915,6 +1801,12 @@
1915
1801
  "allowNo": false,
1916
1802
  "type": "boolean"
1917
1803
  },
1804
+ "build": {
1805
+ "description": "Run the app's package.json build script before pushing",
1806
+ "name": "build",
1807
+ "allowNo": true,
1808
+ "type": "boolean"
1809
+ },
1918
1810
  "dry-run": {
1919
1811
  "char": "d",
1920
1812
  "description": "Show what would change without making changes",
@@ -1932,7 +1824,7 @@
1932
1824
  },
1933
1825
  "hasDynamicHelp": false,
1934
1826
  "hiddenAliases": [],
1935
- "id": "block:push",
1827
+ "id": "app:push",
1936
1828
  "pluginAlias": "@loopress/cli",
1937
1829
  "pluginName": "@loopress/cli",
1938
1830
  "pluginType": "core",
@@ -1966,25 +1858,24 @@
1966
1858
  "relativePath": [
1967
1859
  "dist",
1968
1860
  "commands",
1969
- "block",
1861
+ "app",
1970
1862
  "push.js"
1971
1863
  ]
1972
1864
  },
1973
- "block:rm": {
1865
+ "app:rm": {
1974
1866
  "aliases": [
1975
- "block:remove"
1867
+ "app:remove"
1976
1868
  ],
1977
1869
  "args": {
1978
- "slug": {
1979
- "description": "The block to remove, its blocks/ folder name (e.g. \"hero\")",
1980
- "name": "slug",
1870
+ "name": {
1871
+ "description": "App to remove from WordPress",
1872
+ "name": "name",
1981
1873
  "required": true
1982
1874
  }
1983
1875
  },
1984
- "description": "Remove a dynamic block from WordPress. A <!-- wp:loopress/<slug> /--> left in a page or template renders nothing until it is pushed again. Local files are left untouched.",
1876
+ "description": "Remove a single-page app from WordPress: deletes its bundle from wp-content/loopress/apps/ and unregisters the shortcode. Local files are left untouched.",
1985
1877
  "examples": [
1986
- "$ lps block rm hero",
1987
- "$ lps block rm hero --yes"
1878
+ "$ lps app rm search"
1988
1879
  ],
1989
1880
  "flags": {
1990
1881
  "json": {
@@ -2018,7 +1909,7 @@
2018
1909
  },
2019
1910
  "hasDynamicHelp": false,
2020
1911
  "hiddenAliases": [],
2021
- "id": "block:rm",
1912
+ "id": "app:rm",
2022
1913
  "pluginAlias": "@loopress/cli",
2023
1914
  "pluginName": "@loopress/cli",
2024
1915
  "pluginType": "core",
@@ -2052,11 +1943,11 @@
2052
1943
  "relativePath": [
2053
1944
  "dist",
2054
1945
  "commands",
2055
- "block",
1946
+ "app",
2056
1947
  "rm.js"
2057
1948
  ]
2058
1949
  },
2059
- "block:rollback": {
1950
+ "block:diff": {
2060
1951
  "aliases": [],
2061
1952
  "args": {
2062
1953
  "path": {
@@ -2064,12 +1955,11 @@
2064
1955
  "name": "path"
2065
1956
  }
2066
1957
  },
2067
- "description": "Restore dynamic blocks to a snapshot taken automatically before an earlier `lps block push`",
1958
+ "description": "Show what differs in dynamic blocks between your local blocks/ folders and a WordPress environment, or between two environments",
2068
1959
  "examples": [
2069
- "$ lps block rollback",
2070
- "$ lps block rollback --list",
2071
- "$ lps block rollback --to 1732000000000",
2072
- "$ lps block rollback --dry-run"
1960
+ "$ lps block diff",
1961
+ "$ lps block diff --env staging",
1962
+ "$ lps block diff --env staging --against production"
2073
1963
  ],
2074
1964
  "flags": {
2075
1965
  "json": {
@@ -2086,29 +1976,9 @@
2086
1976
  "multiple": false,
2087
1977
  "type": "option"
2088
1978
  },
2089
- "dry-run": {
2090
- "char": "d",
2091
- "description": "Show what would change without making changes",
2092
- "name": "dry-run",
2093
- "allowNo": false,
2094
- "type": "boolean"
2095
- },
2096
- "yes": {
2097
- "char": "y",
2098
- "description": "Answer yes to confirmation prompts",
2099
- "name": "yes",
2100
- "allowNo": false,
2101
- "type": "boolean"
2102
- },
2103
- "list": {
2104
- "description": "List available snapshots instead of rolling back",
2105
- "name": "list",
2106
- "allowNo": false,
2107
- "type": "boolean"
2108
- },
2109
- "to": {
2110
- "description": "Roll back to this snapshot id instead of the most recent one",
2111
- "name": "to",
1979
+ "against": {
1980
+ "description": "Compare the primary environment against this second environment instead of against local files",
1981
+ "name": "against",
2112
1982
  "hasDynamicHelp": false,
2113
1983
  "multiple": false,
2114
1984
  "type": "option"
@@ -2116,7 +1986,7 @@
2116
1986
  },
2117
1987
  "hasDynamicHelp": false,
2118
1988
  "hiddenAliases": [],
2119
- "id": "block:rollback",
1989
+ "id": "block:diff",
2120
1990
  "pluginAlias": "@loopress/cli",
2121
1991
  "pluginName": "@loopress/cli",
2122
1992
  "pluginType": "core",
@@ -2130,7 +2000,7 @@
2130
2000
  "type": "boolean"
2131
2001
  }
2132
2002
  },
2133
- "honorsExclude": false,
2003
+ "honorsExclude": true,
2134
2004
  "skipUnsupportedFlag": {
2135
2005
  "skip-unsupported": {
2136
2006
  "description": "Skip the resources the project uses but this site can't hold (a missing plugin, a Full feature on Light) instead of failing, and warn about each",
@@ -2146,20 +2016,28 @@
2146
2016
  "type": "boolean"
2147
2017
  }
2148
2018
  },
2019
+ "againstFlag": {
2020
+ "against": {
2021
+ "description": "Compare the primary environment against this second environment instead of against local files",
2022
+ "input": [],
2023
+ "multiple": false,
2024
+ "type": "option"
2025
+ }
2026
+ },
2149
2027
  "isESM": true,
2150
2028
  "relativePath": [
2151
2029
  "dist",
2152
2030
  "commands",
2153
2031
  "block",
2154
- "rollback.js"
2032
+ "diff.js"
2155
2033
  ]
2156
2034
  },
2157
- "app:list": {
2035
+ "block:list": {
2158
2036
  "aliases": [],
2159
2037
  "args": {},
2160
- "description": "List single-page apps deployed to WordPress",
2038
+ "description": "List the dynamic blocks Loopress registers on WordPress (loopress/<slug>), with their load and render errors",
2161
2039
  "examples": [
2162
- "$ lps app list"
2040
+ "$ lps block list"
2163
2041
  ],
2164
2042
  "flags": {
2165
2043
  "json": {
@@ -2179,7 +2057,7 @@
2179
2057
  },
2180
2058
  "hasDynamicHelp": false,
2181
2059
  "hiddenAliases": [],
2182
- "id": "app:list",
2060
+ "id": "block:list",
2183
2061
  "pluginAlias": "@loopress/cli",
2184
2062
  "pluginName": "@loopress/cli",
2185
2063
  "pluginType": "core",
@@ -2213,21 +2091,21 @@
2213
2091
  "relativePath": [
2214
2092
  "dist",
2215
2093
  "commands",
2216
- "app",
2094
+ "block",
2217
2095
  "list.js"
2218
2096
  ]
2219
2097
  },
2220
- "app:pull": {
2098
+ "block:pull": {
2221
2099
  "aliases": [],
2222
2100
  "args": {
2223
2101
  "path": {
2224
- "description": "Path to apps directory (overrides project config)",
2102
+ "description": "Path to blocks directory (overrides project config)",
2225
2103
  "name": "path"
2226
2104
  }
2227
2105
  },
2228
- "description": "Pull single-page app bundles from WordPress into local files",
2106
+ "description": "Pull the dynamic blocks Loopress registers on WordPress into blocks/<slug>/ folders",
2229
2107
  "examples": [
2230
- "$ lps app pull"
2108
+ "$ lps block pull"
2231
2109
  ],
2232
2110
  "flags": {
2233
2111
  "json": {
@@ -2261,7 +2139,7 @@
2261
2139
  },
2262
2140
  "hasDynamicHelp": false,
2263
2141
  "hiddenAliases": [],
2264
- "id": "app:pull",
2142
+ "id": "block:pull",
2265
2143
  "pluginAlias": "@loopress/cli",
2266
2144
  "pluginName": "@loopress/cli",
2267
2145
  "pluginType": "core",
@@ -2295,23 +2173,22 @@
2295
2173
  "relativePath": [
2296
2174
  "dist",
2297
2175
  "commands",
2298
- "app",
2176
+ "block",
2299
2177
  "pull.js"
2300
2178
  ]
2301
2179
  },
2302
- "app:push": {
2180
+ "block:push": {
2303
2181
  "aliases": [],
2304
2182
  "args": {
2305
- "name": {
2306
- "description": "Push only this app (defaults to every app in the directory)",
2307
- "name": "name"
2183
+ "path": {
2184
+ "description": "Path to blocks directory (overrides project config)",
2185
+ "name": "path"
2308
2186
  }
2309
2187
  },
2310
- "description": "Build and push single-page app bundles to WordPress. Each app is an `apps/<name>/` directory holding a loopress.app.json and a dist/ folder. When the app has a package.json with a `build` script, it runs first (use --no-build to skip it). Only files whose content changed are uploaded.",
2188
+ "description": "Push local dynamic blocks (blocks/<slug>/ holding block.json, render.php, and optionally style.css and view.js) to WordPress, registered as loopress/<slug> and placed with <!-- wp:loopress/<slug> /-->. Each block is replaced as a whole. Create or update only, never deletes a block (use `lps block rm`).",
2311
2189
  "examples": [
2312
- "$ lps app push",
2313
- "$ lps app push search",
2314
- "$ lps app push --no-build"
2190
+ "$ lps block push",
2191
+ "$ lps block push --dry-run"
2315
2192
  ],
2316
2193
  "flags": {
2317
2194
  "json": {
@@ -2340,12 +2217,6 @@
2340
2217
  "allowNo": false,
2341
2218
  "type": "boolean"
2342
2219
  },
2343
- "build": {
2344
- "description": "Run the app's package.json build script before pushing",
2345
- "name": "build",
2346
- "allowNo": true,
2347
- "type": "boolean"
2348
- },
2349
2220
  "dry-run": {
2350
2221
  "char": "d",
2351
2222
  "description": "Show what would change without making changes",
@@ -2363,7 +2234,7 @@
2363
2234
  },
2364
2235
  "hasDynamicHelp": false,
2365
2236
  "hiddenAliases": [],
2366
- "id": "app:push",
2237
+ "id": "block:push",
2367
2238
  "pluginAlias": "@loopress/cli",
2368
2239
  "pluginName": "@loopress/cli",
2369
2240
  "pluginType": "core",
@@ -2397,24 +2268,25 @@
2397
2268
  "relativePath": [
2398
2269
  "dist",
2399
2270
  "commands",
2400
- "app",
2271
+ "block",
2401
2272
  "push.js"
2402
2273
  ]
2403
2274
  },
2404
- "app:rm": {
2275
+ "block:rm": {
2405
2276
  "aliases": [
2406
- "app:remove"
2277
+ "block:remove"
2407
2278
  ],
2408
2279
  "args": {
2409
- "name": {
2410
- "description": "App to remove from WordPress",
2411
- "name": "name",
2280
+ "slug": {
2281
+ "description": "The block to remove, its blocks/ folder name (e.g. \"hero\")",
2282
+ "name": "slug",
2412
2283
  "required": true
2413
2284
  }
2414
2285
  },
2415
- "description": "Remove a single-page app from WordPress: deletes its bundle from wp-content/loopress/apps/ and unregisters the shortcode. Local files are left untouched.",
2286
+ "description": "Remove a dynamic block from WordPress. A <!-- wp:loopress/<slug> /--> left in a page or template renders nothing until it is pushed again. Local files are left untouched.",
2416
2287
  "examples": [
2417
- "$ lps app rm search"
2288
+ "$ lps block rm hero",
2289
+ "$ lps block rm hero --yes"
2418
2290
  ],
2419
2291
  "flags": {
2420
2292
  "json": {
@@ -2448,7 +2320,7 @@
2448
2320
  },
2449
2321
  "hasDynamicHelp": false,
2450
2322
  "hiddenAliases": [],
2451
- "id": "app:rm",
2323
+ "id": "block:rm",
2452
2324
  "pluginAlias": "@loopress/cli",
2453
2325
  "pluginName": "@loopress/cli",
2454
2326
  "pluginType": "core",
@@ -2482,10 +2354,108 @@
2482
2354
  "relativePath": [
2483
2355
  "dist",
2484
2356
  "commands",
2485
- "app",
2357
+ "block",
2486
2358
  "rm.js"
2487
2359
  ]
2488
2360
  },
2361
+ "block:rollback": {
2362
+ "aliases": [],
2363
+ "args": {
2364
+ "path": {
2365
+ "description": "Path to blocks directory (overrides project config)",
2366
+ "name": "path"
2367
+ }
2368
+ },
2369
+ "description": "Restore dynamic blocks to a snapshot taken automatically before an earlier `lps block push`",
2370
+ "examples": [
2371
+ "$ lps block rollback",
2372
+ "$ lps block rollback --list",
2373
+ "$ lps block rollback --to 1732000000000",
2374
+ "$ lps block rollback --dry-run"
2375
+ ],
2376
+ "flags": {
2377
+ "json": {
2378
+ "description": "Format output as json.",
2379
+ "helpGroup": "GLOBAL",
2380
+ "name": "json",
2381
+ "allowNo": false,
2382
+ "type": "boolean"
2383
+ },
2384
+ "env": {
2385
+ "description": "Target environment by name (default: \"local\", or the project's only environment)",
2386
+ "name": "env",
2387
+ "hasDynamicHelp": false,
2388
+ "multiple": false,
2389
+ "type": "option"
2390
+ },
2391
+ "dry-run": {
2392
+ "char": "d",
2393
+ "description": "Show what would change without making changes",
2394
+ "name": "dry-run",
2395
+ "allowNo": false,
2396
+ "type": "boolean"
2397
+ },
2398
+ "yes": {
2399
+ "char": "y",
2400
+ "description": "Answer yes to confirmation prompts",
2401
+ "name": "yes",
2402
+ "allowNo": false,
2403
+ "type": "boolean"
2404
+ },
2405
+ "list": {
2406
+ "description": "List available snapshots instead of rolling back",
2407
+ "name": "list",
2408
+ "allowNo": false,
2409
+ "type": "boolean"
2410
+ },
2411
+ "to": {
2412
+ "description": "Roll back to this snapshot id instead of the most recent one",
2413
+ "name": "to",
2414
+ "hasDynamicHelp": false,
2415
+ "multiple": false,
2416
+ "type": "option"
2417
+ }
2418
+ },
2419
+ "hasDynamicHelp": false,
2420
+ "hiddenAliases": [],
2421
+ "id": "block:rollback",
2422
+ "pluginAlias": "@loopress/cli",
2423
+ "pluginName": "@loopress/cli",
2424
+ "pluginType": "core",
2425
+ "strict": true,
2426
+ "enableJsonFlag": true,
2427
+ "dryRunFlag": {
2428
+ "dry-run": {
2429
+ "char": "d",
2430
+ "description": "Show what would change without making changes",
2431
+ "allowNo": false,
2432
+ "type": "boolean"
2433
+ }
2434
+ },
2435
+ "honorsExclude": false,
2436
+ "skipUnsupportedFlag": {
2437
+ "skip-unsupported": {
2438
+ "description": "Skip the resources the project uses but this site can't hold (a missing plugin, a Full feature on Light) instead of failing, and warn about each",
2439
+ "allowNo": false,
2440
+ "type": "boolean"
2441
+ }
2442
+ },
2443
+ "yesFlag": {
2444
+ "yes": {
2445
+ "char": "y",
2446
+ "description": "Answer yes to confirmation prompts",
2447
+ "allowNo": false,
2448
+ "type": "boolean"
2449
+ }
2450
+ },
2451
+ "isESM": true,
2452
+ "relativePath": [
2453
+ "dist",
2454
+ "commands",
2455
+ "block",
2456
+ "rollback.js"
2457
+ ]
2458
+ },
2489
2459
  "composer:init": {
2490
2460
  "aliases": [],
2491
2461
  "args": {},
@@ -3738,19 +3708,19 @@
3738
3708
  "rollback.js"
3739
3709
  ]
3740
3710
  },
3741
- "meta:diff": {
3711
+ "hook:diff": {
3742
3712
  "aliases": [],
3743
3713
  "args": {
3744
3714
  "path": {
3745
- "description": "Path to meta directory (overrides project config)",
3715
+ "description": "Path to hooks directory (overrides project config)",
3746
3716
  "name": "path"
3747
3717
  }
3748
3718
  },
3749
- "description": "Show what differs in post meta keys between your local meta/ files and a WordPress environment, or between two environments",
3719
+ "description": "Show what differs in hook files between your local files and a WordPress environment, or between two environments",
3750
3720
  "examples": [
3751
- "$ lps meta diff",
3752
- "$ lps meta diff --env staging",
3753
- "$ lps meta diff --env staging --against production"
3721
+ "$ lps hook diff",
3722
+ "$ lps hook diff --env staging",
3723
+ "$ lps hook diff --env staging --against production"
3754
3724
  ],
3755
3725
  "flags": {
3756
3726
  "json": {
@@ -3777,7 +3747,7 @@
3777
3747
  },
3778
3748
  "hasDynamicHelp": false,
3779
3749
  "hiddenAliases": [],
3780
- "id": "meta:diff",
3750
+ "id": "hook:diff",
3781
3751
  "pluginAlias": "@loopress/cli",
3782
3752
  "pluginName": "@loopress/cli",
3783
3753
  "pluginType": "core",
@@ -3819,16 +3789,16 @@
3819
3789
  "relativePath": [
3820
3790
  "dist",
3821
3791
  "commands",
3822
- "meta",
3792
+ "hook",
3823
3793
  "diff.js"
3824
3794
  ]
3825
3795
  },
3826
- "meta:list": {
3796
+ "hook:list": {
3827
3797
  "aliases": [],
3828
3798
  "args": {},
3829
- "description": "List the meta keys registered for each post type on WordPress (with register_post_meta()), and whether Loopress declares them. Only Loopress ones are pulled and pushed.",
3799
+ "description": "List hook files (actions, filters, cron) currently on WordPress",
3830
3800
  "examples": [
3831
- "$ lps meta list"
3801
+ "$ lps hook list"
3832
3802
  ],
3833
3803
  "flags": {
3834
3804
  "json": {
@@ -3848,7 +3818,7 @@
3848
3818
  },
3849
3819
  "hasDynamicHelp": false,
3850
3820
  "hiddenAliases": [],
3851
- "id": "meta:list",
3821
+ "id": "hook:list",
3852
3822
  "pluginAlias": "@loopress/cli",
3853
3823
  "pluginName": "@loopress/cli",
3854
3824
  "pluginType": "core",
@@ -3882,21 +3852,22 @@
3882
3852
  "relativePath": [
3883
3853
  "dist",
3884
3854
  "commands",
3885
- "meta",
3855
+ "hook",
3886
3856
  "list.js"
3887
3857
  ]
3888
3858
  },
3889
- "meta:pull": {
3859
+ "hook:pull": {
3890
3860
  "aliases": [],
3891
3861
  "args": {
3892
3862
  "path": {
3893
- "description": "Path to the meta directory (overrides project config)",
3863
+ "description": "Path to hooks directory (overrides project config)",
3894
3864
  "name": "path"
3895
3865
  }
3896
3866
  },
3897
- "description": "Pull the post meta keys Loopress manages on WordPress into meta/<post-type>.json files, never their values. Keys registered by a theme or another plugin are never pulled, see `lps meta list`.",
3867
+ "description": "Pull hook files (actions, filters, cron) from WordPress into local files",
3898
3868
  "examples": [
3899
- "$ lps meta pull"
3869
+ "$ lps hook pull",
3870
+ "$ lps hook pull ./hooks"
3900
3871
  ],
3901
3872
  "flags": {
3902
3873
  "json": {
@@ -3930,7 +3901,7 @@
3930
3901
  },
3931
3902
  "hasDynamicHelp": false,
3932
3903
  "hiddenAliases": [],
3933
- "id": "meta:pull",
3904
+ "id": "hook:pull",
3934
3905
  "pluginAlias": "@loopress/cli",
3935
3906
  "pluginName": "@loopress/cli",
3936
3907
  "pluginType": "core",
@@ -3964,21 +3935,23 @@
3964
3935
  "relativePath": [
3965
3936
  "dist",
3966
3937
  "commands",
3967
- "meta",
3938
+ "hook",
3968
3939
  "pull.js"
3969
3940
  ]
3970
3941
  },
3971
- "meta:push": {
3942
+ "hook:push": {
3972
3943
  "aliases": [],
3973
3944
  "args": {
3974
3945
  "path": {
3975
- "description": "Path to the meta directory (overrides project config)",
3946
+ "description": "Path to hooks directory (overrides project config)",
3976
3947
  "name": "path"
3977
3948
  }
3978
3949
  },
3979
- "description": "Push local post meta keys (meta/<post-type>.json, each key mapped to its register_post_meta() arguments) to WordPress. Create or update only, never deletes (use `lps meta rm`), never touches meta values.",
3950
+ "description": "Push local hook files (actions, filters, cron) to WordPress",
3980
3951
  "examples": [
3981
- "$ lps meta push"
3952
+ "$ lps hook push",
3953
+ "$ lps hook push ./hooks",
3954
+ "$ lps hook push --prune"
3982
3955
  ],
3983
3956
  "flags": {
3984
3957
  "json": {
@@ -4020,11 +3993,17 @@
4020
3993
  "name": "yes",
4021
3994
  "allowNo": false,
4022
3995
  "type": "boolean"
3996
+ },
3997
+ "prune": {
3998
+ "description": "Delete server-side hook files not present locally after pushing",
3999
+ "name": "prune",
4000
+ "allowNo": false,
4001
+ "type": "boolean"
4023
4002
  }
4024
4003
  },
4025
4004
  "hasDynamicHelp": false,
4026
4005
  "hiddenAliases": [],
4027
- "id": "meta:push",
4006
+ "id": "hook:push",
4028
4007
  "pluginAlias": "@loopress/cli",
4029
4008
  "pluginName": "@loopress/cli",
4030
4009
  "pluginType": "core",
@@ -4058,25 +4037,25 @@
4058
4037
  "relativePath": [
4059
4038
  "dist",
4060
4039
  "commands",
4061
- "meta",
4040
+ "hook",
4062
4041
  "push.js"
4063
4042
  ]
4064
4043
  },
4065
- "meta:rm": {
4044
+ "hook:rm": {
4066
4045
  "aliases": [
4067
- "meta:remove"
4046
+ "hook:remove"
4068
4047
  ],
4069
4048
  "args": {
4070
- "slug": {
4071
- "description": "The post meta slug, its meta/ file name without .json",
4072
- "name": "slug",
4049
+ "filename": {
4050
+ "description": "The hook file to remove, its slug without the .php extension (e.g. \"hello\" or \"invoice-pdf/[order_id]\")",
4051
+ "name": "filename",
4073
4052
  "required": true
4074
4053
  }
4075
4054
  },
4076
- "description": "Stop registering the Loopress meta keys of one post type (its meta/<post-type>.json file) on WordPress. Their values are kept in the database.",
4055
+ "description": "Remove one hook file (action, filter, cron) from WordPress",
4077
4056
  "examples": [
4078
- "$ lps meta rm <slug>",
4079
- "$ lps meta remove <slug> --yes"
4057
+ "$ lps hook rm hello",
4058
+ "$ lps hook remove hello --yes"
4080
4059
  ],
4081
4060
  "flags": {
4082
4061
  "json": {
@@ -4110,7 +4089,7 @@
4110
4089
  },
4111
4090
  "hasDynamicHelp": false,
4112
4091
  "hiddenAliases": [],
4113
- "id": "meta:rm",
4092
+ "id": "hook:rm",
4114
4093
  "pluginAlias": "@loopress/cli",
4115
4094
  "pluginName": "@loopress/cli",
4116
4095
  "pluginType": "core",
@@ -4144,24 +4123,24 @@
4144
4123
  "relativePath": [
4145
4124
  "dist",
4146
4125
  "commands",
4147
- "meta",
4126
+ "hook",
4148
4127
  "rm.js"
4149
4128
  ]
4150
4129
  },
4151
- "meta:rollback": {
4130
+ "hook:rollback": {
4152
4131
  "aliases": [],
4153
4132
  "args": {
4154
4133
  "path": {
4155
- "description": "Path to meta directory (overrides project config)",
4134
+ "description": "Path to hooks directory (overrides project config)",
4156
4135
  "name": "path"
4157
4136
  }
4158
4137
  },
4159
- "description": "Restore post meta keys to a snapshot taken automatically before an earlier `lps meta push`",
4138
+ "description": "Restore hook files to a snapshot taken automatically before an earlier `lps hook push`",
4160
4139
  "examples": [
4161
- "$ lps meta rollback",
4162
- "$ lps meta rollback --list",
4163
- "$ lps meta rollback --to 1732000000000",
4164
- "$ lps meta rollback --dry-run"
4140
+ "$ lps hook rollback",
4141
+ "$ lps hook rollback --list",
4142
+ "$ lps hook rollback --to 1732000000000",
4143
+ "$ lps hook rollback --dry-run"
4165
4144
  ],
4166
4145
  "flags": {
4167
4146
  "json": {
@@ -4208,7 +4187,7 @@
4208
4187
  },
4209
4188
  "hasDynamicHelp": false,
4210
4189
  "hiddenAliases": [],
4211
- "id": "meta:rollback",
4190
+ "id": "hook:rollback",
4212
4191
  "pluginAlias": "@loopress/cli",
4213
4192
  "pluginName": "@loopress/cli",
4214
4193
  "pluginType": "core",
@@ -4242,23 +4221,23 @@
4242
4221
  "relativePath": [
4243
4222
  "dist",
4244
4223
  "commands",
4245
- "meta",
4224
+ "hook",
4246
4225
  "rollback.js"
4247
4226
  ]
4248
4227
  },
4249
- "hook:diff": {
4228
+ "meta:diff": {
4250
4229
  "aliases": [],
4251
4230
  "args": {
4252
4231
  "path": {
4253
- "description": "Path to hooks directory (overrides project config)",
4232
+ "description": "Path to meta directory (overrides project config)",
4254
4233
  "name": "path"
4255
4234
  }
4256
4235
  },
4257
- "description": "Show what differs in hook files between your local files and a WordPress environment, or between two environments",
4236
+ "description": "Show what differs in post meta keys between your local meta/ files and a WordPress environment, or between two environments",
4258
4237
  "examples": [
4259
- "$ lps hook diff",
4260
- "$ lps hook diff --env staging",
4261
- "$ lps hook diff --env staging --against production"
4238
+ "$ lps meta diff",
4239
+ "$ lps meta diff --env staging",
4240
+ "$ lps meta diff --env staging --against production"
4262
4241
  ],
4263
4242
  "flags": {
4264
4243
  "json": {
@@ -4285,7 +4264,7 @@
4285
4264
  },
4286
4265
  "hasDynamicHelp": false,
4287
4266
  "hiddenAliases": [],
4288
- "id": "hook:diff",
4267
+ "id": "meta:diff",
4289
4268
  "pluginAlias": "@loopress/cli",
4290
4269
  "pluginName": "@loopress/cli",
4291
4270
  "pluginType": "core",
@@ -4327,16 +4306,16 @@
4327
4306
  "relativePath": [
4328
4307
  "dist",
4329
4308
  "commands",
4330
- "hook",
4309
+ "meta",
4331
4310
  "diff.js"
4332
4311
  ]
4333
4312
  },
4334
- "hook:list": {
4313
+ "meta:list": {
4335
4314
  "aliases": [],
4336
4315
  "args": {},
4337
- "description": "List hook files (actions, filters, cron) currently on WordPress",
4316
+ "description": "List the meta keys registered for each post type on WordPress (with register_post_meta()), and whether Loopress declares them. Only Loopress ones are pulled and pushed.",
4338
4317
  "examples": [
4339
- "$ lps hook list"
4318
+ "$ lps meta list"
4340
4319
  ],
4341
4320
  "flags": {
4342
4321
  "json": {
@@ -4356,7 +4335,7 @@
4356
4335
  },
4357
4336
  "hasDynamicHelp": false,
4358
4337
  "hiddenAliases": [],
4359
- "id": "hook:list",
4338
+ "id": "meta:list",
4360
4339
  "pluginAlias": "@loopress/cli",
4361
4340
  "pluginName": "@loopress/cli",
4362
4341
  "pluginType": "core",
@@ -4390,22 +4369,21 @@
4390
4369
  "relativePath": [
4391
4370
  "dist",
4392
4371
  "commands",
4393
- "hook",
4372
+ "meta",
4394
4373
  "list.js"
4395
4374
  ]
4396
4375
  },
4397
- "hook:pull": {
4376
+ "meta:pull": {
4398
4377
  "aliases": [],
4399
4378
  "args": {
4400
4379
  "path": {
4401
- "description": "Path to hooks directory (overrides project config)",
4380
+ "description": "Path to the meta directory (overrides project config)",
4402
4381
  "name": "path"
4403
4382
  }
4404
4383
  },
4405
- "description": "Pull hook files (actions, filters, cron) from WordPress into local files",
4384
+ "description": "Pull the post meta keys Loopress manages on WordPress into meta/<post-type>.json files, never their values. Keys registered by a theme or another plugin are never pulled, see `lps meta list`.",
4406
4385
  "examples": [
4407
- "$ lps hook pull",
4408
- "$ lps hook pull ./hooks"
4386
+ "$ lps meta pull"
4409
4387
  ],
4410
4388
  "flags": {
4411
4389
  "json": {
@@ -4439,7 +4417,7 @@
4439
4417
  },
4440
4418
  "hasDynamicHelp": false,
4441
4419
  "hiddenAliases": [],
4442
- "id": "hook:pull",
4420
+ "id": "meta:pull",
4443
4421
  "pluginAlias": "@loopress/cli",
4444
4422
  "pluginName": "@loopress/cli",
4445
4423
  "pluginType": "core",
@@ -4473,23 +4451,21 @@
4473
4451
  "relativePath": [
4474
4452
  "dist",
4475
4453
  "commands",
4476
- "hook",
4454
+ "meta",
4477
4455
  "pull.js"
4478
4456
  ]
4479
4457
  },
4480
- "hook:push": {
4458
+ "meta:push": {
4481
4459
  "aliases": [],
4482
4460
  "args": {
4483
4461
  "path": {
4484
- "description": "Path to hooks directory (overrides project config)",
4462
+ "description": "Path to the meta directory (overrides project config)",
4485
4463
  "name": "path"
4486
4464
  }
4487
4465
  },
4488
- "description": "Push local hook files (actions, filters, cron) to WordPress",
4466
+ "description": "Push local post meta keys (meta/<post-type>.json, each key mapped to its register_post_meta() arguments) to WordPress. Create or update only, never deletes (use `lps meta rm`), never touches meta values.",
4489
4467
  "examples": [
4490
- "$ lps hook push",
4491
- "$ lps hook push ./hooks",
4492
- "$ lps hook push --prune"
4468
+ "$ lps meta push"
4493
4469
  ],
4494
4470
  "flags": {
4495
4471
  "json": {
@@ -4531,17 +4507,11 @@
4531
4507
  "name": "yes",
4532
4508
  "allowNo": false,
4533
4509
  "type": "boolean"
4534
- },
4535
- "prune": {
4536
- "description": "Delete server-side hook files not present locally after pushing",
4537
- "name": "prune",
4538
- "allowNo": false,
4539
- "type": "boolean"
4540
4510
  }
4541
4511
  },
4542
4512
  "hasDynamicHelp": false,
4543
4513
  "hiddenAliases": [],
4544
- "id": "hook:push",
4514
+ "id": "meta:push",
4545
4515
  "pluginAlias": "@loopress/cli",
4546
4516
  "pluginName": "@loopress/cli",
4547
4517
  "pluginType": "core",
@@ -4575,25 +4545,25 @@
4575
4545
  "relativePath": [
4576
4546
  "dist",
4577
4547
  "commands",
4578
- "hook",
4548
+ "meta",
4579
4549
  "push.js"
4580
4550
  ]
4581
4551
  },
4582
- "hook:rm": {
4552
+ "meta:rm": {
4583
4553
  "aliases": [
4584
- "hook:remove"
4554
+ "meta:remove"
4585
4555
  ],
4586
4556
  "args": {
4587
- "filename": {
4588
- "description": "The hook file to remove, its slug without the .php extension (e.g. \"hello\" or \"invoice-pdf/[order_id]\")",
4589
- "name": "filename",
4557
+ "slug": {
4558
+ "description": "The post meta slug, its meta/ file name without .json",
4559
+ "name": "slug",
4590
4560
  "required": true
4591
4561
  }
4592
4562
  },
4593
- "description": "Remove one hook file (action, filter, cron) from WordPress",
4563
+ "description": "Stop registering the Loopress meta keys of one post type (its meta/<post-type>.json file) on WordPress. Their values are kept in the database.",
4594
4564
  "examples": [
4595
- "$ lps hook rm hello",
4596
- "$ lps hook remove hello --yes"
4565
+ "$ lps meta rm <slug>",
4566
+ "$ lps meta remove <slug> --yes"
4597
4567
  ],
4598
4568
  "flags": {
4599
4569
  "json": {
@@ -4627,7 +4597,7 @@
4627
4597
  },
4628
4598
  "hasDynamicHelp": false,
4629
4599
  "hiddenAliases": [],
4630
- "id": "hook:rm",
4600
+ "id": "meta:rm",
4631
4601
  "pluginAlias": "@loopress/cli",
4632
4602
  "pluginName": "@loopress/cli",
4633
4603
  "pluginType": "core",
@@ -4661,24 +4631,24 @@
4661
4631
  "relativePath": [
4662
4632
  "dist",
4663
4633
  "commands",
4664
- "hook",
4634
+ "meta",
4665
4635
  "rm.js"
4666
4636
  ]
4667
4637
  },
4668
- "hook:rollback": {
4638
+ "meta:rollback": {
4669
4639
  "aliases": [],
4670
4640
  "args": {
4671
4641
  "path": {
4672
- "description": "Path to hooks directory (overrides project config)",
4642
+ "description": "Path to meta directory (overrides project config)",
4673
4643
  "name": "path"
4674
4644
  }
4675
4645
  },
4676
- "description": "Restore hook files to a snapshot taken automatically before an earlier `lps hook push`",
4646
+ "description": "Restore post meta keys to a snapshot taken automatically before an earlier `lps meta push`",
4677
4647
  "examples": [
4678
- "$ lps hook rollback",
4679
- "$ lps hook rollback --list",
4680
- "$ lps hook rollback --to 1732000000000",
4681
- "$ lps hook rollback --dry-run"
4648
+ "$ lps meta rollback",
4649
+ "$ lps meta rollback --list",
4650
+ "$ lps meta rollback --to 1732000000000",
4651
+ "$ lps meta rollback --dry-run"
4682
4652
  ],
4683
4653
  "flags": {
4684
4654
  "json": {
@@ -4725,7 +4695,7 @@
4725
4695
  },
4726
4696
  "hasDynamicHelp": false,
4727
4697
  "hiddenAliases": [],
4728
- "id": "hook:rollback",
4698
+ "id": "meta:rollback",
4729
4699
  "pluginAlias": "@loopress/cli",
4730
4700
  "pluginName": "@loopress/cli",
4731
4701
  "pluginType": "core",
@@ -4759,7 +4729,7 @@
4759
4729
  "relativePath": [
4760
4730
  "dist",
4761
4731
  "commands",
4762
- "hook",
4732
+ "meta",
4763
4733
  "rollback.js"
4764
4734
  ]
4765
4735
  },
@@ -5008,103 +4978,19 @@
5008
4978
  "push.js"
5009
4979
  ]
5010
4980
  },
5011
- "option:add": {
5012
- "aliases": [],
5013
- "args": {
5014
- "name": {
5015
- "description": "Option name to start tracking (see `lps option list`)",
5016
- "name": "name",
5017
- "required": true
5018
- }
5019
- },
5020
- "description": "Fetch a WordPress option by name and start tracking it locally. Run `lps option list` first to find the name: this copies a raw value across environments, verify it does not embed post/user IDs before pushing it elsewhere.",
5021
- "examples": [
5022
- "$ lps option add wpseo_titles",
5023
- "$ lps option add siteurl"
5024
- ],
5025
- "flags": {
5026
- "json": {
5027
- "description": "Format output as json.",
5028
- "helpGroup": "GLOBAL",
5029
- "name": "json",
5030
- "allowNo": false,
5031
- "type": "boolean"
5032
- },
5033
- "env": {
5034
- "description": "Target environment by name (default: \"local\", or the project's only environment)",
5035
- "name": "env",
5036
- "hasDynamicHelp": false,
5037
- "multiple": false,
5038
- "type": "option"
5039
- },
5040
- "dry-run": {
5041
- "char": "d",
5042
- "description": "Show what would change without making changes",
5043
- "name": "dry-run",
5044
- "allowNo": false,
5045
- "type": "boolean"
5046
- },
5047
- "path": {
5048
- "description": "Path to options directory (overrides project config)",
5049
- "name": "path",
5050
- "hasDynamicHelp": false,
5051
- "multiple": false,
5052
- "type": "option"
5053
- }
5054
- },
5055
- "hasDynamicHelp": false,
5056
- "hiddenAliases": [],
5057
- "id": "option:add",
5058
- "pluginAlias": "@loopress/cli",
5059
- "pluginName": "@loopress/cli",
5060
- "pluginType": "core",
5061
- "strict": true,
5062
- "enableJsonFlag": true,
5063
- "dryRunFlag": {
5064
- "dry-run": {
5065
- "char": "d",
5066
- "description": "Show what would change without making changes",
5067
- "allowNo": false,
5068
- "type": "boolean"
5069
- }
5070
- },
5071
- "honorsExclude": false,
5072
- "skipUnsupportedFlag": {
5073
- "skip-unsupported": {
5074
- "description": "Skip the resources the project uses but this site can't hold (a missing plugin, a Full feature on Light) instead of failing, and warn about each",
5075
- "allowNo": false,
5076
- "type": "boolean"
5077
- }
5078
- },
5079
- "yesFlag": {
5080
- "yes": {
5081
- "char": "y",
5082
- "description": "Answer yes to confirmation prompts",
5083
- "allowNo": false,
5084
- "type": "boolean"
5085
- }
5086
- },
5087
- "isESM": true,
5088
- "relativePath": [
5089
- "dist",
5090
- "commands",
5091
- "option",
5092
- "add.js"
5093
- ]
5094
- },
5095
- "option:diff": {
4981
+ "pattern:diff": {
5096
4982
  "aliases": [],
5097
4983
  "args": {
5098
4984
  "path": {
5099
- "description": "Path to options directory (overrides project config)",
4985
+ "description": "Path to patterns directory (overrides project config)",
5100
4986
  "name": "path"
5101
4987
  }
5102
4988
  },
5103
- "description": "Show what differs, for locally tracked options, between your local files and a WordPress environment, or between two environments",
4989
+ "description": "Show what differs in block patterns between your local patterns/ files and a WordPress environment, or between two environments",
5104
4990
  "examples": [
5105
- "$ lps option diff",
5106
- "$ lps option diff --env staging",
5107
- "$ lps option diff --env staging --against production"
4991
+ "$ lps pattern diff",
4992
+ "$ lps pattern diff --env staging",
4993
+ "$ lps pattern diff --env staging --against production"
5108
4994
  ],
5109
4995
  "flags": {
5110
4996
  "json": {
@@ -5131,7 +5017,7 @@
5131
5017
  },
5132
5018
  "hasDynamicHelp": false,
5133
5019
  "hiddenAliases": [],
5134
- "id": "option:diff",
5020
+ "id": "pattern:diff",
5135
5021
  "pluginAlias": "@loopress/cli",
5136
5022
  "pluginName": "@loopress/cli",
5137
5023
  "pluginType": "core",
@@ -5173,17 +5059,16 @@
5173
5059
  "relativePath": [
5174
5060
  "dist",
5175
5061
  "commands",
5176
- "option",
5062
+ "pattern",
5177
5063
  "diff.js"
5178
5064
  ]
5179
5065
  },
5180
- "option:list": {
5066
+ "pattern:list": {
5181
5067
  "aliases": [],
5182
5068
  "args": {},
5183
- "description": "List WordPress option names currently on the site (names and autoload only, never values). CORE flags a WordPress-native default (certain); SOURCE? is a best-effort guessed plugin slug, found by name or by scanning active plugins' own PHP source (uncertain unless confirmed, occasionally wrong or blank, never trust it over CORE); PLUGIN is that slug's own declared display name, a label only, no confidence of its own. Use this to find the name of the option you want, then `lps option add <name>` to track it.",
5069
+ "description": "List the block patterns registered on WordPress by Loopress, the theme and plugins (not WordPress core). Only Loopress ones are pulled and pushed.",
5184
5070
  "examples": [
5185
- "$ lps option list",
5186
- "$ lps option list --no-core"
5071
+ "$ lps pattern list"
5187
5072
  ],
5188
5073
  "flags": {
5189
5074
  "json": {
@@ -5199,17 +5084,11 @@
5199
5084
  "hasDynamicHelp": false,
5200
5085
  "multiple": false,
5201
5086
  "type": "option"
5202
- },
5203
- "no-core": {
5204
- "description": "Exclude WordPress-native default options and the CORE column from the output, including --json",
5205
- "name": "no-core",
5206
- "allowNo": false,
5207
- "type": "boolean"
5208
5087
  }
5209
5088
  },
5210
5089
  "hasDynamicHelp": false,
5211
5090
  "hiddenAliases": [],
5212
- "id": "option:list",
5091
+ "id": "pattern:list",
5213
5092
  "pluginAlias": "@loopress/cli",
5214
5093
  "pluginName": "@loopress/cli",
5215
5094
  "pluginType": "core",
@@ -5243,21 +5122,21 @@
5243
5122
  "relativePath": [
5244
5123
  "dist",
5245
5124
  "commands",
5246
- "option",
5125
+ "pattern",
5247
5126
  "list.js"
5248
5127
  ]
5249
5128
  },
5250
- "option:pull": {
5129
+ "pattern:pull": {
5251
5130
  "aliases": [],
5252
5131
  "args": {
5253
5132
  "path": {
5254
- "description": "Path to options directory (overrides project config)",
5133
+ "description": "Path to the patterns directory (overrides project config)",
5255
5134
  "name": "path"
5256
5135
  }
5257
5136
  },
5258
- "description": "Refresh locally tracked options from WordPress. Options not yet tracked are never pulled, run `lps option add <name>` for those first.",
5137
+ "description": "Pull the block patterns Loopress manages on WordPress into patterns/<slug>.html files. Patterns registered by the theme or a plugin are never pulled, see `lps pattern list`.",
5259
5138
  "examples": [
5260
- "$ lps option pull"
5139
+ "$ lps pattern pull"
5261
5140
  ],
5262
5141
  "flags": {
5263
5142
  "json": {
@@ -5291,7 +5170,7 @@
5291
5170
  },
5292
5171
  "hasDynamicHelp": false,
5293
5172
  "hiddenAliases": [],
5294
- "id": "option:pull",
5173
+ "id": "pattern:pull",
5295
5174
  "pluginAlias": "@loopress/cli",
5296
5175
  "pluginName": "@loopress/cli",
5297
5176
  "pluginType": "core",
@@ -5325,21 +5204,21 @@
5325
5204
  "relativePath": [
5326
5205
  "dist",
5327
5206
  "commands",
5328
- "option",
5207
+ "pattern",
5329
5208
  "pull.js"
5330
5209
  ]
5331
5210
  },
5332
- "option:push": {
5211
+ "pattern:push": {
5333
5212
  "aliases": [],
5334
5213
  "args": {
5335
5214
  "path": {
5336
- "description": "Path to options directory (overrides project config)",
5215
+ "description": "Path to the patterns directory (overrides project config)",
5337
5216
  "name": "path"
5338
5217
  }
5339
5218
  },
5340
- "description": "Push locally tracked, non-readonly options to WordPress (upsert only, never deletes an untracked option). Options marked \"readonly\": true in their local file are skipped, edit the file to override.",
5219
+ "description": "Push local block patterns (patterns/<slug>.html, block markup under a title/categories header) to WordPress, registered as loopress/<slug> and referenced with <!-- wp:pattern {\"slug\":\"loopress/<slug>\"} /-->. Create or update only, never deletes a pattern (use `lps pattern rm`).",
5341
5220
  "examples": [
5342
- "$ lps option push"
5221
+ "$ lps pattern push"
5343
5222
  ],
5344
5223
  "flags": {
5345
5224
  "json": {
@@ -5385,7 +5264,7 @@
5385
5264
  },
5386
5265
  "hasDynamicHelp": false,
5387
5266
  "hiddenAliases": [],
5388
- "id": "option:push",
5267
+ "id": "pattern:push",
5389
5268
  "pluginAlias": "@loopress/cli",
5390
5269
  "pluginName": "@loopress/cli",
5391
5270
  "pluginType": "core",
@@ -5419,25 +5298,25 @@
5419
5298
  "relativePath": [
5420
5299
  "dist",
5421
5300
  "commands",
5422
- "option",
5301
+ "pattern",
5423
5302
  "push.js"
5424
5303
  ]
5425
5304
  },
5426
- "option:rm": {
5305
+ "pattern:rm": {
5427
5306
  "aliases": [
5428
- "option:remove"
5307
+ "pattern:remove"
5429
5308
  ],
5430
5309
  "args": {
5431
- "name": {
5432
- "description": "Option name to stop tracking",
5433
- "name": "name",
5310
+ "slug": {
5311
+ "description": "The pattern slug, its patterns/ file name without .html",
5312
+ "name": "slug",
5434
5313
  "required": true
5435
5314
  }
5436
5315
  },
5437
- "description": "Stop tracking an option locally and delete it from WordPress. Local untracking always happens (git-reversible); pass --local-only to skip the WordPress delete and only stop tracking.",
5316
+ "description": "Stop registering a Loopress block pattern on WordPress. A wp:pattern reference to it renders nothing until it is pushed again, copies already inserted in posts stay.",
5438
5317
  "examples": [
5439
- "$ lps option rm wpseo_titles",
5440
- "$ lps option rm wpseo_titles --local-only"
5318
+ "$ lps pattern rm <slug>",
5319
+ "$ lps pattern remove <slug> --yes"
5441
5320
  ],
5442
5321
  "flags": {
5443
5322
  "json": {
@@ -5467,24 +5346,11 @@
5467
5346
  "name": "yes",
5468
5347
  "allowNo": false,
5469
5348
  "type": "boolean"
5470
- },
5471
- "local-only": {
5472
- "description": "Untrack locally without deleting the option on WordPress",
5473
- "name": "local-only",
5474
- "allowNo": false,
5475
- "type": "boolean"
5476
- },
5477
- "path": {
5478
- "description": "Path to options directory (overrides project config)",
5479
- "name": "path",
5480
- "hasDynamicHelp": false,
5481
- "multiple": false,
5482
- "type": "option"
5483
5349
  }
5484
5350
  },
5485
5351
  "hasDynamicHelp": false,
5486
5352
  "hiddenAliases": [],
5487
- "id": "option:rm",
5353
+ "id": "pattern:rm",
5488
5354
  "pluginAlias": "@loopress/cli",
5489
5355
  "pluginName": "@loopress/cli",
5490
5356
  "pluginType": "core",
@@ -5518,24 +5384,24 @@
5518
5384
  "relativePath": [
5519
5385
  "dist",
5520
5386
  "commands",
5521
- "option",
5387
+ "pattern",
5522
5388
  "rm.js"
5523
5389
  ]
5524
5390
  },
5525
- "option:rollback": {
5391
+ "pattern:rollback": {
5526
5392
  "aliases": [],
5527
5393
  "args": {
5528
5394
  "path": {
5529
- "description": "Path to options directory (overrides project config)",
5395
+ "description": "Path to patterns directory (overrides project config)",
5530
5396
  "name": "path"
5531
5397
  }
5532
5398
  },
5533
- "description": "Restore tracked options to a snapshot taken automatically before an earlier `lps option push`",
5399
+ "description": "Restore block patterns to a snapshot taken automatically before an earlier `lps pattern push`",
5534
5400
  "examples": [
5535
- "$ lps option rollback",
5536
- "$ lps option rollback --list",
5537
- "$ lps option rollback --to 1732000000000",
5538
- "$ lps option rollback --dry-run"
5401
+ "$ lps pattern rollback",
5402
+ "$ lps pattern rollback --list",
5403
+ "$ lps pattern rollback --to 1732000000000",
5404
+ "$ lps pattern rollback --dry-run"
5539
5405
  ],
5540
5406
  "flags": {
5541
5407
  "json": {
@@ -5582,7 +5448,7 @@
5582
5448
  },
5583
5449
  "hasDynamicHelp": false,
5584
5450
  "hiddenAliases": [],
5585
- "id": "option:rollback",
5451
+ "id": "pattern:rollback",
5586
5452
  "pluginAlias": "@loopress/cli",
5587
5453
  "pluginName": "@loopress/cli",
5588
5454
  "pluginType": "core",
@@ -5616,23 +5482,24 @@
5616
5482
  "relativePath": [
5617
5483
  "dist",
5618
5484
  "commands",
5619
- "option",
5485
+ "pattern",
5620
5486
  "rollback.js"
5621
5487
  ]
5622
5488
  },
5623
- "pattern:diff": {
5489
+ "plugin:add": {
5624
5490
  "aliases": [],
5625
5491
  "args": {
5626
- "path": {
5627
- "description": "Path to patterns directory (overrides project config)",
5628
- "name": "path"
5492
+ "slug": {
5493
+ "description": "Plugin slug on WordPress.org",
5494
+ "name": "slug",
5495
+ "required": true
5629
5496
  }
5630
5497
  },
5631
- "description": "Show what differs in block patterns between your local patterns/ files and a WordPress environment, or between two environments",
5498
+ "description": "Add a WordPress.org plugin to loopress.json",
5632
5499
  "examples": [
5633
- "$ lps pattern diff",
5634
- "$ lps pattern diff --env staging",
5635
- "$ lps pattern diff --env staging --against production"
5500
+ "$ lps plugin add woocommerce",
5501
+ "$ lps plugin add woocommerce --version 9.4.2",
5502
+ "$ lps plugin add contact-form-7 --dry-run"
5636
5503
  ],
5637
5504
  "flags": {
5638
5505
  "json": {
@@ -5649,9 +5516,16 @@
5649
5516
  "multiple": false,
5650
5517
  "type": "option"
5651
5518
  },
5652
- "against": {
5653
- "description": "Compare the primary environment against this second environment instead of against local files",
5654
- "name": "against",
5519
+ "dry-run": {
5520
+ "char": "d",
5521
+ "description": "Show what would change without making changes",
5522
+ "name": "dry-run",
5523
+ "allowNo": false,
5524
+ "type": "boolean"
5525
+ },
5526
+ "version": {
5527
+ "description": "Exact version to pin (default: \"latest\", tracked on every push)",
5528
+ "name": "version",
5655
5529
  "hasDynamicHelp": false,
5656
5530
  "multiple": false,
5657
5531
  "type": "option"
@@ -5659,7 +5533,7 @@
5659
5533
  },
5660
5534
  "hasDynamicHelp": false,
5661
5535
  "hiddenAliases": [],
5662
- "id": "pattern:diff",
5536
+ "id": "plugin:add",
5663
5537
  "pluginAlias": "@loopress/cli",
5664
5538
  "pluginName": "@loopress/cli",
5665
5539
  "pluginType": "core",
@@ -5673,7 +5547,7 @@
5673
5547
  "type": "boolean"
5674
5548
  }
5675
5549
  },
5676
- "honorsExclude": true,
5550
+ "honorsExclude": false,
5677
5551
  "skipUnsupportedFlag": {
5678
5552
  "skip-unsupported": {
5679
5553
  "description": "Skip the resources the project uses but this site can't hold (a missing plugin, a Full feature on Light) instead of failing, and warn about each",
@@ -5689,28 +5563,84 @@
5689
5563
  "type": "boolean"
5690
5564
  }
5691
5565
  },
5692
- "againstFlag": {
5693
- "against": {
5694
- "description": "Compare the primary environment against this second environment instead of against local files",
5695
- "input": [],
5566
+ "isESM": true,
5567
+ "relativePath": [
5568
+ "dist",
5569
+ "commands",
5570
+ "plugin",
5571
+ "add.js"
5572
+ ]
5573
+ },
5574
+ "plugin:audit": {
5575
+ "aliases": [],
5576
+ "args": {},
5577
+ "description": "Check the plugins in loopress.json for known vulnerabilities (wpvulnerability.net) and health issues",
5578
+ "examples": [
5579
+ "$ lps plugin audit"
5580
+ ],
5581
+ "flags": {
5582
+ "json": {
5583
+ "description": "Format output as json.",
5584
+ "helpGroup": "GLOBAL",
5585
+ "name": "json",
5586
+ "allowNo": false,
5587
+ "type": "boolean"
5588
+ },
5589
+ "env": {
5590
+ "description": "Target environment by name (default: \"local\", or the project's only environment)",
5591
+ "name": "env",
5592
+ "hasDynamicHelp": false,
5696
5593
  "multiple": false,
5697
5594
  "type": "option"
5698
5595
  }
5699
5596
  },
5597
+ "hasDynamicHelp": false,
5598
+ "hiddenAliases": [],
5599
+ "id": "plugin:audit",
5600
+ "pluginAlias": "@loopress/cli",
5601
+ "pluginName": "@loopress/cli",
5602
+ "pluginType": "core",
5603
+ "strict": true,
5604
+ "enableJsonFlag": true,
5605
+ "dryRunFlag": {
5606
+ "dry-run": {
5607
+ "char": "d",
5608
+ "description": "Show what would change without making changes",
5609
+ "allowNo": false,
5610
+ "type": "boolean"
5611
+ }
5612
+ },
5613
+ "honorsExclude": false,
5614
+ "skipUnsupportedFlag": {
5615
+ "skip-unsupported": {
5616
+ "description": "Skip the resources the project uses but this site can't hold (a missing plugin, a Full feature on Light) instead of failing, and warn about each",
5617
+ "allowNo": false,
5618
+ "type": "boolean"
5619
+ }
5620
+ },
5621
+ "yesFlag": {
5622
+ "yes": {
5623
+ "char": "y",
5624
+ "description": "Answer yes to confirmation prompts",
5625
+ "allowNo": false,
5626
+ "type": "boolean"
5627
+ }
5628
+ },
5700
5629
  "isESM": true,
5701
5630
  "relativePath": [
5702
5631
  "dist",
5703
5632
  "commands",
5704
- "pattern",
5705
- "diff.js"
5633
+ "plugin",
5634
+ "audit.js"
5706
5635
  ]
5707
5636
  },
5708
- "pattern:list": {
5637
+ "plugin:outdated": {
5709
5638
  "aliases": [],
5710
5639
  "args": {},
5711
- "description": "List the block patterns registered on WordPress by Loopress, the theme and plugins (not WordPress core). Only Loopress ones are pulled and pushed.",
5640
+ "description": "Compare the plugins in loopress.json to the latest WordPress.org versions (exits 1 when one is behind or cannot be checked)",
5712
5641
  "examples": [
5713
- "$ lps pattern list"
5642
+ "$ lps plugin outdated",
5643
+ "$ lps plugin outdated --json"
5714
5644
  ],
5715
5645
  "flags": {
5716
5646
  "json": {
@@ -5730,7 +5660,7 @@
5730
5660
  },
5731
5661
  "hasDynamicHelp": false,
5732
5662
  "hiddenAliases": [],
5733
- "id": "pattern:list",
5663
+ "id": "plugin:outdated",
5734
5664
  "pluginAlias": "@loopress/cli",
5735
5665
  "pluginName": "@loopress/cli",
5736
5666
  "pluginType": "core",
@@ -5764,21 +5694,17 @@
5764
5694
  "relativePath": [
5765
5695
  "dist",
5766
5696
  "commands",
5767
- "pattern",
5768
- "list.js"
5697
+ "plugin",
5698
+ "outdated.js"
5769
5699
  ]
5770
5700
  },
5771
- "pattern:pull": {
5701
+ "plugin:pull": {
5772
5702
  "aliases": [],
5773
- "args": {
5774
- "path": {
5775
- "description": "Path to the patterns directory (overrides project config)",
5776
- "name": "path"
5777
- }
5778
- },
5779
- "description": "Pull the block patterns Loopress manages on WordPress into patterns/<slug>.html files. Patterns registered by the theme or a plugin are never pulled, see `lps pattern list`.",
5703
+ "args": {},
5704
+ "description": "Pull installed plugins from WordPress into loopress.json (or composer.json), pinned to their live versions. Plugins already tracked are refreshed; new ones are offered as a list to tick, so plugins that only belong on this environment (cache, security, backups) stay out of the project.",
5780
5705
  "examples": [
5781
- "$ lps pattern pull"
5706
+ "$ lps plugin pull",
5707
+ "$ lps plugin pull --env production --plugin query-monitor"
5782
5708
  ],
5783
5709
  "flags": {
5784
5710
  "json": {
@@ -5808,11 +5734,18 @@
5808
5734
  "name": "yes",
5809
5735
  "allowNo": false,
5810
5736
  "type": "boolean"
5737
+ },
5738
+ "plugin": {
5739
+ "description": "Start tracking this installed plugin too, without asking (repeatable)",
5740
+ "name": "plugin",
5741
+ "hasDynamicHelp": false,
5742
+ "multiple": true,
5743
+ "type": "option"
5811
5744
  }
5812
5745
  },
5813
5746
  "hasDynamicHelp": false,
5814
5747
  "hiddenAliases": [],
5815
- "id": "pattern:pull",
5748
+ "id": "plugin:pull",
5816
5749
  "pluginAlias": "@loopress/cli",
5817
5750
  "pluginName": "@loopress/cli",
5818
5751
  "pluginType": "core",
@@ -5846,21 +5779,18 @@
5846
5779
  "relativePath": [
5847
5780
  "dist",
5848
5781
  "commands",
5849
- "pattern",
5782
+ "plugin",
5850
5783
  "pull.js"
5851
5784
  ]
5852
5785
  },
5853
- "pattern:push": {
5786
+ "plugin:push": {
5854
5787
  "aliases": [],
5855
- "args": {
5856
- "path": {
5857
- "description": "Path to the patterns directory (overrides project config)",
5858
- "name": "path"
5859
- }
5860
- },
5861
- "description": "Push local block patterns (patterns/<slug>.html, block markup under a title/categories header) to WordPress, registered as loopress/<slug> and referenced with <!-- wp:pattern {\"slug\":\"loopress/<slug>\"} /-->. Create or update only, never deletes a pattern (use `lps pattern rm`).",
5788
+ "args": {},
5789
+ "description": "Install WordPress.org plugins on WordPress to match loopress.json (active state included) or composer.json, via Composer + WPackagist",
5862
5790
  "examples": [
5863
- "$ lps pattern push"
5791
+ "$ lps plugin push",
5792
+ "$ lps plugin push --dry-run",
5793
+ "$ lps plugin push --force --prune"
5864
5794
  ],
5865
5795
  "flags": {
5866
5796
  "json": {
@@ -5902,11 +5832,29 @@
5902
5832
  "name": "yes",
5903
5833
  "allowNo": false,
5904
5834
  "type": "boolean"
5835
+ },
5836
+ "activate": {
5837
+ "description": "composer.json projects only: activate every plugin it declares. Without it, plugins keep their current state and new ones stay inactive",
5838
+ "name": "activate",
5839
+ "allowNo": false,
5840
+ "type": "boolean"
5841
+ },
5842
+ "force": {
5843
+ "description": "Allow downgrades and let Loopress take over plugins installed outside it (replaces their files)",
5844
+ "name": "force",
5845
+ "allowNo": false,
5846
+ "type": "boolean"
5847
+ },
5848
+ "prune": {
5849
+ "description": "Deactivate plugins that are active on the site but absent from loopress.json (or composer.json)",
5850
+ "name": "prune",
5851
+ "allowNo": false,
5852
+ "type": "boolean"
5905
5853
  }
5906
5854
  },
5907
5855
  "hasDynamicHelp": false,
5908
5856
  "hiddenAliases": [],
5909
- "id": "pattern:push",
5857
+ "id": "plugin:push",
5910
5858
  "pluginAlias": "@loopress/cli",
5911
5859
  "pluginName": "@loopress/cli",
5912
5860
  "pluginType": "core",
@@ -5940,25 +5888,16 @@
5940
5888
  "relativePath": [
5941
5889
  "dist",
5942
5890
  "commands",
5943
- "pattern",
5891
+ "plugin",
5944
5892
  "push.js"
5945
5893
  ]
5946
5894
  },
5947
- "pattern:rm": {
5948
- "aliases": [
5949
- "pattern:remove"
5950
- ],
5951
- "args": {
5952
- "slug": {
5953
- "description": "The pattern slug, its patterns/ file name without .html",
5954
- "name": "slug",
5955
- "required": true
5956
- }
5957
- },
5958
- "description": "Stop registering a Loopress block pattern on WordPress. A wp:pattern reference to it renders nothing until it is pushed again, copies already inserted in posts stay.",
5895
+ "plugin:status": {
5896
+ "aliases": [],
5897
+ "args": {},
5898
+ "description": "Compare the plugins on WordPress against loopress.json and report drift (missing, wrong version, inactive, untracked)",
5959
5899
  "examples": [
5960
- "$ lps pattern rm <slug>",
5961
- "$ lps pattern remove <slug> --yes"
5900
+ "$ lps plugin status"
5962
5901
  ],
5963
5902
  "flags": {
5964
5903
  "json": {
@@ -5974,25 +5913,11 @@
5974
5913
  "hasDynamicHelp": false,
5975
5914
  "multiple": false,
5976
5915
  "type": "option"
5977
- },
5978
- "dry-run": {
5979
- "char": "d",
5980
- "description": "Show what would change without making changes",
5981
- "name": "dry-run",
5982
- "allowNo": false,
5983
- "type": "boolean"
5984
- },
5985
- "yes": {
5986
- "char": "y",
5987
- "description": "Answer yes to confirmation prompts",
5988
- "name": "yes",
5989
- "allowNo": false,
5990
- "type": "boolean"
5991
5916
  }
5992
5917
  },
5993
5918
  "hasDynamicHelp": false,
5994
5919
  "hiddenAliases": [],
5995
- "id": "pattern:rm",
5920
+ "id": "plugin:status",
5996
5921
  "pluginAlias": "@loopress/cli",
5997
5922
  "pluginName": "@loopress/cli",
5998
5923
  "pluginType": "core",
@@ -6026,24 +5951,24 @@
6026
5951
  "relativePath": [
6027
5952
  "dist",
6028
5953
  "commands",
6029
- "pattern",
6030
- "rm.js"
5954
+ "plugin",
5955
+ "status.js"
6031
5956
  ]
6032
5957
  },
6033
- "pattern:rollback": {
5958
+ "plugin:update": {
6034
5959
  "aliases": [],
6035
5960
  "args": {
6036
- "path": {
6037
- "description": "Path to patterns directory (overrides project config)",
6038
- "name": "path"
5961
+ "slug": {
5962
+ "description": "Plugin slug(s) in loopress.json to update (default: all of them)",
5963
+ "name": "slug"
6039
5964
  }
6040
5965
  },
6041
- "description": "Restore block patterns to a snapshot taken automatically before an earlier `lps pattern push`",
5966
+ "description": "Rewrite plugin versions in loopress.json to the latest WordPress.org releases (loopress.json only, run `lps plugin push` to apply)",
6042
5967
  "examples": [
6043
- "$ lps pattern rollback",
6044
- "$ lps pattern rollback --list",
6045
- "$ lps pattern rollback --to 1732000000000",
6046
- "$ lps pattern rollback --dry-run"
5968
+ "$ lps plugin update",
5969
+ "$ lps plugin update woocommerce akismet",
5970
+ "$ lps plugin update --minor",
5971
+ "$ lps plugin update --patch --json"
6047
5972
  ],
6048
5973
  "flags": {
6049
5974
  "json": {
@@ -6067,34 +5992,32 @@
6067
5992
  "allowNo": false,
6068
5993
  "type": "boolean"
6069
5994
  },
6070
- "yes": {
6071
- "char": "y",
6072
- "description": "Answer yes to confirmation prompts",
6073
- "name": "yes",
5995
+ "minor": {
5996
+ "description": "Stay on the current major version (minor and patch releases only)",
5997
+ "exclusive": [
5998
+ "patch"
5999
+ ],
6000
+ "name": "minor",
6074
6001
  "allowNo": false,
6075
6002
  "type": "boolean"
6076
6003
  },
6077
- "list": {
6078
- "description": "List available snapshots instead of rolling back",
6079
- "name": "list",
6004
+ "patch": {
6005
+ "description": "Stay on the current minor version (patch releases only)",
6006
+ "exclusive": [
6007
+ "minor"
6008
+ ],
6009
+ "name": "patch",
6080
6010
  "allowNo": false,
6081
6011
  "type": "boolean"
6082
- },
6083
- "to": {
6084
- "description": "Roll back to this snapshot id instead of the most recent one",
6085
- "name": "to",
6086
- "hasDynamicHelp": false,
6087
- "multiple": false,
6088
- "type": "option"
6089
6012
  }
6090
6013
  },
6091
6014
  "hasDynamicHelp": false,
6092
6015
  "hiddenAliases": [],
6093
- "id": "pattern:rollback",
6016
+ "id": "plugin:update",
6094
6017
  "pluginAlias": "@loopress/cli",
6095
6018
  "pluginName": "@loopress/cli",
6096
6019
  "pluginType": "core",
6097
- "strict": true,
6020
+ "strict": false,
6098
6021
  "enableJsonFlag": true,
6099
6022
  "dryRunFlag": {
6100
6023
  "dry-run": {
@@ -6124,24 +6047,23 @@
6124
6047
  "relativePath": [
6125
6048
  "dist",
6126
6049
  "commands",
6127
- "pattern",
6128
- "rollback.js"
6050
+ "plugin",
6051
+ "update.js"
6129
6052
  ]
6130
6053
  },
6131
- "plugin:add": {
6054
+ "option:add": {
6132
6055
  "aliases": [],
6133
6056
  "args": {
6134
- "slug": {
6135
- "description": "Plugin slug on WordPress.org",
6136
- "name": "slug",
6137
- "required": true
6138
- }
6057
+ "name": {
6058
+ "description": "Option name to start tracking (see `lps option list`)",
6059
+ "name": "name",
6060
+ "required": true
6061
+ }
6139
6062
  },
6140
- "description": "Add a WordPress.org plugin to loopress.json",
6063
+ "description": "Fetch a WordPress option by name and start tracking it locally. Run `lps option list` first to find the name: this copies a raw value across environments, verify it does not embed post/user IDs before pushing it elsewhere.",
6141
6064
  "examples": [
6142
- "$ lps plugin add woocommerce",
6143
- "$ lps plugin add woocommerce --version 9.4.2",
6144
- "$ lps plugin add contact-form-7 --dry-run"
6065
+ "$ lps option add wpseo_titles",
6066
+ "$ lps option add siteurl"
6145
6067
  ],
6146
6068
  "flags": {
6147
6069
  "json": {
@@ -6165,9 +6087,9 @@
6165
6087
  "allowNo": false,
6166
6088
  "type": "boolean"
6167
6089
  },
6168
- "version": {
6169
- "description": "Exact version to pin (default: \"latest\", tracked on every push)",
6170
- "name": "version",
6090
+ "path": {
6091
+ "description": "Path to options directory (overrides project config)",
6092
+ "name": "path",
6171
6093
  "hasDynamicHelp": false,
6172
6094
  "multiple": false,
6173
6095
  "type": "option"
@@ -6175,7 +6097,7 @@
6175
6097
  },
6176
6098
  "hasDynamicHelp": false,
6177
6099
  "hiddenAliases": [],
6178
- "id": "plugin:add",
6100
+ "id": "option:add",
6179
6101
  "pluginAlias": "@loopress/cli",
6180
6102
  "pluginName": "@loopress/cli",
6181
6103
  "pluginType": "core",
@@ -6209,16 +6131,23 @@
6209
6131
  "relativePath": [
6210
6132
  "dist",
6211
6133
  "commands",
6212
- "plugin",
6134
+ "option",
6213
6135
  "add.js"
6214
6136
  ]
6215
6137
  },
6216
- "plugin:audit": {
6138
+ "option:diff": {
6217
6139
  "aliases": [],
6218
- "args": {},
6219
- "description": "Check the plugins in loopress.json for known vulnerabilities (wpvulnerability.net) and health issues",
6140
+ "args": {
6141
+ "path": {
6142
+ "description": "Path to options directory (overrides project config)",
6143
+ "name": "path"
6144
+ }
6145
+ },
6146
+ "description": "Show what differs, for locally tracked options, between your local files and a WordPress environment, or between two environments",
6220
6147
  "examples": [
6221
- "$ lps plugin audit"
6148
+ "$ lps option diff",
6149
+ "$ lps option diff --env staging",
6150
+ "$ lps option diff --env staging --against production"
6222
6151
  ],
6223
6152
  "flags": {
6224
6153
  "json": {
@@ -6234,11 +6163,18 @@
6234
6163
  "hasDynamicHelp": false,
6235
6164
  "multiple": false,
6236
6165
  "type": "option"
6166
+ },
6167
+ "against": {
6168
+ "description": "Compare the primary environment against this second environment instead of against local files",
6169
+ "name": "against",
6170
+ "hasDynamicHelp": false,
6171
+ "multiple": false,
6172
+ "type": "option"
6237
6173
  }
6238
6174
  },
6239
6175
  "hasDynamicHelp": false,
6240
6176
  "hiddenAliases": [],
6241
- "id": "plugin:audit",
6177
+ "id": "option:diff",
6242
6178
  "pluginAlias": "@loopress/cli",
6243
6179
  "pluginName": "@loopress/cli",
6244
6180
  "pluginType": "core",
@@ -6252,7 +6188,7 @@
6252
6188
  "type": "boolean"
6253
6189
  }
6254
6190
  },
6255
- "honorsExclude": false,
6191
+ "honorsExclude": true,
6256
6192
  "skipUnsupportedFlag": {
6257
6193
  "skip-unsupported": {
6258
6194
  "description": "Skip the resources the project uses but this site can't hold (a missing plugin, a Full feature on Light) instead of failing, and warn about each",
@@ -6268,21 +6204,29 @@
6268
6204
  "type": "boolean"
6269
6205
  }
6270
6206
  },
6207
+ "againstFlag": {
6208
+ "against": {
6209
+ "description": "Compare the primary environment against this second environment instead of against local files",
6210
+ "input": [],
6211
+ "multiple": false,
6212
+ "type": "option"
6213
+ }
6214
+ },
6271
6215
  "isESM": true,
6272
6216
  "relativePath": [
6273
6217
  "dist",
6274
6218
  "commands",
6275
- "plugin",
6276
- "audit.js"
6219
+ "option",
6220
+ "diff.js"
6277
6221
  ]
6278
6222
  },
6279
- "plugin:pull": {
6223
+ "option:list": {
6280
6224
  "aliases": [],
6281
6225
  "args": {},
6282
- "description": "Pull installed plugins from WordPress into loopress.json (or composer.json), pinned to their live versions. Plugins already tracked are refreshed; new ones are offered as a list to tick, so plugins that only belong on this environment (cache, security, backups) stay out of the project.",
6226
+ "description": "List WordPress option names currently on the site (names and autoload only, never values). CORE flags a WordPress-native default (certain); SOURCE? is a best-effort guessed plugin slug, found by name or by scanning active plugins' own PHP source (uncertain unless confirmed, occasionally wrong or blank, never trust it over CORE); PLUGIN is that slug's own declared display name, a label only, no confidence of its own. Use this to find the name of the option you want, then `lps option add <name>` to track it.",
6283
6227
  "examples": [
6284
- "$ lps plugin pull",
6285
- "$ lps plugin pull --env production --plugin query-monitor"
6228
+ "$ lps option list",
6229
+ "$ lps option list --no-core"
6286
6230
  ],
6287
6231
  "flags": {
6288
6232
  "json": {
@@ -6299,31 +6243,16 @@
6299
6243
  "multiple": false,
6300
6244
  "type": "option"
6301
6245
  },
6302
- "dry-run": {
6303
- "char": "d",
6304
- "description": "Show what would change without making changes",
6305
- "name": "dry-run",
6306
- "allowNo": false,
6307
- "type": "boolean"
6308
- },
6309
- "yes": {
6310
- "char": "y",
6311
- "description": "Answer yes to confirmation prompts",
6312
- "name": "yes",
6246
+ "no-core": {
6247
+ "description": "Exclude WordPress-native default options and the CORE column from the output, including --json",
6248
+ "name": "no-core",
6313
6249
  "allowNo": false,
6314
6250
  "type": "boolean"
6315
- },
6316
- "plugin": {
6317
- "description": "Start tracking this installed plugin too, without asking (repeatable)",
6318
- "name": "plugin",
6319
- "hasDynamicHelp": false,
6320
- "multiple": true,
6321
- "type": "option"
6322
6251
  }
6323
6252
  },
6324
6253
  "hasDynamicHelp": false,
6325
6254
  "hiddenAliases": [],
6326
- "id": "plugin:pull",
6255
+ "id": "option:list",
6327
6256
  "pluginAlias": "@loopress/cli",
6328
6257
  "pluginName": "@loopress/cli",
6329
6258
  "pluginType": "core",
@@ -6357,18 +6286,21 @@
6357
6286
  "relativePath": [
6358
6287
  "dist",
6359
6288
  "commands",
6360
- "plugin",
6361
- "pull.js"
6289
+ "option",
6290
+ "list.js"
6362
6291
  ]
6363
6292
  },
6364
- "plugin:push": {
6293
+ "option:pull": {
6365
6294
  "aliases": [],
6366
- "args": {},
6367
- "description": "Install WordPress.org plugins on WordPress to match loopress.json (active state included) or composer.json, via Composer + WPackagist",
6295
+ "args": {
6296
+ "path": {
6297
+ "description": "Path to options directory (overrides project config)",
6298
+ "name": "path"
6299
+ }
6300
+ },
6301
+ "description": "Refresh locally tracked options from WordPress. Options not yet tracked are never pulled, run `lps option add <name>` for those first.",
6368
6302
  "examples": [
6369
- "$ lps plugin push",
6370
- "$ lps plugin push --dry-run",
6371
- "$ lps plugin push --force --prune"
6303
+ "$ lps option pull"
6372
6304
  ],
6373
6305
  "flags": {
6374
6306
  "json": {
@@ -6385,18 +6317,6 @@
6385
6317
  "multiple": false,
6386
6318
  "type": "option"
6387
6319
  },
6388
- "overwrite": {
6389
- "description": "Push even over changes made on the site outside Loopress since your last push. Pages: also take over a same-slug page Loopress did not create",
6390
- "name": "overwrite",
6391
- "allowNo": false,
6392
- "type": "boolean"
6393
- },
6394
- "production-confirmed": {
6395
- "hidden": true,
6396
- "name": "production-confirmed",
6397
- "allowNo": false,
6398
- "type": "boolean"
6399
- },
6400
6320
  "dry-run": {
6401
6321
  "char": "d",
6402
6322
  "description": "Show what would change without making changes",
@@ -6410,29 +6330,11 @@
6410
6330
  "name": "yes",
6411
6331
  "allowNo": false,
6412
6332
  "type": "boolean"
6413
- },
6414
- "activate": {
6415
- "description": "composer.json projects only: activate every plugin it declares. Without it, plugins keep their current state and new ones stay inactive",
6416
- "name": "activate",
6417
- "allowNo": false,
6418
- "type": "boolean"
6419
- },
6420
- "force": {
6421
- "description": "Allow downgrades and let Loopress take over plugins installed outside it (replaces their files)",
6422
- "name": "force",
6423
- "allowNo": false,
6424
- "type": "boolean"
6425
- },
6426
- "prune": {
6427
- "description": "Deactivate plugins that are active on the site but absent from loopress.json (or composer.json)",
6428
- "name": "prune",
6429
- "allowNo": false,
6430
- "type": "boolean"
6431
6333
  }
6432
6334
  },
6433
6335
  "hasDynamicHelp": false,
6434
6336
  "hiddenAliases": [],
6435
- "id": "plugin:push",
6337
+ "id": "option:pull",
6436
6338
  "pluginAlias": "@loopress/cli",
6437
6339
  "pluginName": "@loopress/cli",
6438
6340
  "pluginType": "core",
@@ -6446,7 +6348,7 @@
6446
6348
  "type": "boolean"
6447
6349
  }
6448
6350
  },
6449
- "honorsExclude": true,
6351
+ "honorsExclude": false,
6450
6352
  "skipUnsupportedFlag": {
6451
6353
  "skip-unsupported": {
6452
6354
  "description": "Skip the resources the project uses but this site can't hold (a missing plugin, a Full feature on Light) instead of failing, and warn about each",
@@ -6466,16 +6368,21 @@
6466
6368
  "relativePath": [
6467
6369
  "dist",
6468
6370
  "commands",
6469
- "plugin",
6470
- "push.js"
6371
+ "option",
6372
+ "pull.js"
6471
6373
  ]
6472
6374
  },
6473
- "plugin:status": {
6375
+ "option:push": {
6474
6376
  "aliases": [],
6475
- "args": {},
6476
- "description": "Compare the plugins on WordPress against loopress.json and report drift (missing, wrong version, inactive, untracked)",
6377
+ "args": {
6378
+ "path": {
6379
+ "description": "Path to options directory (overrides project config)",
6380
+ "name": "path"
6381
+ }
6382
+ },
6383
+ "description": "Push locally tracked, non-readonly options to WordPress (upsert only, never deletes an untracked option). Options marked \"readonly\": true in their local file are skipped, edit the file to override.",
6477
6384
  "examples": [
6478
- "$ lps plugin status"
6385
+ "$ lps option push"
6479
6386
  ],
6480
6387
  "flags": {
6481
6388
  "json": {
@@ -6491,11 +6398,37 @@
6491
6398
  "hasDynamicHelp": false,
6492
6399
  "multiple": false,
6493
6400
  "type": "option"
6401
+ },
6402
+ "overwrite": {
6403
+ "description": "Push even over changes made on the site outside Loopress since your last push. Pages: also take over a same-slug page Loopress did not create",
6404
+ "name": "overwrite",
6405
+ "allowNo": false,
6406
+ "type": "boolean"
6407
+ },
6408
+ "production-confirmed": {
6409
+ "hidden": true,
6410
+ "name": "production-confirmed",
6411
+ "allowNo": false,
6412
+ "type": "boolean"
6413
+ },
6414
+ "dry-run": {
6415
+ "char": "d",
6416
+ "description": "Show what would change without making changes",
6417
+ "name": "dry-run",
6418
+ "allowNo": false,
6419
+ "type": "boolean"
6420
+ },
6421
+ "yes": {
6422
+ "char": "y",
6423
+ "description": "Answer yes to confirmation prompts",
6424
+ "name": "yes",
6425
+ "allowNo": false,
6426
+ "type": "boolean"
6494
6427
  }
6495
6428
  },
6496
6429
  "hasDynamicHelp": false,
6497
6430
  "hiddenAliases": [],
6498
- "id": "plugin:status",
6431
+ "id": "option:push",
6499
6432
  "pluginAlias": "@loopress/cli",
6500
6433
  "pluginName": "@loopress/cli",
6501
6434
  "pluginType": "core",
@@ -6509,7 +6442,7 @@
6509
6442
  "type": "boolean"
6510
6443
  }
6511
6444
  },
6512
- "honorsExclude": false,
6445
+ "honorsExclude": true,
6513
6446
  "skipUnsupportedFlag": {
6514
6447
  "skip-unsupported": {
6515
6448
  "description": "Skip the resources the project uses but this site can't hold (a missing plugin, a Full feature on Light) instead of failing, and warn about each",
@@ -6529,23 +6462,25 @@
6529
6462
  "relativePath": [
6530
6463
  "dist",
6531
6464
  "commands",
6532
- "plugin",
6533
- "status.js"
6465
+ "option",
6466
+ "push.js"
6534
6467
  ]
6535
6468
  },
6536
- "role:diff": {
6537
- "aliases": [],
6469
+ "option:rm": {
6470
+ "aliases": [
6471
+ "option:remove"
6472
+ ],
6538
6473
  "args": {
6539
- "path": {
6540
- "description": "Path to roles directory (overrides project config)",
6541
- "name": "path"
6474
+ "name": {
6475
+ "description": "Option name to stop tracking",
6476
+ "name": "name",
6477
+ "required": true
6542
6478
  }
6543
6479
  },
6544
- "description": "Show what differs in roles between your local roles/ files and a WordPress environment, or between two environments",
6480
+ "description": "Stop tracking an option locally and delete it from WordPress. Local untracking always happens (git-reversible); pass --local-only to skip the WordPress delete and only stop tracking.",
6545
6481
  "examples": [
6546
- "$ lps role diff",
6547
- "$ lps role diff --env staging",
6548
- "$ lps role diff --env staging --against production"
6482
+ "$ lps option rm wpseo_titles",
6483
+ "$ lps option rm wpseo_titles --local-only"
6549
6484
  ],
6550
6485
  "flags": {
6551
6486
  "json": {
@@ -6562,9 +6497,29 @@
6562
6497
  "multiple": false,
6563
6498
  "type": "option"
6564
6499
  },
6565
- "against": {
6566
- "description": "Compare the primary environment against this second environment instead of against local files",
6567
- "name": "against",
6500
+ "dry-run": {
6501
+ "char": "d",
6502
+ "description": "Show what would change without making changes",
6503
+ "name": "dry-run",
6504
+ "allowNo": false,
6505
+ "type": "boolean"
6506
+ },
6507
+ "yes": {
6508
+ "char": "y",
6509
+ "description": "Answer yes to confirmation prompts",
6510
+ "name": "yes",
6511
+ "allowNo": false,
6512
+ "type": "boolean"
6513
+ },
6514
+ "local-only": {
6515
+ "description": "Untrack locally without deleting the option on WordPress",
6516
+ "name": "local-only",
6517
+ "allowNo": false,
6518
+ "type": "boolean"
6519
+ },
6520
+ "path": {
6521
+ "description": "Path to options directory (overrides project config)",
6522
+ "name": "path",
6568
6523
  "hasDynamicHelp": false,
6569
6524
  "multiple": false,
6570
6525
  "type": "option"
@@ -6572,7 +6527,7 @@
6572
6527
  },
6573
6528
  "hasDynamicHelp": false,
6574
6529
  "hiddenAliases": [],
6575
- "id": "role:diff",
6530
+ "id": "option:rm",
6576
6531
  "pluginAlias": "@loopress/cli",
6577
6532
  "pluginName": "@loopress/cli",
6578
6533
  "pluginType": "core",
@@ -6586,7 +6541,7 @@
6586
6541
  "type": "boolean"
6587
6542
  }
6588
6543
  },
6589
- "honorsExclude": true,
6544
+ "honorsExclude": false,
6590
6545
  "skipUnsupportedFlag": {
6591
6546
  "skip-unsupported": {
6592
6547
  "description": "Skip the resources the project uses but this site can't hold (a missing plugin, a Full feature on Light) instead of failing, and warn about each",
@@ -6602,28 +6557,28 @@
6602
6557
  "type": "boolean"
6603
6558
  }
6604
6559
  },
6605
- "againstFlag": {
6606
- "against": {
6607
- "description": "Compare the primary environment against this second environment instead of against local files",
6608
- "input": [],
6609
- "multiple": false,
6610
- "type": "option"
6611
- }
6612
- },
6613
6560
  "isESM": true,
6614
6561
  "relativePath": [
6615
6562
  "dist",
6616
6563
  "commands",
6617
- "role",
6618
- "diff.js"
6619
- ]
6564
+ "option",
6565
+ "rm.js"
6566
+ ]
6620
6567
  },
6621
- "role:list": {
6568
+ "option:rollback": {
6622
6569
  "aliases": [],
6623
- "args": {},
6624
- "description": "List the user roles on WordPress, where each comes from (Loopress, WordPress, a plugin) and how many users have it. Only Loopress ones are pulled and pushed.",
6570
+ "args": {
6571
+ "path": {
6572
+ "description": "Path to options directory (overrides project config)",
6573
+ "name": "path"
6574
+ }
6575
+ },
6576
+ "description": "Restore tracked options to a snapshot taken automatically before an earlier `lps option push`",
6625
6577
  "examples": [
6626
- "$ lps role list"
6578
+ "$ lps option rollback",
6579
+ "$ lps option rollback --list",
6580
+ "$ lps option rollback --to 1732000000000",
6581
+ "$ lps option rollback --dry-run"
6627
6582
  ],
6628
6583
  "flags": {
6629
6584
  "json": {
@@ -6639,11 +6594,38 @@
6639
6594
  "hasDynamicHelp": false,
6640
6595
  "multiple": false,
6641
6596
  "type": "option"
6597
+ },
6598
+ "dry-run": {
6599
+ "char": "d",
6600
+ "description": "Show what would change without making changes",
6601
+ "name": "dry-run",
6602
+ "allowNo": false,
6603
+ "type": "boolean"
6604
+ },
6605
+ "yes": {
6606
+ "char": "y",
6607
+ "description": "Answer yes to confirmation prompts",
6608
+ "name": "yes",
6609
+ "allowNo": false,
6610
+ "type": "boolean"
6611
+ },
6612
+ "list": {
6613
+ "description": "List available snapshots instead of rolling back",
6614
+ "name": "list",
6615
+ "allowNo": false,
6616
+ "type": "boolean"
6617
+ },
6618
+ "to": {
6619
+ "description": "Roll back to this snapshot id instead of the most recent one",
6620
+ "name": "to",
6621
+ "hasDynamicHelp": false,
6622
+ "multiple": false,
6623
+ "type": "option"
6642
6624
  }
6643
6625
  },
6644
6626
  "hasDynamicHelp": false,
6645
6627
  "hiddenAliases": [],
6646
- "id": "role:list",
6628
+ "id": "option:rollback",
6647
6629
  "pluginAlias": "@loopress/cli",
6648
6630
  "pluginName": "@loopress/cli",
6649
6631
  "pluginType": "core",
@@ -6677,21 +6659,40 @@
6677
6659
  "relativePath": [
6678
6660
  "dist",
6679
6661
  "commands",
6680
- "role",
6681
- "list.js"
6662
+ "option",
6663
+ "rollback.js"
6682
6664
  ]
6683
6665
  },
6684
- "role:pull": {
6666
+ "project:config": {
6685
6667
  "aliases": [],
6686
- "args": {
6687
- "path": {
6688
- "description": "Path to the roles directory (overrides project config)",
6689
- "name": "path"
6690
- }
6691
- },
6692
- "description": "Pull the roles Loopress manages on WordPress into roles/<slug>.json files. Built-in roles and roles created by a plugin are never pulled, see `lps role list`.",
6668
+ "args": {},
6669
+ "description": "Add or update a WordPress project environment. By default, authorizes via WordPress in your browser; manual username/Application Password entry is available as a fallback.",
6693
6670
  "examples": [
6694
- "$ lps role pull"
6671
+ "$ lps project config"
6672
+ ],
6673
+ "flags": {},
6674
+ "hasDynamicHelp": false,
6675
+ "hiddenAliases": [],
6676
+ "id": "project:config",
6677
+ "pluginAlias": "@loopress/cli",
6678
+ "pluginName": "@loopress/cli",
6679
+ "pluginType": "core",
6680
+ "strict": true,
6681
+ "enableJsonFlag": false,
6682
+ "isESM": true,
6683
+ "relativePath": [
6684
+ "dist",
6685
+ "commands",
6686
+ "project",
6687
+ "config.js"
6688
+ ]
6689
+ },
6690
+ "project:list": {
6691
+ "aliases": [],
6692
+ "args": {},
6693
+ "description": "List configured WordPress projects",
6694
+ "examples": [
6695
+ "$ lps project list"
6695
6696
  ],
6696
6697
  "flags": {
6697
6698
  "json": {
@@ -6700,21 +6701,56 @@
6700
6701
  "name": "json",
6701
6702
  "allowNo": false,
6702
6703
  "type": "boolean"
6703
- },
6704
- "env": {
6705
- "description": "Target environment by name (default: \"local\", or the project's only environment)",
6706
- "name": "env",
6707
- "hasDynamicHelp": false,
6708
- "multiple": false,
6709
- "type": "option"
6710
- },
6711
- "dry-run": {
6712
- "char": "d",
6713
- "description": "Show what would change without making changes",
6714
- "name": "dry-run",
6715
- "allowNo": false,
6716
- "type": "boolean"
6717
- },
6704
+ }
6705
+ },
6706
+ "hasDynamicHelp": false,
6707
+ "hiddenAliases": [],
6708
+ "id": "project:list",
6709
+ "pluginAlias": "@loopress/cli",
6710
+ "pluginName": "@loopress/cli",
6711
+ "pluginType": "core",
6712
+ "strict": true,
6713
+ "enableJsonFlag": true,
6714
+ "isESM": true,
6715
+ "relativePath": [
6716
+ "dist",
6717
+ "commands",
6718
+ "project",
6719
+ "list.js"
6720
+ ]
6721
+ },
6722
+ "project:pull": {
6723
+ "aliases": [],
6724
+ "args": {},
6725
+ "description": "Pull projects and environments from your Loopress account that are not configured locally yet",
6726
+ "examples": [
6727
+ "$ lps project pull"
6728
+ ],
6729
+ "flags": {},
6730
+ "hasDynamicHelp": false,
6731
+ "hiddenAliases": [],
6732
+ "id": "project:pull",
6733
+ "pluginAlias": "@loopress/cli",
6734
+ "pluginName": "@loopress/cli",
6735
+ "pluginType": "core",
6736
+ "strict": true,
6737
+ "enableJsonFlag": false,
6738
+ "isESM": true,
6739
+ "relativePath": [
6740
+ "dist",
6741
+ "commands",
6742
+ "project",
6743
+ "pull.js"
6744
+ ]
6745
+ },
6746
+ "project:push": {
6747
+ "aliases": [],
6748
+ "args": {},
6749
+ "description": "Push locally configured projects, environments and credentials to your Loopress account",
6750
+ "examples": [
6751
+ "$ lps project push"
6752
+ ],
6753
+ "flags": {
6718
6754
  "yes": {
6719
6755
  "char": "y",
6720
6756
  "description": "Answer yes to confirmation prompts",
@@ -6725,12 +6761,71 @@
6725
6761
  },
6726
6762
  "hasDynamicHelp": false,
6727
6763
  "hiddenAliases": [],
6728
- "id": "role:pull",
6764
+ "id": "project:push",
6729
6765
  "pluginAlias": "@loopress/cli",
6730
6766
  "pluginName": "@loopress/cli",
6731
6767
  "pluginType": "core",
6732
6768
  "strict": true,
6733
- "enableJsonFlag": true,
6769
+ "enableJsonFlag": false,
6770
+ "isESM": true,
6771
+ "relativePath": [
6772
+ "dist",
6773
+ "commands",
6774
+ "project",
6775
+ "push.js"
6776
+ ]
6777
+ },
6778
+ "project:rm": {
6779
+ "aliases": [
6780
+ "project:remove"
6781
+ ],
6782
+ "args": {},
6783
+ "description": "Remove one or more WordPress projects or environments",
6784
+ "examples": [
6785
+ "$ lps project rm"
6786
+ ],
6787
+ "flags": {},
6788
+ "hasDynamicHelp": false,
6789
+ "hiddenAliases": [],
6790
+ "id": "project:rm",
6791
+ "pluginAlias": "@loopress/cli",
6792
+ "pluginName": "@loopress/cli",
6793
+ "pluginType": "core",
6794
+ "strict": true,
6795
+ "enableJsonFlag": false,
6796
+ "isESM": true,
6797
+ "relativePath": [
6798
+ "dist",
6799
+ "commands",
6800
+ "project",
6801
+ "rm.js"
6802
+ ]
6803
+ },
6804
+ "project:rotate": {
6805
+ "aliases": [],
6806
+ "args": {},
6807
+ "description": "Rotate the WordPress application password for the current (or --env) environment",
6808
+ "examples": [
6809
+ "$ lps project rotate",
6810
+ "$ lps project rotate --env staging"
6811
+ ],
6812
+ "flags": {
6813
+ "env": {
6814
+ "description": "Target environment by name (default: \"local\", or the project's only environment)",
6815
+ "name": "env",
6816
+ "hasDynamicHelp": false,
6817
+ "multiple": false,
6818
+ "type": "option"
6819
+ }
6820
+ },
6821
+ "hasDynamicHelp": false,
6822
+ "hiddenAliases": [],
6823
+ "id": "project:rotate",
6824
+ "pluginAlias": "@loopress/cli",
6825
+ "pluginName": "@loopress/cli",
6826
+ "pluginType": "core",
6827
+ "strict": true,
6828
+ "enableJsonFlag": false,
6734
6829
  "dryRunFlag": {
6735
6830
  "dry-run": {
6736
6831
  "char": "d",
@@ -6759,21 +6854,47 @@
6759
6854
  "relativePath": [
6760
6855
  "dist",
6761
6856
  "commands",
6762
- "role",
6763
- "pull.js"
6857
+ "project",
6858
+ "rotate.js"
6764
6859
  ]
6765
6860
  },
6766
- "role:push": {
6861
+ "project:switch": {
6862
+ "aliases": [],
6863
+ "args": {},
6864
+ "description": "Switch the active project (pass --env to target a non-local environment)",
6865
+ "examples": [
6866
+ "$ lps project switch"
6867
+ ],
6868
+ "flags": {},
6869
+ "hasDynamicHelp": false,
6870
+ "hiddenAliases": [],
6871
+ "id": "project:switch",
6872
+ "pluginAlias": "@loopress/cli",
6873
+ "pluginName": "@loopress/cli",
6874
+ "pluginType": "core",
6875
+ "strict": true,
6876
+ "enableJsonFlag": false,
6877
+ "isESM": true,
6878
+ "relativePath": [
6879
+ "dist",
6880
+ "commands",
6881
+ "project",
6882
+ "switch.js"
6883
+ ]
6884
+ },
6885
+ "menu:diff": {
6767
6886
  "aliases": [],
6768
6887
  "args": {
6769
6888
  "path": {
6770
- "description": "Path to the roles directory (overrides project config)",
6889
+ "description": "Path to menus directory (overrides project config)",
6771
6890
  "name": "path"
6772
6891
  }
6773
6892
  },
6774
- "description": "Push local roles (roles/<slug>.json, a \"name\" and its \"capabilities\") to WordPress. Create or update only, never deletes a role (use `lps role rm`), never changes which users have it.",
6893
+ "description": "Show what differs in nav menus and the active theme menu locations between your local files and a WordPress environment, or between two environments",
6775
6894
  "examples": [
6776
- "$ lps role push"
6895
+ "$ lps menu diff",
6896
+ "$ lps menu diff --env staging",
6897
+ "$ lps menu diff --env staging --against production"
6777
6898
  ],
6778
6899
  "flags": {
6779
6900
  "json": {
@@ -6790,36 +6911,88 @@
6790
6911
  "multiple": false,
6791
6912
  "type": "option"
6792
6913
  },
6793
- "overwrite": {
6794
- "description": "Push even over changes made on the site outside Loopress since your last push. Pages: also take over a same-slug page Loopress did not create",
6795
- "name": "overwrite",
6796
- "allowNo": false,
6797
- "type": "boolean"
6798
- },
6799
- "production-confirmed": {
6800
- "hidden": true,
6801
- "name": "production-confirmed",
6802
- "allowNo": false,
6803
- "type": "boolean"
6804
- },
6914
+ "against": {
6915
+ "description": "Compare the primary environment against this second environment instead of against local files",
6916
+ "name": "against",
6917
+ "hasDynamicHelp": false,
6918
+ "multiple": false,
6919
+ "type": "option"
6920
+ }
6921
+ },
6922
+ "hasDynamicHelp": false,
6923
+ "hiddenAliases": [],
6924
+ "id": "menu:diff",
6925
+ "pluginAlias": "@loopress/cli",
6926
+ "pluginName": "@loopress/cli",
6927
+ "pluginType": "core",
6928
+ "strict": true,
6929
+ "enableJsonFlag": true,
6930
+ "dryRunFlag": {
6805
6931
  "dry-run": {
6806
6932
  "char": "d",
6807
6933
  "description": "Show what would change without making changes",
6808
- "name": "dry-run",
6809
6934
  "allowNo": false,
6810
6935
  "type": "boolean"
6811
- },
6936
+ }
6937
+ },
6938
+ "honorsExclude": true,
6939
+ "skipUnsupportedFlag": {
6940
+ "skip-unsupported": {
6941
+ "description": "Skip the resources the project uses but this site can't hold (a missing plugin, a Full feature on Light) instead of failing, and warn about each",
6942
+ "allowNo": false,
6943
+ "type": "boolean"
6944
+ }
6945
+ },
6946
+ "yesFlag": {
6812
6947
  "yes": {
6813
6948
  "char": "y",
6814
6949
  "description": "Answer yes to confirmation prompts",
6815
- "name": "yes",
6816
6950
  "allowNo": false,
6817
6951
  "type": "boolean"
6818
6952
  }
6819
6953
  },
6954
+ "againstFlag": {
6955
+ "against": {
6956
+ "description": "Compare the primary environment against this second environment instead of against local files",
6957
+ "input": [],
6958
+ "multiple": false,
6959
+ "type": "option"
6960
+ }
6961
+ },
6962
+ "isESM": true,
6963
+ "relativePath": [
6964
+ "dist",
6965
+ "commands",
6966
+ "menu",
6967
+ "diff.js"
6968
+ ]
6969
+ },
6970
+ "menu:list": {
6971
+ "aliases": [],
6972
+ "args": {},
6973
+ "description": "List nav menus and the active theme menu locations on WordPress",
6974
+ "examples": [
6975
+ "$ lps menu list"
6976
+ ],
6977
+ "flags": {
6978
+ "json": {
6979
+ "description": "Format output as json.",
6980
+ "helpGroup": "GLOBAL",
6981
+ "name": "json",
6982
+ "allowNo": false,
6983
+ "type": "boolean"
6984
+ },
6985
+ "env": {
6986
+ "description": "Target environment by name (default: \"local\", or the project's only environment)",
6987
+ "name": "env",
6988
+ "hasDynamicHelp": false,
6989
+ "multiple": false,
6990
+ "type": "option"
6991
+ }
6992
+ },
6820
6993
  "hasDynamicHelp": false,
6821
6994
  "hiddenAliases": [],
6822
- "id": "role:push",
6995
+ "id": "menu:list",
6823
6996
  "pluginAlias": "@loopress/cli",
6824
6997
  "pluginName": "@loopress/cli",
6825
6998
  "pluginType": "core",
@@ -6833,7 +7006,7 @@
6833
7006
  "type": "boolean"
6834
7007
  }
6835
7008
  },
6836
- "honorsExclude": true,
7009
+ "honorsExclude": false,
6837
7010
  "skipUnsupportedFlag": {
6838
7011
  "skip-unsupported": {
6839
7012
  "description": "Skip the resources the project uses but this site can't hold (a missing plugin, a Full feature on Light) instead of failing, and warn about each",
@@ -6853,25 +7026,21 @@
6853
7026
  "relativePath": [
6854
7027
  "dist",
6855
7028
  "commands",
6856
- "role",
6857
- "push.js"
7029
+ "menu",
7030
+ "list.js"
6858
7031
  ]
6859
7032
  },
6860
- "role:rm": {
6861
- "aliases": [
6862
- "role:remove"
6863
- ],
7033
+ "menu:pull": {
7034
+ "aliases": [],
6864
7035
  "args": {
6865
- "slug": {
6866
- "description": "The role slug, its roles/ file name without .json",
6867
- "name": "slug",
6868
- "required": true
7036
+ "path": {
7037
+ "description": "Path to menus directory (overrides project config)",
7038
+ "name": "path"
6869
7039
  }
6870
7040
  },
6871
- "description": "Stop registering a Loopress role on WordPress. Its users keep it in their profile, with no capability until the role is pushed again.",
7041
+ "description": "Pull nav menus and the active theme menu locations from WordPress",
6872
7042
  "examples": [
6873
- "$ lps role rm <slug>",
6874
- "$ lps role remove <slug> --yes"
7043
+ "$ lps menu pull"
6875
7044
  ],
6876
7045
  "flags": {
6877
7046
  "json": {
@@ -6905,7 +7074,7 @@
6905
7074
  },
6906
7075
  "hasDynamicHelp": false,
6907
7076
  "hiddenAliases": [],
6908
- "id": "role:rm",
7077
+ "id": "menu:pull",
6909
7078
  "pluginAlias": "@loopress/cli",
6910
7079
  "pluginName": "@loopress/cli",
6911
7080
  "pluginType": "core",
@@ -6939,24 +7108,21 @@
6939
7108
  "relativePath": [
6940
7109
  "dist",
6941
7110
  "commands",
6942
- "role",
6943
- "rm.js"
7111
+ "menu",
7112
+ "pull.js"
6944
7113
  ]
6945
7114
  },
6946
- "role:rollback": {
7115
+ "menu:push": {
6947
7116
  "aliases": [],
6948
7117
  "args": {
6949
7118
  "path": {
6950
- "description": "Path to roles directory (overrides project config)",
7119
+ "description": "Path to menus directory (overrides project config)",
6951
7120
  "name": "path"
6952
7121
  }
6953
7122
  },
6954
- "description": "Restore roles to a snapshot taken automatically before an earlier `lps role push`",
7123
+ "description": "Push local nav menus and the active theme menu locations to WordPress. Each menu's post_type/taxonomy items are resolved by slug on the target environment, never by a raw id; an item whose target does not exist there fails the whole menu rather than guessing.",
6955
7124
  "examples": [
6956
- "$ lps role rollback",
6957
- "$ lps role rollback --list",
6958
- "$ lps role rollback --to 1732000000000",
6959
- "$ lps role rollback --dry-run"
7125
+ "$ lps menu push"
6960
7126
  ],
6961
7127
  "flags": {
6962
7128
  "json": {
@@ -6973,6 +7139,18 @@
6973
7139
  "multiple": false,
6974
7140
  "type": "option"
6975
7141
  },
7142
+ "overwrite": {
7143
+ "description": "Push even over changes made on the site outside Loopress since your last push. Pages: also take over a same-slug page Loopress did not create",
7144
+ "name": "overwrite",
7145
+ "allowNo": false,
7146
+ "type": "boolean"
7147
+ },
7148
+ "production-confirmed": {
7149
+ "hidden": true,
7150
+ "name": "production-confirmed",
7151
+ "allowNo": false,
7152
+ "type": "boolean"
7153
+ },
6976
7154
  "dry-run": {
6977
7155
  "char": "d",
6978
7156
  "description": "Show what would change without making changes",
@@ -6986,24 +7164,11 @@
6986
7164
  "name": "yes",
6987
7165
  "allowNo": false,
6988
7166
  "type": "boolean"
6989
- },
6990
- "list": {
6991
- "description": "List available snapshots instead of rolling back",
6992
- "name": "list",
6993
- "allowNo": false,
6994
- "type": "boolean"
6995
- },
6996
- "to": {
6997
- "description": "Roll back to this snapshot id instead of the most recent one",
6998
- "name": "to",
6999
- "hasDynamicHelp": false,
7000
- "multiple": false,
7001
- "type": "option"
7002
7167
  }
7003
7168
  },
7004
7169
  "hasDynamicHelp": false,
7005
7170
  "hiddenAliases": [],
7006
- "id": "role:rollback",
7171
+ "id": "menu:push",
7007
7172
  "pluginAlias": "@loopress/cli",
7008
7173
  "pluginName": "@loopress/cli",
7009
7174
  "pluginType": "core",
@@ -7017,7 +7182,7 @@
7017
7182
  "type": "boolean"
7018
7183
  }
7019
7184
  },
7020
- "honorsExclude": false,
7185
+ "honorsExclude": true,
7021
7186
  "skipUnsupportedFlag": {
7022
7187
  "skip-unsupported": {
7023
7188
  "description": "Skip the resources the project uses but this site can't hold (a missing plugin, a Full feature on Light) instead of failing, and warn about each",
@@ -7037,40 +7202,24 @@
7037
7202
  "relativePath": [
7038
7203
  "dist",
7039
7204
  "commands",
7040
- "role",
7041
- "rollback.js"
7042
- ]
7043
- },
7044
- "project:config": {
7045
- "aliases": [],
7046
- "args": {},
7047
- "description": "Add or update a WordPress project environment. By default, authorizes via WordPress in your browser; manual username/Application Password entry is available as a fallback.",
7048
- "examples": [
7049
- "$ lps project config"
7050
- ],
7051
- "flags": {},
7052
- "hasDynamicHelp": false,
7053
- "hiddenAliases": [],
7054
- "id": "project:config",
7055
- "pluginAlias": "@loopress/cli",
7056
- "pluginName": "@loopress/cli",
7057
- "pluginType": "core",
7058
- "strict": true,
7059
- "enableJsonFlag": false,
7060
- "isESM": true,
7061
- "relativePath": [
7062
- "dist",
7063
- "commands",
7064
- "project",
7065
- "config.js"
7205
+ "menu",
7206
+ "push.js"
7066
7207
  ]
7067
7208
  },
7068
- "project:list": {
7209
+ "menu:rollback": {
7069
7210
  "aliases": [],
7070
- "args": {},
7071
- "description": "List configured WordPress projects",
7211
+ "args": {
7212
+ "path": {
7213
+ "description": "Path to menus directory (overrides project config)",
7214
+ "name": "path"
7215
+ }
7216
+ },
7217
+ "description": "Restore nav menus and menu locations to a snapshot taken automatically before an earlier `lps menu push`",
7072
7218
  "examples": [
7073
- "$ lps project list"
7219
+ "$ lps menu rollback",
7220
+ "$ lps menu rollback --list",
7221
+ "$ lps menu rollback --to 1732000000000",
7222
+ "$ lps menu rollback --dry-run"
7074
7223
  ],
7075
7224
  "flags": {
7076
7225
  "json": {
@@ -7079,118 +7228,37 @@
7079
7228
  "name": "json",
7080
7229
  "allowNo": false,
7081
7230
  "type": "boolean"
7082
- }
7083
- },
7084
- "hasDynamicHelp": false,
7085
- "hiddenAliases": [],
7086
- "id": "project:list",
7087
- "pluginAlias": "@loopress/cli",
7088
- "pluginName": "@loopress/cli",
7089
- "pluginType": "core",
7090
- "strict": true,
7091
- "enableJsonFlag": true,
7092
- "isESM": true,
7093
- "relativePath": [
7094
- "dist",
7095
- "commands",
7096
- "project",
7097
- "list.js"
7098
- ]
7099
- },
7100
- "project:pull": {
7101
- "aliases": [],
7102
- "args": {},
7103
- "description": "Pull projects and environments from your Loopress account that are not configured locally yet",
7104
- "examples": [
7105
- "$ lps project pull"
7106
- ],
7107
- "flags": {},
7108
- "hasDynamicHelp": false,
7109
- "hiddenAliases": [],
7110
- "id": "project:pull",
7111
- "pluginAlias": "@loopress/cli",
7112
- "pluginName": "@loopress/cli",
7113
- "pluginType": "core",
7114
- "strict": true,
7115
- "enableJsonFlag": false,
7116
- "isESM": true,
7117
- "relativePath": [
7118
- "dist",
7119
- "commands",
7120
- "project",
7121
- "pull.js"
7122
- ]
7123
- },
7124
- "project:push": {
7125
- "aliases": [],
7126
- "args": {},
7127
- "description": "Push locally configured projects, environments and credentials to your Loopress account",
7128
- "examples": [
7129
- "$ lps project push"
7130
- ],
7131
- "flags": {
7231
+ },
7232
+ "env": {
7233
+ "description": "Target environment by name (default: \"local\", or the project's only environment)",
7234
+ "name": "env",
7235
+ "hasDynamicHelp": false,
7236
+ "multiple": false,
7237
+ "type": "option"
7238
+ },
7239
+ "dry-run": {
7240
+ "char": "d",
7241
+ "description": "Show what would change without making changes",
7242
+ "name": "dry-run",
7243
+ "allowNo": false,
7244
+ "type": "boolean"
7245
+ },
7132
7246
  "yes": {
7133
7247
  "char": "y",
7134
7248
  "description": "Answer yes to confirmation prompts",
7135
7249
  "name": "yes",
7136
7250
  "allowNo": false,
7137
7251
  "type": "boolean"
7138
- }
7139
- },
7140
- "hasDynamicHelp": false,
7141
- "hiddenAliases": [],
7142
- "id": "project:push",
7143
- "pluginAlias": "@loopress/cli",
7144
- "pluginName": "@loopress/cli",
7145
- "pluginType": "core",
7146
- "strict": true,
7147
- "enableJsonFlag": false,
7148
- "isESM": true,
7149
- "relativePath": [
7150
- "dist",
7151
- "commands",
7152
- "project",
7153
- "push.js"
7154
- ]
7155
- },
7156
- "project:rm": {
7157
- "aliases": [
7158
- "project:remove"
7159
- ],
7160
- "args": {},
7161
- "description": "Remove one or more WordPress projects or environments",
7162
- "examples": [
7163
- "$ lps project rm"
7164
- ],
7165
- "flags": {},
7166
- "hasDynamicHelp": false,
7167
- "hiddenAliases": [],
7168
- "id": "project:rm",
7169
- "pluginAlias": "@loopress/cli",
7170
- "pluginName": "@loopress/cli",
7171
- "pluginType": "core",
7172
- "strict": true,
7173
- "enableJsonFlag": false,
7174
- "isESM": true,
7175
- "relativePath": [
7176
- "dist",
7177
- "commands",
7178
- "project",
7179
- "rm.js"
7180
- ]
7181
- },
7182
- "project:rotate": {
7183
- "aliases": [],
7184
- "args": {},
7185
- "description": "Rotate the WordPress application password for the current (or --env) environment",
7186
- "examples": [
7187
- "$ lps project rotate",
7188
- "$ lps project rotate --env staging"
7189
- ],
7190
- "flags": {
7191
- "env": {
7192
- "description": "Target environment by name (default: \"local\", or the project's only environment)",
7193
- "name": "env",
7252
+ },
7253
+ "list": {
7254
+ "description": "List available snapshots instead of rolling back",
7255
+ "name": "list",
7256
+ "allowNo": false,
7257
+ "type": "boolean"
7258
+ },
7259
+ "to": {
7260
+ "description": "Roll back to this snapshot id instead of the most recent one",
7261
+ "name": "to",
7194
7262
  "hasDynamicHelp": false,
7195
7263
  "multiple": false,
7196
7264
  "type": "option"
@@ -7198,12 +7266,12 @@
7198
7266
  },
7199
7267
  "hasDynamicHelp": false,
7200
7268
  "hiddenAliases": [],
7201
- "id": "project:rotate",
7269
+ "id": "menu:rollback",
7202
7270
  "pluginAlias": "@loopress/cli",
7203
7271
  "pluginName": "@loopress/cli",
7204
7272
  "pluginType": "core",
7205
7273
  "strict": true,
7206
- "enableJsonFlag": false,
7274
+ "enableJsonFlag": true,
7207
7275
  "dryRunFlag": {
7208
7276
  "dry-run": {
7209
7277
  "char": "d",
@@ -7226,53 +7294,29 @@
7226
7294
  "description": "Answer yes to confirmation prompts",
7227
7295
  "allowNo": false,
7228
7296
  "type": "boolean"
7229
- }
7230
- },
7231
- "isESM": true,
7232
- "relativePath": [
7233
- "dist",
7234
- "commands",
7235
- "project",
7236
- "rotate.js"
7237
- ]
7238
- },
7239
- "project:switch": {
7240
- "aliases": [],
7241
- "args": {},
7242
- "description": "Switch the active project (pass --env to target a non-local environment)",
7243
- "examples": [
7244
- "$ lps project switch"
7245
- ],
7246
- "flags": {},
7247
- "hasDynamicHelp": false,
7248
- "hiddenAliases": [],
7249
- "id": "project:switch",
7250
- "pluginAlias": "@loopress/cli",
7251
- "pluginName": "@loopress/cli",
7252
- "pluginType": "core",
7253
- "strict": true,
7254
- "enableJsonFlag": false,
7297
+ }
7298
+ },
7255
7299
  "isESM": true,
7256
7300
  "relativePath": [
7257
7301
  "dist",
7258
7302
  "commands",
7259
- "project",
7260
- "switch.js"
7303
+ "menu",
7304
+ "rollback.js"
7261
7305
  ]
7262
7306
  },
7263
- "taxonomy:diff": {
7307
+ "role:diff": {
7264
7308
  "aliases": [],
7265
7309
  "args": {
7266
7310
  "path": {
7267
- "description": "Path to taxonomies directory (overrides project config)",
7311
+ "description": "Path to roles directory (overrides project config)",
7268
7312
  "name": "path"
7269
7313
  }
7270
7314
  },
7271
- "description": "Show what differs in taxonomies between your local taxonomies/ files and a WordPress environment, or between two environments",
7315
+ "description": "Show what differs in roles between your local roles/ files and a WordPress environment, or between two environments",
7272
7316
  "examples": [
7273
- "$ lps taxonomy diff",
7274
- "$ lps taxonomy diff --env staging",
7275
- "$ lps taxonomy diff --env staging --against production"
7317
+ "$ lps role diff",
7318
+ "$ lps role diff --env staging",
7319
+ "$ lps role diff --env staging --against production"
7276
7320
  ],
7277
7321
  "flags": {
7278
7322
  "json": {
@@ -7299,7 +7343,7 @@
7299
7343
  },
7300
7344
  "hasDynamicHelp": false,
7301
7345
  "hiddenAliases": [],
7302
- "id": "taxonomy:diff",
7346
+ "id": "role:diff",
7303
7347
  "pluginAlias": "@loopress/cli",
7304
7348
  "pluginName": "@loopress/cli",
7305
7349
  "pluginType": "core",
@@ -7341,16 +7385,16 @@
7341
7385
  "relativePath": [
7342
7386
  "dist",
7343
7387
  "commands",
7344
- "taxonomy",
7388
+ "role",
7345
7389
  "diff.js"
7346
7390
  ]
7347
7391
  },
7348
- "taxonomy:list": {
7392
+ "role:list": {
7349
7393
  "aliases": [],
7350
7394
  "args": {},
7351
- "description": "List the taxonomies registered on WordPress, where each comes from (Loopress, WordPress, ACF, CPT UI, a theme or plugin) and the post types it attaches to. Only Loopress ones are pulled and pushed.",
7395
+ "description": "List the user roles on WordPress, where each comes from (Loopress, WordPress, a plugin) and how many users have it. Only Loopress ones are pulled and pushed.",
7352
7396
  "examples": [
7353
- "$ lps taxonomy list"
7397
+ "$ lps role list"
7354
7398
  ],
7355
7399
  "flags": {
7356
7400
  "json": {
@@ -7370,7 +7414,7 @@
7370
7414
  },
7371
7415
  "hasDynamicHelp": false,
7372
7416
  "hiddenAliases": [],
7373
- "id": "taxonomy:list",
7417
+ "id": "role:list",
7374
7418
  "pluginAlias": "@loopress/cli",
7375
7419
  "pluginName": "@loopress/cli",
7376
7420
  "pluginType": "core",
@@ -7404,21 +7448,21 @@
7404
7448
  "relativePath": [
7405
7449
  "dist",
7406
7450
  "commands",
7407
- "taxonomy",
7451
+ "role",
7408
7452
  "list.js"
7409
7453
  ]
7410
7454
  },
7411
- "taxonomy:pull": {
7455
+ "role:pull": {
7412
7456
  "aliases": [],
7413
7457
  "args": {
7414
7458
  "path": {
7415
- "description": "Path to the taxonomies directory (overrides project config)",
7459
+ "description": "Path to the roles directory (overrides project config)",
7416
7460
  "name": "path"
7417
7461
  }
7418
7462
  },
7419
- "description": "Pull the taxonomies Loopress manages on WordPress into taxonomies/<slug>.json files, never their terms. Taxonomies registered by a theme or another plugin are never pulled, see `lps taxonomy list`.",
7463
+ "description": "Pull the roles Loopress manages on WordPress into roles/<slug>.json files. Built-in roles and roles created by a plugin are never pulled, see `lps role list`.",
7420
7464
  "examples": [
7421
- "$ lps taxonomy pull"
7465
+ "$ lps role pull"
7422
7466
  ],
7423
7467
  "flags": {
7424
7468
  "json": {
@@ -7452,7 +7496,7 @@
7452
7496
  },
7453
7497
  "hasDynamicHelp": false,
7454
7498
  "hiddenAliases": [],
7455
- "id": "taxonomy:pull",
7499
+ "id": "role:pull",
7456
7500
  "pluginAlias": "@loopress/cli",
7457
7501
  "pluginName": "@loopress/cli",
7458
7502
  "pluginType": "core",
@@ -7486,21 +7530,21 @@
7486
7530
  "relativePath": [
7487
7531
  "dist",
7488
7532
  "commands",
7489
- "taxonomy",
7533
+ "role",
7490
7534
  "pull.js"
7491
7535
  ]
7492
7536
  },
7493
- "taxonomy:push": {
7537
+ "role:push": {
7494
7538
  "aliases": [],
7495
7539
  "args": {
7496
7540
  "path": {
7497
- "description": "Path to the taxonomies directory (overrides project config)",
7541
+ "description": "Path to the roles directory (overrides project config)",
7498
7542
  "name": "path"
7499
7543
  }
7500
7544
  },
7501
- "description": "Push local taxonomies (taxonomies/<slug>.json, register_taxonomy() arguments plus \"object_type\") to WordPress. Create or update only, never deletes a taxonomy (use `lps taxonomy rm`), never touches its terms.",
7545
+ "description": "Push local roles (roles/<slug>.json, a \"name\" and its \"capabilities\") to WordPress. Create or update only, never deletes a role (use `lps role rm`), never changes which users have it.",
7502
7546
  "examples": [
7503
- "$ lps taxonomy push"
7547
+ "$ lps role push"
7504
7548
  ],
7505
7549
  "flags": {
7506
7550
  "json": {
@@ -7546,7 +7590,7 @@
7546
7590
  },
7547
7591
  "hasDynamicHelp": false,
7548
7592
  "hiddenAliases": [],
7549
- "id": "taxonomy:push",
7593
+ "id": "role:push",
7550
7594
  "pluginAlias": "@loopress/cli",
7551
7595
  "pluginName": "@loopress/cli",
7552
7596
  "pluginType": "core",
@@ -7580,25 +7624,25 @@
7580
7624
  "relativePath": [
7581
7625
  "dist",
7582
7626
  "commands",
7583
- "taxonomy",
7627
+ "role",
7584
7628
  "push.js"
7585
7629
  ]
7586
7630
  },
7587
- "taxonomy:rm": {
7631
+ "role:rm": {
7588
7632
  "aliases": [
7589
- "taxonomy:remove"
7633
+ "role:remove"
7590
7634
  ],
7591
7635
  "args": {
7592
7636
  "slug": {
7593
- "description": "The taxonomy slug, its taxonomies/ file name without .json",
7637
+ "description": "The role slug, its roles/ file name without .json",
7594
7638
  "name": "slug",
7595
7639
  "required": true
7596
7640
  }
7597
7641
  },
7598
- "description": "Stop registering a Loopress taxonomy on WordPress. Its terms are kept in the database, hidden until the taxonomy is pushed again.",
7642
+ "description": "Stop registering a Loopress role on WordPress. Its users keep it in their profile, with no capability until the role is pushed again.",
7599
7643
  "examples": [
7600
- "$ lps taxonomy rm <slug>",
7601
- "$ lps taxonomy remove <slug> --yes"
7644
+ "$ lps role rm <slug>",
7645
+ "$ lps role remove <slug> --yes"
7602
7646
  ],
7603
7647
  "flags": {
7604
7648
  "json": {
@@ -7632,7 +7676,7 @@
7632
7676
  },
7633
7677
  "hasDynamicHelp": false,
7634
7678
  "hiddenAliases": [],
7635
- "id": "taxonomy:rm",
7679
+ "id": "role:rm",
7636
7680
  "pluginAlias": "@loopress/cli",
7637
7681
  "pluginName": "@loopress/cli",
7638
7682
  "pluginType": "core",
@@ -7666,24 +7710,24 @@
7666
7710
  "relativePath": [
7667
7711
  "dist",
7668
7712
  "commands",
7669
- "taxonomy",
7713
+ "role",
7670
7714
  "rm.js"
7671
7715
  ]
7672
7716
  },
7673
- "taxonomy:rollback": {
7717
+ "role:rollback": {
7674
7718
  "aliases": [],
7675
7719
  "args": {
7676
7720
  "path": {
7677
- "description": "Path to taxonomies directory (overrides project config)",
7721
+ "description": "Path to roles directory (overrides project config)",
7678
7722
  "name": "path"
7679
7723
  }
7680
7724
  },
7681
- "description": "Restore taxonomies to a snapshot taken automatically before an earlier `lps taxonomy push`",
7725
+ "description": "Restore roles to a snapshot taken automatically before an earlier `lps role push`",
7682
7726
  "examples": [
7683
- "$ lps taxonomy rollback",
7684
- "$ lps taxonomy rollback --list",
7685
- "$ lps taxonomy rollback --to 1732000000000",
7686
- "$ lps taxonomy rollback --dry-run"
7727
+ "$ lps role rollback",
7728
+ "$ lps role rollback --list",
7729
+ "$ lps role rollback --to 1732000000000",
7730
+ "$ lps role rollback --dry-run"
7687
7731
  ],
7688
7732
  "flags": {
7689
7733
  "json": {
@@ -7730,7 +7774,7 @@
7730
7774
  },
7731
7775
  "hasDynamicHelp": false,
7732
7776
  "hiddenAliases": [],
7733
- "id": "taxonomy:rollback",
7777
+ "id": "role:rollback",
7734
7778
  "pluginAlias": "@loopress/cli",
7735
7779
  "pluginName": "@loopress/cli",
7736
7780
  "pluginType": "core",
@@ -7764,71 +7808,23 @@
7764
7808
  "relativePath": [
7765
7809
  "dist",
7766
7810
  "commands",
7767
- "taxonomy",
7811
+ "role",
7768
7812
  "rollback.js"
7769
7813
  ]
7770
7814
  },
7771
- "telemetry:disable": {
7772
- "aliases": [],
7773
- "args": {},
7774
- "description": "Disable error reporting to Sentry",
7775
- "examples": [
7776
- "$ lps telemetry disable"
7777
- ],
7778
- "flags": {},
7779
- "hasDynamicHelp": false,
7780
- "hiddenAliases": [],
7781
- "id": "telemetry:disable",
7782
- "pluginAlias": "@loopress/cli",
7783
- "pluginName": "@loopress/cli",
7784
- "pluginType": "core",
7785
- "strict": true,
7786
- "enableJsonFlag": false,
7787
- "isESM": true,
7788
- "relativePath": [
7789
- "dist",
7790
- "commands",
7791
- "telemetry",
7792
- "disable.js"
7793
- ]
7794
- },
7795
- "telemetry:enable": {
7796
- "aliases": [],
7797
- "args": {},
7798
- "description": "Enable error reporting to Sentry",
7799
- "examples": [
7800
- "$ lps telemetry enable"
7801
- ],
7802
- "flags": {},
7803
- "hasDynamicHelp": false,
7804
- "hiddenAliases": [],
7805
- "id": "telemetry:enable",
7806
- "pluginAlias": "@loopress/cli",
7807
- "pluginName": "@loopress/cli",
7808
- "pluginType": "core",
7809
- "strict": true,
7810
- "enableJsonFlag": false,
7811
- "isESM": true,
7812
- "relativePath": [
7813
- "dist",
7814
- "commands",
7815
- "telemetry",
7816
- "enable.js"
7817
- ]
7818
- },
7819
- "theme:activate": {
7815
+ "snippet:diff": {
7820
7816
  "aliases": [],
7821
7817
  "args": {
7822
- "stylesheet": {
7823
- "description": "Theme to activate (default: the Loopress child theme, <parent>-loopress)",
7824
- "name": "stylesheet"
7818
+ "path": {
7819
+ "description": "Path to snippets directory (overrides project config)",
7820
+ "name": "path"
7825
7821
  }
7826
7822
  },
7827
- "description": "Activate a theme on WordPress, the Loopress child theme by default. A child theme without settings of its own starts from a copy of its parent's theme mods and Global Styles. Set \"activateChildTheme\": true in loopress.json to have `lps theme template push` keep the child active.",
7823
+ "description": "Show what differs in snippets between your local files and a WordPress environment, or between two environments",
7828
7824
  "examples": [
7829
- "$ lps theme activate",
7830
- "$ lps theme activate twentytwentyfive --env staging",
7831
- "$ lps theme activate --dry-run"
7825
+ "$ lps snippet diff",
7826
+ "$ lps snippet diff --env staging",
7827
+ "$ lps snippet diff --env staging --against production"
7832
7828
  ],
7833
7829
  "flags": {
7834
7830
  "json": {
@@ -7845,24 +7841,17 @@
7845
7841
  "multiple": false,
7846
7842
  "type": "option"
7847
7843
  },
7848
- "dry-run": {
7849
- "char": "d",
7850
- "description": "Show what would change without making changes",
7851
- "name": "dry-run",
7852
- "allowNo": false,
7853
- "type": "boolean"
7854
- },
7855
- "yes": {
7856
- "char": "y",
7857
- "description": "Answer yes to confirmation prompts",
7858
- "name": "yes",
7859
- "allowNo": false,
7860
- "type": "boolean"
7844
+ "against": {
7845
+ "description": "Compare the primary environment against this second environment instead of against local files",
7846
+ "name": "against",
7847
+ "hasDynamicHelp": false,
7848
+ "multiple": false,
7849
+ "type": "option"
7861
7850
  }
7862
7851
  },
7863
7852
  "hasDynamicHelp": false,
7864
7853
  "hiddenAliases": [],
7865
- "id": "theme:activate",
7854
+ "id": "snippet:diff",
7866
7855
  "pluginAlias": "@loopress/cli",
7867
7856
  "pluginName": "@loopress/cli",
7868
7857
  "pluginType": "core",
@@ -7876,7 +7865,7 @@
7876
7865
  "type": "boolean"
7877
7866
  }
7878
7867
  },
7879
- "honorsExclude": false,
7868
+ "honorsExclude": true,
7880
7869
  "skipUnsupportedFlag": {
7881
7870
  "skip-unsupported": {
7882
7871
  "description": "Skip the resources the project uses but this site can't hold (a missing plugin, a Full feature on Light) instead of failing, and warn about each",
@@ -7892,27 +7881,28 @@
7892
7881
  "type": "boolean"
7893
7882
  }
7894
7883
  },
7884
+ "againstFlag": {
7885
+ "against": {
7886
+ "description": "Compare the primary environment against this second environment instead of against local files",
7887
+ "input": [],
7888
+ "multiple": false,
7889
+ "type": "option"
7890
+ }
7891
+ },
7895
7892
  "isESM": true,
7896
7893
  "relativePath": [
7897
7894
  "dist",
7898
7895
  "commands",
7899
- "theme",
7900
- "activate.js"
7896
+ "snippet",
7897
+ "diff.js"
7901
7898
  ]
7902
7899
  },
7903
- "theme:add": {
7900
+ "snippet:list": {
7904
7901
  "aliases": [],
7905
- "args": {
7906
- "slug": {
7907
- "description": "Theme slug on WordPress.org",
7908
- "name": "slug",
7909
- "required": true
7910
- }
7911
- },
7912
- "description": "Add a WordPress.org theme to loopress.json",
7902
+ "args": {},
7903
+ "description": "List snippets currently on WordPress",
7913
7904
  "examples": [
7914
- "$ lps theme add generatepress",
7915
- "$ lps theme add generatepress --version 3.4.0"
7905
+ "$ lps snippet list"
7916
7906
  ],
7917
7907
  "flags": {
7918
7908
  "json": {
@@ -7928,25 +7918,11 @@
7928
7918
  "hasDynamicHelp": false,
7929
7919
  "multiple": false,
7930
7920
  "type": "option"
7931
- },
7932
- "dry-run": {
7933
- "char": "d",
7934
- "description": "Show what would change without making changes",
7935
- "name": "dry-run",
7936
- "allowNo": false,
7937
- "type": "boolean"
7938
- },
7939
- "version": {
7940
- "description": "Exact version to pin (default: \"latest\")",
7941
- "name": "version",
7942
- "hasDynamicHelp": false,
7943
- "multiple": false,
7944
- "type": "option"
7945
7921
  }
7946
7922
  },
7947
7923
  "hasDynamicHelp": false,
7948
7924
  "hiddenAliases": [],
7949
- "id": "theme:add",
7925
+ "id": "snippet:list",
7950
7926
  "pluginAlias": "@loopress/cli",
7951
7927
  "pluginName": "@loopress/cli",
7952
7928
  "pluginType": "core",
@@ -7980,18 +7956,22 @@
7980
7956
  "relativePath": [
7981
7957
  "dist",
7982
7958
  "commands",
7983
- "theme",
7984
- "add.js"
7959
+ "snippet",
7960
+ "list.js"
7985
7961
  ]
7986
7962
  },
7987
- "theme:pull": {
7963
+ "snippet:pull": {
7988
7964
  "aliases": [],
7989
- "args": {},
7990
- "description": "Pull everything theme related from WordPress: theme versions into loopress.json, then Global Styles into a local file",
7965
+ "args": {
7966
+ "path": {
7967
+ "description": "Path to snippets directory (overrides project config)",
7968
+ "name": "path"
7969
+ }
7970
+ },
7971
+ "description": "Pull snippets from WordPress into local files",
7991
7972
  "examples": [
7992
- "$ lps theme pull",
7993
- "$ lps theme pull --env staging",
7994
- "$ lps theme pull --dry-run"
7973
+ "$ lps snippet pull",
7974
+ "$ lps snippet pull ./snippets"
7995
7975
  ],
7996
7976
  "flags": {
7997
7977
  "json": {
@@ -8014,11 +7994,18 @@
8014
7994
  "name": "dry-run",
8015
7995
  "allowNo": false,
8016
7996
  "type": "boolean"
7997
+ },
7998
+ "yes": {
7999
+ "char": "y",
8000
+ "description": "Answer yes to confirmation prompts",
8001
+ "name": "yes",
8002
+ "allowNo": false,
8003
+ "type": "boolean"
8017
8004
  }
8018
8005
  },
8019
8006
  "hasDynamicHelp": false,
8020
8007
  "hiddenAliases": [],
8021
- "id": "theme:pull",
8008
+ "id": "snippet:pull",
8022
8009
  "pluginAlias": "@loopress/cli",
8023
8010
  "pluginName": "@loopress/cli",
8024
8011
  "pluginType": "core",
@@ -8052,18 +8039,22 @@
8052
8039
  "relativePath": [
8053
8040
  "dist",
8054
8041
  "commands",
8055
- "theme",
8042
+ "snippet",
8056
8043
  "pull.js"
8057
8044
  ]
8058
8045
  },
8059
- "theme:push": {
8060
- "aliases": [],
8061
- "args": {},
8062
- "description": "Push everything theme related to WordPress: theme versions from loopress.json, then block templates and parts, then Global Styles. Switches the active theme only to the Loopress child, when loopress.json sets \"activateChildTheme\": true.",
8046
+ "snippet:push": {
8047
+ "aliases": [],
8048
+ "args": {
8049
+ "path": {
8050
+ "description": "Path to snippets directory (overrides project config)",
8051
+ "name": "path"
8052
+ }
8053
+ },
8054
+ "description": "Push local snippet files to WordPress. Local snippet files created or updated remotely are renamed on disk to the `<id>-<slug>` convention.",
8063
8055
  "examples": [
8064
- "$ lps theme push",
8065
- "$ lps theme push --env staging",
8066
- "$ lps theme push --dry-run"
8056
+ "$ lps snippet push",
8057
+ "$ lps snippet push ./snippets"
8067
8058
  ],
8068
8059
  "flags": {
8069
8060
  "json": {
@@ -8080,6 +8071,18 @@
8080
8071
  "multiple": false,
8081
8072
  "type": "option"
8082
8073
  },
8074
+ "overwrite": {
8075
+ "description": "Push even over changes made on the site outside Loopress since your last push. Pages: also take over a same-slug page Loopress did not create",
8076
+ "name": "overwrite",
8077
+ "allowNo": false,
8078
+ "type": "boolean"
8079
+ },
8080
+ "production-confirmed": {
8081
+ "hidden": true,
8082
+ "name": "production-confirmed",
8083
+ "allowNo": false,
8084
+ "type": "boolean"
8085
+ },
8083
8086
  "dry-run": {
8084
8087
  "char": "d",
8085
8088
  "description": "Show what would change without making changes",
@@ -8093,17 +8096,11 @@
8093
8096
  "name": "yes",
8094
8097
  "allowNo": false,
8095
8098
  "type": "boolean"
8096
- },
8097
- "force": {
8098
- "description": "Passed to `lps theme version push`",
8099
- "name": "force",
8100
- "allowNo": false,
8101
- "type": "boolean"
8102
8099
  }
8103
8100
  },
8104
8101
  "hasDynamicHelp": false,
8105
8102
  "hiddenAliases": [],
8106
- "id": "theme:push",
8103
+ "id": "snippet:push",
8107
8104
  "pluginAlias": "@loopress/cli",
8108
8105
  "pluginName": "@loopress/cli",
8109
8106
  "pluginType": "core",
@@ -8117,7 +8114,7 @@
8117
8114
  "type": "boolean"
8118
8115
  }
8119
8116
  },
8120
- "honorsExclude": false,
8117
+ "honorsExclude": true,
8121
8118
  "skipUnsupportedFlag": {
8122
8119
  "skip-unsupported": {
8123
8120
  "description": "Skip the resources the project uses but this site can't hold (a missing plugin, a Full feature on Light) instead of failing, and warn about each",
@@ -8137,16 +8134,24 @@
8137
8134
  "relativePath": [
8138
8135
  "dist",
8139
8136
  "commands",
8140
- "theme",
8137
+ "snippet",
8141
8138
  "push.js"
8142
8139
  ]
8143
8140
  },
8144
- "theme:status": {
8141
+ "snippet:rollback": {
8145
8142
  "aliases": [],
8146
- "args": {},
8147
- "description": "Compare the themes on WordPress against loopress.json and report version drift",
8143
+ "args": {
8144
+ "path": {
8145
+ "description": "Path to snippets directory (overrides project config)",
8146
+ "name": "path"
8147
+ }
8148
+ },
8149
+ "description": "Restore snippets to a snapshot taken automatically before an earlier `lps snippet push`",
8148
8150
  "examples": [
8149
- "$ lps theme status"
8151
+ "$ lps snippet rollback",
8152
+ "$ lps snippet rollback --list",
8153
+ "$ lps snippet rollback --to 1732000000000",
8154
+ "$ lps snippet rollback --dry-run"
8150
8155
  ],
8151
8156
  "flags": {
8152
8157
  "json": {
@@ -8162,11 +8167,38 @@
8162
8167
  "hasDynamicHelp": false,
8163
8168
  "multiple": false,
8164
8169
  "type": "option"
8170
+ },
8171
+ "dry-run": {
8172
+ "char": "d",
8173
+ "description": "Show what would change without making changes",
8174
+ "name": "dry-run",
8175
+ "allowNo": false,
8176
+ "type": "boolean"
8177
+ },
8178
+ "yes": {
8179
+ "char": "y",
8180
+ "description": "Answer yes to confirmation prompts",
8181
+ "name": "yes",
8182
+ "allowNo": false,
8183
+ "type": "boolean"
8184
+ },
8185
+ "list": {
8186
+ "description": "List available snapshots instead of rolling back",
8187
+ "name": "list",
8188
+ "allowNo": false,
8189
+ "type": "boolean"
8190
+ },
8191
+ "to": {
8192
+ "description": "Roll back to this snapshot id instead of the most recent one",
8193
+ "name": "to",
8194
+ "hasDynamicHelp": false,
8195
+ "multiple": false,
8196
+ "type": "option"
8165
8197
  }
8166
8198
  },
8167
8199
  "hasDynamicHelp": false,
8168
8200
  "hiddenAliases": [],
8169
- "id": "theme:status",
8201
+ "id": "snippet:rollback",
8170
8202
  "pluginAlias": "@loopress/cli",
8171
8203
  "pluginName": "@loopress/cli",
8172
8204
  "pluginType": "core",
@@ -8200,23 +8232,23 @@
8200
8232
  "relativePath": [
8201
8233
  "dist",
8202
8234
  "commands",
8203
- "theme",
8204
- "status.js"
8235
+ "snippet",
8236
+ "rollback.js"
8205
8237
  ]
8206
8238
  },
8207
- "snippet:diff": {
8239
+ "taxonomy:diff": {
8208
8240
  "aliases": [],
8209
8241
  "args": {
8210
8242
  "path": {
8211
- "description": "Path to snippets directory (overrides project config)",
8243
+ "description": "Path to taxonomies directory (overrides project config)",
8212
8244
  "name": "path"
8213
8245
  }
8214
8246
  },
8215
- "description": "Show what differs in snippets between your local files and a WordPress environment, or between two environments",
8247
+ "description": "Show what differs in taxonomies between your local taxonomies/ files and a WordPress environment, or between two environments",
8216
8248
  "examples": [
8217
- "$ lps snippet diff",
8218
- "$ lps snippet diff --env staging",
8219
- "$ lps snippet diff --env staging --against production"
8249
+ "$ lps taxonomy diff",
8250
+ "$ lps taxonomy diff --env staging",
8251
+ "$ lps taxonomy diff --env staging --against production"
8220
8252
  ],
8221
8253
  "flags": {
8222
8254
  "json": {
@@ -8243,7 +8275,7 @@
8243
8275
  },
8244
8276
  "hasDynamicHelp": false,
8245
8277
  "hiddenAliases": [],
8246
- "id": "snippet:diff",
8278
+ "id": "taxonomy:diff",
8247
8279
  "pluginAlias": "@loopress/cli",
8248
8280
  "pluginName": "@loopress/cli",
8249
8281
  "pluginType": "core",
@@ -8285,16 +8317,16 @@
8285
8317
  "relativePath": [
8286
8318
  "dist",
8287
8319
  "commands",
8288
- "snippet",
8320
+ "taxonomy",
8289
8321
  "diff.js"
8290
8322
  ]
8291
8323
  },
8292
- "snippet:list": {
8324
+ "taxonomy:list": {
8293
8325
  "aliases": [],
8294
8326
  "args": {},
8295
- "description": "List snippets currently on WordPress",
8327
+ "description": "List the taxonomies registered on WordPress, where each comes from (Loopress, WordPress, ACF, CPT UI, a theme or plugin) and the post types it attaches to. Only Loopress ones are pulled and pushed.",
8296
8328
  "examples": [
8297
- "$ lps snippet list"
8329
+ "$ lps taxonomy list"
8298
8330
  ],
8299
8331
  "flags": {
8300
8332
  "json": {
@@ -8314,7 +8346,7 @@
8314
8346
  },
8315
8347
  "hasDynamicHelp": false,
8316
8348
  "hiddenAliases": [],
8317
- "id": "snippet:list",
8349
+ "id": "taxonomy:list",
8318
8350
  "pluginAlias": "@loopress/cli",
8319
8351
  "pluginName": "@loopress/cli",
8320
8352
  "pluginType": "core",
@@ -8348,52 +8380,103 @@
8348
8380
  "relativePath": [
8349
8381
  "dist",
8350
8382
  "commands",
8351
- "snippet",
8383
+ "taxonomy",
8352
8384
  "list.js"
8353
8385
  ]
8354
8386
  },
8355
- "snippet:publish": {
8387
+ "taxonomy:pull": {
8356
8388
  "aliases": [],
8357
8389
  "args": {
8358
8390
  "path": {
8359
- "description": "Path to snippets directory (overrides project config)",
8391
+ "description": "Path to the taxonomies directory (overrides project config)",
8360
8392
  "name": "path"
8361
8393
  }
8362
8394
  },
8363
- "description": "Publish snippets to your Loopress account so they can be deployed to other projects. Does not touch any WordPress site.",
8395
+ "description": "Pull the taxonomies Loopress manages on WordPress into taxonomies/<slug>.json files, never their terms. Taxonomies registered by a theme or another plugin are never pulled, see `lps taxonomy list`.",
8364
8396
  "examples": [
8365
- "$ lps snippet publish",
8366
- "$ lps snippet publish ./snippets"
8397
+ "$ lps taxonomy pull"
8367
8398
  ],
8368
- "flags": {},
8399
+ "flags": {
8400
+ "json": {
8401
+ "description": "Format output as json.",
8402
+ "helpGroup": "GLOBAL",
8403
+ "name": "json",
8404
+ "allowNo": false,
8405
+ "type": "boolean"
8406
+ },
8407
+ "env": {
8408
+ "description": "Target environment by name (default: \"local\", or the project's only environment)",
8409
+ "name": "env",
8410
+ "hasDynamicHelp": false,
8411
+ "multiple": false,
8412
+ "type": "option"
8413
+ },
8414
+ "dry-run": {
8415
+ "char": "d",
8416
+ "description": "Show what would change without making changes",
8417
+ "name": "dry-run",
8418
+ "allowNo": false,
8419
+ "type": "boolean"
8420
+ },
8421
+ "yes": {
8422
+ "char": "y",
8423
+ "description": "Answer yes to confirmation prompts",
8424
+ "name": "yes",
8425
+ "allowNo": false,
8426
+ "type": "boolean"
8427
+ }
8428
+ },
8369
8429
  "hasDynamicHelp": false,
8370
8430
  "hiddenAliases": [],
8371
- "id": "snippet:publish",
8431
+ "id": "taxonomy:pull",
8372
8432
  "pluginAlias": "@loopress/cli",
8373
8433
  "pluginName": "@loopress/cli",
8374
8434
  "pluginType": "core",
8375
8435
  "strict": true,
8376
- "enableJsonFlag": false,
8436
+ "enableJsonFlag": true,
8437
+ "dryRunFlag": {
8438
+ "dry-run": {
8439
+ "char": "d",
8440
+ "description": "Show what would change without making changes",
8441
+ "allowNo": false,
8442
+ "type": "boolean"
8443
+ }
8444
+ },
8445
+ "honorsExclude": false,
8446
+ "skipUnsupportedFlag": {
8447
+ "skip-unsupported": {
8448
+ "description": "Skip the resources the project uses but this site can't hold (a missing plugin, a Full feature on Light) instead of failing, and warn about each",
8449
+ "allowNo": false,
8450
+ "type": "boolean"
8451
+ }
8452
+ },
8453
+ "yesFlag": {
8454
+ "yes": {
8455
+ "char": "y",
8456
+ "description": "Answer yes to confirmation prompts",
8457
+ "allowNo": false,
8458
+ "type": "boolean"
8459
+ }
8460
+ },
8377
8461
  "isESM": true,
8378
8462
  "relativePath": [
8379
8463
  "dist",
8380
8464
  "commands",
8381
- "snippet",
8382
- "publish.js"
8465
+ "taxonomy",
8466
+ "pull.js"
8383
8467
  ]
8384
8468
  },
8385
- "snippet:pull": {
8469
+ "taxonomy:push": {
8386
8470
  "aliases": [],
8387
8471
  "args": {
8388
8472
  "path": {
8389
- "description": "Path to snippets directory (overrides project config)",
8473
+ "description": "Path to the taxonomies directory (overrides project config)",
8390
8474
  "name": "path"
8391
8475
  }
8392
8476
  },
8393
- "description": "Pull snippets from WordPress into local files",
8477
+ "description": "Push local taxonomies (taxonomies/<slug>.json, register_taxonomy() arguments plus \"object_type\") to WordPress. Create or update only, never deletes a taxonomy (use `lps taxonomy rm`), never touches its terms.",
8394
8478
  "examples": [
8395
- "$ lps snippet pull",
8396
- "$ lps snippet pull ./snippets"
8479
+ "$ lps taxonomy push"
8397
8480
  ],
8398
8481
  "flags": {
8399
8482
  "json": {
@@ -8410,6 +8493,18 @@
8410
8493
  "multiple": false,
8411
8494
  "type": "option"
8412
8495
  },
8496
+ "overwrite": {
8497
+ "description": "Push even over changes made on the site outside Loopress since your last push. Pages: also take over a same-slug page Loopress did not create",
8498
+ "name": "overwrite",
8499
+ "allowNo": false,
8500
+ "type": "boolean"
8501
+ },
8502
+ "production-confirmed": {
8503
+ "hidden": true,
8504
+ "name": "production-confirmed",
8505
+ "allowNo": false,
8506
+ "type": "boolean"
8507
+ },
8413
8508
  "dry-run": {
8414
8509
  "char": "d",
8415
8510
  "description": "Show what would change without making changes",
@@ -8427,7 +8522,7 @@
8427
8522
  },
8428
8523
  "hasDynamicHelp": false,
8429
8524
  "hiddenAliases": [],
8430
- "id": "snippet:pull",
8525
+ "id": "taxonomy:push",
8431
8526
  "pluginAlias": "@loopress/cli",
8432
8527
  "pluginName": "@loopress/cli",
8433
8528
  "pluginType": "core",
@@ -8441,7 +8536,7 @@
8441
8536
  "type": "boolean"
8442
8537
  }
8443
8538
  },
8444
- "honorsExclude": false,
8539
+ "honorsExclude": true,
8445
8540
  "skipUnsupportedFlag": {
8446
8541
  "skip-unsupported": {
8447
8542
  "description": "Skip the resources the project uses but this site can't hold (a missing plugin, a Full feature on Light) instead of failing, and warn about each",
@@ -8461,22 +8556,25 @@
8461
8556
  "relativePath": [
8462
8557
  "dist",
8463
8558
  "commands",
8464
- "snippet",
8465
- "pull.js"
8559
+ "taxonomy",
8560
+ "push.js"
8466
8561
  ]
8467
8562
  },
8468
- "snippet:push": {
8469
- "aliases": [],
8563
+ "taxonomy:rm": {
8564
+ "aliases": [
8565
+ "taxonomy:remove"
8566
+ ],
8470
8567
  "args": {
8471
- "path": {
8472
- "description": "Path to snippets directory (overrides project config)",
8473
- "name": "path"
8568
+ "slug": {
8569
+ "description": "The taxonomy slug, its taxonomies/ file name without .json",
8570
+ "name": "slug",
8571
+ "required": true
8474
8572
  }
8475
8573
  },
8476
- "description": "Push local snippet files to WordPress. Local snippet files created or updated remotely are renamed on disk to the `<id>-<slug>` convention.",
8574
+ "description": "Stop registering a Loopress taxonomy on WordPress. Its terms are kept in the database, hidden until the taxonomy is pushed again.",
8477
8575
  "examples": [
8478
- "$ lps snippet push",
8479
- "$ lps snippet push ./snippets"
8576
+ "$ lps taxonomy rm <slug>",
8577
+ "$ lps taxonomy remove <slug> --yes"
8480
8578
  ],
8481
8579
  "flags": {
8482
8580
  "json": {
@@ -8493,18 +8591,6 @@
8493
8591
  "multiple": false,
8494
8592
  "type": "option"
8495
8593
  },
8496
- "overwrite": {
8497
- "description": "Push even over changes made on the site outside Loopress since your last push. Pages: also take over a same-slug page Loopress did not create",
8498
- "name": "overwrite",
8499
- "allowNo": false,
8500
- "type": "boolean"
8501
- },
8502
- "production-confirmed": {
8503
- "hidden": true,
8504
- "name": "production-confirmed",
8505
- "allowNo": false,
8506
- "type": "boolean"
8507
- },
8508
8594
  "dry-run": {
8509
8595
  "char": "d",
8510
8596
  "description": "Show what would change without making changes",
@@ -8522,7 +8608,7 @@
8522
8608
  },
8523
8609
  "hasDynamicHelp": false,
8524
8610
  "hiddenAliases": [],
8525
- "id": "snippet:push",
8611
+ "id": "taxonomy:rm",
8526
8612
  "pluginAlias": "@loopress/cli",
8527
8613
  "pluginName": "@loopress/cli",
8528
8614
  "pluginType": "core",
@@ -8536,7 +8622,7 @@
8536
8622
  "type": "boolean"
8537
8623
  }
8538
8624
  },
8539
- "honorsExclude": true,
8625
+ "honorsExclude": false,
8540
8626
  "skipUnsupportedFlag": {
8541
8627
  "skip-unsupported": {
8542
8628
  "description": "Skip the resources the project uses but this site can't hold (a missing plugin, a Full feature on Light) instead of failing, and warn about each",
@@ -8556,24 +8642,24 @@
8556
8642
  "relativePath": [
8557
8643
  "dist",
8558
8644
  "commands",
8559
- "snippet",
8560
- "push.js"
8645
+ "taxonomy",
8646
+ "rm.js"
8561
8647
  ]
8562
8648
  },
8563
- "snippet:rollback": {
8649
+ "taxonomy:rollback": {
8564
8650
  "aliases": [],
8565
8651
  "args": {
8566
8652
  "path": {
8567
- "description": "Path to snippets directory (overrides project config)",
8653
+ "description": "Path to taxonomies directory (overrides project config)",
8568
8654
  "name": "path"
8569
8655
  }
8570
8656
  },
8571
- "description": "Restore snippets to a snapshot taken automatically before an earlier `lps snippet push`",
8657
+ "description": "Restore taxonomies to a snapshot taken automatically before an earlier `lps taxonomy push`",
8572
8658
  "examples": [
8573
- "$ lps snippet rollback",
8574
- "$ lps snippet rollback --list",
8575
- "$ lps snippet rollback --to 1732000000000",
8576
- "$ lps snippet rollback --dry-run"
8659
+ "$ lps taxonomy rollback",
8660
+ "$ lps taxonomy rollback --list",
8661
+ "$ lps taxonomy rollback --to 1732000000000",
8662
+ "$ lps taxonomy rollback --dry-run"
8577
8663
  ],
8578
8664
  "flags": {
8579
8665
  "json": {
@@ -8620,7 +8706,7 @@
8620
8706
  },
8621
8707
  "hasDynamicHelp": false,
8622
8708
  "hiddenAliases": [],
8623
- "id": "snippet:rollback",
8709
+ "id": "taxonomy:rollback",
8624
8710
  "pluginAlias": "@loopress/cli",
8625
8711
  "pluginName": "@loopress/cli",
8626
8712
  "pluginType": "core",
@@ -8654,23 +8740,71 @@
8654
8740
  "relativePath": [
8655
8741
  "dist",
8656
8742
  "commands",
8657
- "snippet",
8743
+ "taxonomy",
8658
8744
  "rollback.js"
8659
8745
  ]
8660
8746
  },
8661
- "menu:diff": {
8747
+ "telemetry:disable": {
8748
+ "aliases": [],
8749
+ "args": {},
8750
+ "description": "Disable error reporting to Sentry",
8751
+ "examples": [
8752
+ "$ lps telemetry disable"
8753
+ ],
8754
+ "flags": {},
8755
+ "hasDynamicHelp": false,
8756
+ "hiddenAliases": [],
8757
+ "id": "telemetry:disable",
8758
+ "pluginAlias": "@loopress/cli",
8759
+ "pluginName": "@loopress/cli",
8760
+ "pluginType": "core",
8761
+ "strict": true,
8762
+ "enableJsonFlag": false,
8763
+ "isESM": true,
8764
+ "relativePath": [
8765
+ "dist",
8766
+ "commands",
8767
+ "telemetry",
8768
+ "disable.js"
8769
+ ]
8770
+ },
8771
+ "telemetry:enable": {
8772
+ "aliases": [],
8773
+ "args": {},
8774
+ "description": "Enable error reporting to Sentry",
8775
+ "examples": [
8776
+ "$ lps telemetry enable"
8777
+ ],
8778
+ "flags": {},
8779
+ "hasDynamicHelp": false,
8780
+ "hiddenAliases": [],
8781
+ "id": "telemetry:enable",
8782
+ "pluginAlias": "@loopress/cli",
8783
+ "pluginName": "@loopress/cli",
8784
+ "pluginType": "core",
8785
+ "strict": true,
8786
+ "enableJsonFlag": false,
8787
+ "isESM": true,
8788
+ "relativePath": [
8789
+ "dist",
8790
+ "commands",
8791
+ "telemetry",
8792
+ "enable.js"
8793
+ ]
8794
+ },
8795
+ "theme:activate": {
8662
8796
  "aliases": [],
8663
8797
  "args": {
8664
- "path": {
8665
- "description": "Path to menus directory (overrides project config)",
8666
- "name": "path"
8798
+ "stylesheet": {
8799
+ "description": "Theme to activate (default: the Loopress child theme, <parent>-loopress)",
8800
+ "name": "stylesheet"
8667
8801
  }
8668
8802
  },
8669
- "description": "Show what differs in nav menus and the active theme menu locations between your local files and a WordPress environment, or between two environments",
8803
+ "description": "Activate a theme on WordPress, the Loopress child theme by default. A child theme without settings of its own starts from a copy of its parent's theme mods and Global Styles. Set \"activateChildTheme\": true in loopress.json to have `lps theme template push` keep the child active.",
8670
8804
  "examples": [
8671
- "$ lps menu diff",
8672
- "$ lps menu diff --env staging",
8673
- "$ lps menu diff --env staging --against production"
8805
+ "$ lps theme activate",
8806
+ "$ lps theme activate twentytwentyfive --env staging",
8807
+ "$ lps theme activate --dry-run"
8674
8808
  ],
8675
8809
  "flags": {
8676
8810
  "json": {
@@ -8687,17 +8821,24 @@
8687
8821
  "multiple": false,
8688
8822
  "type": "option"
8689
8823
  },
8690
- "against": {
8691
- "description": "Compare the primary environment against this second environment instead of against local files",
8692
- "name": "against",
8693
- "hasDynamicHelp": false,
8694
- "multiple": false,
8695
- "type": "option"
8824
+ "dry-run": {
8825
+ "char": "d",
8826
+ "description": "Show what would change without making changes",
8827
+ "name": "dry-run",
8828
+ "allowNo": false,
8829
+ "type": "boolean"
8830
+ },
8831
+ "yes": {
8832
+ "char": "y",
8833
+ "description": "Answer yes to confirmation prompts",
8834
+ "name": "yes",
8835
+ "allowNo": false,
8836
+ "type": "boolean"
8696
8837
  }
8697
8838
  },
8698
8839
  "hasDynamicHelp": false,
8699
8840
  "hiddenAliases": [],
8700
- "id": "menu:diff",
8841
+ "id": "theme:activate",
8701
8842
  "pluginAlias": "@loopress/cli",
8702
8843
  "pluginName": "@loopress/cli",
8703
8844
  "pluginType": "core",
@@ -8711,7 +8852,7 @@
8711
8852
  "type": "boolean"
8712
8853
  }
8713
8854
  },
8714
- "honorsExclude": true,
8855
+ "honorsExclude": false,
8715
8856
  "skipUnsupportedFlag": {
8716
8857
  "skip-unsupported": {
8717
8858
  "description": "Skip the resources the project uses but this site can't hold (a missing plugin, a Full feature on Light) instead of failing, and warn about each",
@@ -8727,28 +8868,27 @@
8727
8868
  "type": "boolean"
8728
8869
  }
8729
8870
  },
8730
- "againstFlag": {
8731
- "against": {
8732
- "description": "Compare the primary environment against this second environment instead of against local files",
8733
- "input": [],
8734
- "multiple": false,
8735
- "type": "option"
8736
- }
8737
- },
8738
8871
  "isESM": true,
8739
8872
  "relativePath": [
8740
8873
  "dist",
8741
8874
  "commands",
8742
- "menu",
8743
- "diff.js"
8875
+ "theme",
8876
+ "activate.js"
8744
8877
  ]
8745
8878
  },
8746
- "menu:list": {
8879
+ "theme:add": {
8747
8880
  "aliases": [],
8748
- "args": {},
8749
- "description": "List nav menus and the active theme menu locations on WordPress",
8881
+ "args": {
8882
+ "slug": {
8883
+ "description": "Theme slug on WordPress.org",
8884
+ "name": "slug",
8885
+ "required": true
8886
+ }
8887
+ },
8888
+ "description": "Add a WordPress.org theme to loopress.json",
8750
8889
  "examples": [
8751
- "$ lps menu list"
8890
+ "$ lps theme add generatepress",
8891
+ "$ lps theme add generatepress --version 3.4.0"
8752
8892
  ],
8753
8893
  "flags": {
8754
8894
  "json": {
@@ -8764,11 +8904,25 @@
8764
8904
  "hasDynamicHelp": false,
8765
8905
  "multiple": false,
8766
8906
  "type": "option"
8907
+ },
8908
+ "dry-run": {
8909
+ "char": "d",
8910
+ "description": "Show what would change without making changes",
8911
+ "name": "dry-run",
8912
+ "allowNo": false,
8913
+ "type": "boolean"
8914
+ },
8915
+ "version": {
8916
+ "description": "Exact version to pin (default: \"latest\")",
8917
+ "name": "version",
8918
+ "hasDynamicHelp": false,
8919
+ "multiple": false,
8920
+ "type": "option"
8767
8921
  }
8768
8922
  },
8769
8923
  "hasDynamicHelp": false,
8770
8924
  "hiddenAliases": [],
8771
- "id": "menu:list",
8925
+ "id": "theme:add",
8772
8926
  "pluginAlias": "@loopress/cli",
8773
8927
  "pluginName": "@loopress/cli",
8774
8928
  "pluginType": "core",
@@ -8802,21 +8956,18 @@
8802
8956
  "relativePath": [
8803
8957
  "dist",
8804
8958
  "commands",
8805
- "menu",
8806
- "list.js"
8959
+ "theme",
8960
+ "add.js"
8807
8961
  ]
8808
8962
  },
8809
- "menu:pull": {
8963
+ "theme:pull": {
8810
8964
  "aliases": [],
8811
- "args": {
8812
- "path": {
8813
- "description": "Path to menus directory (overrides project config)",
8814
- "name": "path"
8815
- }
8816
- },
8817
- "description": "Pull nav menus and the active theme menu locations from WordPress",
8965
+ "args": {},
8966
+ "description": "Pull everything theme related from WordPress: theme versions into loopress.json, then Global Styles into a local file",
8818
8967
  "examples": [
8819
- "$ lps menu pull"
8968
+ "$ lps theme pull",
8969
+ "$ lps theme pull --env staging",
8970
+ "$ lps theme pull --dry-run"
8820
8971
  ],
8821
8972
  "flags": {
8822
8973
  "json": {
@@ -8839,18 +8990,11 @@
8839
8990
  "name": "dry-run",
8840
8991
  "allowNo": false,
8841
8992
  "type": "boolean"
8842
- },
8843
- "yes": {
8844
- "char": "y",
8845
- "description": "Answer yes to confirmation prompts",
8846
- "name": "yes",
8847
- "allowNo": false,
8848
- "type": "boolean"
8849
8993
  }
8850
8994
  },
8851
8995
  "hasDynamicHelp": false,
8852
8996
  "hiddenAliases": [],
8853
- "id": "menu:pull",
8997
+ "id": "theme:pull",
8854
8998
  "pluginAlias": "@loopress/cli",
8855
8999
  "pluginName": "@loopress/cli",
8856
9000
  "pluginType": "core",
@@ -8884,21 +9028,18 @@
8884
9028
  "relativePath": [
8885
9029
  "dist",
8886
9030
  "commands",
8887
- "menu",
9031
+ "theme",
8888
9032
  "pull.js"
8889
9033
  ]
8890
9034
  },
8891
- "menu:push": {
9035
+ "theme:push": {
8892
9036
  "aliases": [],
8893
- "args": {
8894
- "path": {
8895
- "description": "Path to menus directory (overrides project config)",
8896
- "name": "path"
8897
- }
8898
- },
8899
- "description": "Push local nav menus and the active theme menu locations to WordPress. Each menu's post_type/taxonomy items are resolved by slug on the target environment, never by a raw id; an item whose target does not exist there fails the whole menu rather than guessing.",
9037
+ "args": {},
9038
+ "description": "Push everything theme related to WordPress: theme versions from loopress.json, then block templates and parts, then Global Styles. Switches the active theme only to the Loopress child, when loopress.json sets \"activateChildTheme\": true.",
8900
9039
  "examples": [
8901
- "$ lps menu push"
9040
+ "$ lps theme push",
9041
+ "$ lps theme push --env staging",
9042
+ "$ lps theme push --dry-run"
8902
9043
  ],
8903
9044
  "flags": {
8904
9045
  "json": {
@@ -8915,18 +9056,6 @@
8915
9056
  "multiple": false,
8916
9057
  "type": "option"
8917
9058
  },
8918
- "overwrite": {
8919
- "description": "Push even over changes made on the site outside Loopress since your last push. Pages: also take over a same-slug page Loopress did not create",
8920
- "name": "overwrite",
8921
- "allowNo": false,
8922
- "type": "boolean"
8923
- },
8924
- "production-confirmed": {
8925
- "hidden": true,
8926
- "name": "production-confirmed",
8927
- "allowNo": false,
8928
- "type": "boolean"
8929
- },
8930
9059
  "dry-run": {
8931
9060
  "char": "d",
8932
9061
  "description": "Show what would change without making changes",
@@ -8940,11 +9069,17 @@
8940
9069
  "name": "yes",
8941
9070
  "allowNo": false,
8942
9071
  "type": "boolean"
9072
+ },
9073
+ "force": {
9074
+ "description": "Passed to `lps theme version push`",
9075
+ "name": "force",
9076
+ "allowNo": false,
9077
+ "type": "boolean"
8943
9078
  }
8944
9079
  },
8945
9080
  "hasDynamicHelp": false,
8946
9081
  "hiddenAliases": [],
8947
- "id": "menu:push",
9082
+ "id": "theme:push",
8948
9083
  "pluginAlias": "@loopress/cli",
8949
9084
  "pluginName": "@loopress/cli",
8950
9085
  "pluginType": "core",
@@ -8958,7 +9093,7 @@
8958
9093
  "type": "boolean"
8959
9094
  }
8960
9095
  },
8961
- "honorsExclude": true,
9096
+ "honorsExclude": false,
8962
9097
  "skipUnsupportedFlag": {
8963
9098
  "skip-unsupported": {
8964
9099
  "description": "Skip the resources the project uses but this site can't hold (a missing plugin, a Full feature on Light) instead of failing, and warn about each",
@@ -8978,24 +9113,16 @@
8978
9113
  "relativePath": [
8979
9114
  "dist",
8980
9115
  "commands",
8981
- "menu",
9116
+ "theme",
8982
9117
  "push.js"
8983
9118
  ]
8984
9119
  },
8985
- "menu:rollback": {
9120
+ "theme:status": {
8986
9121
  "aliases": [],
8987
- "args": {
8988
- "path": {
8989
- "description": "Path to menus directory (overrides project config)",
8990
- "name": "path"
8991
- }
8992
- },
8993
- "description": "Restore nav menus and menu locations to a snapshot taken automatically before an earlier `lps menu push`",
9122
+ "args": {},
9123
+ "description": "Compare the themes on WordPress against loopress.json and report version drift",
8994
9124
  "examples": [
8995
- "$ lps menu rollback",
8996
- "$ lps menu rollback --list",
8997
- "$ lps menu rollback --to 1732000000000",
8998
- "$ lps menu rollback --dry-run"
9125
+ "$ lps theme status"
8999
9126
  ],
9000
9127
  "flags": {
9001
9128
  "json": {
@@ -9011,38 +9138,11 @@
9011
9138
  "hasDynamicHelp": false,
9012
9139
  "multiple": false,
9013
9140
  "type": "option"
9014
- },
9015
- "dry-run": {
9016
- "char": "d",
9017
- "description": "Show what would change without making changes",
9018
- "name": "dry-run",
9019
- "allowNo": false,
9020
- "type": "boolean"
9021
- },
9022
- "yes": {
9023
- "char": "y",
9024
- "description": "Answer yes to confirmation prompts",
9025
- "name": "yes",
9026
- "allowNo": false,
9027
- "type": "boolean"
9028
- },
9029
- "list": {
9030
- "description": "List available snapshots instead of rolling back",
9031
- "name": "list",
9032
- "allowNo": false,
9033
- "type": "boolean"
9034
- },
9035
- "to": {
9036
- "description": "Roll back to this snapshot id instead of the most recent one",
9037
- "name": "to",
9038
- "hasDynamicHelp": false,
9039
- "multiple": false,
9040
- "type": "option"
9041
9141
  }
9042
9142
  },
9043
9143
  "hasDynamicHelp": false,
9044
9144
  "hiddenAliases": [],
9045
- "id": "menu:rollback",
9145
+ "id": "theme:status",
9046
9146
  "pluginAlias": "@loopress/cli",
9047
9147
  "pluginName": "@loopress/cli",
9048
9148
  "pluginType": "core",
@@ -9076,8 +9176,8 @@
9076
9176
  "relativePath": [
9077
9177
  "dist",
9078
9178
  "commands",
9079
- "menu",
9080
- "rollback.js"
9179
+ "theme",
9180
+ "status.js"
9081
9181
  ]
9082
9182
  },
9083
9183
  "theme:style:diff": {
@@ -9841,5 +9941,5 @@
9841
9941
  ]
9842
9942
  }
9843
9943
  },
9844
- "version": "0.34.0"
9944
+ "version": "0.35.0"
9845
9945
  }