@swell/cli 2.0.10 → 2.0.12
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/dist/commands/app/dev.d.ts +1 -1
- package/dist/commands/app/dev.js +1 -1
- package/dist/commands/app/install.js +1 -1
- package/dist/commands/app/pull.d.ts +4 -1
- package/dist/commands/app/pull.js +9 -6
- package/dist/commands/app/push.d.ts +4 -2
- package/dist/commands/app/push.js +1 -1
- package/dist/commands/app/release.d.ts +3 -0
- package/dist/commands/app/release.js +11 -2
- package/dist/commands/app/version.d.ts +4 -0
- package/dist/commands/app/version.js +17 -9
- package/dist/commands/login.js +1 -1
- package/dist/commands/theme/dev.d.ts +1 -3
- package/dist/commands/theme/dev.js +12 -6
- package/dist/commands/theme/pull.d.ts +1 -2
- package/dist/commands/theme/pull.js +4 -2
- package/dist/commands/theme/push.d.ts +1 -2
- package/dist/commands/theme/push.js +17 -4
- package/dist/lib/api.d.ts +5 -4
- package/dist/lib/api.js +16 -3
- package/dist/lib/apps/app-config.d.ts +6 -6
- package/dist/lib/apps/app-config.js +4 -5
- package/dist/lib/apps/index.d.ts +36 -35
- package/dist/lib/apps/index.js +60 -62
- package/dist/lib/apps/paths.d.ts +10 -9
- package/dist/lib/apps/paths.js +36 -32
- package/dist/lib/config.d.ts +5 -2
- package/dist/lib/config.js +11 -3
- package/dist/lib/stores.js +2 -2
- package/dist/push-app-command.d.ts +24 -9
- package/dist/push-app-command.js +112 -61
- package/dist/remote-app-command.d.ts +1 -1
- package/dist/remote-app-command.js +7 -7
- package/oclif.manifest.json +59 -10
- package/package.json +2 -2
package/dist/push-app-command.js
CHANGED
|
@@ -5,20 +5,30 @@ import * as path from 'node:path';
|
|
|
5
5
|
import Stream from 'node:stream';
|
|
6
6
|
import ora from 'ora';
|
|
7
7
|
import { default as swellConfig } from './lib/app-config.js';
|
|
8
|
-
import { ConfigType, FrontendProjectTypes, allConfigFilesInDir, appConfigFromFile, filePathExists, findAppConfig, getAppSlugId, getConfigTypeFromPath, getConfigTypeKeyFromValue, getFrontendProjectType, globAllFilesByPath, hashString, isPathDirectory, } from './lib/apps/index.js';
|
|
8
|
+
import { ConfigType, FrontendProjectTypes, allConfigFilesInDir, appConfigFromFile, filePathExists, filePathExistsAsync, findAppConfig, getAppSlugId, getConfigTypeFromPath, getConfigTypeKeyFromValue, getFrontendProjectType, globAllFilesByPath, hashString, isPathDirectory, } from './lib/apps/index.js';
|
|
9
|
+
import { selectEnvironmentId } from './lib/stores.js';
|
|
10
|
+
import { getGlobIgnorePathsChecker } from './lib/apps/paths.js';
|
|
9
11
|
import { default as localConfig } from './lib/config.js';
|
|
10
12
|
import { toAppId } from './lib/create/index.js';
|
|
11
13
|
import style from './lib/style.js';
|
|
12
14
|
import { RemoteAppCommand } from './remote-app-command.js';
|
|
13
15
|
const PUSH_CONCURRENCY = 3;
|
|
16
|
+
const WATCH_WINDOW_MS = 100;
|
|
14
17
|
export class PushAppCommand extends RemoteAppCommand {
|
|
15
18
|
frontendPath = '';
|
|
16
19
|
logWatchChanges = true;
|
|
17
20
|
onWatchChange;
|
|
18
|
-
watchingChangeQueue =
|
|
19
|
-
|
|
20
|
-
|
|
21
|
+
watchingChangeQueue = new Map();
|
|
22
|
+
watchingFiles = new Set();
|
|
23
|
+
watchingIgnoreFilter = null;
|
|
24
|
+
watchingTimer = null;
|
|
21
25
|
watchListener = async (eventType, filename) => {
|
|
26
|
+
if (!filename) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (this.watchingIgnoreFilter && this.watchingIgnoreFilter(filename)) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
22
32
|
const configFile = filename;
|
|
23
33
|
const pathParsed = path.parse(configFile);
|
|
24
34
|
const fileDirs = pathParsed.dir.split(path.sep);
|
|
@@ -26,8 +36,6 @@ export class PushAppCommand extends RemoteAppCommand {
|
|
|
26
36
|
const configDir = fileDirs[0];
|
|
27
37
|
// we only want to watch files in the root of the app directory
|
|
28
38
|
// and ignore build files etc
|
|
29
|
-
this.setWatchingFiles();
|
|
30
|
-
const isWatching = this.watchingFiles.includes(configFile);
|
|
31
39
|
// TODO: renaming a folder doesn't seem to work
|
|
32
40
|
// because isWatching = false for the new files
|
|
33
41
|
if (!configDir) {
|
|
@@ -37,6 +45,7 @@ export class PushAppCommand extends RemoteAppCommand {
|
|
|
37
45
|
if (!configType) {
|
|
38
46
|
return;
|
|
39
47
|
}
|
|
48
|
+
const isWatching = this.watchingFiles.has(configFile);
|
|
40
49
|
let watchFileEvent;
|
|
41
50
|
// per node docs:
|
|
42
51
|
//
|
|
@@ -47,12 +56,14 @@ export class PushAppCommand extends RemoteAppCommand {
|
|
|
47
56
|
// correct API request
|
|
48
57
|
if (eventType === 'rename') {
|
|
49
58
|
watchFileEvent = 'new';
|
|
50
|
-
if (!
|
|
59
|
+
if (!(await filePathExistsAsync(path.join(this.appPath, configFile)))) {
|
|
51
60
|
watchFileEvent = 'deleted';
|
|
61
|
+
this.watchingFiles.delete(configFile);
|
|
52
62
|
}
|
|
53
63
|
else if (!isWatching) {
|
|
54
64
|
return;
|
|
55
65
|
}
|
|
66
|
+
this.watchingFiles.add(configFile);
|
|
56
67
|
}
|
|
57
68
|
else if (isWatching) {
|
|
58
69
|
watchFileEvent = 'change';
|
|
@@ -85,9 +96,7 @@ export class PushAppCommand extends RemoteAppCommand {
|
|
|
85
96
|
const typeLabelPlural = this.appType === 'theme' ? 'themes' : 'apps';
|
|
86
97
|
const typeLabelPrefixed = this.appType === 'theme' ? 'a theme' : 'an app';
|
|
87
98
|
const typeQuery = this.appType === 'theme' ? { type: 'theme' } : { type: 'storefront' };
|
|
88
|
-
const apps = await this.api.get({
|
|
89
|
-
adminPath: `/apps`,
|
|
90
|
-
}, { query: { limit: null, ...typeQuery, ...query } });
|
|
99
|
+
const apps = await this.api.get({ adminPath: '/apps' }, { query: { limit: null, ...typeQuery, ...query } });
|
|
91
100
|
if (!apps.count) {
|
|
92
101
|
const currentStore = localConfig.getDefaultStore();
|
|
93
102
|
this.error(`There are no ${typeLabelPlural} associated with your store ${style.storeId(currentStore)}`);
|
|
@@ -220,12 +229,11 @@ export class PushAppCommand extends RemoteAppCommand {
|
|
|
220
229
|
}
|
|
221
230
|
}
|
|
222
231
|
async ensureAppExists(file, shouldCreate = true) {
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
if (
|
|
227
|
-
currentStore
|
|
228
|
-
this.api.setStoreEnv(currentStore, 'test');
|
|
232
|
+
const klass = this.ctor;
|
|
233
|
+
const currentStore = localConfig.getDefaultStore();
|
|
234
|
+
await this.ensureLoggedIn();
|
|
235
|
+
if (klass.orientation?.env) {
|
|
236
|
+
await this.api.setStoreEnv(currentStore, klass.orientation?.env);
|
|
229
237
|
}
|
|
230
238
|
const app = await this.getAppWithConfig('').catch((_error) =>
|
|
231
239
|
// Ignore so we can continue to create it
|
|
@@ -234,9 +242,12 @@ export class PushAppCommand extends RemoteAppCommand {
|
|
|
234
242
|
if (app && !isTheme && this.appType === 'theme') {
|
|
235
243
|
this.error(`App ${style.appConfigValue(app?.name)} is not a theme.`);
|
|
236
244
|
}
|
|
237
|
-
|
|
238
|
-
if (
|
|
239
|
-
|
|
245
|
+
// Confirm development app unless theme without app syncing
|
|
246
|
+
if (!isTheme || this.themeSyncApp) {
|
|
247
|
+
const confirmExistingApp = await this.confirmRemoveInstalledApp(app, currentStore);
|
|
248
|
+
if (confirmExistingApp === false) {
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
240
251
|
}
|
|
241
252
|
// Do not create or update if app already exists and not forcing it
|
|
242
253
|
if (!shouldCreate && app) {
|
|
@@ -326,8 +337,9 @@ export class PushAppCommand extends RemoteAppCommand {
|
|
|
326
337
|
}
|
|
327
338
|
async getAppToPull(args, shouldChoose = true) {
|
|
328
339
|
const { appId, targetPath } = args;
|
|
340
|
+
const klass = this.ctor;
|
|
329
341
|
const currentStore = localConfig.getDefaultStore();
|
|
330
|
-
this.api.setStoreEnv(currentStore,
|
|
342
|
+
await this.api.setStoreEnv(currentStore, klass.orientation?.env);
|
|
331
343
|
this.resolveAppPath(appId, targetPath);
|
|
332
344
|
if (isPathDirectory(this.appPath)) {
|
|
333
345
|
this.swellConfig = swellConfig(this.appPath);
|
|
@@ -393,15 +405,16 @@ export class PushAppCommand extends RemoteAppCommand {
|
|
|
393
405
|
}
|
|
394
406
|
async getStorefrontToPull(args = {}, flags = {}) {
|
|
395
407
|
const { appId, targetPath } = args;
|
|
396
|
-
const targetApp = await this.getAppToPull(args, false);
|
|
397
408
|
const targetStorefront = flags['storefront-id'];
|
|
409
|
+
const targetApp = await this.getAppToPull(args, false);
|
|
398
410
|
this.resolveAppPath(appId, targetPath);
|
|
399
411
|
// Only use default if path exists
|
|
400
|
-
let
|
|
412
|
+
let defaultStorefront;
|
|
401
413
|
if (isPathDirectory(this.appPath)) {
|
|
402
|
-
|
|
414
|
+
defaultStorefront = localConfig.getDefaultStorefront(this.appPath);
|
|
403
415
|
}
|
|
404
|
-
|
|
416
|
+
await this.setStorefrontEnv(flags, defaultStorefront);
|
|
417
|
+
let storefrontId = targetStorefront || targetApp ? defaultStorefront?.id : undefined;
|
|
405
418
|
if (!storefrontId || flags['storefront-select']) {
|
|
406
419
|
const storefronts = await this.getAllStorefronts(targetApp?.id
|
|
407
420
|
? this.appType === 'theme'
|
|
@@ -452,8 +465,12 @@ export class PushAppCommand extends RemoteAppCommand {
|
|
|
452
465
|
}
|
|
453
466
|
async getStorefrontToPush(flags = {}) {
|
|
454
467
|
const targetStorefront = flags['storefront-id'];
|
|
455
|
-
const
|
|
456
|
-
let storefrontId = targetStorefront ||
|
|
468
|
+
const defaultStorefront = localConfig.getDefaultStorefront(this.appPath);
|
|
469
|
+
let storefrontId = targetStorefront || defaultStorefront?.id;
|
|
470
|
+
// Force storefront select if pushing app from default storefront in live environment
|
|
471
|
+
if (this.themeSyncApp && defaultStorefront?.id && !defaultStorefront.env) {
|
|
472
|
+
storefrontId = '';
|
|
473
|
+
}
|
|
457
474
|
if (!storefrontId || flags['storefront-select']) {
|
|
458
475
|
const storefronts = await this.getAllAppStorefronts({
|
|
459
476
|
type: this.appType,
|
|
@@ -494,28 +511,64 @@ export class PushAppCommand extends RemoteAppCommand {
|
|
|
494
511
|
this.app = await this.getApp(this.app.id);
|
|
495
512
|
return this.storefront;
|
|
496
513
|
}
|
|
514
|
+
async setStorefrontEnv(flags, defaultStorefront) {
|
|
515
|
+
const currentStore = localConfig.getDefaultStore();
|
|
516
|
+
const targetStorefront = flags['storefront-id'];
|
|
517
|
+
if (defaultStorefront &&
|
|
518
|
+
!targetStorefront &&
|
|
519
|
+
!flags['storefront-id'] &&
|
|
520
|
+
!flags['storefront-select']) {
|
|
521
|
+
const klass = this.ctor;
|
|
522
|
+
if (klass.orientation?.env === undefined) {
|
|
523
|
+
await this.api.setStoreEnv(currentStore, defaultStorefront?.env);
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
else if (flags['env']) {
|
|
527
|
+
await this.api.setStoreEnv(currentStore, flags['env']);
|
|
528
|
+
}
|
|
529
|
+
else {
|
|
530
|
+
const hasTestEnv = await this.api.isTestEnvEnabled();
|
|
531
|
+
if (hasTestEnv) {
|
|
532
|
+
const env = await selectEnvironmentId();
|
|
533
|
+
await this.api.setStoreEnv(currentStore, env);
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
}
|
|
497
537
|
async handleWatchFileChange(configFile, configType, event) {
|
|
498
538
|
let config;
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
539
|
+
switch (event) {
|
|
540
|
+
case 'deleted': {
|
|
541
|
+
config = findAppConfig(this.app, configFile, configType);
|
|
542
|
+
if (!config) {
|
|
543
|
+
return;
|
|
544
|
+
}
|
|
545
|
+
this.watchingChangeQueue.set(configFile, {
|
|
546
|
+
action: 'remove',
|
|
547
|
+
appConfig: config,
|
|
548
|
+
configFile,
|
|
549
|
+
});
|
|
550
|
+
break;
|
|
551
|
+
}
|
|
552
|
+
default: {
|
|
553
|
+
config = appConfigFromFile(configFile, configType, this.appPath);
|
|
554
|
+
this.watchingChangeQueue.set(configFile, {
|
|
555
|
+
action: 'push',
|
|
556
|
+
appConfig: config,
|
|
557
|
+
configFile,
|
|
558
|
+
});
|
|
559
|
+
break;
|
|
503
560
|
}
|
|
504
|
-
this.watchingChangeQueue.push({
|
|
505
|
-
action: 'remove',
|
|
506
|
-
appConfig: config,
|
|
507
|
-
configFile,
|
|
508
|
-
});
|
|
509
561
|
}
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
562
|
+
if (this.watchingTimer === null) {
|
|
563
|
+
this.watchingTimer = setTimeout(async () => {
|
|
564
|
+
try {
|
|
565
|
+
await this.runWatchChangeQueue();
|
|
566
|
+
}
|
|
567
|
+
finally {
|
|
568
|
+
this.watchingTimer = null;
|
|
569
|
+
}
|
|
570
|
+
}, WATCH_WINDOW_MS);
|
|
517
571
|
}
|
|
518
|
-
await this.runWatchChangeQueue();
|
|
519
572
|
}
|
|
520
573
|
logAppFrontendUrl() {
|
|
521
574
|
const currentStore = localConfig.getDefaultStore();
|
|
@@ -533,11 +586,8 @@ export class PushAppCommand extends RemoteAppCommand {
|
|
|
533
586
|
if (!this.storefront) {
|
|
534
587
|
this.error('Storefront not connected');
|
|
535
588
|
}
|
|
536
|
-
const { name
|
|
537
|
-
|
|
538
|
-
? ` [theme] ${style.appName(theme_app.name)} v${theme_app.version}`
|
|
539
|
-
: '';
|
|
540
|
-
this.log(`[storefront] ${style.appName(name)}${themeLog}\n`);
|
|
589
|
+
const { name } = this.storefront;
|
|
590
|
+
this.log(`[storefront] ${style.appName(name)}\n`);
|
|
541
591
|
}
|
|
542
592
|
logStorefrontFrontendUrl(storefront, branchId) {
|
|
543
593
|
const currentStore = localConfig.getDefaultStore();
|
|
@@ -610,37 +660,37 @@ export class PushAppCommand extends RemoteAppCommand {
|
|
|
610
660
|
return this.appPath;
|
|
611
661
|
}
|
|
612
662
|
async runWatchChangeQueue() {
|
|
613
|
-
if (this.
|
|
663
|
+
if (this.watchingChangeQueue.size <= 0) {
|
|
614
664
|
return;
|
|
615
665
|
}
|
|
616
|
-
|
|
617
|
-
|
|
666
|
+
const queue = [...this.watchingChangeQueue.values()];
|
|
667
|
+
this.watchingChangeQueue.clear();
|
|
668
|
+
while (queue.length > 0) {
|
|
618
669
|
// eslint-disable-next-line no-await-in-loop
|
|
619
|
-
await Promise.all(
|
|
620
|
-
.splice(0, PUSH_CONCURRENCY)
|
|
621
|
-
.map(async ({ action, appConfig }) => {
|
|
670
|
+
await Promise.all(queue.splice(0, PUSH_CONCURRENCY).map(async ({ action, appConfig }) => {
|
|
622
671
|
const result = await (action === 'remove'
|
|
623
672
|
? this.removeRemoteFile(appConfig, this.logWatchChanges)
|
|
624
673
|
: this.pushRemoteFile(appConfig, this.logWatchChanges));
|
|
625
674
|
this.onWatchChange?.(appConfig, result);
|
|
626
675
|
}));
|
|
627
676
|
}
|
|
628
|
-
this.watchingChangeQueueRunning = false;
|
|
629
677
|
// refetch app to get updated configs
|
|
630
678
|
this.app = await this.getAppWithConfig(this.app.id);
|
|
679
|
+
// Process next accumulated changes
|
|
680
|
+
return this.runWatchChangeQueue();
|
|
631
681
|
}
|
|
632
682
|
saveCurrentStorefront() {
|
|
633
683
|
const currentStorefront = localConfig.getDefaultStorefront(this.appPath);
|
|
634
684
|
if (this.storefront && this.storefront.id !== currentStorefront) {
|
|
635
|
-
localConfig.setDefaultStorefront(this.appPath, this.storefront.id);
|
|
685
|
+
localConfig.setDefaultStorefront(this.appPath, this.storefront.id, this.api.envId);
|
|
636
686
|
}
|
|
637
687
|
}
|
|
638
|
-
setWatchingFiles() {
|
|
639
|
-
this.watchingFiles = globAllFilesByPath(this.appPath);
|
|
688
|
+
async setWatchingFiles() {
|
|
689
|
+
this.watchingFiles = new Set(await globAllFilesByPath(this.appPath));
|
|
640
690
|
}
|
|
641
691
|
async updateFrontendDeployment(currentStore, projectType, deploymentUrl, deploymentHash) {
|
|
642
692
|
const spinner = ora();
|
|
643
|
-
spinner.start(
|
|
693
|
+
spinner.start('Updating frontend deployment...');
|
|
644
694
|
await this.handleRequestErrors(async () => this.api.put({ adminPath: `/apps/${this.app.id}` }, {
|
|
645
695
|
body: {
|
|
646
696
|
$client_id: currentStore,
|
|
@@ -656,14 +706,15 @@ export class PushAppCommand extends RemoteAppCommand {
|
|
|
656
706
|
spinner.succeed('Updated frontend deployment.\n');
|
|
657
707
|
}
|
|
658
708
|
async watchForChanges({ logChanges, onChange, syncAll, } = {}) {
|
|
709
|
+
this.watchingIgnoreFilter = await getGlobIgnorePathsChecker(this.appPath);
|
|
659
710
|
this.logWatchChanges = logChanges ?? true;
|
|
660
711
|
this.onWatchChange = onChange;
|
|
661
|
-
this.setWatchingFiles();
|
|
712
|
+
await this.setWatchingFiles();
|
|
662
713
|
if (syncAll) {
|
|
663
714
|
await this.pushAppConfigs();
|
|
664
715
|
fs.watch(this.appPath, { recursive: true }, async (_eventType, _filename) => {
|
|
665
716
|
await this.pushAppConfigs();
|
|
666
|
-
this.setWatchingFiles();
|
|
717
|
+
await this.setWatchingFiles();
|
|
667
718
|
});
|
|
668
719
|
return;
|
|
669
720
|
}
|
|
@@ -32,7 +32,7 @@ export declare abstract class RemoteAppCommand extends AppCommand {
|
|
|
32
32
|
protected installApp(version: string, spinner?: any): Promise<any>;
|
|
33
33
|
isConfigDeprecated(config: AppConfig): boolean;
|
|
34
34
|
localFrontendUrl(storeId: string, sessionId: string): string;
|
|
35
|
-
logOrientation(): Promise<void>;
|
|
35
|
+
logOrientation(orientation?: AppCommandOrientation): Promise<void>;
|
|
36
36
|
postConfigData(configJson: any): Promise<any>;
|
|
37
37
|
protected pullAppConfigs(force?: boolean, confirmRemove?: boolean): Promise<{
|
|
38
38
|
pulled: string[];
|
|
@@ -322,11 +322,11 @@ export class RemoteAppCommand extends AppCommand {
|
|
|
322
322
|
localFrontendUrl(storeId, sessionId) {
|
|
323
323
|
return getLocalFrontendHost(storeId, sessionId);
|
|
324
324
|
}
|
|
325
|
-
async logOrientation() {
|
|
325
|
+
async logOrientation(orientation) {
|
|
326
326
|
const klass = this.ctor;
|
|
327
327
|
const { flags } = await this.parse(klass);
|
|
328
|
-
if (klass.orientation) {
|
|
329
|
-
this.showOrientation(klass.orientation, flags);
|
|
328
|
+
if (klass.orientation || orientation) {
|
|
329
|
+
this.showOrientation(klass.orientation || orientation, flags);
|
|
330
330
|
}
|
|
331
331
|
}
|
|
332
332
|
async postConfigData(configJson) {
|
|
@@ -334,7 +334,9 @@ export class RemoteAppCommand extends AppCommand {
|
|
|
334
334
|
return this.api.post({ adminPath: `/apps/${this.app.id}/configs` }, {
|
|
335
335
|
body: {
|
|
336
336
|
...configJson,
|
|
337
|
-
...(themeId
|
|
337
|
+
...(themeId
|
|
338
|
+
? { theme_id: themeId, $environment_id: this.api.envId }
|
|
339
|
+
: undefined),
|
|
338
340
|
...(this.themeSyncApp ? { $sync_app: true } : undefined),
|
|
339
341
|
...(this.storefrontLocalUrl
|
|
340
342
|
? { $storefront_local_url: this.storefrontLocalUrl }
|
|
@@ -629,9 +631,7 @@ export class RemoteAppCommand extends AppCommand {
|
|
|
629
631
|
const orientationOutput = [];
|
|
630
632
|
const currentStore = localConfig.getDefaultStore();
|
|
631
633
|
const { env, store } = flags;
|
|
632
|
-
orientationOutput.push(`[${this.app.type === 'theme' ? 'theme' : 'app'}] ${style.appName(this.app.name)}${this.app.version ? ` v${this.app.version}` : ''}
|
|
633
|
-
? ` [storefront] ${style.appName(this.storefront.name)}`
|
|
634
|
-
: ``}`);
|
|
634
|
+
orientationOutput.push(`[${this.app.type === 'theme' ? 'theme' : 'app'}] ${style.appName(this.app.name)}${this.app.version ? ` v${this.app.version}` : ''}`);
|
|
635
635
|
if (store) {
|
|
636
636
|
orientationOutput.push(`[store] ${style.storeId(store)}`);
|
|
637
637
|
}
|
package/oclif.manifest.json
CHANGED
|
@@ -623,6 +623,9 @@
|
|
|
623
623
|
"pluginType": "core",
|
|
624
624
|
"strict": true,
|
|
625
625
|
"summary": "Pull app files from Swell to your local machine.",
|
|
626
|
+
"orientation": {
|
|
627
|
+
"env": "test"
|
|
628
|
+
},
|
|
626
629
|
"isESM": true,
|
|
627
630
|
"relativePath": [
|
|
628
631
|
"dist",
|
|
@@ -698,7 +701,8 @@
|
|
|
698
701
|
"examples": [
|
|
699
702
|
"swell app release",
|
|
700
703
|
"swell app release 2.0.0",
|
|
701
|
-
"swell app release 2.0.0 --amend --release-notes ./releases/v2.0.0.md"
|
|
704
|
+
"swell app release 2.0.0 --amend --release-notes ./releases/v2.0.0.md",
|
|
705
|
+
"swell app release 2.0.0 -y"
|
|
702
706
|
],
|
|
703
707
|
"flags": {
|
|
704
708
|
"app-path": {
|
|
@@ -740,6 +744,13 @@
|
|
|
740
744
|
"hasDynamicHelp": false,
|
|
741
745
|
"multiple": false,
|
|
742
746
|
"type": "option"
|
|
747
|
+
},
|
|
748
|
+
"yes": {
|
|
749
|
+
"char": "y",
|
|
750
|
+
"description": "skip confirmation prompt",
|
|
751
|
+
"name": "yes",
|
|
752
|
+
"allowNo": false,
|
|
753
|
+
"type": "boolean"
|
|
743
754
|
}
|
|
744
755
|
},
|
|
745
756
|
"hasDynamicHelp": false,
|
|
@@ -750,6 +761,9 @@
|
|
|
750
761
|
"pluginType": "core",
|
|
751
762
|
"strict": true,
|
|
752
763
|
"summary": "Release a new version of your an app for publishing to the App Store.",
|
|
764
|
+
"orientation": {
|
|
765
|
+
"env": "test"
|
|
766
|
+
},
|
|
753
767
|
"isESM": true,
|
|
754
768
|
"relativePath": [
|
|
755
769
|
"dist",
|
|
@@ -770,7 +784,8 @@
|
|
|
770
784
|
"examples": [
|
|
771
785
|
"swell app version",
|
|
772
786
|
"swell app version minor",
|
|
773
|
-
"swell app version 1.0.0 -m \"First release\""
|
|
787
|
+
"swell app version 1.0.0 -m \"First release\"",
|
|
788
|
+
"swell app version patch -y"
|
|
774
789
|
],
|
|
775
790
|
"flags": {
|
|
776
791
|
"app-path": {
|
|
@@ -799,6 +814,13 @@
|
|
|
799
814
|
"name": "no-git-tag",
|
|
800
815
|
"allowNo": false,
|
|
801
816
|
"type": "boolean"
|
|
817
|
+
},
|
|
818
|
+
"yes": {
|
|
819
|
+
"char": "y",
|
|
820
|
+
"description": "skip confirmation prompt",
|
|
821
|
+
"name": "yes",
|
|
822
|
+
"allowNo": false,
|
|
823
|
+
"type": "boolean"
|
|
802
824
|
}
|
|
803
825
|
},
|
|
804
826
|
"hasDynamicHelp": false,
|
|
@@ -809,6 +831,9 @@
|
|
|
809
831
|
"pluginType": "core",
|
|
810
832
|
"strict": true,
|
|
811
833
|
"summary": "Increment the version of your Swell app.",
|
|
834
|
+
"orientation": {
|
|
835
|
+
"env": "test"
|
|
836
|
+
},
|
|
812
837
|
"isESM": true,
|
|
813
838
|
"relativePath": [
|
|
814
839
|
"dist",
|
|
@@ -1503,6 +1528,14 @@
|
|
|
1503
1528
|
"name": "storefront-select",
|
|
1504
1529
|
"allowNo": false,
|
|
1505
1530
|
"type": "boolean"
|
|
1531
|
+
},
|
|
1532
|
+
"env": {
|
|
1533
|
+
"char": "e",
|
|
1534
|
+
"description": "target environment to push to, defaults to live",
|
|
1535
|
+
"name": "env",
|
|
1536
|
+
"hasDynamicHelp": false,
|
|
1537
|
+
"multiple": false,
|
|
1538
|
+
"type": "option"
|
|
1506
1539
|
}
|
|
1507
1540
|
},
|
|
1508
1541
|
"hasDynamicHelp": false,
|
|
@@ -1513,9 +1546,6 @@
|
|
|
1513
1546
|
"pluginType": "core",
|
|
1514
1547
|
"strict": true,
|
|
1515
1548
|
"summary": "Run a theme in dev mode from your local machine.",
|
|
1516
|
-
"orientation": {
|
|
1517
|
-
"env": "test"
|
|
1518
|
-
},
|
|
1519
1549
|
"isESM": true,
|
|
1520
1550
|
"relativePath": [
|
|
1521
1551
|
"dist",
|
|
@@ -1630,6 +1660,14 @@
|
|
|
1630
1660
|
"allowNo": false,
|
|
1631
1661
|
"type": "boolean"
|
|
1632
1662
|
},
|
|
1663
|
+
"env": {
|
|
1664
|
+
"char": "e",
|
|
1665
|
+
"description": "target environment to pull from, defaults to live",
|
|
1666
|
+
"name": "env",
|
|
1667
|
+
"hasDynamicHelp": false,
|
|
1668
|
+
"multiple": false,
|
|
1669
|
+
"type": "option"
|
|
1670
|
+
},
|
|
1633
1671
|
"sync-app": {
|
|
1634
1672
|
"description": "pull app files in addition to theme files to",
|
|
1635
1673
|
"name": "sync-app",
|
|
@@ -1644,15 +1682,16 @@
|
|
|
1644
1682
|
"pluginName": "@swell/cli",
|
|
1645
1683
|
"pluginType": "core",
|
|
1646
1684
|
"summary": "Pull theme files from Swell to your local machine.",
|
|
1685
|
+
"orientation": {
|
|
1686
|
+
"env": "test"
|
|
1687
|
+
},
|
|
1647
1688
|
"isESM": true,
|
|
1648
1689
|
"relativePath": [
|
|
1649
1690
|
"dist",
|
|
1650
1691
|
"commands",
|
|
1651
1692
|
"theme",
|
|
1652
1693
|
"pull.js"
|
|
1653
|
-
]
|
|
1654
|
-
"delayOrientation": true,
|
|
1655
|
-
"orientation": {}
|
|
1694
|
+
]
|
|
1656
1695
|
},
|
|
1657
1696
|
"theme:push": {
|
|
1658
1697
|
"aliases": [],
|
|
@@ -1692,6 +1731,14 @@
|
|
|
1692
1731
|
"allowNo": false,
|
|
1693
1732
|
"type": "boolean"
|
|
1694
1733
|
},
|
|
1734
|
+
"env": {
|
|
1735
|
+
"char": "e",
|
|
1736
|
+
"description": "target environment to push to, defaults to live",
|
|
1737
|
+
"name": "env",
|
|
1738
|
+
"hasDynamicHelp": false,
|
|
1739
|
+
"multiple": false,
|
|
1740
|
+
"type": "option"
|
|
1741
|
+
},
|
|
1695
1742
|
"sync-app": {
|
|
1696
1743
|
"description": "push app files in addition to theme files",
|
|
1697
1744
|
"name": "sync-app",
|
|
@@ -1707,7 +1754,9 @@
|
|
|
1707
1754
|
"pluginType": "core",
|
|
1708
1755
|
"summary": "Push local files to your Swell theme.",
|
|
1709
1756
|
"delayOrientation": true,
|
|
1710
|
-
"orientation": {
|
|
1757
|
+
"orientation": {
|
|
1758
|
+
"env": "test"
|
|
1759
|
+
},
|
|
1711
1760
|
"isESM": true,
|
|
1712
1761
|
"relativePath": [
|
|
1713
1762
|
"dist",
|
|
@@ -1841,5 +1890,5 @@
|
|
|
1841
1890
|
]
|
|
1842
1891
|
}
|
|
1843
1892
|
},
|
|
1844
|
-
"version": "2.0.
|
|
1893
|
+
"version": "2.0.12"
|
|
1845
1894
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@swell/cli",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.12",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Swell's command line interface/utility",
|
|
6
6
|
"keywords": [
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"execa": "8.0.1",
|
|
43
43
|
"find-up": "7.0.0",
|
|
44
44
|
"get-port": "7.0.0",
|
|
45
|
-
"globby": "14.0
|
|
45
|
+
"globby": "^14.1.0",
|
|
46
46
|
"inflection": "3.0.0",
|
|
47
47
|
"istextorbinary": "9.5.0",
|
|
48
48
|
"lodash": "4.17.21",
|