@madebyseed/seed-cli-tools 3.0.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +57 -0
- package/__fixtures__/legacy-js-min/baseline/theme.dev.js +13 -0
- package/__fixtures__/legacy-js-min/baseline/theme.prod.js +1 -0
- package/__fixtures__/legacy-js-min/dist/assets/theme.js +13 -0
- package/__fixtures__/legacy-js-min/package.json +9 -0
- package/__fixtures__/legacy-js-min/src/scripts/components/sample.js +4 -0
- package/__fixtures__/legacy-js-min/src/scripts/theme.js +9 -0
- package/__fixtures__/legacy-js-min/src/scripts/vendor/lib.js +7 -0
- package/__fixtures__/legacy-js-min/src/scripts/vendor.js +3 -0
- package/__fixtures__/legacy-js-min/verify.sh +34 -0
- package/__fixtures__/module-js-min/dist/assets/components-greeter.js +6 -0
- package/__fixtures__/module-js-min/dist/assets/components-greeter.js.map +1 -0
- package/__fixtures__/module-js-min/dist/assets/components-items.js +5 -0
- package/__fixtures__/module-js-min/dist/assets/components-items.js.map +1 -0
- package/__fixtures__/module-js-min/dist/assets/header.js +20 -0
- package/__fixtures__/module-js-min/dist/assets/header.js.map +1 -0
- package/__fixtures__/module-js-min/dist/assets/sections-cart-items.js +8 -0
- package/__fixtures__/module-js-min/dist/assets/sections-cart-items.js.map +1 -0
- package/__fixtures__/module-js-min/dist/assets/vendor-lib.js +4 -0
- package/__fixtures__/module-js-min/dist/assets/vendor-lib.js.map +1 -0
- package/__fixtures__/module-js-min/package.json +9 -0
- package/__fixtures__/module-js-min/seed.project.json +15 -0
- package/__fixtures__/module-js-min/src/scripts/components/greeter.js +4 -0
- package/__fixtures__/module-js-min/src/scripts/components/items.js +3 -0
- package/__fixtures__/module-js-min/src/scripts/header.js +18 -0
- package/__fixtures__/module-js-min/src/scripts/sections/cart/items.js +6 -0
- package/__fixtures__/module-js-min/src/scripts/vendor/lib.js +2 -0
- package/__fixtures__/module-js-min/verify.sh +58 -0
- package/lib/commands/watch.js +55 -7
- package/lib/commands/watch.js.map +1 -1
- package/lib/shopify-bin.d.ts +14 -0
- package/lib/shopify-bin.js +18 -0
- package/lib/shopify-bin.js.map +1 -0
- package/lib/tasks/build-js-module.d.ts +2 -0
- package/lib/tasks/build-js-module.js +93 -0
- package/lib/tasks/build-js-module.js.map +1 -0
- package/lib/tasks/build-js.js +13 -1
- package/lib/tasks/build-js.js.map +1 -1
- package/lib/tasks/includes/config.d.ts +2 -0
- package/lib/tasks/includes/config.js +3 -0
- package/lib/tasks/includes/config.js.map +1 -1
- package/lib/tasks/includes/js-mode.d.ts +12 -0
- package/lib/tasks/includes/js-mode.js +42 -0
- package/lib/tasks/includes/js-mode.js.map +1 -0
- package/lib/tasks/watch-tui/App.d.ts +8 -0
- package/lib/tasks/watch-tui/App.js +337 -0
- package/lib/tasks/watch-tui/App.js.map +1 -0
- package/lib/tasks/watch-tui/classify.d.ts +39 -0
- package/lib/tasks/watch-tui/classify.js +84 -0
- package/lib/tasks/watch-tui/classify.js.map +1 -0
- package/lib/tasks/watch-tui/index.d.ts +30 -0
- package/lib/tasks/watch-tui/index.js +299 -0
- package/lib/tasks/watch-tui/index.js.map +1 -0
- package/lib/tasks/watch-tui/shopify-parse.d.ts +24 -0
- package/lib/tasks/watch-tui/shopify-parse.js +87 -0
- package/lib/tasks/watch-tui/shopify-parse.js.map +1 -0
- package/lib/tasks/watch-tui/state.d.ts +68 -0
- package/lib/tasks/watch-tui/state.js +61 -0
- package/lib/tasks/watch-tui/state.js.map +1 -0
- package/lib/tasks/watch-tui/theme-info.d.ts +10 -0
- package/lib/tasks/watch-tui/theme-info.js +79 -0
- package/lib/tasks/watch-tui/theme-info.js.map +1 -0
- package/lib/utils.js +63 -88
- package/lib/utils.js.map +1 -1
- package/package.json +11 -2
- package/src/commands/watch.ts +70 -20
- package/src/shopify-bin.ts +21 -0
- package/src/tasks/build-js-module.ts +92 -0
- package/src/tasks/build-js.ts +13 -1
- package/src/tasks/includes/config.ts +5 -0
- package/src/tasks/includes/js-mode.ts +48 -0
- package/src/tasks/watch-tui/App.tsx +486 -0
- package/src/tasks/watch-tui/classify.ts +120 -0
- package/src/tasks/watch-tui/index.ts +342 -0
- package/src/tasks/watch-tui/shopify-parse.ts +103 -0
- package/src/tasks/watch-tui/state.ts +113 -0
- package/src/tasks/watch-tui/theme-info.ts +109 -0
- package/src/types/declarations.d.ts +19 -1
- package/src/utils.ts +64 -94
- package/tsconfig.json +3 -2
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TuiStore = void 0;
|
|
4
|
+
const events_1 = require("events");
|
|
5
|
+
const MAX_LOGS = 5000;
|
|
6
|
+
/**
|
|
7
|
+
* Flag-based state machine — same model the original draft used. Any
|
|
8
|
+
* meaningful event flips the state directly; no in-flight counter to get
|
|
9
|
+
* stuck. The Outcome line in App.tsx is just a translation of (state,
|
|
10
|
+
* lastBuild, lastError) into one line.
|
|
11
|
+
*/
|
|
12
|
+
class TuiStore extends events_1.EventEmitter {
|
|
13
|
+
constructor(opts = {}) {
|
|
14
|
+
super();
|
|
15
|
+
this.state = "starting";
|
|
16
|
+
this.logs = [];
|
|
17
|
+
this.shopify = {};
|
|
18
|
+
this.startedAt = Date.now();
|
|
19
|
+
this.seq = 0;
|
|
20
|
+
this.sourceLabel = opts.sourceLabel;
|
|
21
|
+
this.themeInfo = opts.themeInfo;
|
|
22
|
+
}
|
|
23
|
+
pushLog(kind, text) {
|
|
24
|
+
const entry = {
|
|
25
|
+
id: ++this.seq,
|
|
26
|
+
ts: Date.now(),
|
|
27
|
+
kind,
|
|
28
|
+
text,
|
|
29
|
+
};
|
|
30
|
+
this.logs.push(entry);
|
|
31
|
+
if (this.logs.length > MAX_LOGS)
|
|
32
|
+
this.logs.shift();
|
|
33
|
+
this.emit("change");
|
|
34
|
+
return entry;
|
|
35
|
+
}
|
|
36
|
+
setState(next) {
|
|
37
|
+
if (this.state === next)
|
|
38
|
+
return;
|
|
39
|
+
this.state = next;
|
|
40
|
+
this.emit("change");
|
|
41
|
+
}
|
|
42
|
+
setLastBuild(build) {
|
|
43
|
+
this.lastBuild = build;
|
|
44
|
+
this.emit("change");
|
|
45
|
+
}
|
|
46
|
+
setLastError(err) {
|
|
47
|
+
this.lastError = err;
|
|
48
|
+
this.state = "error";
|
|
49
|
+
this.emit("change");
|
|
50
|
+
}
|
|
51
|
+
clearLastError() {
|
|
52
|
+
this.lastError = undefined;
|
|
53
|
+
this.emit("change");
|
|
54
|
+
}
|
|
55
|
+
updateShopify(patch) {
|
|
56
|
+
this.shopify = { ...this.shopify, ...patch };
|
|
57
|
+
this.emit("change");
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.TuiStore = TuiStore;
|
|
61
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/tasks/watch-tui/state.ts"],"names":[],"mappings":";;;AAAA,mCAAsC;AAgDtC,MAAM,QAAQ,GAAG,IAAI,CAAC;AAEtB;;;;;GAKG;AACH,MAAa,QAAS,SAAQ,qBAAY;IAWxC,YAAY,OAAwD,EAAE;QACpE,KAAK,EAAE,CAAC;QAXV,UAAK,GAAe,UAAU,CAAC;QAG/B,SAAI,GAAe,EAAE,CAAC;QAEtB,YAAO,GAAkB,EAAE,CAAC;QAE5B,cAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACf,QAAG,GAAG,CAAC,CAAC;QAId,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IAClC,CAAC;IAED,OAAO,CAAC,IAAe,EAAE,IAAY;QACnC,MAAM,KAAK,GAAa;YACtB,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG;YACd,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,IAAI;YACJ,IAAI;SACL,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,QAAQ,CAAC,IAAgB;QACvB,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;YAAE,OAAO;QAChC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtB,CAAC;IAED,YAAY,CAAC,KAAgB;QAC3B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtB,CAAC;IAED,YAAY,CAAC,GAAc;QACzB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtB,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtB,CAAC;IAED,aAAa,CAAC,KAA6B;QACzC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtB,CAAC;CACF;AAxDD,4BAwDC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ThemeInfo } from "./state";
|
|
2
|
+
/**
|
|
3
|
+
* Build dashboard info from whatever config files exist. Precedence:
|
|
4
|
+
* 1. seed.context.json (active context) — full info
|
|
5
|
+
* 2. seed.project.json (newer project config) — store domain only
|
|
6
|
+
* 3. seed.config.js (legacy) — store domain only
|
|
7
|
+
* Returns an empty object if nothing is present; the dashboard renders
|
|
8
|
+
* whatever fields are populated.
|
|
9
|
+
*/
|
|
10
|
+
export declare function loadThemeInfo(cwd: string, storeKey?: string): ThemeInfo;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadThemeInfo = loadThemeInfo;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
/**
|
|
7
|
+
* Build dashboard info from whatever config files exist. Precedence:
|
|
8
|
+
* 1. seed.context.json (active context) — full info
|
|
9
|
+
* 2. seed.project.json (newer project config) — store domain only
|
|
10
|
+
* 3. seed.config.js (legacy) — store domain only
|
|
11
|
+
* Returns an empty object if nothing is present; the dashboard renders
|
|
12
|
+
* whatever fields are populated.
|
|
13
|
+
*/
|
|
14
|
+
function loadThemeInfo(cwd, storeKey = "main") {
|
|
15
|
+
const info = {};
|
|
16
|
+
const context = loadContext(cwd);
|
|
17
|
+
if (context)
|
|
18
|
+
Object.assign(info, context);
|
|
19
|
+
if (!info.storeDomain) {
|
|
20
|
+
info.storeDomain =
|
|
21
|
+
loadProjectStore(cwd, storeKey) ?? loadLegacyStore(cwd, storeKey);
|
|
22
|
+
}
|
|
23
|
+
return info;
|
|
24
|
+
}
|
|
25
|
+
function loadContext(cwd) {
|
|
26
|
+
const file = (0, path_1.join)(cwd, "seed.context.json");
|
|
27
|
+
if (!(0, fs_1.existsSync)(file))
|
|
28
|
+
return null;
|
|
29
|
+
try {
|
|
30
|
+
const parsed = JSON.parse((0, fs_1.readFileSync)(file, "utf-8"));
|
|
31
|
+
const id = parsed.activeContext;
|
|
32
|
+
if (!id || !parsed.contexts?.[id])
|
|
33
|
+
return null;
|
|
34
|
+
const ctx = parsed.contexts[id];
|
|
35
|
+
return {
|
|
36
|
+
contextName: ctx.name,
|
|
37
|
+
contextStatus: ctx.status,
|
|
38
|
+
branch: ctx.git?.branch,
|
|
39
|
+
baseBranch: ctx.git?.baseBranch,
|
|
40
|
+
storeDomain: ctx.shopify?.storeDomain,
|
|
41
|
+
previewThemeName: ctx.shopify?.previewThemeName,
|
|
42
|
+
previewThemeId: ctx.shopify?.previewThemeId,
|
|
43
|
+
previewUrl: ctx.shopify?.previewUrl,
|
|
44
|
+
customizerUrl: ctx.shopify?.customizerUrl,
|
|
45
|
+
asanaTaskUrl: ctx.asana?.taskUrl,
|
|
46
|
+
prUrl: ctx.github?.prUrl,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function loadProjectStore(cwd, storeKey) {
|
|
54
|
+
const file = (0, path_1.join)(cwd, "seed.project.json");
|
|
55
|
+
if (!(0, fs_1.existsSync)(file))
|
|
56
|
+
return undefined;
|
|
57
|
+
try {
|
|
58
|
+
const parsed = JSON.parse((0, fs_1.readFileSync)(file, "utf-8"));
|
|
59
|
+
return parsed.stores?.[storeKey]?.domain;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function loadLegacyStore(cwd, storeKey) {
|
|
66
|
+
const file = (0, path_1.join)(cwd, "seed.config.js");
|
|
67
|
+
if (!(0, fs_1.existsSync)(file))
|
|
68
|
+
return undefined;
|
|
69
|
+
try {
|
|
70
|
+
// require() caches; delete first so dev-edits to seed.config.js show up.
|
|
71
|
+
delete require.cache[require.resolve(file)];
|
|
72
|
+
const legacy = require(file);
|
|
73
|
+
return legacy.stores?.[storeKey]?.domain || legacy.store;
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=theme-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-info.js","sourceRoot":"","sources":["../../../src/tasks/watch-tui/theme-info.ts"],"names":[],"mappings":"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"}
|
package/lib/utils.js
CHANGED
|
@@ -24,6 +24,7 @@ const cross_spawn_1 = __importDefault(require("cross-spawn"));
|
|
|
24
24
|
const path_1 = require("path");
|
|
25
25
|
const fs_1 = require("fs");
|
|
26
26
|
const config_1 = __importDefault(require("./config"));
|
|
27
|
+
const shopify_bin_1 = require("./shopify-bin");
|
|
27
28
|
/**
|
|
28
29
|
* Get seed.project.json from project root dir
|
|
29
30
|
*
|
|
@@ -31,7 +32,6 @@ const config_1 = __importDefault(require("./config"));
|
|
|
31
32
|
* @returns {SeedProjectConfig | null} - project config object or null if not found
|
|
32
33
|
*/
|
|
33
34
|
function getProjectConfig(themeRoot) {
|
|
34
|
-
console.log(require((0, path_1.join)(themeRoot, "seed.project.json")));
|
|
35
35
|
return require((0, path_1.join)(themeRoot, "seed.project.json"));
|
|
36
36
|
}
|
|
37
37
|
/**
|
|
@@ -83,135 +83,110 @@ function getStorePassword(themeRoot, store) {
|
|
|
83
83
|
* @namespace seed-cli.shopifyCLI
|
|
84
84
|
* @memberof seed-cli
|
|
85
85
|
*/
|
|
86
|
+
// All shopify spawn calls go through `shopifyCommand` so they pick up the
|
|
87
|
+
// bundled `@shopify/cli` binary advertised by seed-cli via SEED_SHOPIFY_BIN.
|
|
88
|
+
// PATH `shopify` is the fallback for when seed-tools is invoked outside the
|
|
89
|
+
// seed-cli wrapper (e.g. running gulp directly).
|
|
86
90
|
exports.shopifyCLI = {
|
|
87
|
-
/**
|
|
88
|
-
* shopify login
|
|
89
|
-
*
|
|
90
|
-
* @memberof seed-cli.shopifyCLI
|
|
91
|
-
* @param {string} store - store's myshopify domain name
|
|
92
|
-
* @returns {object} - spawnSync object or, node's <ChildProcess> object if async
|
|
93
|
-
*/
|
|
94
91
|
login: (store) => {
|
|
95
|
-
const args =
|
|
96
|
-
|
|
92
|
+
const { command, args, shell } = (0, shopify_bin_1.shopifyCommand)([
|
|
93
|
+
"switch",
|
|
94
|
+
"--store",
|
|
95
|
+
store,
|
|
96
|
+
]);
|
|
97
|
+
return cross_spawn_1.default.sync(command, args, {
|
|
97
98
|
env: process.env,
|
|
98
99
|
stdio: "inherit",
|
|
99
|
-
shell
|
|
100
|
-
};
|
|
101
|
-
return cross_spawn_1.default.sync("shopify", args, options);
|
|
100
|
+
shell,
|
|
101
|
+
});
|
|
102
102
|
},
|
|
103
|
-
/**
|
|
104
|
-
* shopify theme serve
|
|
105
|
-
*
|
|
106
|
-
* @memberof seed-cli.shopifyCLI
|
|
107
|
-
* @param {string} store - store's myshopify domain name
|
|
108
|
-
* @param {object} options - node spawn options
|
|
109
|
-
* @returns {object} - node's ChildProcess
|
|
110
|
-
*/
|
|
111
103
|
serve: (store, options = {}) => {
|
|
112
|
-
|
|
104
|
+
const { command, args, shell } = (0, shopify_bin_1.shopifyCommand)([
|
|
105
|
+
"theme",
|
|
106
|
+
"dev",
|
|
107
|
+
"--store",
|
|
108
|
+
store,
|
|
109
|
+
"--path",
|
|
110
|
+
"dist",
|
|
111
|
+
]);
|
|
112
|
+
return (0, cross_spawn_1.default)(command, args, {
|
|
113
113
|
env: process.env,
|
|
114
114
|
stdio: "inherit",
|
|
115
|
-
shell
|
|
115
|
+
shell,
|
|
116
116
|
...options,
|
|
117
117
|
});
|
|
118
118
|
},
|
|
119
|
-
/**
|
|
120
|
-
* shopify theme pull
|
|
121
|
-
*
|
|
122
|
-
* @memberof seed-cli.shopifyCLI
|
|
123
|
-
* @param {string} store - store's myshopify domain name
|
|
124
|
-
* @param {string} themeId - shopify theme id to pull from
|
|
125
|
-
* @param {string} dir - directory to pull into
|
|
126
|
-
* @param {boolean} [nodelete = true] - run command with --no-delete flag
|
|
127
|
-
* @returns {object} - node's ChildProcess
|
|
128
|
-
*/
|
|
129
119
|
pull: (store, themeId, dir = "./src", nodelete = true) => {
|
|
130
|
-
|
|
120
|
+
const sub = ["theme", "pull", "--store", store];
|
|
131
121
|
if (themeId)
|
|
132
|
-
|
|
122
|
+
sub.push("--theme", themeId, "--path", dir);
|
|
133
123
|
if (nodelete)
|
|
134
|
-
|
|
135
|
-
|
|
124
|
+
sub.push("--nodelete");
|
|
125
|
+
const { command, args, shell } = (0, shopify_bin_1.shopifyCommand)(sub);
|
|
126
|
+
return (0, cross_spawn_1.default)(command, args, {
|
|
136
127
|
env: process.env,
|
|
137
128
|
stdio: "inherit",
|
|
138
|
-
shell
|
|
129
|
+
shell,
|
|
139
130
|
});
|
|
140
131
|
},
|
|
141
|
-
/**
|
|
142
|
-
* shopify theme push
|
|
143
|
-
*
|
|
144
|
-
* @memberof seed-cli.shopifyCLI
|
|
145
|
-
* @param {string} store - store's myshopify domain name
|
|
146
|
-
* @param {string} themeId - shopify theme id to push into
|
|
147
|
-
* @param {boolean} [nodelete = true] - run command with --no-delete flag
|
|
148
|
-
* @returns {ChildProcess} - node's ChildProcess
|
|
149
|
-
*/
|
|
150
132
|
push: (store, themeId, nodelete = true) => {
|
|
151
|
-
|
|
133
|
+
const sub = ["theme", "push", "--store", store, "--path", "dist"];
|
|
152
134
|
if (themeId)
|
|
153
|
-
|
|
135
|
+
sub.push("--theme", themeId);
|
|
154
136
|
if (nodelete)
|
|
155
|
-
|
|
156
|
-
|
|
137
|
+
sub.push("--nodelete");
|
|
138
|
+
const { command, args, shell } = (0, shopify_bin_1.shopifyCommand)(sub);
|
|
139
|
+
return (0, cross_spawn_1.default)(command, args, {
|
|
157
140
|
env: process.env,
|
|
158
141
|
stdio: "inherit",
|
|
159
|
-
shell
|
|
142
|
+
shell,
|
|
160
143
|
});
|
|
161
144
|
},
|
|
162
|
-
/**
|
|
163
|
-
* shopify theme package
|
|
164
|
-
*
|
|
165
|
-
* @memberof seed-cli.shopifyCLI
|
|
166
|
-
* @returns {ChildProcess} - node's ChildProcess
|
|
167
|
-
*/
|
|
168
145
|
package: () => {
|
|
169
|
-
|
|
146
|
+
const { command, args, shell } = (0, shopify_bin_1.shopifyCommand)([
|
|
147
|
+
"theme",
|
|
148
|
+
"package",
|
|
149
|
+
"--path",
|
|
150
|
+
"dist",
|
|
151
|
+
]);
|
|
152
|
+
return (0, cross_spawn_1.default)(command, args, {
|
|
170
153
|
env: process.env,
|
|
171
154
|
stdio: "inherit",
|
|
172
|
-
shell
|
|
155
|
+
shell,
|
|
173
156
|
});
|
|
174
157
|
},
|
|
175
|
-
/**
|
|
176
|
-
* shopify theme list
|
|
177
|
-
*
|
|
178
|
-
* @memberof seed-cli.shopifyCLI
|
|
179
|
-
* @param {string} store - store's myshopify domain name
|
|
180
|
-
* @param {object} options - additional options (role, json, etc.)
|
|
181
|
-
* @returns {ChildProcess} - node's ChildProcess
|
|
182
|
-
*/
|
|
183
158
|
list: (store, options = {}) => {
|
|
184
|
-
|
|
159
|
+
const sub = ["theme", "list", "--store", store];
|
|
185
160
|
if (options.role)
|
|
186
|
-
|
|
161
|
+
sub.push("--role", options.role);
|
|
187
162
|
if (options.json)
|
|
188
|
-
|
|
189
|
-
|
|
163
|
+
sub.push("--json");
|
|
164
|
+
const { command, args, shell } = (0, shopify_bin_1.shopifyCommand)(sub);
|
|
165
|
+
return (0, cross_spawn_1.default)(command, args, {
|
|
190
166
|
env: process.env,
|
|
191
167
|
stdio: options.json ? "pipe" : "inherit",
|
|
192
|
-
shell
|
|
168
|
+
shell,
|
|
193
169
|
});
|
|
194
170
|
},
|
|
195
|
-
/**
|
|
196
|
-
* shopify theme duplicate
|
|
197
|
-
*
|
|
198
|
-
* @memberof seed-cli.shopifyCLI
|
|
199
|
-
* @param {string} store - store's myshopify domain name
|
|
200
|
-
* @param {string} themeId - theme ID to duplicate
|
|
201
|
-
* @param {string} [name] - optional name for the duplicated theme
|
|
202
|
-
* @param {boolean} [json] - return JSON output
|
|
203
|
-
* @returns {ChildProcess} - node's ChildProcess
|
|
204
|
-
*/
|
|
205
171
|
duplicate: (store, themeId, name, json = false) => {
|
|
206
|
-
|
|
172
|
+
const sub = [
|
|
173
|
+
"theme",
|
|
174
|
+
"duplicate",
|
|
175
|
+
"--store",
|
|
176
|
+
store,
|
|
177
|
+
"--theme",
|
|
178
|
+
themeId,
|
|
179
|
+
"--force",
|
|
180
|
+
];
|
|
207
181
|
if (name)
|
|
208
|
-
|
|
182
|
+
sub.push("--name", name);
|
|
209
183
|
if (json)
|
|
210
|
-
|
|
211
|
-
|
|
184
|
+
sub.push("--json");
|
|
185
|
+
const { command, args, shell } = (0, shopify_bin_1.shopifyCommand)(sub);
|
|
186
|
+
return (0, cross_spawn_1.default)(command, args, {
|
|
212
187
|
env: process.env,
|
|
213
188
|
stdio: json ? "pipe" : "inherit",
|
|
214
|
-
shell
|
|
189
|
+
shell,
|
|
215
190
|
});
|
|
216
191
|
},
|
|
217
192
|
};
|
package/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@madebyseed/seed-cli-tools",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "Seed CLI Tools",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -25,11 +25,15 @@
|
|
|
25
25
|
"@types/gulp-if": "^3.0.5",
|
|
26
26
|
"@types/gulp-plumber": "^0.0.37",
|
|
27
27
|
"@types/gulp-postcss": "^8.0.6",
|
|
28
|
+
"@types/gulp-rename": "^2.0.7",
|
|
28
29
|
"@types/gulp-sass": "^5.0.4",
|
|
29
30
|
"@types/gulp-size": "^4.0.3",
|
|
31
|
+
"@types/gulp-sourcemaps": "^0.0.38",
|
|
30
32
|
"@types/gulp-uglify": "^3.0.11",
|
|
31
33
|
"@types/lodash": "^4.17.20",
|
|
34
|
+
"@types/minimist": "^1.2.5",
|
|
32
35
|
"@types/node": "^20.11.24",
|
|
36
|
+
"@types/react": "^18.3.28",
|
|
33
37
|
"@types/sass": "^1.45.0",
|
|
34
38
|
"@types/uglify-js": "^3.17.5",
|
|
35
39
|
"@types/vinyl-paths": "^5.0.0",
|
|
@@ -62,15 +66,20 @@
|
|
|
62
66
|
"gulp-include": "^2.4.1",
|
|
63
67
|
"gulp-plumber": "^1.2.1",
|
|
64
68
|
"gulp-postcss": "^9.0.0",
|
|
69
|
+
"gulp-rename": "^2.1.0",
|
|
65
70
|
"gulp-sass": "^5.0.0",
|
|
66
71
|
"gulp-size": "^4.0.1",
|
|
72
|
+
"gulp-sourcemaps": "^3.0.0",
|
|
73
|
+
"gulp-terser": "^2.1.0",
|
|
67
74
|
"gulp-uglify": "^3.0.2",
|
|
75
|
+
"ink": "^3.2.0",
|
|
68
76
|
"lodash": "^4.17.21",
|
|
69
77
|
"minimist": "^1.2.5",
|
|
70
78
|
"postcss": "^8.3.6",
|
|
71
79
|
"postcss-import": "^14.0.2",
|
|
72
80
|
"postcss-pxtorem": "^6.0.0",
|
|
73
81
|
"postcss-reporter": "^7.0.5",
|
|
82
|
+
"react": "^18.3.1",
|
|
74
83
|
"require-directory": "^2.1.1",
|
|
75
84
|
"sass": "^1.36.0",
|
|
76
85
|
"tailwindcss": "^3.1.4",
|
|
@@ -78,5 +87,5 @@
|
|
|
78
87
|
"vinyl-paths": "^3.0.1",
|
|
79
88
|
"yargs": "^17.0.1"
|
|
80
89
|
},
|
|
81
|
-
"gitHead": "
|
|
90
|
+
"gitHead": "4ada9de9c0d943af873dd565575744aaa0512e41"
|
|
82
91
|
}
|
package/src/commands/watch.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import spawn from "cross-spawn";
|
|
2
|
+
import readline from "readline";
|
|
2
3
|
import debug from "debug";
|
|
3
4
|
import { Command } from "commander";
|
|
4
5
|
import config from "../config";
|
|
6
|
+
import { WatchTui } from "../tasks/watch-tui";
|
|
5
7
|
|
|
6
8
|
const logger = debug("seed-tools:watch");
|
|
7
9
|
|
|
@@ -10,6 +12,8 @@ interface WatchOptions {
|
|
|
10
12
|
storePassword?: string | false;
|
|
11
13
|
optimize?: boolean;
|
|
12
14
|
env?: string;
|
|
15
|
+
raw?: boolean;
|
|
16
|
+
verbose?: boolean;
|
|
13
17
|
}
|
|
14
18
|
|
|
15
19
|
export default function (program: Command): void {
|
|
@@ -35,38 +39,84 @@ export default function (program: Command): void {
|
|
|
35
39
|
"Optimizes assets by compressing, minifying and purging.",
|
|
36
40
|
false,
|
|
37
41
|
)
|
|
42
|
+
.option("--raw", "Disable the TUI and stream raw gulp/shopify output.", false)
|
|
43
|
+
.option("--verbose", "Show all child-process output (TUI only).", false)
|
|
38
44
|
.action((options: WatchOptions = {}) => {
|
|
39
45
|
logger(`--gulpfile ${config.gulpFile}`);
|
|
40
46
|
logger(`--cwd ${config.themeRoot}`);
|
|
41
47
|
|
|
42
48
|
const args = ["watch"];
|
|
43
49
|
|
|
44
|
-
if (options.store)
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
if (options.storePassword) {
|
|
50
|
+
if (options.store) args.push("--store", options.store);
|
|
51
|
+
if (options.storePassword)
|
|
49
52
|
args.push("--store-password", options.storePassword);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
53
|
if (!options.optimize) args.push("--skip-optimizations");
|
|
53
54
|
|
|
54
55
|
process.env.NODE_ENV = options.optimize ? "production" : "development";
|
|
55
56
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
57
|
+
const gulpArgs = args.concat([
|
|
58
|
+
"--gulpfile",
|
|
59
|
+
config.gulpFile,
|
|
60
|
+
"--cwd",
|
|
61
|
+
config.themeRoot,
|
|
62
|
+
"--environment",
|
|
63
|
+
options.env || "development",
|
|
64
|
+
]);
|
|
65
|
+
|
|
66
|
+
const useTui = !options.raw && process.stdout.isTTY;
|
|
67
|
+
|
|
68
|
+
if (!useTui) {
|
|
69
|
+
spawn(config.gulp, gulpArgs, {
|
|
67
70
|
detached: false,
|
|
68
71
|
stdio: "inherit",
|
|
72
|
+
});
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const child = spawn(config.gulp, gulpArgs, {
|
|
77
|
+
detached: false,
|
|
78
|
+
// Ink owns stdin for keyboard nav; child runs without a tty on stdin.
|
|
79
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
const tui = new WatchTui({
|
|
83
|
+
verbose: options.verbose,
|
|
84
|
+
sourceLabel:
|
|
85
|
+
typeof options.store === "string" ? options.store : undefined,
|
|
86
|
+
storeKey: typeof options.store === "string" ? options.store : undefined,
|
|
87
|
+
cwd: config.themeRoot,
|
|
88
|
+
onQuit: () => {
|
|
89
|
+
if (!child.killed) child.kill("SIGINT");
|
|
69
90
|
},
|
|
70
|
-
);
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
tui.start();
|
|
94
|
+
|
|
95
|
+
if (child.stdout) {
|
|
96
|
+
readline.createInterface({ input: child.stdout }).on("line", (line) => {
|
|
97
|
+
tui.ingest(line, false);
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
if (child.stderr) {
|
|
101
|
+
readline.createInterface({ input: child.stderr }).on("line", (line) => {
|
|
102
|
+
tui.ingest(line, true);
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
let exited = false;
|
|
107
|
+
const shutdown = (code?: number | null): void => {
|
|
108
|
+
if (exited) return;
|
|
109
|
+
exited = true;
|
|
110
|
+
tui.stop(code);
|
|
111
|
+
// Ink leaves stdin in raw mode with handlers attached even after
|
|
112
|
+
// unmount, which keeps the event loop alive. Force-exit so the user
|
|
113
|
+
// gets back to the shell on q / Ctrl+C without a second keypress.
|
|
114
|
+
// setImmediate gives the final-summary write one tick to flush.
|
|
115
|
+
setImmediate(() => process.exit(code ?? 0));
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
child.on("exit", (code) => shutdown(code));
|
|
119
|
+
process.on("SIGINT", () => shutdown(130));
|
|
120
|
+
process.on("SIGTERM", () => shutdown(143));
|
|
71
121
|
});
|
|
72
|
-
}
|
|
122
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface ShopifyCommand {
|
|
2
|
+
command: string;
|
|
3
|
+
args: string[];
|
|
4
|
+
/** Whether the spawn call should set `shell: true`. */
|
|
5
|
+
shell: boolean;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Build the (command, args) tuple to spawn the shopify cli with the given
|
|
10
|
+
* subcommand args. Prefers the bundled binary advertised by seed-cli via the
|
|
11
|
+
* `SEED_SHOPIFY_BIN` env var. Falls back to PATH `shopify` if the env var
|
|
12
|
+
* isn't set (e.g. someone running seed-tools' gulpfile directly without the
|
|
13
|
+
* seed-cli wrapper).
|
|
14
|
+
*/
|
|
15
|
+
export function shopifyCommand(subArgs: string[]): ShopifyCommand {
|
|
16
|
+
const bin = process.env.SEED_SHOPIFY_BIN;
|
|
17
|
+
if (bin) {
|
|
18
|
+
return { command: process.execPath, args: [bin, ...subArgs], shell: false };
|
|
19
|
+
}
|
|
20
|
+
return { command: "shopify", args: subArgs, shell: true };
|
|
21
|
+
}
|