@ecomweb/cli 0.6.0 → 0.7.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 (126) hide show
  1. package/README.md +181 -10
  2. package/dist/commands/auth/login.js +3 -3
  3. package/dist/commands/auth/login.js.map +1 -1
  4. package/dist/commands/deploy.js +16 -3
  5. package/dist/commands/deploy.js.map +1 -1
  6. package/dist/commands/deployments/promote.js +1 -1
  7. package/dist/commands/deployments/promote.js.map +1 -1
  8. package/dist/commands/deployments/rollback.js +1 -1
  9. package/dist/commands/deployments/rollback.js.map +1 -1
  10. package/dist/commands/deployments/unpublish.js +1 -1
  11. package/dist/commands/deployments/unpublish.js.map +1 -1
  12. package/dist/commands/describe.d.ts +1 -1
  13. package/dist/commands/describe.js +4 -4
  14. package/dist/commands/describe.js.map +1 -1
  15. package/dist/commands/metafield-definitions/create.d.ts +20 -0
  16. package/dist/commands/metafield-definitions/create.js +34 -0
  17. package/dist/commands/metafield-definitions/create.js.map +1 -0
  18. package/dist/commands/metafield-definitions/delete.d.ts +21 -0
  19. package/dist/commands/metafield-definitions/delete.js +32 -0
  20. package/dist/commands/metafield-definitions/delete.js.map +1 -0
  21. package/dist/commands/metafield-definitions/get.d.ts +21 -0
  22. package/dist/commands/metafield-definitions/get.js +30 -0
  23. package/dist/commands/metafield-definitions/get.js.map +1 -0
  24. package/dist/commands/metafield-definitions/list.d.ts +19 -0
  25. package/dist/commands/metafield-definitions/list.js +35 -0
  26. package/dist/commands/metafield-definitions/list.js.map +1 -0
  27. package/dist/commands/metafield-definitions/update.d.ts +23 -0
  28. package/dist/commands/metafield-definitions/update.js +39 -0
  29. package/dist/commands/metafield-definitions/update.js.map +1 -0
  30. package/dist/commands/metafields/get.d.ts +19 -0
  31. package/dist/commands/metafields/get.js +32 -0
  32. package/dist/commands/metafields/get.js.map +1 -0
  33. package/dist/commands/metafields/set.d.ts +24 -0
  34. package/dist/commands/metafields/set.js +83 -0
  35. package/dist/commands/metafields/set.js.map +1 -0
  36. package/dist/commands/metaobject-definitions/create.d.ts +20 -0
  37. package/dist/commands/metaobject-definitions/create.js +33 -0
  38. package/dist/commands/metaobject-definitions/create.js.map +1 -0
  39. package/dist/commands/metaobject-definitions/delete.d.ts +21 -0
  40. package/dist/commands/metaobject-definitions/delete.js +32 -0
  41. package/dist/commands/metaobject-definitions/delete.js.map +1 -0
  42. package/dist/commands/metaobject-definitions/get.d.ts +21 -0
  43. package/dist/commands/metaobject-definitions/get.js +31 -0
  44. package/dist/commands/metaobject-definitions/get.js.map +1 -0
  45. package/dist/commands/metaobject-definitions/list.d.ts +20 -0
  46. package/dist/commands/metaobject-definitions/list.js +41 -0
  47. package/dist/commands/metaobject-definitions/list.js.map +1 -0
  48. package/dist/commands/metaobject-definitions/update.d.ts +23 -0
  49. package/dist/commands/metaobject-definitions/update.js +38 -0
  50. package/dist/commands/metaobject-definitions/update.js.map +1 -0
  51. package/dist/commands/metaobjects/create.d.ts +24 -0
  52. package/dist/commands/metaobjects/create.js +40 -0
  53. package/dist/commands/metaobjects/create.js.map +1 -0
  54. package/dist/commands/metaobjects/delete.d.ts +22 -0
  55. package/dist/commands/metaobjects/delete.js +34 -0
  56. package/dist/commands/metaobjects/delete.js.map +1 -0
  57. package/dist/commands/metaobjects/get.d.ts +22 -0
  58. package/dist/commands/metaobjects/get.js +32 -0
  59. package/dist/commands/metaobjects/get.js.map +1 -0
  60. package/dist/commands/metaobjects/list.d.ts +24 -0
  61. package/dist/commands/metaobjects/list.js +56 -0
  62. package/dist/commands/metaobjects/list.js.map +1 -0
  63. package/dist/commands/metaobjects/update.d.ts +27 -0
  64. package/dist/commands/metaobjects/update.js +45 -0
  65. package/dist/commands/metaobjects/update.js.map +1 -0
  66. package/dist/commands/storefront/init.d.ts +3 -1
  67. package/dist/commands/storefront/init.js +23 -2
  68. package/dist/commands/storefront/init.js.map +1 -1
  69. package/dist/commands/theme/create.d.ts +20 -0
  70. package/dist/commands/theme/create.js +40 -0
  71. package/dist/commands/theme/create.js.map +1 -0
  72. package/dist/commands/theme/duplicate.d.ts +22 -0
  73. package/dist/commands/theme/duplicate.js +34 -0
  74. package/dist/commands/theme/duplicate.js.map +1 -0
  75. package/dist/commands/theme/link.d.ts +24 -0
  76. package/dist/commands/theme/link.js +60 -0
  77. package/dist/commands/theme/link.js.map +1 -0
  78. package/dist/commands/theme/list.d.ts +18 -0
  79. package/dist/commands/theme/list.js +32 -0
  80. package/dist/commands/theme/list.js.map +1 -0
  81. package/dist/commands/theme/publish.d.ts +22 -0
  82. package/dist/commands/theme/publish.js +68 -0
  83. package/dist/commands/theme/publish.js.map +1 -0
  84. package/dist/commands/theme/schema/push.d.ts +20 -0
  85. package/dist/commands/theme/schema/push.js +61 -0
  86. package/dist/commands/theme/schema/push.js.map +1 -0
  87. package/dist/commands/theme/update.d.ts +23 -0
  88. package/dist/commands/theme/update.js +62 -0
  89. package/dist/commands/theme/update.js.map +1 -0
  90. package/dist/commands/theme/use.d.ts +23 -0
  91. package/dist/commands/theme/use.js +71 -0
  92. package/dist/commands/theme/use.js.map +1 -0
  93. package/dist/commands/theme/versions.d.ts +21 -0
  94. package/dist/commands/theme/versions.js +33 -0
  95. package/dist/commands/theme/versions.js.map +1 -0
  96. package/dist/lib/config.d.ts +1 -1
  97. package/dist/lib/config.js +4 -3
  98. package/dist/lib/config.js.map +1 -1
  99. package/dist/lib/custom-data.d.ts +42 -0
  100. package/dist/lib/custom-data.js +167 -0
  101. package/dist/lib/custom-data.js.map +1 -0
  102. package/dist/lib/deployments.d.ts +8 -1
  103. package/dist/lib/deployments.js +58 -11
  104. package/dist/lib/deployments.js.map +1 -1
  105. package/dist/lib/describe-metafields.d.ts +9 -0
  106. package/dist/lib/describe-metafields.js +213 -0
  107. package/dist/lib/describe-metafields.js.map +1 -0
  108. package/dist/lib/live-confirm.d.ts +11 -0
  109. package/dist/lib/live-confirm.js +34 -0
  110. package/dist/lib/live-confirm.js.map +1 -0
  111. package/dist/lib/project-setup.d.ts +1 -0
  112. package/dist/lib/project-setup.js +20 -0
  113. package/dist/lib/project-setup.js.map +1 -1
  114. package/dist/lib/template-scaffold.d.ts +1 -0
  115. package/dist/lib/template-scaffold.js +5 -2
  116. package/dist/lib/template-scaffold.js.map +1 -1
  117. package/dist/lib/theme-schema-export.d.ts +1 -1
  118. package/dist/lib/theme-schema-export.js +4 -5
  119. package/dist/lib/theme-schema-export.js.map +1 -1
  120. package/dist/lib/themes.d.ts +143 -0
  121. package/dist/lib/themes.js +277 -0
  122. package/dist/lib/themes.js.map +1 -0
  123. package/dist/lib/validators.js +16 -0
  124. package/dist/lib/validators.js.map +1 -1
  125. package/oclif.manifest.json +6600 -3469
  126. package/package.json +1 -1
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_command_1 = require("../../base-command");
5
+ const errors_1 = require("../../lib/errors");
6
+ const live_confirm_1 = require("../../lib/live-confirm");
7
+ const output_1 = require("../../lib/output");
8
+ const themes_1 = require("../../lib/themes");
9
+ class ThemeUse extends base_command_1.BaseCommand {
10
+ async run() {
11
+ const storeRef = this.requireStore();
12
+ const { args } = await this.parse(ThemeUse);
13
+ const { id, versionId } = args;
14
+ if (this.isDryRun) {
15
+ this.outputResult((0, output_1.mutationEnvelope)("theme", "use (dry-run)", storeRef, { theme: id, version: versionId }));
16
+ return;
17
+ }
18
+ const yes = this.getFlag("yes");
19
+ const retry = `ecomweb theme use ${id} ${versionId} --yes`;
20
+ const theme = await (0, themes_1.getThemeForChange)(this.apiClient, id, { yes, retry });
21
+ const current = theme?.current_version;
22
+ const before = current?.id !== undefined ? String(current.id) : undefined;
23
+ if (theme?.is_published && !yes && before !== versionId) {
24
+ const required = `${theme.name} (${id}) is live: using version ${versionId} changes what shoppers see right away. Confirm it with --yes.`;
25
+ if (!(0, live_confirm_1.isInteractive)())
26
+ throw (0, live_confirm_1.confirmationRequired)(required, retry);
27
+ const version = (await (0, themes_1.listVersions)(this.apiClient, id)).find((v) => String(v.id) === versionId);
28
+ if (!version) {
29
+ throw new errors_1.CliError("VERSION_NOT_FOUND", `Theme ${id} has no version ${versionId}.`, errors_1.ExitCode.NOT_FOUND, {
30
+ hint: `List the theme's versions with: ecomweb theme versions ${id}`,
31
+ });
32
+ }
33
+ if (!version.usable && version.unusable_reason === "hosting_not_in_plan")
34
+ throw (0, themes_1.hostingNotInPlan)(versionId);
35
+ if (!version.usable) {
36
+ throw new errors_1.CliError("VERSION_NOT_USABLE", `Version ${versionId} can't be used.`, errors_1.ExitCode.VALIDATION, {
37
+ hint: (0, themes_1.unusableHint)(version.unusable_reason, { themeId: id }),
38
+ ...(version.unusable_reason && { details: { reason: version.unusable_reason } }),
39
+ });
40
+ }
41
+ const otherKind = version.kind !== current?.kind;
42
+ const copyFirst = otherKind ? ` To try it first, copy the theme (ecomweb theme duplicate ${id}) and use it there.` : "";
43
+ await (0, live_confirm_1.confirmLiveChange)({
44
+ yes,
45
+ question: `${theme.name} (${id}) is live: shoppers will see ${(0, themes_1.describeVersion)(version)}, right away.${copyFirst} Use it?`,
46
+ required,
47
+ retry,
48
+ });
49
+ }
50
+ const row = (0, themes_1.themeRow)(await (0, themes_1.useVersion)(this.apiClient, id, versionId));
51
+ const changed = before !== undefined && before !== versionId;
52
+ this.outputResult((0, output_1.mutationEnvelope)("theme", "use", storeRef, row, {
53
+ versions: `ecomweb theme versions ${id}`,
54
+ ...(changed && { undo: `ecomweb theme use ${id} ${before}` }),
55
+ ...(row.mode === "headless" && { schema_push: `ecomweb theme schema push --theme ${id}` }),
56
+ ...(!row.live && { publish: `ecomweb theme publish ${id}` }),
57
+ }));
58
+ }
59
+ }
60
+ ThemeUse.description = "Use one of a theme's versions (see ecomweb theme versions): a release, a build or a link. Settings stay with the theme. On the live theme shoppers see it right away, so it asks first on a terminal; --yes skips that and is required in CI or without a terminal";
61
+ ThemeUse.examples = ["ecomweb theme use 12 31", "ecomweb theme use 12 31 --yes"];
62
+ ThemeUse.args = {
63
+ id: core_1.Args.string({ description: "The theme (see ecomweb theme list)", required: true }),
64
+ versionId: core_1.Args.string({ description: "The version to use (see ecomweb theme versions <id>)", required: true }),
65
+ };
66
+ ThemeUse.flags = {
67
+ ...base_command_1.BaseCommand.baseFlags,
68
+ yes: core_1.Flags.boolean({ char: "y", description: "On the live theme: use it without asking", default: false }),
69
+ };
70
+ exports.default = ThemeUse;
71
+ //# sourceMappingURL=use.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use.js","sourceRoot":"","sources":["../../../src/commands/theme/use.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { BaseCommand } from "../../base-command";
2
+ export default class ThemeVersions extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ "store-ref": import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
10
+ "api-key": import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
+ "api-url": import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
+ output: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
13
+ quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
14
+ "dry-run": import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
15
+ profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
16
+ full: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
17
+ fields: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
18
+ exclude: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
19
+ };
20
+ run(): Promise<void>;
21
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_command_1 = require("../../base-command");
5
+ const output_1 = require("../../lib/output");
6
+ const themes_1 = require("../../lib/themes");
7
+ class ThemeVersions extends base_command_1.BaseCommand {
8
+ async run() {
9
+ const storeRef = this.requireStore();
10
+ const { args } = await this.parse(ThemeVersions);
11
+ const id = args.id;
12
+ const rows = (await (0, themes_1.listVersions)(this.apiClient, id)).map(themes_1.versionRow);
13
+ this.outputResult((0, output_1.listEnvelope)("theme version", storeRef, rows, { total: rows.length, theme: id }, {
14
+ availableActions: ["use", "link", "update"],
15
+ hints: {
16
+ use: `ecomweb theme use ${id} <version id>`,
17
+ link: `ecomweb theme link ${id} --url <https url>`,
18
+ update: `ecomweb theme update ${id}`,
19
+ deploy: `ecomweb deploy --theme ${id}`,
20
+ },
21
+ }));
22
+ }
23
+ }
24
+ ThemeVersions.description = "List a theme's versions, newest first: releases from the theme store, builds of your code (ecomweb deploy) and links to your own site. One is in use (current); `ecomweb theme use` switches";
25
+ ThemeVersions.examples = ["ecomweb theme versions 12", "ecomweb theme versions 12 --output table"];
26
+ ThemeVersions.args = {
27
+ id: core_1.Args.string({ description: "The theme (see ecomweb theme list)", required: true }),
28
+ };
29
+ ThemeVersions.flags = {
30
+ ...base_command_1.BaseCommand.baseFlags,
31
+ };
32
+ exports.default = ThemeVersions;
33
+ //# sourceMappingURL=versions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../src/commands/theme/versions.ts"],"names":[],"mappings":";;AAAA,sCAAmC;AACnC,qDAAiD;AACjD,6CAAgD;AAChD,6CAA4D;AAE5D,MAAqB,aAAc,SAAQ,0BAAW;IAcpD,KAAK,CAAC,GAAG;QACP,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACrC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACjD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,CAAC,MAAM,IAAA,qBAAY,EAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,mBAAU,CAAC,CAAC;QACtE,IAAI,CAAC,YAAY,CACf,IAAA,qBAAY,EAAC,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;YAC/E,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC;YAC3C,KAAK,EAAE;gBACL,GAAG,EAAE,qBAAqB,EAAE,eAAe;gBAC3C,IAAI,EAAE,sBAAsB,EAAE,oBAAoB;gBAClD,MAAM,EAAE,wBAAwB,EAAE,EAAE;gBACpC,MAAM,EAAE,0BAA0B,EAAE,EAAE;aACvC;SACF,CAAC,CACH,CAAC;IACJ,CAAC;;AA7BM,yBAAW,GAChB,8LAA8L,CAAC;AAE1L,sBAAQ,GAAG,CAAC,2BAA2B,EAAE,0CAA0C,CAAC,CAAC;AAErF,kBAAI,GAAG;IACZ,EAAE,EAAE,WAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,oCAAoC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;CACvF,CAAC;AAEK,mBAAK,GAAG;IACb,GAAG,0BAAW,CAAC,SAAS;CACzB,CAAC;kBAZiB,aAAa"}
@@ -18,7 +18,7 @@ export declare class ConfigManager {
18
18
  getProfile(name?: string): ProfileConfig;
19
19
  setProfile(name: string, profile: Partial<ProfileConfig>): void;
20
20
  setActiveProfile(name: string): void;
21
- setStoreRef(storeRef: string, storeName?: string): void;
21
+ setStoreRef(storeRef: string, storeName?: string, profileName?: string): void;
22
22
  getStoreRef(): string | undefined;
23
23
  getApiKey(profileName?: string): string | undefined;
24
24
  setApiKey(key: string, profileName?: string): void;
@@ -93,12 +93,13 @@ class ConfigManager {
93
93
  this.config.active_profile = name;
94
94
  this.save();
95
95
  }
96
- setStoreRef(storeRef, storeName) {
97
- const profile = this.getProfile();
96
+ setStoreRef(storeRef, storeName, profileName) {
97
+ const name = profileName || this.config.active_profile;
98
+ const profile = this.getProfile(name);
98
99
  profile.store_ref = storeRef;
99
100
  if (storeName)
100
101
  profile.store_name = storeName;
101
- this.config.profiles[this.config.active_profile] = profile;
102
+ this.config.profiles[name] = profile;
102
103
  this.save();
103
104
  }
104
105
  getStoreRef() {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { CliError } from "./errors";
2
+ export declare const METAFIELD_OWNER_TYPES: readonly ["product", "variant", "collection", "customer", "order", "page", "blog_post", "location", "shop"];
3
+ export type MetafieldOwnerType = (typeof METAFIELD_OWNER_TYPES)[number];
4
+ export interface MetafieldOwner {
5
+ owner_type: MetafieldOwnerType;
6
+ path: string;
7
+ }
8
+ export declare const OWNER_FLAG_DESCRIPTION = "Owner: product:<id>, variant:<product id>/<variant id>, collection:<id>, customer:<id>, order:<id>, page:<id>, blog_post:<id>, location:<id>, shop";
9
+ export declare function parseOwner(raw: string): MetafieldOwner;
10
+ export declare function ownerExample(owner_type: unknown): string;
11
+ export declare function splitIdentifier(identifier: string): {
12
+ namespace: string;
13
+ key: string;
14
+ };
15
+ export declare function routeIdArg(raw: string, flagOrArg?: string): string;
16
+ export declare function entriesPath(type: string): string;
17
+ export declare const jsonInputFlags: {
18
+ stdin: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
19
+ file: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
20
+ };
21
+ export declare function isPlainObject(value: unknown): value is Record<string, unknown>;
22
+ export declare function readJsonObject(flags: {
23
+ stdin?: boolean;
24
+ file?: string;
25
+ }, hint: string): Promise<Record<string, unknown> | null>;
26
+ export declare function noInput(hint: string): CliError;
27
+ export declare function parseJsonFlag(flag: string, raw: string, hint: string): unknown;
28
+ export declare const entryFlags: {
29
+ handle: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
30
+ status: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
31
+ data: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
32
+ stdin: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
33
+ file: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
34
+ };
35
+ export declare function readEntryBody(flags: {
36
+ stdin?: boolean;
37
+ file?: string;
38
+ handle?: string;
39
+ status?: string;
40
+ data?: string;
41
+ }, hint: string): Promise<Record<string, unknown>>;
42
+ export declare function callApi<T>(request: () => Promise<T>): Promise<T>;
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.entryFlags = exports.jsonInputFlags = exports.OWNER_FLAG_DESCRIPTION = exports.METAFIELD_OWNER_TYPES = void 0;
4
+ exports.parseOwner = parseOwner;
5
+ exports.ownerExample = ownerExample;
6
+ exports.splitIdentifier = splitIdentifier;
7
+ exports.routeIdArg = routeIdArg;
8
+ exports.entriesPath = entriesPath;
9
+ exports.isPlainObject = isPlainObject;
10
+ exports.readJsonObject = readJsonObject;
11
+ exports.noInput = noInput;
12
+ exports.parseJsonFlag = parseJsonFlag;
13
+ exports.readEntryBody = readEntryBody;
14
+ exports.callApi = callApi;
15
+ const core_1 = require("@oclif/core");
16
+ const errors_1 = require("./errors");
17
+ const stdin_1 = require("./stdin");
18
+ exports.METAFIELD_OWNER_TYPES = [
19
+ "product",
20
+ "variant",
21
+ "collection",
22
+ "customer",
23
+ "order",
24
+ "page",
25
+ "blog_post",
26
+ "location",
27
+ "shop",
28
+ ];
29
+ const ID = "[1-9][0-9]{0,18}";
30
+ const OWNER_FORMS = "product:<id>, variant:<product id>/<variant id>, collection:<id>, customer:<id>, " +
31
+ "order:<id>, page:<id>, blog_post:<id>, location:<id>, shop";
32
+ exports.OWNER_FLAG_DESCRIPTION = `Owner: ${OWNER_FORMS}`;
33
+ const OWNER_BASES = {
34
+ product: { owner_type: "product", base: "/products" },
35
+ collection: { owner_type: "collection", base: "/collections" },
36
+ customer: { owner_type: "customer", base: "/customers" },
37
+ order: { owner_type: "order", base: "/orders" },
38
+ page: { owner_type: "page", base: "/content-pages" },
39
+ blog_post: { owner_type: "blog_post", base: "/blog/posts" },
40
+ location: { owner_type: "location", base: "/inventory/locations" },
41
+ };
42
+ function parseOwner(raw) {
43
+ const value = raw.trim();
44
+ if (value === "shop")
45
+ return { owner_type: "shop", path: "/metafields" };
46
+ const variant = new RegExp(`^variant:(${ID})/(${ID})$`).exec(value);
47
+ if (variant) {
48
+ return {
49
+ owner_type: "variant",
50
+ path: `/products/${variant[1]}/variants/${variant[2]}/metafields`,
51
+ };
52
+ }
53
+ const simple = new RegExp(`^([a-z_]+):(${ID})$`).exec(value);
54
+ if (simple && Object.prototype.hasOwnProperty.call(OWNER_BASES, simple[1])) {
55
+ const { owner_type, base } = OWNER_BASES[simple[1]];
56
+ return { owner_type, path: `${base}/${simple[2]}/metafields` };
57
+ }
58
+ throw new errors_1.CliError("INVALID_OWNER", `Unknown owner "${raw}".`, errors_1.ExitCode.VALIDATION, {
59
+ hint: `Use one of: ${OWNER_FORMS}`,
60
+ });
61
+ }
62
+ function ownerExample(owner_type) {
63
+ if (owner_type === "shop")
64
+ return "shop";
65
+ if (owner_type === "variant")
66
+ return "variant:<product id>/<variant id>";
67
+ return `${typeof owner_type === "string" ? owner_type : "product"}:<id>`;
68
+ }
69
+ function splitIdentifier(identifier) {
70
+ const dot = identifier.indexOf(".");
71
+ return dot === -1
72
+ ? { namespace: "custom", key: identifier }
73
+ : { namespace: identifier.slice(0, dot), key: identifier.slice(dot + 1) };
74
+ }
75
+ function routeIdArg(raw, flagOrArg = "id") {
76
+ if (!new RegExp(`^${ID}$`).test(raw)) {
77
+ throw new errors_1.CliError("INVALID_ID", `${flagOrArg} must be a positive integer, got "${raw}".`, errors_1.ExitCode.VALIDATION, {
78
+ hint: "Use the numeric id from the list command.",
79
+ });
80
+ }
81
+ return raw;
82
+ }
83
+ const METAOBJECT_TYPE = /^[a-z0-9_-]{2,64}$/;
84
+ function entriesPath(type) {
85
+ if (type === "." || type === ".." || !METAOBJECT_TYPE.test(type)) {
86
+ throw new errors_1.CliError("INVALID_TYPE", `--type must be 2 to 64 characters of a-z, 0-9, _ or -, got "${type}".`, errors_1.ExitCode.VALIDATION, { hint: "ecomweb metaobject-definitions list" });
87
+ }
88
+ return `/metaobjects/${type}/entries`;
89
+ }
90
+ exports.jsonInputFlags = {
91
+ stdin: core_1.Flags.boolean({ description: "Read the JSON body from stdin" }),
92
+ file: core_1.Flags.string({ description: "Read the JSON body from a file" }),
93
+ };
94
+ function isPlainObject(value) {
95
+ return typeof value === "object" && value !== null && !Array.isArray(value);
96
+ }
97
+ async function readJsonObject(flags, hint) {
98
+ let body;
99
+ try {
100
+ body = await (0, stdin_1.getJsonInput)(flags);
101
+ }
102
+ catch (error) {
103
+ throw new errors_1.CliError("INVALID_JSON", error?.message ?? "Could not read the JSON body.", errors_1.ExitCode.VALIDATION, { hint });
104
+ }
105
+ if (body === null)
106
+ return null;
107
+ if (!isPlainObject(body)) {
108
+ throw new errors_1.CliError("INVALID_INPUT", "The JSON body must be an object.", errors_1.ExitCode.VALIDATION, { hint });
109
+ }
110
+ return body;
111
+ }
112
+ function noInput(hint) {
113
+ return new errors_1.CliError("NO_INPUT", "No input provided.", errors_1.ExitCode.VALIDATION, { hint });
114
+ }
115
+ function parseJsonFlag(flag, raw, hint) {
116
+ try {
117
+ return JSON.parse(raw);
118
+ }
119
+ catch {
120
+ throw new errors_1.CliError("INVALID_JSON", `--${flag} must be JSON.`, errors_1.ExitCode.VALIDATION, { hint });
121
+ }
122
+ }
123
+ exports.entryFlags = {
124
+ ...exports.jsonInputFlags,
125
+ handle: core_1.Flags.string({ description: "Entry handle (a-z, 0-9, -); derived from the display name when left out" }),
126
+ status: core_1.Flags.string({ description: "Entry status", options: ["active", "draft"] }),
127
+ data: core_1.Flags.string({ description: `Field values as a JSON object, e.g. '{"name":"Lan Anh"}'` }),
128
+ };
129
+ async function readEntryBody(flags, hint) {
130
+ const json = await readJsonObject(flags, hint);
131
+ if (json)
132
+ return json;
133
+ const body = {};
134
+ if (flags.handle !== undefined)
135
+ body.handle = flags.handle;
136
+ if (flags.status !== undefined)
137
+ body.status = flags.status;
138
+ if (flags.data !== undefined) {
139
+ body.fields = parseJsonFlag("data", flags.data, `--data takes a JSON object, e.g. --data '{"name":"Lan Anh"}'`);
140
+ }
141
+ if (Object.keys(body).length === 0)
142
+ throw noInput(hint);
143
+ return body;
144
+ }
145
+ const KEPT_STATUSES = {
146
+ 400: errors_1.ExitCode.VALIDATION,
147
+ 404: errors_1.ExitCode.NOT_FOUND,
148
+ 409: errors_1.ExitCode.VALIDATION,
149
+ 422: errors_1.ExitCode.VALIDATION,
150
+ };
151
+ async function callApi(request) {
152
+ try {
153
+ return await request();
154
+ }
155
+ catch (error) {
156
+ const status = error?.response?.status;
157
+ const data = error?.response?.data;
158
+ if (error?.isAxiosError === true &&
159
+ typeof status === "number" &&
160
+ Object.prototype.hasOwnProperty.call(KEPT_STATUSES, status) &&
161
+ typeof data?.code === "string") {
162
+ throw new errors_1.CliError(data.code, typeof data.message === "string" ? data.message : `HTTP error ${status}`, KEPT_STATUSES[status], isPlainObject(data.details) ? { details: data.details } : undefined);
163
+ }
164
+ throw error;
165
+ }
166
+ }
167
+ //# sourceMappingURL=custom-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-data.js","sourceRoot":"","sources":["../../src/lib/custom-data.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { PackedSource } from "./pack-source";
2
2
  import { BuildLogRenderer } from "./build-log-render";
3
+ import { type ThemeChoice, type ThemeOption } from "./themes";
3
4
  export type DeploymentStatus = "uploading" | "queued" | "building" | "built" | "running" | "stopped" | "failed";
4
5
  export interface DeploymentView {
5
6
  id: string;
@@ -7,6 +8,7 @@ export interface DeploymentView {
7
8
  status: DeploymentStatus;
8
9
  error: string | null;
9
10
  preview_url: string | null;
11
+ store_theme_id?: string | number | null;
10
12
  }
11
13
  export interface HostingClient {
12
14
  storePost<T = any>(path: string, body?: unknown): Promise<T>;
@@ -21,6 +23,8 @@ export interface DeployResult {
21
23
  status: DeploymentStatus;
22
24
  preview_url: string | null;
23
25
  production_urls?: string[];
26
+ waits_for_link?: boolean;
27
+ next?: string;
24
28
  }
25
29
  export interface ProductionView {
26
30
  deployment_id: string | null;
@@ -45,8 +49,11 @@ export interface DeployDeps {
45
49
  tty?: boolean;
46
50
  storeThemeId?: string;
47
51
  settingsSchema?: unknown;
52
+ chooseTheme?: (options: ThemeOption[]) => Promise<ThemeChoice | undefined>;
48
53
  }
49
- export declare function hostingError(error: unknown): unknown;
54
+ export declare function hostingError(error: unknown, ctx?: {
55
+ themeId?: string;
56
+ }): unknown;
50
57
  export declare function uploadSource(url: string, packed: PackedSource): Promise<void>;
51
58
  export declare function streamLogs(client: HostingClient, id: string, onText: (text: string) => void, opts?: {
52
59
  sleep?: (ms: number) => Promise<void>;
@@ -18,11 +18,12 @@ const errors_1 = require("./errors");
18
18
  const sse_1 = require("./sse");
19
19
  const build_log_view_1 = require("./build-log-view");
20
20
  const build_log_render_1 = require("./build-log-render");
21
+ const themes_1 = require("./themes");
21
22
  const TAIL_LINES = 100;
22
23
  const defaultSleep = (ms) => new Promise((r) => setTimeout(r, ms));
23
24
  const unwrap = (res) => (res && typeof res === "object" && "data" in res && !("id" in res) ? res.data : res);
24
25
  const base = (id) => `/hosting/deployments/${encodeURIComponent(id)}`;
25
- function hostingError(error) {
26
+ function hostingError(error, ctx = {}) {
26
27
  const res = error.response;
27
28
  if (!error.isAxiosError || !res)
28
29
  return error;
@@ -32,6 +33,12 @@ function hostingError(error) {
32
33
  hint: "Ask ecomweb support to enable storefront hosting for this store.",
33
34
  });
34
35
  }
36
+ if (code === "HOSTING_NOT_IN_PLAN") {
37
+ const id = ctx.themeId ?? "<id>";
38
+ return new errors_1.CliError(code, res.data.message ?? "This store's plan doesn't include storefront hosting.", errors_1.ExitCode.VALIDATION, {
39
+ hint: `Builds need a plan with storefront hosting: upgrade the plan in the dashboard, then deploy again. On any plan you can run the code on your own server and connect it: ecomweb theme link ${id} --url <https url>.`,
40
+ });
41
+ }
35
42
  if (code === "PLAN_LIMIT_EXCEEDED") {
36
43
  return new errors_1.CliError(code, "The store's plan has no room for another theme, so the draft can't be made.", errors_1.ExitCode.VALIDATION, {
37
44
  hint: "Delete a theme you no longer need in the dashboard, or upgrade the plan.",
@@ -43,10 +50,15 @@ function hostingError(error) {
43
50
  });
44
51
  }
45
52
  if (code === "STORE_THEME_REQUIRED") {
46
- const themes = res.data?.details?.themes ?? [];
47
- return new errors_1.CliError(code, "This store has several code themes: say which one to deploy to.", errors_1.ExitCode.VALIDATION, {
48
- hint: `Run ecomweb deploy --theme <id> (one of: ${themes.join(", ")}), or set storeThemeId in .ecomweb.json.`,
49
- details: { themes },
53
+ const details = res.data?.details ?? {};
54
+ const themes = Array.isArray(details.themes) ? details.themes : [];
55
+ const named = Array.isArray(details.theme_options);
56
+ const options = (0, themes_1.themeOptions)(details);
57
+ const list = named ? options.map((o) => `${o.id} (${o.name})`) : options.map((o) => o.id);
58
+ const which = list.length ? `one of: ${list.join(", ")}` : "see ecomweb theme list";
59
+ return new errors_1.CliError(code, "Say which theme to deploy to.", errors_1.ExitCode.VALIDATION, {
60
+ hint: `Run ecomweb deploy --theme <id> (${which}), or set storeThemeId in .ecomweb.json.`,
61
+ details: { themes, ...(named && { theme_options: options }) },
50
62
  });
51
63
  }
52
64
  if (typeof code === "string" && (res.status === 400 || res.status === 404 || res.status === 409)) {
@@ -55,12 +67,12 @@ function hostingError(error) {
55
67
  }
56
68
  return error;
57
69
  }
58
- async function call(fn) {
70
+ async function call(fn, ctx) {
59
71
  try {
60
72
  return unwrap(await fn());
61
73
  }
62
74
  catch (error) {
63
- throw hostingError(error);
75
+ throw hostingError(error, ctx);
64
76
  }
65
77
  }
66
78
  async function uploadSource(url, packed) {
@@ -201,15 +213,34 @@ async function deploy(dir, deps) {
201
213
  const size = `${(packed.bytes / 1024 / 1024).toFixed(1)} MB`;
202
214
  if (raw)
203
215
  stderr(`Packed ${size} of source\n`);
204
- const created = await call(() => client.storePost("/hosting/deployments", {
216
+ const create = (storeThemeId, confirmedLive = false) => call(() => client.storePost("/hosting/deployments", {
205
217
  sha256: packed.sha256,
206
218
  bytes: packed.bytes,
207
219
  ...(deps.artifact === "prebuilt" && { artifact: "prebuilt" }),
208
- ...(deps.storeThemeId && { store_theme_id: deps.storeThemeId }),
220
+ ...(storeThemeId && { store_theme_id: storeThemeId }),
209
221
  ...(deps.settingsSchema !== undefined && { settings_schema: deps.settingsSchema }),
210
222
  ...(deps.draft && { draft: true }),
211
- allow_live: !deps.draft && (deps.allowLive === true || deps.prod === true),
212
- }));
223
+ allow_live: !deps.draft && (deps.allowLive === true || deps.prod === true || confirmedLive),
224
+ }), { themeId: storeThemeId });
225
+ let created;
226
+ let themeId = deps.storeThemeId;
227
+ try {
228
+ created = await create(deps.storeThemeId);
229
+ }
230
+ catch (error) {
231
+ const required = error instanceof errors_1.CliError && error.payload.code === "STORE_THEME_REQUIRED";
232
+ const options = required && deps.chooseTheme ? (0, themes_1.themeOptions)(error.payload.details) : [];
233
+ const chosen = options.length ? await deps.chooseTheme(options) : undefined;
234
+ if (!chosen)
235
+ throw error;
236
+ created = await create(chosen.id, chosen.allowLive);
237
+ themeId = chosen.id;
238
+ }
239
+ const themeOf = (d) => {
240
+ if (d?.store_theme_id !== undefined && d.store_theme_id !== null)
241
+ themeId = String(d.store_theme_id);
242
+ };
243
+ themeOf(created);
213
244
  const id = created.id;
214
245
  let streamOver = false;
215
246
  try {
@@ -228,6 +259,8 @@ async function deploy(dir, deps) {
228
259
  : (async () => {
229
260
  while (firstLogAt === null && !streamOver) {
230
261
  const d = await call(() => client.storeGet(base(id))).catch(() => null);
262
+ if (themeId === undefined)
263
+ themeOf(d);
231
264
  if (d && d.status !== "queued" && d.status !== "building")
232
265
  break;
233
266
  const label = d?.status === "queued" ? "Waiting in line" : d?.status === "building" ? "Waiting for a build machine" : "";
@@ -271,6 +304,20 @@ async function deploy(dir, deps) {
271
304
  }
272
305
  if (!raw && firstLogAt !== null)
273
306
  renderer.line(`Built in ${(0, build_log_render_1.formatDuration)((now() - firstLogAt) / 1000)}`);
307
+ if (created.waits_for_link) {
308
+ renderer.stop();
309
+ if (themeId === undefined)
310
+ themeOf(await call(() => client.storeGet(base(id))).catch(() => null));
311
+ if (themeId === undefined) {
312
+ stderr("The theme uses a link to your own site, so this build was added to its versions but is not in use. " +
313
+ "To use it: find the theme with ecomweb theme list, then ecomweb theme versions and ecomweb theme use on it\n");
314
+ return { id, status: "built", preview_url: null, waits_for_link: true, next: "ecomweb theme list" };
315
+ }
316
+ const theme = themeId;
317
+ stderr(`Theme ${theme} uses a link to your own site, so this build was added to its versions but is not in use. ` +
318
+ `To use it: ecomweb theme versions ${theme}, then ecomweb theme use ${theme} <version id>\n`);
319
+ return { id, status: "built", preview_url: null, waits_for_link: true, next: `ecomweb theme versions ${theme}` };
320
+ }
274
321
  if (deps.allowLive || deps.prod) {
275
322
  if (await productionMovedTo(client, id, { sleep, now })) {
276
323
  stderr(`Deployment ${id}: built, rolling out to the live store\n`);