pressship 0.1.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 (66) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +160 -0
  3. package/dist/auth/login.d.ts +1 -0
  4. package/dist/auth/login.js +39 -0
  5. package/dist/auth/login.js.map +1 -0
  6. package/dist/auth/logout.d.ts +1 -0
  7. package/dist/auth/logout.js +12 -0
  8. package/dist/auth/logout.js.map +1 -0
  9. package/dist/auth/session.d.ts +12 -0
  10. package/dist/auth/session.js +72 -0
  11. package/dist/auth/session.js.map +1 -0
  12. package/dist/auth/whoami.d.ts +17 -0
  13. package/dist/auth/whoami.js +108 -0
  14. package/dist/auth/whoami.js.map +1 -0
  15. package/dist/checks/plugin-check-environment.d.ts +16 -0
  16. package/dist/checks/plugin-check-environment.js +209 -0
  17. package/dist/checks/plugin-check-environment.js.map +1 -0
  18. package/dist/checks/plugin-check.d.ts +16 -0
  19. package/dist/checks/plugin-check.js +176 -0
  20. package/dist/checks/plugin-check.js.map +1 -0
  21. package/dist/checks/readme-validator.d.ts +16 -0
  22. package/dist/checks/readme-validator.js +84 -0
  23. package/dist/checks/readme-validator.js.map +1 -0
  24. package/dist/checks/summary.d.ts +3 -0
  25. package/dist/checks/summary.js +73 -0
  26. package/dist/checks/summary.js.map +1 -0
  27. package/dist/cli.d.ts +2 -0
  28. package/dist/cli.js +66 -0
  29. package/dist/cli.js.map +1 -0
  30. package/dist/package/archive.d.ts +12 -0
  31. package/dist/package/archive.js +64 -0
  32. package/dist/package/archive.js.map +1 -0
  33. package/dist/package/ignore.d.ts +2 -0
  34. package/dist/package/ignore.js +48 -0
  35. package/dist/package/ignore.js.map +1 -0
  36. package/dist/plugin/discover.d.ts +2 -0
  37. package/dist/plugin/discover.js +67 -0
  38. package/dist/plugin/discover.js.map +1 -0
  39. package/dist/plugin/headers.d.ts +3 -0
  40. package/dist/plugin/headers.js +54 -0
  41. package/dist/plugin/headers.js.map +1 -0
  42. package/dist/plugin/readme.d.ts +3 -0
  43. package/dist/plugin/readme.js +103 -0
  44. package/dist/plugin/readme.js.map +1 -0
  45. package/dist/svn/release.d.ts +16 -0
  46. package/dist/svn/release.js +147 -0
  47. package/dist/svn/release.js.map +1 -0
  48. package/dist/types.d.ts +55 -0
  49. package/dist/types.js +2 -0
  50. package/dist/types.js.map +1 -0
  51. package/dist/ui.d.ts +15 -0
  52. package/dist/ui.js +50 -0
  53. package/dist/ui.js.map +1 -0
  54. package/dist/utils/format.d.ts +2 -0
  55. package/dist/utils/format.js +21 -0
  56. package/dist/utils/format.js.map +1 -0
  57. package/dist/utils/paths.d.ts +9 -0
  58. package/dist/utils/paths.js +48 -0
  59. package/dist/utils/paths.js.map +1 -0
  60. package/dist/utils/slug.d.ts +2 -0
  61. package/dist/utils/slug.js +15 -0
  62. package/dist/utils/slug.js.map +1 -0
  63. package/dist/wordpress-org/submit.d.ts +13 -0
  64. package/dist/wordpress-org/submit.js +169 -0
  65. package/dist/wordpress-org/submit.js.map +1 -0
  66. package/package.json +56 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/svn/release.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ export type Severity = "error" | "warning" | "info";
2
+ export type Finding = {
3
+ severity: Severity;
4
+ message: string;
5
+ code?: string;
6
+ file?: string;
7
+ line?: number;
8
+ column?: number;
9
+ };
10
+ export type PluginHeaders = {
11
+ pluginName: string;
12
+ pluginUri?: string;
13
+ description?: string;
14
+ version?: string;
15
+ author?: string;
16
+ authorUri?: string;
17
+ textDomain?: string;
18
+ domainPath?: string;
19
+ requiresAtLeast?: string;
20
+ requiresPhp?: string;
21
+ updateUri?: string;
22
+ license?: string;
23
+ licenseUri?: string;
24
+ };
25
+ export type ReadmeMetadata = {
26
+ name?: string;
27
+ contributors?: string[];
28
+ tags?: string[];
29
+ requiresAtLeast?: string;
30
+ testedUpTo?: string;
31
+ stableTag?: string;
32
+ requiresPhp?: string;
33
+ license?: string;
34
+ licenseUri?: string;
35
+ };
36
+ export type PluginProject = {
37
+ rootDir: string;
38
+ mainFile: string;
39
+ headers: PluginHeaders;
40
+ readmePath?: string;
41
+ readme?: ReadmeMetadata;
42
+ slug: string;
43
+ version?: string;
44
+ };
45
+ export type PackageResult = {
46
+ zipPath: string;
47
+ sizeBytes: number;
48
+ files: string[];
49
+ topLevelFolder: string;
50
+ };
51
+ export type CommandPlan = {
52
+ command: string;
53
+ args: string[];
54
+ cwd?: string;
55
+ };
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/dist/ui.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ import { type Ora } from "ora";
2
+ export declare const ui: {
3
+ intro(title: string): void;
4
+ section(title: string): void;
5
+ info(message: string): void;
6
+ success(message: string): void;
7
+ warn(message: string): void;
8
+ error(message: string): void;
9
+ muted(message: string): string;
10
+ path(value: string): string;
11
+ value(value: string): string;
12
+ keyValue(label: string, value: string): void;
13
+ spinner(text: string): Ora;
14
+ task<T>(text: string, action: () => Promise<T>, successText?: (value: T) => string): Promise<T>;
15
+ };
package/dist/ui.js ADDED
@@ -0,0 +1,50 @@
1
+ import chalk from "chalk";
2
+ import ora from "ora";
3
+ export const ui = {
4
+ intro(title) {
5
+ console.log(`\n${chalk.bold.cyan("Pressship")} ${chalk.dim("•")} ${chalk.bold(title)}\n`);
6
+ },
7
+ section(title) {
8
+ console.log(`\n${chalk.bold(title)}`);
9
+ },
10
+ info(message) {
11
+ console.log(`${chalk.cyan("ℹ")} ${message}`);
12
+ },
13
+ success(message) {
14
+ console.log(`${chalk.green("✓")} ${message}`);
15
+ },
16
+ warn(message) {
17
+ console.log(`${chalk.yellow("!")} ${message}`);
18
+ },
19
+ error(message) {
20
+ console.log(`${chalk.red("✖")} ${message}`);
21
+ },
22
+ muted(message) {
23
+ return chalk.dim(message);
24
+ },
25
+ path(value) {
26
+ return chalk.cyan(value);
27
+ },
28
+ value(value) {
29
+ return chalk.green(value);
30
+ },
31
+ keyValue(label, value) {
32
+ console.log(` ${chalk.dim(label.padEnd(12))} ${value}`);
33
+ },
34
+ spinner(text) {
35
+ return ora({ text, color: "cyan" }).start();
36
+ },
37
+ async task(text, action, successText) {
38
+ const spinner = ui.spinner(text);
39
+ try {
40
+ const result = await action();
41
+ spinner.succeed(successText ? successText(result) : text);
42
+ return result;
43
+ }
44
+ catch (error) {
45
+ spinner.fail(text);
46
+ throw error;
47
+ }
48
+ }
49
+ };
50
+ //# sourceMappingURL=ui.js.map
package/dist/ui.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAiB,MAAM,KAAK,CAAC;AAEpC,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,KAAK,CAAC,KAAa;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5F,CAAC;IAED,OAAO,CAAC,KAAa;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,OAAO,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,CAAC,KAAa;QAChB,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,KAAa;QACjB,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,QAAQ,CAAC,KAAa,EAAE,KAAa;QACnC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,CAAC,IAAY;QAClB,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,IAAI,CAAI,IAAY,EAAE,MAAwB,EAAE,WAAkC;QACtF,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEjC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC1D,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function formatBytes(bytes: number): string;
2
+ export declare function summarizeList(values: string[], limit?: number): string;
@@ -0,0 +1,21 @@
1
+ export function formatBytes(bytes) {
2
+ if (bytes < 1024) {
3
+ return `${bytes} B`;
4
+ }
5
+ const units = ["KB", "MB", "GB"];
6
+ let size = bytes / 1024;
7
+ let unitIndex = 0;
8
+ while (size >= 1024 && unitIndex < units.length - 1) {
9
+ size /= 1024;
10
+ unitIndex += 1;
11
+ }
12
+ return `${size.toFixed(size >= 10 ? 1 : 2)} ${units[unitIndex]}`;
13
+ }
14
+ export function summarizeList(values, limit = 12) {
15
+ if (values.length <= limit) {
16
+ return values.join("\n");
17
+ }
18
+ const visible = values.slice(0, limit).join("\n");
19
+ return `${visible}\n...and ${values.length - limit} more`;
20
+ }
21
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,IAAI,KAAK,GAAG,IAAI,EAAE,CAAC;QACjB,OAAO,GAAG,KAAK,IAAI,CAAC;IACtB,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACjC,IAAI,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;IACxB,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,OAAO,IAAI,IAAI,IAAI,IAAI,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,IAAI,IAAI,IAAI,CAAC;QACb,SAAS,IAAI,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAgB,EAAE,KAAK,GAAG,EAAE;IACxD,IAAI,MAAM,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,OAAO,GAAG,OAAO,YAAY,MAAM,CAAC,MAAM,GAAG,KAAK,OAAO,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare function getConfigDir(): string;
2
+ export declare function ensureConfigDir(): Promise<string>;
3
+ export declare function getStorageStatePath(): string;
4
+ export declare function getDebugDir(): string;
5
+ export declare function ensureDebugDir(): Promise<string>;
6
+ export declare function getCacheDir(): string;
7
+ export declare function ensureCacheDir(): Promise<string>;
8
+ export declare function getDefaultBuildDir(): string;
9
+ export declare function pathExists(filePath: string): boolean;
@@ -0,0 +1,48 @@
1
+ import { existsSync } from "node:fs";
2
+ import { mkdir } from "node:fs/promises";
3
+ import { homedir, tmpdir } from "node:os";
4
+ import path from "node:path";
5
+ const appName = "pressship";
6
+ export function getConfigDir() {
7
+ if (process.env.PRESSSHIP_CONFIG_DIR) {
8
+ return path.resolve(process.env.PRESSSHIP_CONFIG_DIR);
9
+ }
10
+ if (process.env.PRESSPORT_CONFIG_DIR) {
11
+ return path.resolve(process.env.PRESSPORT_CONFIG_DIR);
12
+ }
13
+ if (process.env.XDG_CONFIG_HOME) {
14
+ return path.join(process.env.XDG_CONFIG_HOME, appName);
15
+ }
16
+ return path.join(homedir(), ".config", appName);
17
+ }
18
+ export async function ensureConfigDir() {
19
+ const configDir = getConfigDir();
20
+ await mkdir(configDir, { recursive: true, mode: 0o700 });
21
+ return configDir;
22
+ }
23
+ export function getStorageStatePath() {
24
+ return path.join(getConfigDir(), "wordpress-org-storage.json");
25
+ }
26
+ export function getDebugDir() {
27
+ return path.join(getConfigDir(), "debug");
28
+ }
29
+ export async function ensureDebugDir() {
30
+ const debugDir = getDebugDir();
31
+ await mkdir(debugDir, { recursive: true, mode: 0o700 });
32
+ return debugDir;
33
+ }
34
+ export function getCacheDir() {
35
+ return path.join(getConfigDir(), "cache");
36
+ }
37
+ export async function ensureCacheDir() {
38
+ const cacheDir = getCacheDir();
39
+ await mkdir(cacheDir, { recursive: true, mode: 0o700 });
40
+ return cacheDir;
41
+ }
42
+ export function getDefaultBuildDir() {
43
+ return path.join(tmpdir(), appName);
44
+ }
45
+ export function pathExists(filePath) {
46
+ return existsSync(filePath);
47
+ }
48
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,OAAO,GAAG,WAAW,CAAC;AAE5B,MAAM,UAAU,YAAY;IAC1B,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,4BAA4B,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACxD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACxD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function slugify(value: string): string;
2
+ export declare function inferSlug(pluginName: string, textDomain?: string): string;
@@ -0,0 +1,15 @@
1
+ export function slugify(value) {
2
+ return value
3
+ .normalize("NFKD")
4
+ .replace(/[\u0300-\u036f]/g, "")
5
+ .toLowerCase()
6
+ .replace(/&/g, " and ")
7
+ .replace(/[^a-z0-9]+/g, "-")
8
+ .replace(/^-+|-+$/g, "")
9
+ .replace(/-{2,}/g, "-");
10
+ }
11
+ export function inferSlug(pluginName, textDomain) {
12
+ const textDomainSlug = textDomain ? slugify(textDomain) : "";
13
+ return textDomainSlug || slugify(pluginName);
14
+ }
15
+ //# sourceMappingURL=slug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slug.js","sourceRoot":"","sources":["../../src/utils/slug.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,OAAO,KAAK;SACT,SAAS,CAAC,MAAM,CAAC;SACjB,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;SAC/B,WAAW,EAAE;SACb,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,UAAkB,EAAE,UAAmB;IAC/D,MAAM,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,OAAO,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { z } from "zod";
2
+ declare const submitOptionsSchema: z.ZodObject<{
3
+ dryRun: z.ZodDefault<z.ZodBoolean>;
4
+ skipPluginCheck: z.ZodDefault<z.ZodBoolean>;
5
+ skipReadmeValidator: z.ZodDefault<z.ZodBoolean>;
6
+ yes: z.ZodDefault<z.ZodBoolean>;
7
+ outputDir: z.ZodOptional<z.ZodString>;
8
+ ignore: z.ZodDefault<z.ZodArray<z.ZodString>>;
9
+ wpPath: z.ZodOptional<z.ZodString>;
10
+ }, z.core.$strip>;
11
+ export type SubmitOptions = z.input<typeof submitOptionsSchema>;
12
+ export declare function submit(pluginPath: string | undefined, rawOptions: SubmitOptions): Promise<void>;
13
+ export {};
@@ -0,0 +1,169 @@
1
+ import { confirm, input, select } from "@inquirer/prompts";
2
+ import path from "node:path";
3
+ import { z } from "zod";
4
+ import { hasSavedSession, isLoggedIn, openBrowserSession } from "../auth/session.js";
5
+ import { runPluginCheck } from "../checks/plugin-check.js";
6
+ import { validateReadmeFile } from "../checks/readme-validator.js";
7
+ import { hasBlockingFindings, printFindings } from "../checks/summary.js";
8
+ import { createPluginZip, stagePluginDirectory } from "../package/archive.js";
9
+ import { discoverPluginProject } from "../plugin/discover.js";
10
+ import { ui } from "../ui.js";
11
+ import { formatBytes, summarizeList } from "../utils/format.js";
12
+ import { ensureDebugDir } from "../utils/paths.js";
13
+ const submitOptionsSchema = z.object({
14
+ dryRun: z.boolean().default(false),
15
+ skipPluginCheck: z.boolean().default(false),
16
+ skipReadmeValidator: z.boolean().default(false),
17
+ yes: z.boolean().default(false),
18
+ outputDir: z.string().optional(),
19
+ ignore: z.array(z.string()).default([]),
20
+ wpPath: z.string().optional()
21
+ });
22
+ export async function submit(pluginPath, rawOptions) {
23
+ const options = submitOptionsSchema.parse(rawOptions);
24
+ ui.intro(options.dryRun ? "Dry-run plugin submission" : "Submit plugin to WordPress.org");
25
+ const rootDir = path.resolve(pluginPath ?? (await input({ message: "Plugin directory", default: process.cwd() })));
26
+ const project = await ui.task("Discovering WordPress plugin", () => discoverPluginProject(rootDir), (value) => `Discovered ${value.headers.pluginName}`);
27
+ printProjectSummary(project);
28
+ const readmeFindings = await ui.task("Validating readme.txt", async () => project.readmePath
29
+ ? (await validateReadmeFile(project.readmePath, {
30
+ skipRemote: options.skipReadmeValidator,
31
+ headless: true
32
+ })).findings
33
+ : [
34
+ {
35
+ severity: "error",
36
+ code: "readme.missing",
37
+ message: "WordPress.org submissions require a readme.txt file."
38
+ }
39
+ ]);
40
+ printFindings("Readme validation", readmeFindings);
41
+ const packageResult = await ui.task("Creating submission zip", () => createPluginZip(project, {
42
+ outputDir: options.outputDir,
43
+ ignore: options.ignore
44
+ }), (value) => `Created submission zip (${formatBytes(value.sizeBytes)})`);
45
+ printPackageSummary(packageResult);
46
+ const checkTarget = await ui.task("Preparing Plugin Check target", () => stagePluginDirectory(project, {
47
+ outputDir: options.outputDir,
48
+ ignore: options.ignore
49
+ }));
50
+ const pluginCheck = await ui.task("Running WordPress.org Plugin Check", () => runPluginCheck(checkTarget.path, {
51
+ skip: options.skipPluginCheck,
52
+ mode: "new",
53
+ wpPath: options.wpPath
54
+ }));
55
+ printFindings("Plugin Check", pluginCheck.findings);
56
+ const blockingFindings = hasBlockingFindings(readmeFindings) || hasBlockingFindings(pluginCheck.findings);
57
+ if (blockingFindings && !options.yes) {
58
+ const shouldContinue = await confirm({
59
+ message: "Blocking findings were reported. Continue anyway?",
60
+ default: false
61
+ });
62
+ if (!shouldContinue) {
63
+ throw new Error("Submission cancelled because validation reported blocking findings.");
64
+ }
65
+ }
66
+ if (options.dryRun) {
67
+ ui.success("Dry run complete. No upload was attempted.");
68
+ return;
69
+ }
70
+ await ensureSession();
71
+ const overview = await input({
72
+ message: "Brief plugin overview for the WordPress.org submission form",
73
+ default: project.headers.description ?? ""
74
+ });
75
+ if (!options.yes) {
76
+ await select({
77
+ message: "Confirm this is a new WordPress.org review submission.",
78
+ choices: [
79
+ { name: "Yes, upload this zip to WordPress.org for review", value: "yes" },
80
+ { name: "No, cancel", value: "no" }
81
+ ]
82
+ }).then((answer) => {
83
+ if (answer !== "yes") {
84
+ throw new Error("Submission cancelled.");
85
+ }
86
+ });
87
+ }
88
+ await ui.task("Uploading zip to WordPress.org", () => uploadToWordPressOrg(project, packageResult, overview));
89
+ }
90
+ async function uploadToWordPressOrg(project, packageResult, overview) {
91
+ const { context, page } = await openBrowserSession({ headless: false });
92
+ try {
93
+ if (!(await isLoggedIn(page))) {
94
+ throw new Error("Saved WordPress.org session is not logged in. Run `pressship login` first.");
95
+ }
96
+ const body = page.locator("body");
97
+ const bodyText = await body.innerText({ timeout: 10_000 });
98
+ if (/already.*submitted|pending review/i.test(bodyText)) {
99
+ ui.warn("WordPress.org indicates this account may already have a pending submission.");
100
+ }
101
+ await fillOptionalText(page, /plugin.*name|name/i, project.headers.pluginName);
102
+ await fillOptionalText(page, /description|overview|what.*does/i, overview);
103
+ await checkRequiredCheckboxes(page);
104
+ const fileInput = page.locator('input[type="file"]').first();
105
+ await fileInput.setInputFiles(packageResult.zipPath);
106
+ const submitButton = page
107
+ .getByRole("button", { name: /upload|submit|send/i })
108
+ .or(page.locator('input[type="submit"]'))
109
+ .first();
110
+ await Promise.all([
111
+ page.waitForLoadState("networkidle").catch(() => undefined),
112
+ submitButton.click()
113
+ ]);
114
+ const resultText = await page.locator("body").innerText({ timeout: 15_000 });
115
+ ui.success(extractSubmissionResult(resultText));
116
+ }
117
+ catch (error) {
118
+ const debugDir = await ensureDebugDir();
119
+ const screenshotPath = path.join(debugDir, `submit-${Date.now()}.png`);
120
+ await page.screenshot({ path: screenshotPath, fullPage: true }).catch(() => undefined);
121
+ throw new Error(`WordPress.org submission automation failed. Screenshot saved to ${screenshotPath}. ${error instanceof Error ? error.message : String(error)}`);
122
+ }
123
+ finally {
124
+ await context.browser()?.close();
125
+ }
126
+ }
127
+ async function ensureSession() {
128
+ if (!(await hasSavedSession())) {
129
+ throw new Error("No WordPress.org browser session found. Run `pressship login` first.");
130
+ }
131
+ }
132
+ async function fillOptionalText(page, label, value) {
133
+ const field = page.getByLabel(label).first();
134
+ if ((await field.count()) === 0) {
135
+ return;
136
+ }
137
+ await field.fill(value).catch(() => undefined);
138
+ }
139
+ async function checkRequiredCheckboxes(page) {
140
+ const checkboxes = page.locator('input[type="checkbox"]');
141
+ const count = await checkboxes.count();
142
+ for (let index = 0; index < count; index += 1) {
143
+ const checkbox = checkboxes.nth(index);
144
+ const required = await checkbox.evaluate((element) => element.hasAttribute("required")).catch(() => false);
145
+ if (required) {
146
+ await checkbox.check().catch(() => undefined);
147
+ }
148
+ }
149
+ }
150
+ function printProjectSummary(project) {
151
+ ui.section("Plugin");
152
+ ui.keyValue("Name", ui.value(project.headers.pluginName));
153
+ ui.keyValue("Slug", project.slug);
154
+ ui.keyValue("Version", project.version ?? "unknown");
155
+ ui.keyValue("Main file", ui.path(path.relative(project.rootDir, project.mainFile)));
156
+ ui.keyValue("Readme", project.readmePath ? ui.path(path.relative(project.rootDir, project.readmePath)) : "missing");
157
+ }
158
+ function printPackageSummary(packageResult) {
159
+ ui.section("Package");
160
+ ui.keyValue("Zip", `${ui.path(packageResult.zipPath)} ${ui.muted(`(${formatBytes(packageResult.sizeBytes)})`)}`);
161
+ ui.keyValue("Files", `${packageResult.files.length}`);
162
+ console.log(ui.muted(summarizeList(packageResult.files)));
163
+ }
164
+ function extractSubmissionResult(text) {
165
+ const compact = text.replace(/\s+/g, " ").trim();
166
+ const match = compact.match(/(submitted.+|queued.+|error.+|warning.+)$/i);
167
+ return match?.[1] ?? compact.slice(0, 1200);
168
+ }
169
+ //# sourceMappingURL=submit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit.js","sourceRoot":"","sources":["../../src/wordpress-org/submit.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "pressship",
3
+ "version": "0.1.0",
4
+ "description": "Submit and release WordPress.org plugins from the command line.",
5
+ "bin": {
6
+ "pressship": "./dist/cli.js"
7
+ },
8
+ "files": [
9
+ "dist",
10
+ "README.md",
11
+ "LICENSE"
12
+ ],
13
+ "main": "./dist/cli.js",
14
+ "types": "./dist/cli.d.ts",
15
+ "scripts": {
16
+ "build": "tsc -p tsconfig.json",
17
+ "browsers:install": "playwright install chromium",
18
+ "dev": "tsx src/cli.ts",
19
+ "test": "vitest run",
20
+ "typecheck": "tsc -p tsconfig.json --noEmit"
21
+ },
22
+ "keywords": [
23
+ "wordpress",
24
+ "wordpress.org",
25
+ "plugin",
26
+ "cli",
27
+ "submission",
28
+ "svn"
29
+ ],
30
+ "author": "",
31
+ "license": "MIT",
32
+ "type": "module",
33
+ "engines": {
34
+ "node": ">=20"
35
+ },
36
+ "dependencies": {
37
+ "@inquirer/prompts": "^8.4.3",
38
+ "chalk": "^5.6.2",
39
+ "commander": "^14.0.3",
40
+ "execa": "^9.6.1",
41
+ "extract-zip": "^2.0.1",
42
+ "fast-glob": "^3.3.3",
43
+ "ignore": "^7.0.5",
44
+ "ora": "^9.4.0",
45
+ "playwright": "^1.60.0",
46
+ "yazl": "^3.3.1",
47
+ "zod": "^4.4.3"
48
+ },
49
+ "devDependencies": {
50
+ "@types/node": "^25.7.0",
51
+ "@types/yazl": "^3.3.1",
52
+ "tsx": "^4.21.0",
53
+ "typescript": "^6.0.3",
54
+ "vitest": "^4.1.6"
55
+ }
56
+ }