@madebyseed/seed-cli-tools 2.2.1 → 2.3.1

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.
@@ -16,18 +16,23 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
16
16
  var logger = (0, _debug["default"])("seed-tools:watch");
17
17
 
18
18
  function _default(program) {
19
- program.command("watch").alias("w").description("Watches files for code changes and immediately deploys updates to dev theme as they occur. " + "This uses shopify theme serve under the hood.").option("-s, --store <store>", "Used for multi-store projects, specify the store to run the watch command for.", false).option("-o, --optimize", "Optimizes assets by compressing, minifying and purging.", false).action(function () {
19
+ program.command("watch").alias("w").description("Watches files for code changes and immediately deploys updates to dev theme as they occur. " + "This uses shopify theme serve under the hood.").option("-s, --store <store>", "Used for multi-store projects, specify the store to run the watch command for.", false).option("-sp, --store-password <password>", "Used for store password protected stores.", false).option("-o, --optimize", "Optimizes assets by compressing, minifying and purging.", false).action(function () {
20
20
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
21
21
  logger("--gulpfile ".concat(_config["default"].gulpFile));
22
22
  logger("--cwd ".concat(_config["default"].themeRoot));
23
23
  var gulpArgs = ["watch", "--gulpfile", _config["default"].gulpFile, "--cwd", _config["default"].themeRoot, "--environment", options.env];
24
- if (!options.optimize) gulpArgs.push("--skip-optimizations");
25
24
 
26
25
  if (options.store) {
27
26
  gulpArgs.push("--store");
28
27
  gulpArgs.push(options.store);
29
28
  }
30
29
 
30
+ if (options.storePassword) {
31
+ gulpArgs.push("--store-password");
32
+ gulpArgs.push(options.storePassword);
33
+ }
34
+
35
+ if (!options.optimize) gulpArgs.push("--skip-optimizations");
31
36
  process.env.NODE_ENV = options.optimize ? "production" : "development";
32
37
  (0, _crossSpawn["default"])(_config["default"].gulp, gulpArgs, {
33
38
  detached: false,
@@ -12,6 +12,11 @@ var plumber = require("gulp-plumber");
12
12
 
13
13
  var chokidar = require("chokidar");
14
14
 
15
+ var _require = require("glob"),
16
+ glob = _require.glob;
17
+
18
+ var fs = require("fs");
19
+
15
20
  var config = require("./includes/config.js");
16
21
 
17
22
  var messages = require("./includes/messages.js");
@@ -51,6 +56,25 @@ function processSass() {
51
56
  }).pipe(plumber(utils.errorHandler)).pipe(sass()).pipe(postcss(config.plugins.postcss)).pipe(gulp.dest(config.dist.assets)).on('finish', resolve).on('error', reject);
52
57
  });
53
58
  }
59
+ /**
60
+ * Touch CSS files to update their modification time
61
+ * This ensures Shopify's watcher detects the changes
62
+ */
63
+
64
+
65
+ function touchCssFiles() {
66
+ try {
67
+ var cssFiles = glob.sync("".concat(config.dist.assets, "*.css"));
68
+ cssFiles.forEach(function (file) {
69
+ // Update the file modification time to trigger Shopify's watcher
70
+ var now = new Date();
71
+ fs.utimesSync(file, now, now);
72
+ messages.logFileEvent("touch", file);
73
+ });
74
+ } catch (error) {
75
+ console.error("Error touching CSS files:", error);
76
+ }
77
+ }
54
78
  /**
55
79
  * Concatenate css via gulp-cssimport
56
80
  *
@@ -82,6 +106,10 @@ gulp.task("watch:css", function () {
82
106
  messages.logFileEvent(event, path);
83
107
  }
84
108
 
85
- processCss();
109
+ processCss(); // Important: Touch CSS files after processing to ensure Shopify detects changes
110
+
111
+ setTimeout(function () {
112
+ touchCssFiles();
113
+ }, 500);
86
114
  });
87
115
  });
@@ -16,6 +16,11 @@ var chokidar = require('chokidar');
16
16
 
17
17
  var minify = composer(uglifyjs, console);
18
18
 
19
+ var _require = require("glob"),
20
+ glob = _require.glob;
21
+
22
+ var fs = require("fs");
23
+
19
24
  var utils = require("./includes/utilities");
20
25
 
21
26
  var config = require('./includes/config.js');
@@ -40,6 +45,25 @@ function processVendorJs() {
40
45
  compress: true
41
46
  })).pipe(gulp.dest(config.dist.assets));
42
47
  }
48
+ /**
49
+ * Touch JS files to update their modification time
50
+ * This ensures Shopify's watcher detects the changes
51
+ */
52
+
53
+
54
+ function touchJsFiles() {
55
+ try {
56
+ var jsFiles = glob.sync("".concat(config.dist.assets, "*.js"));
57
+ jsFiles.forEach(function (file) {
58
+ // Update the file modification time to trigger Shopify's watcher
59
+ var now = new Date();
60
+ fs.utimesSync(file, now, now);
61
+ messages.logFileEvent("touch", file);
62
+ });
63
+ } catch (error) {
64
+ console.error("Error touching JS files:", error);
65
+ }
66
+ }
43
67
 
44
68
  gulp.task('build:js', function () {
45
69
  return processThemeJs();
@@ -49,7 +73,12 @@ gulp.task('watch:js', function () {
49
73
  ignoreInitial: true
50
74
  }).on('all', function (event, path) {
51
75
  messages.logFileEvent(event, path);
52
- processThemeJs();
76
+ processThemeJs().then(function () {
77
+ // Touch JS files after processing to ensure Shopify detects changes
78
+ setTimeout(function () {
79
+ touchJsFiles();
80
+ }, 500);
81
+ });
53
82
  });
54
83
  });
55
84
  gulp.task('build:vendor-js', function () {
@@ -60,6 +89,11 @@ gulp.task('watch:vendor-js', function () {
60
89
  ignoreInitial: true
61
90
  }).on('all', function (event, path) {
62
91
  messages.logFileEvent(event, path);
63
- processVendorJs();
92
+ processVendorJs().then(function () {
93
+ // Touch JS files after processing to ensure Shopify detects changes
94
+ setTimeout(function () {
95
+ touchJsFiles();
96
+ }, 500);
97
+ });
64
98
  });
65
99
  });
@@ -52,6 +52,7 @@ try {
52
52
  var config = {
53
53
  environment: argv.environment === "undefined" || !argv.environment ? "development" : argv.environment,
54
54
  store: argv.store === "undefined" || !argv.store ? null : argv.store,
55
+ storePassword: argv['store-password'] === "undefined" || !argv['store-password'] ? null : argv['store-password'],
55
56
  optimize: !argv["skip-optimizations"],
56
57
  nodelete: !argv["delete"],
57
58
  themeRoot: themeRoot,
@@ -17,6 +17,7 @@ var messages = require("./includes/messages");
17
17
 
18
18
  var environment = config.environment.split(/\s*,\s*|\s+/)[0];
19
19
  var store = config.store;
20
+ var storePassword = config.storePassword;
20
21
  /**
21
22
  * Initiates shopify's cli command 'shopify theme serve' on the dist folder,
22
23
  * watching files and uploading them to development store
@@ -28,7 +29,7 @@ var store = config.store;
28
29
 
29
30
  gulp.task("shopify:serve:dist", function () {
30
31
  var domain = getStoreName(config.themeRoot, store);
31
- messages.logChildProcess("'shopify theme dev --store ".concat(domain, "' on dist..."));
32
+ messages.logChildProcess("'shopify theme dev --store ".concat(domain).concat(storePassword ? " --store-password ".concat(storePassword) : '', "' on dist..."));
32
33
  var childProcess = shopifyCLI.serve(domain, {
33
34
  stdio: ["inherit", "pipe", "inherit"]
34
35
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@madebyseed/seed-cli-tools",
3
- "version": "2.2.1",
3
+ "version": "2.3.1",
4
4
  "description": "Seed CLI Tools",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -34,6 +34,7 @@
34
34
  "fancy-log": "^1.3.3",
35
35
  "figures": "^3.2.0",
36
36
  "find-root": "^1.1.0",
37
+ "glob": "^11.0.2",
37
38
  "gulp": "^4.0.2",
38
39
  "gulp-ext-replace": "^0.3.0",
39
40
  "gulp-if": "^3.0.0",
@@ -57,5 +58,5 @@
57
58
  "webpack-stream": "^7.0.0",
58
59
  "yargs": "^17.0.1"
59
60
  },
60
- "gitHead": "bf1fc8efec7921816461f48b7c8f5fae70bb6a64"
61
+ "gitHead": "018f1210f603f30c38dfb6cc17eb66967072e3b3"
61
62
  }
@@ -17,6 +17,11 @@ export default function (program) {
17
17
  "Used for multi-store projects, specify the store to run the watch command for.",
18
18
  false
19
19
  )
20
+ .option(
21
+ "-sp, --store-password <password>",
22
+ "Used for store password protected stores.",
23
+ false
24
+ )
20
25
  .option(
21
26
  "-o, --optimize",
22
27
  "Optimizes assets by compressing, minifying and purging.",
@@ -36,13 +41,19 @@ export default function (program) {
36
41
  options.env,
37
42
  ];
38
43
 
39
- if (!options.optimize) gulpArgs.push("--skip-optimizations");
40
44
 
41
45
  if (options.store) {
42
46
  gulpArgs.push("--store");
43
47
  gulpArgs.push(options.store);
44
48
  }
45
49
 
50
+ if (options.storePassword) {
51
+ gulpArgs.push("--store-password");
52
+ gulpArgs.push(options.storePassword);
53
+ }
54
+
55
+ if (!options.optimize) gulpArgs.push("--skip-optimizations");
56
+
46
57
  process.env.NODE_ENV = options.optimize ? "production" : "development";
47
58
 
48
59
  spawn(config.gulp, gulpArgs, {
@@ -4,7 +4,8 @@ const sass = require("gulp-sass")(require("sass"));
4
4
  const postcss = require("gulp-postcss");
5
5
  const plumber = require("gulp-plumber");
6
6
  const chokidar = require("chokidar");
7
-
7
+ const { glob } = require("glob");
8
+ const fs = require("fs");
8
9
  const config = require("./includes/config.js");
9
10
  const messages = require("./includes/messages.js");
10
11
  const utils = require("./includes/utilities");
@@ -67,6 +68,24 @@ function processCss() {
67
68
  .on('error', reject)
68
69
  })
69
70
 
71
+ }
72
+
73
+ /**
74
+ * Touch CSS files to update their modification time
75
+ * This ensures Shopify's watcher detects the changes
76
+ */
77
+ function touchCssFiles() {
78
+ try {
79
+ const cssFiles = glob.sync(`${config.dist.assets}*.css`);
80
+ cssFiles.forEach((file) => {
81
+ // Update the file modification time to trigger Shopify's watcher
82
+ const now = new Date();
83
+ fs.utimesSync(file, now, now);
84
+ messages.logFileEvent("touch", file);
85
+ });
86
+ } catch (error) {
87
+ console.error(`Error touching CSS files:`, error);
88
+ }
70
89
  }
71
90
 
72
91
  /**
@@ -98,5 +117,10 @@ gulp.task("watch:css", () => {
98
117
  }
99
118
 
100
119
  processCss();
120
+
121
+ // Important: Touch CSS files after processing to ensure Shopify detects changes
122
+ setTimeout(() => {
123
+ touchCssFiles();
124
+ }, 500);
101
125
  });
102
126
  });
@@ -6,8 +6,8 @@ const include = require('gulp-include');
6
6
  const plumber = require('gulp-plumber');
7
7
  const chokidar = require('chokidar');
8
8
  const minify = composer(uglifyjs, console)
9
-
10
-
9
+ const { glob } = require("glob");
10
+ const fs = require("fs");
11
11
  const utils = require("./includes/utilities");
12
12
  const config = require('./includes/config.js');
13
13
  const messages = require('./includes/messages.js');
@@ -34,6 +34,24 @@ function processVendorJs() {
34
34
  .pipe(gulp.dest(config.dist.assets));
35
35
  }
36
36
 
37
+ /**
38
+ * Touch JS files to update their modification time
39
+ * This ensures Shopify's watcher detects the changes
40
+ */
41
+ function touchJsFiles() {
42
+ try {
43
+ const jsFiles = glob.sync(`${config.dist.assets}*.js`);
44
+ jsFiles.forEach((file) => {
45
+ // Update the file modification time to trigger Shopify's watcher
46
+ const now = new Date();
47
+ fs.utimesSync(file, now, now);
48
+ messages.logFileEvent("touch", file);
49
+ });
50
+ } catch (error) {
51
+ console.error(`Error touching JS files:`, error);
52
+ }
53
+ }
54
+
37
55
  gulp.task('build:js', () => {
38
56
  return processThemeJs();
39
57
  });
@@ -42,7 +60,12 @@ gulp.task('watch:js', () => {
42
60
  chokidar.watch([config.src.js, `!${config.roots.vendorJs}`, `!${config.src.vendorJs}`], {ignoreInitial: true})
43
61
  .on('all', (event, path) => {
44
62
  messages.logFileEvent(event, path);
45
- processThemeJs()
63
+ processThemeJs().then(() => {
64
+ // Touch JS files after processing to ensure Shopify detects changes
65
+ setTimeout(() => {
66
+ touchJsFiles();
67
+ }, 500);
68
+ });
46
69
  });
47
70
  });
48
71
 
@@ -54,6 +77,11 @@ gulp.task('watch:vendor-js', () => {
54
77
  chokidar.watch([config.roots.vendorJs, config.src.vendorJs], {ignoreInitial: true})
55
78
  .on('all', (event, path) => {
56
79
  messages.logFileEvent(event, path);
57
- processVendorJs();
80
+ processVendorJs().then(() => {
81
+ // Touch JS files after processing to ensure Shopify detects changes
82
+ setTimeout(() => {
83
+ touchJsFiles();
84
+ }, 500);
85
+ });
58
86
  });
59
87
  });
@@ -40,6 +40,7 @@ try {
40
40
  const config = {
41
41
  environment: (argv.environment === "undefined" || !argv.environment) ? "development" : argv.environment,
42
42
  store: (argv.store === "undefined" || !argv.store) ? null : argv.store,
43
+ storePassword: (argv['store-password'] === "undefined" || !argv['store-password']) ? null : argv['store-password'],
43
44
  optimize: !argv["skip-optimizations"],
44
45
  nodelete: !argv["delete"],
45
46
  themeRoot,
@@ -13,6 +13,7 @@ const config = require("./includes/config");
13
13
  const messages = require("./includes/messages")
14
14
  const environment = config.environment.split(/\s*,\s*|\s+/)[0];
15
15
  const store = config.store;
16
+ const storePassword = config.storePassword;
16
17
 
17
18
  /**
18
19
  * Initiates shopify's cli command 'shopify theme serve' on the dist folder,
@@ -24,7 +25,7 @@ const store = config.store;
24
25
  */
25
26
  gulp.task("shopify:serve:dist", () => {
26
27
  const domain = getStoreName(config.themeRoot, store);
27
- messages.logChildProcess(`'shopify theme dev --store ${domain}' on dist...`);
28
+ messages.logChildProcess(`'shopify theme dev --store ${domain}${storePassword ? ` --store-password ${storePassword}` : ''}' on dist...`);
28
29
  const childProcess = shopifyCLI.serve(domain, {
29
30
  stdio: ["inherit", "pipe", "inherit"],
30
31
  });