@shopify/shop-minis-cli 0.0.225 → 0.1.2
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/build/commands/config.js.map +1 -1
- package/build/commands/create/examples/default/AGENTS.md +3 -0
- package/build/commands/create/examples/default/CLAUDE.md +1 -1
- package/build/commands/create/examples/default/README.md +144 -0
- package/build/commands/create/examples/default/eslint.config.js +13 -0
- package/build/commands/create/examples/default/index.html +13 -0
- package/build/commands/create/examples/default/stylelint.config.mjs +14 -1
- package/build/commands/create/examples/default/tsconfig.json +5 -0
- package/build/commands/dev/utils/android.js +1 -1
- package/build/commands/dev/utils/resolve-dev-host.js.map +1 -1
- package/build/commands/doctor/index.d.ts +1 -0
- package/build/commands/doctor/index.js +46 -3
- package/build/commands/doctor/index.js.map +1 -1
- package/build/commands/submit/submit.js +59 -1
- package/build/commands/submit/submit.js.map +1 -1
- package/build/program.js +2 -2
- package/build/program.js.map +1 -1
- package/build/utils/minis-manifest.js +16 -0
- package/build/utils/minis-manifest.js.map +1 -1
- package/build/utils/scan-sdk-usage.d.ts +20 -0
- package/build/utils/scan-sdk-usage.js +185 -0
- package/build/utils/scan-sdk-usage.js.map +1 -0
- package/build/utils/scopes-validation.d.ts +54 -0
- package/build/utils/scopes-validation.js +163 -0
- package/build/utils/scopes-validation.js.map +1 -0
- package/build/utils/template-sync.d.ts +14 -0
- package/build/utils/template-sync.js +112 -0
- package/build/utils/template-sync.js.map +1 -0
- package/build/utils/vite-config.js +6 -2
- package/build/utils/vite-config.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAC,UAAU,EAAE,SAAS,EAAC,MAAM,SAAS,CAAA;AAE7C,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAEhC,MAAM,CAAC,MAAM,EAAE,CAAA;AAEf,SAAS,mBAAmB,CAAC,KAAyB;IACpD,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;QACpC,OAAO,KAAK,CAAA;KACb;IAED,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -293,6 +293,7 @@ shop-minis check-submission # Check status
|
|
|
293
293
|
|
|
294
294
|
```bash
|
|
295
295
|
npx shop-minis dev # Start dev server
|
|
296
|
+
npx shop-minis install # Add dependencies
|
|
296
297
|
npx shop-minis submit # Submit for review
|
|
297
298
|
npx shop-minis doctor # Diagnose issues
|
|
298
299
|
npx shop-minis upgrade # Update CLI and shop-minis-react packages
|
|
@@ -300,4 +301,6 @@ npx shop-minis upgrade # Update CLI and shop-minis-react packages
|
|
|
300
301
|
|
|
301
302
|
---
|
|
302
303
|
|
|
304
|
+
**Note**: For project setup, configuration file details, and validation commands, see **README.md**.
|
|
305
|
+
|
|
303
306
|
**Remember**: You're building for mobile devices only, inside the Shop app. Every decision should prioritize mobile UX and leverage the SDK to its fullest.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@AGENTS.md
|
|
1
|
+
@AGENTS.md
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# Shop Mini
|
|
2
|
+
|
|
3
|
+
A mobile-only React application that runs inside the Shopify Shop App.
|
|
4
|
+
|
|
5
|
+
## Getting Started
|
|
6
|
+
|
|
7
|
+
### Install Dependencies
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
### Start Development Server
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx shop-minis dev
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
When the dev server is running, press:
|
|
20
|
+
- `i` - Open in iOS Simulator
|
|
21
|
+
- `a` - Open in Android Emulator
|
|
22
|
+
- `q` - Show QR code for physical device testing
|
|
23
|
+
|
|
24
|
+
## Adding Dependencies
|
|
25
|
+
|
|
26
|
+
Always use the Shop Minis CLI to add dependencies:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npx shop-minis install <package-name>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**Examples:**
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npx shop-minis install lucide-react
|
|
36
|
+
npx shop-minis install radix-ui
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**❌ Don't use npm/yarn/pnpm directly:**
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# Wrong - don't do this
|
|
43
|
+
npm install some-package
|
|
44
|
+
yarn add some-package
|
|
45
|
+
pnpm add some-package
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Dependencies are validated during submission to ensure compatibility with the Shop app.
|
|
49
|
+
|
|
50
|
+
## Project Structure
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
src/
|
|
54
|
+
├── App.tsx # Main component (required)
|
|
55
|
+
├── main.tsx # Entry point
|
|
56
|
+
├── manifest.json # Mini configuration
|
|
57
|
+
├── index.css # Global styles
|
|
58
|
+
├── components/ # Custom components
|
|
59
|
+
├── hooks/ # Custom hooks
|
|
60
|
+
└── pages/ # Page components
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Protected Configuration Files
|
|
64
|
+
|
|
65
|
+
The following files in the root directory are managed by Shop Minis and should generally not be modified:
|
|
66
|
+
|
|
67
|
+
- `tsconfig.json` - TypeScript configuration
|
|
68
|
+
- `eslint.config.js` - Linting rules
|
|
69
|
+
- `stylelint.config.mjs` - Style linting
|
|
70
|
+
- `index.html` - HTML entry point
|
|
71
|
+
- `package.json` - Must be modified via `npx shop-minis install` only
|
|
72
|
+
|
|
73
|
+
### ⚠️ Modifying Protected Files
|
|
74
|
+
|
|
75
|
+
While you **can** modify these files for custom configurations, be aware that:
|
|
76
|
+
|
|
77
|
+
- Changes will be flagged during submission (you'll be asked to confirm)
|
|
78
|
+
- Modifications may cause issues in the Shop app
|
|
79
|
+
- Files will be reset to template defaults during upgrades
|
|
80
|
+
- Changes may be rejected during review
|
|
81
|
+
|
|
82
|
+
Keep your custom files in the `src/` directory to avoid issues.
|
|
83
|
+
|
|
84
|
+
## Validation Commands
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
# Check if configuration files have been modified
|
|
88
|
+
npx shop-minis doctor
|
|
89
|
+
|
|
90
|
+
# Reset configuration files to template defaults
|
|
91
|
+
npx shop-minis doctor --fix
|
|
92
|
+
|
|
93
|
+
# Submit your mini for review
|
|
94
|
+
npx shop-minis submit
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Key Concepts
|
|
98
|
+
|
|
99
|
+
### Mobile-Only
|
|
100
|
+
|
|
101
|
+
This mini runs exclusively on iOS and Android devices inside the Shop app. Always design and test for mobile, not desktop.
|
|
102
|
+
|
|
103
|
+
### SDK-First Development
|
|
104
|
+
|
|
105
|
+
Always check `@shopify/shop-minis-react` for components before building custom solutions:
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
import {Button, ProductCard, List} from '@shopify/shop-minis-react'
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Performance Requirements
|
|
112
|
+
|
|
113
|
+
- Bundle size: Maximum 5MB
|
|
114
|
+
- Load time: Must load within 3 seconds on 5G
|
|
115
|
+
- Images: Always lazy load with SDK's `<Image>` component
|
|
116
|
+
- Lists: Use `<List>` component for virtualization
|
|
117
|
+
|
|
118
|
+
## Common Commands
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
npx shop-minis dev # Start dev server
|
|
122
|
+
npx shop-minis install # Add dependencies
|
|
123
|
+
npx shop-minis submit # Submit for review
|
|
124
|
+
npx shop-minis doctor # Diagnose issues
|
|
125
|
+
npx shop-minis upgrade # Update to latest version
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Learn More
|
|
129
|
+
|
|
130
|
+
- [Shop Minis Documentation](https://shopify.dev/docs/api/shop-minis)
|
|
131
|
+
- [Allowed Dependencies](https://shopify.dev/docs/api/shop-minis/dependencies)
|
|
132
|
+
|
|
133
|
+
## Getting Help
|
|
134
|
+
|
|
135
|
+
If you encounter issues:
|
|
136
|
+
|
|
137
|
+
1. Run `npx shop-minis doctor` to diagnose problems
|
|
138
|
+
2. Check the [documentation](https://shopify.dev/docs/api/shop-minis)
|
|
139
|
+
3. Contact Shop Minis support [forums](https://community.shopify.dev/c/shop-minis/33)
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
**Remember**: You're building for millions of Shop app users. Every decision should prioritize mobile UX and leverage the SDK to its fullest.
|
|
144
|
+
|
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ⚠️ MANAGED BY SHOP MINIS PLATFORM ⚠️
|
|
3
|
+
*
|
|
4
|
+
* This file is maintained by @shopify/shop-minis-cli and should not be modified.
|
|
5
|
+
*
|
|
6
|
+
* Manual changes will be:
|
|
7
|
+
* • Flagged during validation
|
|
8
|
+
* • Reset during upgrades
|
|
9
|
+
* • May prevent submission
|
|
10
|
+
*
|
|
11
|
+
* To update: Run `npx shop-minis upgrade`
|
|
12
|
+
* Learn more: https://shopify.dev/docs/api/shop-minis/configuration
|
|
13
|
+
*/
|
|
1
14
|
const shopMinisConfig = require("@shopify/shop-minis-react/eslint/config");
|
|
2
15
|
|
|
3
16
|
module.exports = [shopMinisConfig];
|
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
⚠️ MANAGED BY SHOP MINIS PLATFORM ⚠️
|
|
3
|
+
|
|
4
|
+
This file is maintained by @shopify/shop-minis-cli and should not be modified.
|
|
5
|
+
|
|
6
|
+
Manual changes will be:
|
|
7
|
+
• Flagged during validation
|
|
8
|
+
• Reset during upgrades
|
|
9
|
+
• May prevent submission
|
|
10
|
+
|
|
11
|
+
To update: Run `npx shop-minis upgrade`
|
|
12
|
+
Learn more: https://shopify.dev/docs/api/shop-minis
|
|
13
|
+
-->
|
|
1
14
|
<!DOCTYPE html>
|
|
2
15
|
<html lang="en">
|
|
3
16
|
<head>
|
|
@@ -1 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* ⚠️ MANAGED BY SHOP MINIS PLATFORM ⚠️
|
|
3
|
+
*
|
|
4
|
+
* This file is maintained by @shopify/shop-minis-cli and should not be modified.
|
|
5
|
+
*
|
|
6
|
+
* Manual changes will be:
|
|
7
|
+
* • Flagged during validation
|
|
8
|
+
* • Reset during upgrades
|
|
9
|
+
* • May prevent submission
|
|
10
|
+
*
|
|
11
|
+
* To update: Run `npx shop-minis upgrade`
|
|
12
|
+
* Learn more: https://shopify.dev/docs/api/shop-minis/configuration
|
|
13
|
+
*/
|
|
14
|
+
export { default } from "@shopify/shop-minis-react/stylelint/config";
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
+
"$schema": "https://json.schemastore.org/tsconfig",
|
|
3
|
+
"//": "⚠️ MANAGED BY SHOP MINIS - DO NOT EDIT",
|
|
4
|
+
"//info": "This file is maintained by @shopify/shop-minis-cli",
|
|
5
|
+
"//update": "To update run: npx shop-minis upgrade",
|
|
6
|
+
"//docs": "Learn more: https://shopify.dev/docs/api/shop-minis/configuration",
|
|
2
7
|
"compilerOptions": {
|
|
3
8
|
"allowJs": true,
|
|
4
9
|
"resolveJsonModule": true,
|
|
@@ -151,7 +151,7 @@ export async function getInstalledShopVersion(emulatorId) {
|
|
|
151
151
|
const versionCode = await execAsync(`${whichAdb()} -s ${emulatorId} shell dumpsys package com.shopify.arrive.internal | grep versionCode`);
|
|
152
152
|
// stdout: [" versionName=2.86.0"]
|
|
153
153
|
const version = _.last(versionName.stdout[0]?.trim().split('='));
|
|
154
|
-
// stdout: [" versionCode=1680515537 minSdk=
|
|
154
|
+
// stdout: [" versionCode=1680515537 minSdk=29 targetSdk=35"]
|
|
155
155
|
const build = _.last(versionCode.stdout[0]?.trim().split(' ')[0]?.split('='));
|
|
156
156
|
if (version == null || build == null) {
|
|
157
157
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-dev-host.js","sourceRoot":"","sources":["../../../../src/commands/dev/utils/resolve-dev-host.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AAExB,OAAO,UAAU,MAAM,aAAa,CAAA;AACpC,OAAO,EAAC,WAAW,EAAE,UAAU,EAAC,MAAM,8BAA8B,CAAA;AAEpE,SAAS,iBAAiB;IACxB,MAAM,UAAU,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAA;IAEzC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;QACjD,IAAI,CAAC,SAAS;YAAE,SAAQ;QAExB,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE;YAC/B,IACE,OAAO;gBACP,CAAC,OAAO,CAAC,QAAQ;gBACjB,OAAO,CAAC,OAAO;gBACf,OAAO,CAAC,MAAM,KAAK,MAAM;gBACzB,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EACvC;gBACA,OAAO,OAAO,CAAC,OAAO,CAAA;aACvB;SACF;KACF;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI;QACF,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,EAAE,CAAA;QAChC,IAAI,EAAE,EAAE;YACN,OAAO,EAAE,CAAA;SACV;QACD,WAAW,
|
|
1
|
+
{"version":3,"file":"resolve-dev-host.js","sourceRoot":"","sources":["../../../../src/commands/dev/utils/resolve-dev-host.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AAExB,OAAO,UAAU,MAAM,aAAa,CAAA;AACpC,OAAO,EAAC,WAAW,EAAE,UAAU,EAAC,MAAM,8BAA8B,CAAA;AAEpE,SAAS,iBAAiB;IACxB,MAAM,UAAU,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAA;IAEzC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;QACjD,IAAI,CAAC,SAAS;YAAE,SAAQ;QAExB,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE;YAC/B,IACE,OAAO;gBACP,CAAC,OAAO,CAAC,QAAQ;gBACjB,OAAO,CAAC,OAAO;gBACf,OAAO,CAAC,MAAM,KAAK,MAAM;gBACzB,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EACvC;gBACA,OAAO,OAAO,CAAC,OAAO,CAAA;aACvB;SACF;KACF;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI;QACF,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,EAAE,CAAA;QAChC,IAAI,EAAE,EAAE;YACN,OAAO,EAAE,CAAA;SACV;QACD,WAAW,CACT,oEAAoE,CACrE,CAAA;KACF;IAAC,OAAO,KAAK,EAAE;QACd,WAAW,CACT,kEAAmE,KAAe,CAAC,OAAO,EAAE,CAC7F,CAAA;KACF;IAED,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;QAChC,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAA;QACpC,IAAI,QAAQ,EAAE;YACZ,WAAW,CAAC,0CAA0C,QAAQ,EAAE,CAAC,CAAA;YACjE,OAAO,QAAQ,CAAA;SAChB;KACF;IAED,UAAU,CACR,qHAAqH,CACtH,CAAA;IACD,OAAO,WAAW,CAAA;AACpB,CAAC;AAED,OAAO,EAAC,iBAAiB,IAAI,4BAA4B,EAAC,CAAA"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import { handler as handleError } from '@shopify/cli-kit/node/error';
|
|
3
|
+
import { renderWarning } from '@shopify/cli-kit/node/ui';
|
|
3
4
|
import { checkDependencies, fixDependencies } from '../../utils/dependencies.js';
|
|
4
5
|
import { assertCorePackageVersions, upgradeCorePackages, } from '../../utils/core-dependencies.js';
|
|
6
|
+
import { compareWithTemplate, resetToTemplate, } from '../../utils/template-sync.js';
|
|
5
7
|
export const command = new Command()
|
|
6
8
|
.name('doctor')
|
|
7
9
|
.description('Diagnose and fix common Node.js, iOS and Android issues.')
|
|
@@ -9,22 +11,63 @@ export const command = new Command()
|
|
|
9
11
|
.option('--fix', 'Attempt to fix all diagnosed issues automatically.')
|
|
10
12
|
.action(async (options) => {
|
|
11
13
|
try {
|
|
14
|
+
let allGood = true;
|
|
15
|
+
// Check configuration files against template
|
|
16
|
+
console.log('🔍 Checking configuration files...\n');
|
|
17
|
+
const templateResults = await compareWithTemplate(process.cwd());
|
|
18
|
+
const issues = templateResults.filter(result => result.status !== 'ok');
|
|
19
|
+
if (issues.length > 0) {
|
|
20
|
+
allGood = false;
|
|
21
|
+
console.log('Configuration file issues found:\n');
|
|
22
|
+
issues.forEach(issue => {
|
|
23
|
+
const icon = issue.status === 'modified' ? '⚠️' : '❌';
|
|
24
|
+
console.log(` ${icon} ${issue.file}: ${issue.message}`);
|
|
25
|
+
});
|
|
26
|
+
console.log('');
|
|
27
|
+
if (options.fix) {
|
|
28
|
+
console.log('🔧 Resetting configuration files to template defaults...\n');
|
|
29
|
+
const filesToReset = issues.map(i => i.file);
|
|
30
|
+
await resetToTemplate(process.cwd(), filesToReset);
|
|
31
|
+
console.log(`✅ Reset ${filesToReset.length} file(s) to match template\n`);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
renderWarning({
|
|
35
|
+
body: [
|
|
36
|
+
'To fix configuration file issues, run:',
|
|
37
|
+
' npx shop-minis doctor --fix',
|
|
38
|
+
],
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
console.log('✅ All configuration files match template\n');
|
|
44
|
+
}
|
|
12
45
|
// Manage core packages (check or fix based on --fix flag)
|
|
46
|
+
console.log('🔍 Checking dependencies...\n');
|
|
13
47
|
if (options.fix) {
|
|
14
48
|
await upgradeCorePackages();
|
|
15
49
|
await fixDependencies();
|
|
16
50
|
}
|
|
17
51
|
else {
|
|
18
52
|
await assertCorePackageVersions();
|
|
19
|
-
const
|
|
20
|
-
if (
|
|
21
|
-
|
|
53
|
+
const hasDepIssues = await checkDependencies();
|
|
54
|
+
if (hasDepIssues) {
|
|
55
|
+
allGood = false;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
console.log('✅ All dependencies are correct\n');
|
|
22
59
|
}
|
|
23
60
|
}
|
|
61
|
+
if (allGood && !options.fix) {
|
|
62
|
+
console.log('✅ The configuration for your mini is correct.');
|
|
63
|
+
}
|
|
24
64
|
}
|
|
25
65
|
catch (error) {
|
|
26
66
|
handleError(error);
|
|
27
67
|
process.exit(1);
|
|
28
68
|
}
|
|
29
69
|
});
|
|
70
|
+
export function loadCommand(parentProgram) {
|
|
71
|
+
parentProgram.addCommand(command);
|
|
72
|
+
}
|
|
30
73
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/doctor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,OAAO,IAAI,WAAW,EAAC,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/doctor/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { promisify } from 'util';
|
|
2
2
|
import { exec } from 'child_process';
|
|
3
|
-
import { renderSuccess, renderTasks, renderConfirmationPrompt, } from '@shopify/cli-kit/node/ui';
|
|
3
|
+
import { renderSuccess, renderInfo, renderTasks, renderConfirmationPrompt, } from '@shopify/cli-kit/node/ui';
|
|
4
4
|
import { outputInfo, outputDebug, outputWarn } from '@shopify/cli-kit/node/output';
|
|
5
5
|
import { edit } from 'external-editor';
|
|
6
6
|
import { handler as handleError, AbortError } from '@shopify/cli-kit/node/error';
|
|
@@ -8,6 +8,7 @@ import { getRunBinCommand } from '../../utils/package-manager.js';
|
|
|
8
8
|
import { assertNetworkAndAuth } from '../../utils/common-tasks.js';
|
|
9
9
|
import { assertCorePackageVersions } from '../../utils/core-dependencies.js';
|
|
10
10
|
import { ALLOWED_EXTENSIONS, ALLOWED_FILES, } from '../../constants/allowed-extensions.js';
|
|
11
|
+
import { compareWithTemplate, findUnexpectedRootFiles, } from '../../utils/template-sync.js';
|
|
11
12
|
import { validateDescription } from './validation.js';
|
|
12
13
|
import { assertManifestValid, assertNoPendingSubmissions, assertRequiredAssets, createStagedUpload, createSubmission, packageShopMini, uploadSubmission, } from './tasks.js';
|
|
13
14
|
import { generateSubmissionArchiveFilename, getSubmissionArchivePath, } from './config.js';
|
|
@@ -121,6 +122,9 @@ export const codeBuildChecks = async ({ skipDependencyCheck = false, skipTypescr
|
|
|
121
122
|
return true;
|
|
122
123
|
};
|
|
123
124
|
export const preSubmitChecks = async () => {
|
|
125
|
+
// Store validation results to check after tasks complete
|
|
126
|
+
let modifiedConfigFiles = [];
|
|
127
|
+
let unexpectedRootFiles = [];
|
|
124
128
|
const tasks = [
|
|
125
129
|
{
|
|
126
130
|
title: `Checking if there are other submissions`,
|
|
@@ -140,9 +144,57 @@ export const preSubmitChecks = async () => {
|
|
|
140
144
|
await assertRequiredAssets();
|
|
141
145
|
},
|
|
142
146
|
},
|
|
147
|
+
{
|
|
148
|
+
title: `Checking configuration files`,
|
|
149
|
+
task: async () => {
|
|
150
|
+
const results = await compareWithTemplate(process.cwd());
|
|
151
|
+
const issues = results.filter(result => result.status !== 'ok');
|
|
152
|
+
if (issues.length > 0) {
|
|
153
|
+
modifiedConfigFiles = issues.map(i => i.file);
|
|
154
|
+
const fileList = modifiedConfigFiles.join(', ');
|
|
155
|
+
outputWarn(`Configuration files have been modified: ${fileList}`);
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
title: `Checking for unexpected root files`,
|
|
161
|
+
task: async () => {
|
|
162
|
+
const unexpectedFiles = await findUnexpectedRootFiles(process.cwd());
|
|
163
|
+
if (unexpectedFiles.length > 0) {
|
|
164
|
+
unexpectedRootFiles = unexpectedFiles.map(file => file.file);
|
|
165
|
+
const fileList = unexpectedRootFiles.join(', ');
|
|
166
|
+
outputWarn(`Unexpected files found in root directory. Any files outside src directory will be ignored during your submission: ${fileList}`);
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
},
|
|
143
170
|
];
|
|
144
171
|
try {
|
|
145
172
|
await renderTasks(tasks);
|
|
173
|
+
// After all checks pass, prompt user if config files were modified
|
|
174
|
+
if (modifiedConfigFiles.length > 0) {
|
|
175
|
+
outputInfo('\n'); // Add spacing
|
|
176
|
+
const shouldContinue = await renderConfirmationPrompt({
|
|
177
|
+
message: `You have modified protected configuration files: ${modifiedConfigFiles.join(', ')}.\n\nThese files are managed by Shop Minis and modifications may:
|
|
178
|
+
|
|
179
|
+
• Break your Mini in the Shop app
|
|
180
|
+
• Be rejected during review
|
|
181
|
+
• Be overwritten during upgrades
|
|
182
|
+
|
|
183
|
+
To reset them: npx shop-minis doctor --fix
|
|
184
|
+
|
|
185
|
+
Do you want to continue with submission anyway?`,
|
|
186
|
+
confirmationMessage: 'Yes, continue with submission',
|
|
187
|
+
cancellationMessage: 'No, cancel submission',
|
|
188
|
+
});
|
|
189
|
+
if (!shouldContinue) {
|
|
190
|
+
outputInfo('\nSubmission cancelled. Run "npx shop-minis doctor --fix" to reset config files.');
|
|
191
|
+
process.exit(0);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// Informational message about unexpected root files (non-blocking)
|
|
195
|
+
if (unexpectedRootFiles.length > 0) {
|
|
196
|
+
outputInfo(`\nNote: Unexpected files in root directory: ${unexpectedRootFiles.join(', ')}\nConsider moving custom files to the src/ directory.\n`);
|
|
197
|
+
}
|
|
146
198
|
}
|
|
147
199
|
catch (error) {
|
|
148
200
|
handleError(error);
|
|
@@ -287,6 +339,12 @@ export const doSubmit = async (config, partnersAccessToken) => {
|
|
|
287
339
|
];
|
|
288
340
|
try {
|
|
289
341
|
await renderTasks(tasks);
|
|
342
|
+
renderInfo({
|
|
343
|
+
headline: 'Notice',
|
|
344
|
+
body: 'Hello there! Minis reviews are currently paused for the holiday season. ' +
|
|
345
|
+
'We will resume reviewing on January 5th, 2026.\n\n' +
|
|
346
|
+
'Thank you for your understanding, and we wish you a wonderful holiday season.',
|
|
347
|
+
});
|
|
290
348
|
renderSuccess({
|
|
291
349
|
headline: 'Shop Mini submitted for review',
|
|
292
350
|
body: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submit.js","sourceRoot":"","sources":["../../../src/commands/submit/submit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,MAAM,CAAA;AAC9B,OAAO,EAAC,IAAI,EAAC,MAAM,eAAe,CAAA;AAElC,OAAO,EACL,aAAa,EACb,WAAW,EACX,wBAAwB,GAEzB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAC,UAAU,EAAE,WAAW,EAAE,UAAU,EAAC,MAAM,8BAA8B,CAAA;AAChF,OAAO,EAAC,IAAI,EAAC,MAAM,iBAAiB,CAAA;AACpC,OAAO,EAAC,OAAO,IAAI,WAAW,EAAE,UAAU,EAAC,MAAM,6BAA6B,CAAA;AAE9E,OAAO,EAAC,gBAAgB,EAAC,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAC,oBAAoB,EAAC,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAC,yBAAyB,EAAC,MAAM,kCAAkC,CAAA;AAC1E,OAAO,EACL,kBAAkB,EAClB,aAAa,GACd,MAAM,uCAAuC,CAAA;
|
|
1
|
+
{"version":3,"file":"submit.js","sourceRoot":"","sources":["../../../src/commands/submit/submit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,MAAM,CAAA;AAC9B,OAAO,EAAC,IAAI,EAAC,MAAM,eAAe,CAAA;AAElC,OAAO,EACL,aAAa,EACb,UAAU,EACV,WAAW,EACX,wBAAwB,GAEzB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAC,UAAU,EAAE,WAAW,EAAE,UAAU,EAAC,MAAM,8BAA8B,CAAA;AAChF,OAAO,EAAC,IAAI,EAAC,MAAM,iBAAiB,CAAA;AACpC,OAAO,EAAC,OAAO,IAAI,WAAW,EAAE,UAAU,EAAC,MAAM,6BAA6B,CAAA;AAE9E,OAAO,EAAC,gBAAgB,EAAC,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAC,oBAAoB,EAAC,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAC,yBAAyB,EAAC,MAAM,kCAAkC,CAAA;AAC1E,OAAO,EACL,kBAAkB,EAClB,aAAa,GACd,MAAM,uCAAuC,CAAA;AAC9C,OAAO,EACL,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,8BAA8B,CAAA;AAQrC,OAAO,EAAC,mBAAmB,EAAC,MAAM,iBAAiB,CAAA;AACnD,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,GACjB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,iCAAiC,EACjC,wBAAwB,GACzB,MAAM,aAAa,CAAA;AAEpB,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;AAEjC,wDAAwD;AACxD,MAAM,qBAAqB,GAAG,CAC5B,KAAa,EACb,OAAe,EACf,UAAkB,EAClB,YAAqB,EACT,EAAE;IACd,MAAM,SAAS,GAAG,EAAE,CAAA;IACpB,IAAI,YAAY,EAAE;QAChB,SAAS,CAAC,IAAI,CAAC,QAAQ,YAAY,gCAAgC,CAAC,CAAA;KACrE;IACD,SAAS,CAAC,IAAI,CAAC,QAAQ,UAAU,qBAAqB,CAAC,CAAA;IACvD,SAAS,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAA;IAElE,OAAO,IAAI,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAA;AAClD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,EACpC,mBAAmB,GAAG,KAAK,EAC3B,mBAAmB,GAAG,KAAK,EAC3B,aAAa,GAAG,KAAK,MACO,EAAE,EAAE,EAAE;IAClC,qEAAqE;IACrE,MAAM,KAAK,GAAoB;QAC7B;YACE,KAAK,EAAE,+CAA+C;YACtD,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,MAAM,oBAAoB,EAAE,CAAA;YAC9B,CAAC;SACF;KACF,CAAA;IAED,IAAI,CAAC,mBAAmB,EAAE;QACxB,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,yCAAyC;YAChD,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,IAAI;oBACF,MAAM,yBAAyB,EAAE,CAAA;iBAClC;gBAAC,OAAO,KAAK,EAAE;oBACd,2EAA2E;oBAC3E,MAAM,cAAc,GAAG,MAAM,gBAAgB,CAAC,oBAAoB,CAAC,CAAA;oBACnE,MAAM,qBAAqB,CACzB,8BAA8B,EAC9B,KAAK,YAAY,KAAK;wBACpB,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAG,KAAa,CAAC,UAAU,CAAC;6BACvC,MAAM,CAAC,OAAO,CAAC;6BACf,IAAI,CAAC,IAAI,CAAC;wBACf,CAAC,CAAC,uCAAuC,EAC3C,cAAc,CACf,CAAA;iBACF;YACH,CAAC;SACF,CAAC,CAAA;QAEF,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,oCAAoC;YAC3C,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,MAAM,YAAY,GAAG,MAAM,gBAAgB,CACzC,4BAA4B,CAC7B,CAAA;gBACD,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,0BAA0B,CAAC,CAAA;gBAErE,IAAI;oBACF,MAAM,SAAS,CAAC,YAAY,CAAC,CAAA;iBAC9B;gBAAC,OAAO,KAAK,EAAE;oBACd,mEAAmE;oBACnE,MAAM,qBAAqB,CACzB,kCAAkC,EAClC,kDAAkD,EAClD,UAAU,EACV,YAAY,CACb,CAAA;iBACF;YACH,CAAC;SACF,CAAC,CAAA;KACH;IAED,IAAI,CAAC,mBAAmB,EAAE;QACxB,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,2BAA2B;YAClC,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAA;gBAEhD,IAAI;oBACF,MAAM,SAAS,CAAC,UAAU,CAAC,CAAA;iBAC5B;gBAAC,MAAM;oBACN,MAAM,IAAI,UAAU,CAClB,0BAA0B,EAC1B,+BAA+B,EAC/B,CAAC,QAAQ,UAAU,qBAAqB,CAAC,CAC1C,CAAA;iBACF;YACH,CAAC;SACF,CAAC,CAAA;KACH;IAED,IAAI,CAAC,aAAa,EAAE;QAClB,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,qBAAqB;YAC5B,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAA;gBAEtD,IAAI;oBACF,MAAM,SAAS,CAAC,WAAW,CAAC,CAAA;iBAC7B;gBAAC,MAAM;oBACN,MAAM,IAAI,UAAU,CAClB,oBAAoB,EACpB,+BAA+B,EAC/B,CAAC,QAAQ,WAAW,qBAAqB,CAAC,CAC3C,CAAA;iBACF;YACH,CAAC;SACF,CAAC,CAAA;QACF,qDAAqD;QACrD,eAAe;QACf,sCAAsC;QACtC,wBAAwB;QACxB,uDAAuD;QACvD,mCAAmC;QACnC,QAAQ;QAER,YAAY;QACZ,0CAA0C;QAC1C,gBAAgB;QAChB,8BAA8B;QAC9B,oCAAoC;QACpC,2CAA2C;QAC3C,0DAA0D;QAC1D,UAAU;QACV,QAAQ;QACR,OAAO;QACP,KAAK;KACN;IAED,IAAI;QACF,MAAM,WAAW,CAAC,KAAK,CAAC,CAAA;KACzB;IAAC,OAAO,KAAc,EAAE;QACvB,WAAW,CAAC,KAAK,CAAC,CAAA;QAClB,OAAO,KAAK,CAAA;KACb;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,IAAI,EAAE;IACxC,yDAAyD;IACzD,IAAI,mBAAmB,GAAa,EAAE,CAAA;IACtC,IAAI,mBAAmB,GAAa,EAAE,CAAA;IAEtC,MAAM,KAAK,GAAoB;QAC7B;YACE,KAAK,EAAE,yCAAyC;YAChD,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,MAAM,0BAA0B,EAAE,CAAA;YACpC,CAAC;SACF;QACD;YACE,KAAK,EAAE,8BAA8B;YACrC,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,MAAM,mBAAmB,EAAE,CAAA;YAC7B,CAAC;SACF;QACD;YACE,KAAK,EAAE,8BAA8B;YACrC,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,MAAM,oBAAoB,EAAE,CAAA;YAC9B,CAAC;SACF;QACD;YACE,KAAK,EAAE,8BAA8B;YACrC,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;gBACxD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,CAAA;gBAE/D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;oBACrB,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;oBAC7C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBAC/C,UAAU,CAAC,2CAA2C,QAAQ,EAAE,CAAC,CAAA;iBAClE;YACH,CAAC;SACF;QACD;YACE,KAAK,EAAE,oCAAoC;YAC3C,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,MAAM,eAAe,GAAG,MAAM,uBAAuB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;gBAEpE,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC9B,mBAAmB,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBAC5D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBAC/C,UAAU,CACR,qHAAqH,QAAQ,EAAE,CAChI,CAAA;iBACF;YACH,CAAC;SACF;KACF,CAAA;IAED,IAAI;QACF,MAAM,WAAW,CAAC,KAAK,CAAC,CAAA;QAExB,mEAAmE;QACnE,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;YAClC,UAAU,CAAC,IAAI,CAAC,CAAA,CAAC,cAAc;YAC/B,MAAM,cAAc,GAAG,MAAM,wBAAwB,CAAC;gBACpD,OAAO,EAAE,oDAAoD,mBAAmB,CAAC,IAAI,CACnF,IAAI,CACL;;;;;;;;gDAQuC;gBACxC,mBAAmB,EAAE,+BAA+B;gBACpD,mBAAmB,EAAE,uBAAuB;aAC7C,CAAC,CAAA;YAEF,IAAI,CAAC,cAAc,EAAE;gBACnB,UAAU,CACR,kFAAkF,CACnF,CAAA;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;aAChB;SACF;QAED,mEAAmE;QACnE,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;YAClC,UAAU,CACR,+CAA+C,mBAAmB,CAAC,IAAI,CACrE,IAAI,CACL,yDAAyD,CAC3D,CAAA;SACF;KACF;IAAC,OAAO,KAAU,EAAE;QACnB,WAAW,CAAC,KAAK,CAAC,CAAA;QAElB,wEAAwE;QACxE,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE;YAC/B,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,mBAAmB,CAAC,CAAA;YAC7D,WAAW,CACT,IAAI,UAAU,CACZ,8BAA8B,EAC9B,mDAAmD,EACnD;gBACE,eAAe,SAAS,SAAS;gBACjC,sCAAsC;aACvC,CACF,CACF,CAAA;SACF;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;KAChB;AACH,CAAC,CAAA;AAED,KAAK,UAAU,oBAAoB,CACjC,qBAAyC;IAEzC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;CAiBlB,CAAA;IAEC,MAAM,sBAAsB,GAAG,MAAM,wBAAwB,CAAC;QAC5D,OAAO,EAAE,sCAAsC;KAChD,CAAC,CAAA;IACF,IAAI,sBAAsB,EAAE;QAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,IAAI,QAAQ,CAAC,CAAA;QAC3D,MAAM,2BAA2B,GAAG,mBAAmB,CACrD,WAAW,EACX,QAAQ,CACT,CAAA;QAED,IAAI,2BAA2B,KAAK,IAAI,EAAE;YACxC,UAAU,CAAC,2BAA2B,CAAC,CAAA;YACvC,OAAO,oBAAoB,CAAC,WAAW,CAAC,CAAA;SACzC;QAED,OAAO,WAAW,CAAA;KACnB;SAAM;QACL,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;KAChB;AACH,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,IAAuB,EACA,EAAE;IACzB,IAAI,EAAC,WAAW,EAAC,GAAG,IAAI,CAAA;IAExB,IAAI,CAAC,WAAW,IAAI,mBAAmB,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE;QAC7D,UAAU,CACR,sEAAsE,CACvE,CAAA;QAED,WAAW,GAAG,MAAM,oBAAoB,CAAC,WAAW,CAAC,CAAA;KACtD;IAED,OAAO;QACL,WAAW;KACZ,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,MAAoB,EACpB,mBAA2B,EAC3B,EAAE;IACF,WAAW,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAEtD,MAAM,eAAe,GAAoB;QACvC,qBAAqB,EAAE,IAAI;QAC3B,iBAAiB,EAAE,IAAI;QACvB,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;KACjB,CAAA;IAED,MAAM,KAAK,GAAoB;QAC7B;YACE,KAAK,EAAE,oCAAoC;YAC3C,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;gBACpC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBAC3D,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACxD,MAAM,gBAAgB,GAAG,UAAU,UAAU,KAAK,YAAY,GAAG,CAAA;gBACjE,eAAe,CAAC,qBAAqB;oBACnC,iCAAiC,EAAE,CAAA;gBACrC,eAAe,CAAC,iBAAiB,GAAG,wBAAwB,CAC1D,eAAe,CAAC,qBAAqB,CACtC,CAAA;gBAED,MAAM,eAAe,CAAC;oBACpB,cAAc;oBACd,iBAAiB,EAAE,eAAe,CAAC,iBAAiB;oBACpD,gBAAgB;oBAChB,MAAM,EAAE;wBACN,oBAAoB;wBACpB,mBAAmB;wBACnB,iBAAiB;wBACjB,iBAAiB;wBACjB,SAAS;wBACT,MAAM;wBACN,UAAU;qBACX;iBACF,CAAC,CAAA;YACJ,CAAC;SACF;QACD;YACE,KAAK,EAAE,gCAAgC;YACvC,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,IACE,CAAC,eAAe,CAAC,iBAAiB;oBAClC,CAAC,eAAe,CAAC,qBAAqB,EACtC;oBACA,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;iBACjE;gBAED,kDAAkD;gBAClD,eAAe,CAAC,YAAY,GAAG,MAAM,kBAAkB,CAAC;oBACtD,qBAAqB,EAAE,eAAe,CAAC,qBAAqB;oBAC5D,iBAAiB,EAAE,eAAe,CAAC,iBAAiB;iBACrD,CAAC,CAAA;YACJ,CAAC;SACF;QACD;YACE,KAAK,EAAE,sBAAsB;YAC7B,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,IACE,CAAC,eAAe,CAAC,iBAAiB;oBAClC,CAAC,eAAe,CAAC,YAAY,EAC7B;oBACA,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;iBAC1D;gBAED,MAAM,gBAAgB,CAAC;oBACrB,GAAG,EAAE,eAAe,CAAC,YAAY,CAAC,GAAG;oBACrC,OAAO,EAAE,eAAe,CAAC,YAAY,CAAC,OAAO;wBAC3C,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC;wBAClD,CAAC,CAAC,SAAS;oBACb,UAAU,EAAE,eAAe,CAAC,YAAY,CAAC,UAAU;wBACjD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,UAAU,CAAC;wBACrD,CAAC,CAAC,SAAS;oBACb,iBAAiB,EAAE,eAAe,CAAC,iBAAiB;iBACrD,CAAC,CAAA;YACJ,CAAC;SACF;QACD;YACE,KAAK,EAAE,uBAAuB;YAC9B,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;oBACjC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;iBACrE;gBAED,kDAAkD;gBAClD,eAAe,CAAC,UAAU,GAAG,MAAM,gBAAgB,CAAC;oBAClD,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,cAAc,EAAE,eAAe,CAAC,YAAY,CAAC,EAAE;oBAC/C,mBAAmB;iBACpB,CAAC,CAAA;YACJ,CAAC;SACF;KACF,CAAA;IACD,IAAI;QACF,MAAM,WAAW,CAAC,KAAK,CAAC,CAAA;QAExB,UAAU,CAAC;YACT,QAAQ,EAAE,QAAQ;YAClB,IAAI,EACF,0EAA0E;gBAC1E,oDAAoD;gBACpD,+EAA+E;SAClF,CAAC,CAAA;QAEF,aAAa,CAAC;YACZ,QAAQ,EAAE,gCAAgC;YAC1C,IAAI,EAAE;gBACJ,iHAAiH;gBACjH;oBACE,IAAI,EAAE,eAAe,CAAC,UAAU,EAAE,SAAS,IAAI,SAAS;iBACzD;aACF;YACD,SAAS,EAAE;gBACT;oBACE,0EAA0E;iBAC3E;gBACD;oBACE,0DAA0D;oBAC1D;wBACE,OAAO,EAAE,MAAM,gBAAgB,CAAC,6BAA6B,CAAC;qBAC/D;iBACF;gBACD;oBACE,6CAA6C;oBAC7C;wBACE,OAAO,EAAE,MAAM,gBAAgB,CAAC,8BAA8B,CAAC;qBAChE;iBACF;aACF;SACF,CAAC,CAAA;KACH;IAAC,OAAO,KAAU,EAAE;QACnB,WAAW,CAAC,KAAK,CAAC,CAAA;QAElB,wEAAwE;QACxE,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE;YAC/B,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,mBAAmB,CAAC,CAAA;YAC7D,WAAW,CACT,IAAI,UAAU,CACZ,mBAAmB,EACnB,mDAAmD,EACnD;gBACE,eAAe,SAAS,SAAS;gBACjC,sCAAsC;aACvC,CACF,CACF,CAAA;SACF;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;KAChB;AACH,CAAC,CAAA"}
|
package/build/program.js
CHANGED
|
@@ -6,7 +6,7 @@ import { CURRENT_CLI_VERSION } from './commands/config.js';
|
|
|
6
6
|
import { loadCommand as loadCreateMiniCommand } from './commands/create/index.js';
|
|
7
7
|
import { loadCommand as loadDevCommand } from './commands/dev/index.js';
|
|
8
8
|
import { buildCommand } from './commands/build/index.js';
|
|
9
|
-
import {
|
|
9
|
+
import { loadCommand as loadDoctorCommand } from './commands/doctor/index.js';
|
|
10
10
|
import { command as featuresCommand } from './commands/features/index.js';
|
|
11
11
|
import { loadCommand as loadInfoCommand } from './commands/info/index.js';
|
|
12
12
|
import { loadCommand as loadSetupCommand } from './commands/setup/index.js';
|
|
@@ -35,13 +35,13 @@ export async function loadProgram() {
|
|
|
35
35
|
loadCodemodCommand(program);
|
|
36
36
|
loadInfoCommand(program);
|
|
37
37
|
loadSetupCommand(program);
|
|
38
|
+
loadDoctorCommand(program);
|
|
38
39
|
loadApiKeysCommand(program);
|
|
39
40
|
loadSyncUserMetafiledDefinitionsCommand(program);
|
|
40
41
|
loadSecretsCommand(program);
|
|
41
42
|
loadProxiesCommand(program);
|
|
42
43
|
loadReportsCommand(program);
|
|
43
44
|
program.addCommand(buildCommand);
|
|
44
|
-
program.addCommand(doctorCommand);
|
|
45
45
|
program.addCommand(featuresCommand);
|
|
46
46
|
program.addCommand(installCommand);
|
|
47
47
|
return program;
|
package/build/program.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAEjC,OAAO,EAAC,WAAW,IAAI,2BAA2B,EAAC,MAAM,uCAAuC,CAAA;AAChG,OAAO,EAAC,WAAW,IAAI,0BAA0B,EAAC,MAAM,sCAAsC,CAAA;AAC9F,OAAO,EAAC,WAAW,IAAI,kBAAkB,EAAC,MAAM,6BAA6B,CAAA;AAC7E,OAAO,EAAC,mBAAmB,EAAC,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAC,WAAW,IAAI,qBAAqB,EAAC,MAAM,4BAA4B,CAAA;AAC/E,OAAO,EAAC,WAAW,IAAI,cAAc,EAAC,MAAM,yBAAyB,CAAA;AACrE,OAAO,EAAC,YAAY,EAAC,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAEjC,OAAO,EAAC,WAAW,IAAI,2BAA2B,EAAC,MAAM,uCAAuC,CAAA;AAChG,OAAO,EAAC,WAAW,IAAI,0BAA0B,EAAC,MAAM,sCAAsC,CAAA;AAC9F,OAAO,EAAC,WAAW,IAAI,kBAAkB,EAAC,MAAM,6BAA6B,CAAA;AAC7E,OAAO,EAAC,mBAAmB,EAAC,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAC,WAAW,IAAI,qBAAqB,EAAC,MAAM,4BAA4B,CAAA;AAC/E,OAAO,EAAC,WAAW,IAAI,cAAc,EAAC,MAAM,yBAAyB,CAAA;AACrE,OAAO,EAAC,YAAY,EAAC,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAC,WAAW,IAAI,iBAAiB,EAAC,MAAM,4BAA4B,CAAA;AAC3E,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,MAAM,8BAA8B,CAAA;AACvE,OAAO,EAAC,WAAW,IAAI,eAAe,EAAC,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAAC,WAAW,IAAI,gBAAgB,EAAC,MAAM,2BAA2B,CAAA;AACzE,OAAO,EAAC,WAAW,IAAI,iBAAiB,EAAC,MAAM,4BAA4B,CAAA;AAC3E,OAAO,EAAC,WAAW,IAAI,kBAAkB,EAAC,MAAM,6BAA6B,CAAA;AAC7E,OAAO,EAAC,WAAW,IAAI,2BAA2B,EAAC,MAAM,uCAAuC,CAAA;AAChG,OAAO,EAAC,WAAW,IAAI,uCAAuC,EAAC,MAAM,qDAAqD,CAAA;AAC1H,OAAO,EAAC,WAAW,IAAI,kBAAkB,EAAC,MAAM,8BAA8B,CAAA;AAC9E,OAAO,EAAC,WAAW,IAAI,kBAAkB,EAAC,MAAM,6BAA6B,CAAA;AAC7E,OAAO,EAAC,WAAW,IAAI,kBAAkB,EAAC,MAAM,6BAA6B,CAAA;AAC7E,OAAO,EAAC,WAAW,IAAI,kBAAkB,EAAC,MAAM,6BAA6B,CAAA;AAC7E,OAAO,EAAC,OAAO,IAAI,cAAc,EAAC,MAAM,6BAA6B,CAAA;AAErE,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;IAE7B,OAAO;SACJ,IAAI,CAAC,YAAY,CAAC;SAClB,WAAW,CAAC,gCAAgC,CAAC;SAC7C,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAE/B,qBAAqB,CAAC,OAAO,CAAC,CAAA;IAC9B,MAAM,cAAc,CAAC,OAAO,CAAC,CAAA;IAC7B,iBAAiB,CAAC,OAAO,CAAC,CAAA;IAC1B,2BAA2B,CAAC,OAAO,CAAC,CAAA;IACpC,0BAA0B,CAAC,OAAO,CAAC,CAAA;IACnC,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAC3B,2BAA2B,CAAC,OAAO,CAAC,CAAA;IACpC,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAC3B,eAAe,CAAC,OAAO,CAAC,CAAA;IACxB,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACzB,iBAAiB,CAAC,OAAO,CAAC,CAAA;IAC1B,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAC3B,uCAAuC,CAAC,OAAO,CAAC,CAAA;IAChD,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAC3B,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAC3B,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAE3B,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;IAChC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAA;IACnC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;IAElC,OAAO,OAAO,CAAA;AAChB,CAAC"}
|
|
@@ -2,8 +2,10 @@ import { createRequire } from 'node:module';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { existsSync, writeFileSync } from 'node:fs';
|
|
4
4
|
import { AbortError } from '@shopify/cli-kit/node/error';
|
|
5
|
+
import { outputDebug } from '@shopify/cli-kit/node/output';
|
|
5
6
|
import { Validator } from 'jsonschema';
|
|
6
7
|
import { getMiniBasePath } from './path.js';
|
|
8
|
+
import { validateUnusedScopes } from './scopes-validation.js';
|
|
7
9
|
const require = createRequire(import.meta.url);
|
|
8
10
|
const manifestSchema = require('../schemas/manifest.schema.json');
|
|
9
11
|
export const DEFAULT_MANIFEST_PATH = path.join('src', 'manifest.json');
|
|
@@ -190,6 +192,20 @@ export function validateManifest(manifestPath) {
|
|
|
190
192
|
validationErrors.push('trusted_domains must be an array');
|
|
191
193
|
}
|
|
192
194
|
}
|
|
195
|
+
// Validate unused scopes
|
|
196
|
+
const miniPath = getMiniBasePath();
|
|
197
|
+
const scopesResult = validateUnusedScopes(miniPath, manifest);
|
|
198
|
+
if (scopesResult.skipped) {
|
|
199
|
+
outputDebug(`Scopes validation skipped: ${scopesResult.skipReason}`);
|
|
200
|
+
}
|
|
201
|
+
else if (!scopesResult.success) {
|
|
202
|
+
if (scopesResult.errors) {
|
|
203
|
+
validationErrors.push(...scopesResult.errors);
|
|
204
|
+
}
|
|
205
|
+
for (const scope of scopesResult.unusedScopes) {
|
|
206
|
+
validationErrors.push(`Unused scope: ${scope}`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
193
209
|
return {
|
|
194
210
|
valid: result.valid && validationErrors.length === 0,
|
|
195
211
|
errors: validationErrors,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"minis-manifest.js","sourceRoot":"","sources":["../../src/utils/minis-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAA;AACzC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAC,UAAU,EAAE,aAAa,EAAC,MAAM,SAAS,CAAA;AAEjD,OAAO,EAAC,UAAU,EAAC,MAAM,6BAA6B,CAAA;AACtD,OAAO,EAAC,SAAS,EAAC,MAAM,YAAY,CAAA;AAIpC,OAAO,EAAC,eAAe,EAAC,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"minis-manifest.js","sourceRoot":"","sources":["../../src/utils/minis-manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK Import Scanning Utilities
|
|
3
|
+
*
|
|
4
|
+
* Scans a mini app's source code to find all imports from @shopify/shop-minis-react.
|
|
5
|
+
* Used by scope validation to determine which hooks/components are actually used.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Recursively find all TypeScript/TSX files in a directory
|
|
9
|
+
*/
|
|
10
|
+
export declare function findTsFiles(dir: string): string[];
|
|
11
|
+
/**
|
|
12
|
+
* Parse a file and extract import names from @shopify/shop-minis-react
|
|
13
|
+
* Returns just the import names as strings (no metadata needed for validation)
|
|
14
|
+
*/
|
|
15
|
+
export declare function extractImports(filePath: string): string[];
|
|
16
|
+
/**
|
|
17
|
+
* Get unique SDK imports from a mini app directory.
|
|
18
|
+
* This is the main entry point for scope validation.
|
|
19
|
+
*/
|
|
20
|
+
export declare function getUniqueSdkImports(miniPath: string): Set<string>;
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK Import Scanning Utilities
|
|
3
|
+
*
|
|
4
|
+
* Scans a mini app's source code to find all imports from @shopify/shop-minis-react.
|
|
5
|
+
* Used by scope validation to determine which hooks/components are actually used.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'fs';
|
|
8
|
+
import * as path from 'path';
|
|
9
|
+
const SDK_PACKAGE = '@shopify/shop-minis-react';
|
|
10
|
+
/**
|
|
11
|
+
* Recursively find all TypeScript/TSX files in a directory
|
|
12
|
+
*/
|
|
13
|
+
export function findTsFiles(dir) {
|
|
14
|
+
const files = [];
|
|
15
|
+
function walkDir(currentDir) {
|
|
16
|
+
if (!fs.existsSync(currentDir)) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const entries = fs.readdirSync(currentDir, { withFileTypes: true });
|
|
20
|
+
for (const entry of entries) {
|
|
21
|
+
const fullPath = path.join(currentDir, entry.name);
|
|
22
|
+
// Skip node_modules and build directories
|
|
23
|
+
if (entry.name === 'node_modules' ||
|
|
24
|
+
entry.name === 'dist' ||
|
|
25
|
+
entry.name === 'build' ||
|
|
26
|
+
entry.name === '.minis-cache') {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (entry.isDirectory()) {
|
|
30
|
+
walkDir(fullPath);
|
|
31
|
+
}
|
|
32
|
+
else if (entry.isFile() &&
|
|
33
|
+
(entry.name.endsWith('.ts') || entry.name.endsWith('.tsx'))) {
|
|
34
|
+
files.push(fullPath);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (fs.existsSync(dir)) {
|
|
39
|
+
walkDir(dir);
|
|
40
|
+
}
|
|
41
|
+
return files;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Remove single-line comments from a line of code
|
|
45
|
+
*/
|
|
46
|
+
function removeComments(line) {
|
|
47
|
+
const commentIndex = line.indexOf('//');
|
|
48
|
+
if (commentIndex !== -1) {
|
|
49
|
+
return line.substring(0, commentIndex);
|
|
50
|
+
}
|
|
51
|
+
return line;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Check if we're inside a multi-line comment block
|
|
55
|
+
*/
|
|
56
|
+
function isInMultiLineComment(lines, currentIndex) {
|
|
57
|
+
let inComment = false;
|
|
58
|
+
for (let i = 0; i <= currentIndex; i++) {
|
|
59
|
+
const line = lines[i];
|
|
60
|
+
if (line.includes('/*')) {
|
|
61
|
+
inComment = true;
|
|
62
|
+
}
|
|
63
|
+
if (line.includes('*/')) {
|
|
64
|
+
inComment = false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return inComment;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Parse an individual import item and extract the original name
|
|
71
|
+
* Handles: "Foo", "Foo as Bar", "type Foo", "type Foo as Bar"
|
|
72
|
+
*/
|
|
73
|
+
function parseImportItem(item) {
|
|
74
|
+
const trimmed = item.trim();
|
|
75
|
+
// Handle "type Foo" or "type Foo as Bar"
|
|
76
|
+
const typeMatch = trimmed.match(/^type\s+(.+?)(?:\s+as\s+\w+)?$/);
|
|
77
|
+
if (typeMatch) {
|
|
78
|
+
const nameWithAlias = typeMatch[1];
|
|
79
|
+
const asMatch = nameWithAlias.match(/^(.+?)\s+as\s+/);
|
|
80
|
+
return asMatch ? asMatch[1].trim() : nameWithAlias.trim();
|
|
81
|
+
}
|
|
82
|
+
// Handle "Foo as Bar"
|
|
83
|
+
const asMatch = trimmed.match(/^(.+?)\s+as\s+/);
|
|
84
|
+
if (asMatch) {
|
|
85
|
+
return asMatch[1].trim();
|
|
86
|
+
}
|
|
87
|
+
return trimmed;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Parse a file and extract import names from @shopify/shop-minis-react
|
|
91
|
+
* Returns just the import names as strings (no metadata needed for validation)
|
|
92
|
+
*/
|
|
93
|
+
export function extractImports(filePath) {
|
|
94
|
+
const imports = [];
|
|
95
|
+
try {
|
|
96
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
97
|
+
const lines = content.split('\n');
|
|
98
|
+
const escapedPackage = SDK_PACKAGE.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
99
|
+
for (let i = 0; i < lines.length; i++) {
|
|
100
|
+
if (isInMultiLineComment(lines, i)) {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
const line = removeComments(lines[i]).trim();
|
|
104
|
+
if (!line)
|
|
105
|
+
continue;
|
|
106
|
+
// Check if this line starts an import/export statement
|
|
107
|
+
const importOrExportStart = /^(import|export)\s/.test(line);
|
|
108
|
+
if (!importOrExportStart) {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
// Collect multi-line imports
|
|
112
|
+
let fullStatement = line;
|
|
113
|
+
let currentLine = i;
|
|
114
|
+
while (currentLine < lines.length - 1 &&
|
|
115
|
+
!fullStatement.match(/['"][;]?\s*$/)) {
|
|
116
|
+
currentLine++;
|
|
117
|
+
const nextLine = removeComments(lines[currentLine]).trim();
|
|
118
|
+
fullStatement = `${fullStatement} ${nextLine}`;
|
|
119
|
+
}
|
|
120
|
+
fullStatement = fullStatement.replace(/\s+/g, ' ').trim();
|
|
121
|
+
// Check if this import/export is from our SDK package
|
|
122
|
+
const importOrExportRegex = new RegExp(`(import|export).*from\\s*['"]${escapedPackage}['"]`);
|
|
123
|
+
if (!importOrExportRegex.test(fullStatement)) {
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
// Match: import type { ... } from '...' or import { ... } from '...'
|
|
127
|
+
const namedImportMatch = fullStatement.match(new RegExp(`import\\s*(?:type\\s*)?{([^}]+)}\\s*from\\s*['"]${escapedPackage}['"]`));
|
|
128
|
+
if (namedImportMatch) {
|
|
129
|
+
const importedItems = namedImportMatch[1]
|
|
130
|
+
.split(',')
|
|
131
|
+
.map(parseImportItem)
|
|
132
|
+
.filter(Boolean);
|
|
133
|
+
imports.push(...importedItems);
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
// Match: import Something from '...'
|
|
137
|
+
const defaultImportMatch = fullStatement.match(new RegExp(`import\\s+(\\w+)\\s+from\\s*['"]${escapedPackage}['"]`));
|
|
138
|
+
if (defaultImportMatch) {
|
|
139
|
+
imports.push(defaultImportMatch[1]);
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
// Match: import * as Something from '...'
|
|
143
|
+
const namespaceImportMatch = fullStatement.match(new RegExp(`import\\s*\\*\\s*as\\s+(\\w+)\\s*from\\s*['"]${escapedPackage}['"]`));
|
|
144
|
+
if (namespaceImportMatch) {
|
|
145
|
+
imports.push(`* as ${namespaceImportMatch[1]}`);
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
// Match: export { ... } from '...'
|
|
149
|
+
const reExportMatch = fullStatement.match(new RegExp(`export\\s*{([^}]+)}\\s*from\\s*['"]${escapedPackage}['"]`));
|
|
150
|
+
if (reExportMatch) {
|
|
151
|
+
const exportedItems = reExportMatch[1]
|
|
152
|
+
.split(',')
|
|
153
|
+
.map(parseImportItem)
|
|
154
|
+
.filter(Boolean);
|
|
155
|
+
imports.push(...exportedItems);
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
// Match: export * from '...'
|
|
159
|
+
const reExportAllMatch = fullStatement.match(new RegExp(`export\\s*\\*\\s*from\\s*['"]${escapedPackage}['"]`));
|
|
160
|
+
if (reExportAllMatch) {
|
|
161
|
+
imports.push('* (re-export all)');
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
// Skip files that can't be read
|
|
167
|
+
}
|
|
168
|
+
return imports;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Get unique SDK imports from a mini app directory.
|
|
172
|
+
* This is the main entry point for scope validation.
|
|
173
|
+
*/
|
|
174
|
+
export function getUniqueSdkImports(miniPath) {
|
|
175
|
+
const files = findTsFiles(miniPath);
|
|
176
|
+
const uniqueImports = new Set();
|
|
177
|
+
for (const file of files) {
|
|
178
|
+
const imports = extractImports(file);
|
|
179
|
+
for (const name of imports) {
|
|
180
|
+
uniqueImports.add(name);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return uniqueImports;
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=scan-sdk-usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-sdk-usage.js","sourceRoot":"","sources":["../../src/utils/scan-sdk-usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scope Validation Utilities
|
|
3
|
+
*
|
|
4
|
+
* Validates that all scopes declared in a mini's manifest.json are actually used
|
|
5
|
+
* by the hooks and components imported from @shopify/shop-minis-react.
|
|
6
|
+
*
|
|
7
|
+
* Ported from shop-minis-submissions/scripts/validate-mini-manifest.ts
|
|
8
|
+
*/
|
|
9
|
+
export interface ScopesValidationResult {
|
|
10
|
+
success: boolean;
|
|
11
|
+
unusedScopes: string[];
|
|
12
|
+
usedHooksAndComponents: string[];
|
|
13
|
+
/** True if validation was skipped (e.g., SDK maps not found) */
|
|
14
|
+
skipped: boolean;
|
|
15
|
+
/** Reason why validation was skipped */
|
|
16
|
+
skipReason?: string;
|
|
17
|
+
/** Validation errors (e.g., invalid scope types in manifest) */
|
|
18
|
+
errors?: string[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Loads the hook-to-scopes mapping from the SDK in a Mini's node_modules
|
|
22
|
+
* Returns null if the SDK is not installed or the map file doesn't exist
|
|
23
|
+
*/
|
|
24
|
+
export declare function loadHookScopesMap(miniPath: string): Record<string, string[]> | null;
|
|
25
|
+
/**
|
|
26
|
+
* Loads the component-to-scopes mapping from the SDK in a Mini's node_modules
|
|
27
|
+
* Returns a map keyed by component name (not file path) for easier lookup
|
|
28
|
+
* Returns null if the SDK is not installed or the map file doesn't exist
|
|
29
|
+
*/
|
|
30
|
+
export declare function loadComponentScopesMap(miniPath: string): Record<string, {
|
|
31
|
+
scopes: string[];
|
|
32
|
+
hooks: string[];
|
|
33
|
+
}> | null;
|
|
34
|
+
/**
|
|
35
|
+
* Checks if a scope is required by any of the used hooks/components
|
|
36
|
+
*/
|
|
37
|
+
export declare function isScopeUsed(scope: string, usedItems: Set<string>, hookToScopes: Record<string, string[]>, componentToScopes: Record<string, {
|
|
38
|
+
scopes: string[];
|
|
39
|
+
hooks: string[];
|
|
40
|
+
}>): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Validates that all scopes declared in the manifest are actually used.
|
|
43
|
+
* Returns a result indicating success/failure and any unused scopes.
|
|
44
|
+
*
|
|
45
|
+
* This function gracefully handles missing SDK installations by skipping
|
|
46
|
+
* validation and returning a successful result.
|
|
47
|
+
*
|
|
48
|
+
* @param miniPath - Path to the mini app directory
|
|
49
|
+
* @param manifest - Already-loaded manifest content (avoids double-loading)
|
|
50
|
+
*/
|
|
51
|
+
export declare function validateUnusedScopes(miniPath: string, manifest: {
|
|
52
|
+
scopes?: unknown[];
|
|
53
|
+
[key: string]: unknown;
|
|
54
|
+
}): ScopesValidationResult;
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scope Validation Utilities
|
|
3
|
+
*
|
|
4
|
+
* Validates that all scopes declared in a mini's manifest.json are actually used
|
|
5
|
+
* by the hooks and components imported from @shopify/shop-minis-react.
|
|
6
|
+
*
|
|
7
|
+
* Ported from shop-minis-submissions/scripts/validate-mini-manifest.ts
|
|
8
|
+
*/
|
|
9
|
+
import * as fs from 'fs';
|
|
10
|
+
import * as path from 'path';
|
|
11
|
+
import { getUniqueSdkImports } from './scan-sdk-usage.js';
|
|
12
|
+
/**
|
|
13
|
+
* Loads the hook-to-scopes mapping from the SDK in a Mini's node_modules
|
|
14
|
+
* Returns null if the SDK is not installed or the map file doesn't exist
|
|
15
|
+
*/
|
|
16
|
+
export function loadHookScopesMap(miniPath) {
|
|
17
|
+
const mapPath = path.join(miniPath, 'node_modules', '@shopify', 'shop-minis-react', 'generated-hook-maps', 'hook-scopes-map.json');
|
|
18
|
+
if (!fs.existsSync(mapPath)) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
const mapContent = fs.readFileSync(mapPath, 'utf-8');
|
|
23
|
+
return JSON.parse(mapContent);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Loads the component-to-scopes mapping from the SDK in a Mini's node_modules
|
|
31
|
+
* Returns a map keyed by component name (not file path) for easier lookup
|
|
32
|
+
* Returns null if the SDK is not installed or the map file doesn't exist
|
|
33
|
+
*/
|
|
34
|
+
export function loadComponentScopesMap(miniPath) {
|
|
35
|
+
const mapPath = path.join(miniPath, 'node_modules', '@shopify', 'shop-minis-react', 'generated-hook-maps', 'component-scopes-map.json');
|
|
36
|
+
if (!fs.existsSync(mapPath)) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
const mapContent = fs.readFileSync(mapPath, 'utf-8');
|
|
41
|
+
const filePathMap = JSON.parse(mapContent);
|
|
42
|
+
// Build reverse map: componentName -> {scopes, hooks}
|
|
43
|
+
const componentNameMap = {};
|
|
44
|
+
for (const [filePath, data] of Object.entries(filePathMap)) {
|
|
45
|
+
if (data.name) {
|
|
46
|
+
// Use componentName field when available
|
|
47
|
+
componentNameMap[data.name] = {
|
|
48
|
+
scopes: data.scopes,
|
|
49
|
+
hooks: data.hooks,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
// Fallback: derive component name from file path (for backward compatibility)
|
|
54
|
+
// commerce/product-card -> ProductCard
|
|
55
|
+
const fileName = filePath.split('/').pop() || '';
|
|
56
|
+
const componentName = fileName
|
|
57
|
+
.split('-')
|
|
58
|
+
.map(part => part.charAt(0).toUpperCase() + part.slice(1))
|
|
59
|
+
.join('');
|
|
60
|
+
if (componentName) {
|
|
61
|
+
componentNameMap[componentName] = {
|
|
62
|
+
scopes: data.scopes,
|
|
63
|
+
hooks: data.hooks,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return componentNameMap;
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Checks if a scope is required by any of the used hooks/components
|
|
76
|
+
*/
|
|
77
|
+
export function isScopeUsed(scope, usedItems, hookToScopes, componentToScopes) {
|
|
78
|
+
// Check if any used item (hook or component) requires this scope
|
|
79
|
+
for (const item of usedItems) {
|
|
80
|
+
// Check hooks
|
|
81
|
+
const hookScopes = hookToScopes[item];
|
|
82
|
+
if (hookScopes && hookScopes.includes(scope)) {
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
// Check components (now keyed by component name after loading)
|
|
86
|
+
const componentData = componentToScopes[item];
|
|
87
|
+
if (componentData &&
|
|
88
|
+
componentData.scopes &&
|
|
89
|
+
componentData.scopes.includes(scope)) {
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Validates that all scopes declared in the manifest are actually used.
|
|
97
|
+
* Returns a result indicating success/failure and any unused scopes.
|
|
98
|
+
*
|
|
99
|
+
* This function gracefully handles missing SDK installations by skipping
|
|
100
|
+
* validation and returning a successful result.
|
|
101
|
+
*
|
|
102
|
+
* @param miniPath - Path to the mini app directory
|
|
103
|
+
* @param manifest - Already-loaded manifest content (avoids double-loading)
|
|
104
|
+
*/
|
|
105
|
+
export function validateUnusedScopes(miniPath, manifest) {
|
|
106
|
+
// If no scopes declared, nothing to validate
|
|
107
|
+
const declaredScopes = manifest.scopes;
|
|
108
|
+
if (!declaredScopes || declaredScopes.length === 0) {
|
|
109
|
+
return {
|
|
110
|
+
success: true,
|
|
111
|
+
unusedScopes: [],
|
|
112
|
+
usedHooksAndComponents: [],
|
|
113
|
+
skipped: false,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
// Scopes must be an array
|
|
117
|
+
if (!Array.isArray(declaredScopes)) {
|
|
118
|
+
return {
|
|
119
|
+
success: false,
|
|
120
|
+
unusedScopes: [],
|
|
121
|
+
usedHooksAndComponents: [],
|
|
122
|
+
skipped: false,
|
|
123
|
+
errors: ['scopes must be an array'],
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
// Load scope maps from SDK
|
|
127
|
+
const hookToScopes = loadHookScopesMap(miniPath);
|
|
128
|
+
const componentToScopes = loadComponentScopesMap(miniPath);
|
|
129
|
+
// If SDK maps are not available, skip validation gracefully
|
|
130
|
+
if (!hookToScopes) {
|
|
131
|
+
return {
|
|
132
|
+
success: true,
|
|
133
|
+
unusedScopes: [],
|
|
134
|
+
usedHooksAndComponents: [],
|
|
135
|
+
skipped: true,
|
|
136
|
+
skipReason: 'SDK scope maps not found. Make sure @shopify/shop-minis-react is installed.',
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
// Use empty object if component scopes map doesn't exist (it's optional)
|
|
140
|
+
const componentScopes = componentToScopes || {};
|
|
141
|
+
// Scan mini source for SDK imports
|
|
142
|
+
const usedHooksAndComponents = getUniqueSdkImports(miniPath);
|
|
143
|
+
// Check each declared scope to see if it's actually used
|
|
144
|
+
const unusedScopes = [];
|
|
145
|
+
const errors = [];
|
|
146
|
+
for (const scope of declaredScopes) {
|
|
147
|
+
if (typeof scope !== 'string') {
|
|
148
|
+
errors.push(`scopes must contain only strings, found: ${typeof scope}`);
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
if (!isScopeUsed(scope, usedHooksAndComponents, hookToScopes, componentScopes)) {
|
|
152
|
+
unusedScopes.push(scope);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
success: unusedScopes.length === 0 && errors.length === 0,
|
|
157
|
+
unusedScopes,
|
|
158
|
+
usedHooksAndComponents: Array.from(usedHooksAndComponents),
|
|
159
|
+
skipped: false,
|
|
160
|
+
errors: errors.length > 0 ? errors : undefined,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=scopes-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scopes-validation.js","sourceRoot":"","sources":["../../src/utils/scopes-validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface ValidationResult {
|
|
2
|
+
file: string;
|
|
3
|
+
status: 'ok' | 'modified' | 'missing';
|
|
4
|
+
message: string;
|
|
5
|
+
canAutoFix: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface UnexpectedFileResult {
|
|
8
|
+
file: string;
|
|
9
|
+
message: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function getTemplatePath(): string;
|
|
12
|
+
export declare function compareWithTemplate(projectPath: string): Promise<ValidationResult[]>;
|
|
13
|
+
export declare function findUnexpectedRootFiles(projectPath: string): Promise<UnexpectedFileResult[]>;
|
|
14
|
+
export declare function resetToTemplate(projectPath: string, files?: string[]): Promise<void>;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { readFile, writeFile } from 'fs/promises';
|
|
2
|
+
import { existsSync } from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { fileURLToPath } from 'url';
|
|
5
|
+
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
|
6
|
+
// Files that should match the template exactly (no modifications allowed)
|
|
7
|
+
const PROTECTED_FILES = [
|
|
8
|
+
'eslint.config.js',
|
|
9
|
+
'tsconfig.json',
|
|
10
|
+
'stylelint.config.mjs',
|
|
11
|
+
'index.html',
|
|
12
|
+
];
|
|
13
|
+
// Files that are expected in the root directory
|
|
14
|
+
const EXPECTED_ROOT_FILES = [
|
|
15
|
+
'.gitignore',
|
|
16
|
+
'.shopminis',
|
|
17
|
+
'eslint.config.js',
|
|
18
|
+
'tsconfig.json',
|
|
19
|
+
'stylelint.config.mjs',
|
|
20
|
+
'index.html',
|
|
21
|
+
'types.d.ts',
|
|
22
|
+
'package.json',
|
|
23
|
+
'package-lock.json',
|
|
24
|
+
'node_modules',
|
|
25
|
+
'src',
|
|
26
|
+
'.git',
|
|
27
|
+
'.minis-cache',
|
|
28
|
+
'dist',
|
|
29
|
+
'build',
|
|
30
|
+
'README.md',
|
|
31
|
+
// Allow common IDE/editor files
|
|
32
|
+
'.vscode',
|
|
33
|
+
'.idea',
|
|
34
|
+
'.DS_Store',
|
|
35
|
+
// Allow common config files that developers might add
|
|
36
|
+
'.env',
|
|
37
|
+
'.env.local',
|
|
38
|
+
'.prettierrc',
|
|
39
|
+
'.prettierignore',
|
|
40
|
+
];
|
|
41
|
+
export function getTemplatePath() {
|
|
42
|
+
// When running from build: node_modules/@shopify/shop-minis-cli/build/
|
|
43
|
+
// Template files are at: build/commands/create/examples/default/
|
|
44
|
+
return path.resolve(__dirname, '../commands/create/examples/default');
|
|
45
|
+
}
|
|
46
|
+
export async function compareWithTemplate(projectPath) {
|
|
47
|
+
const templatePath = getTemplatePath();
|
|
48
|
+
const results = [];
|
|
49
|
+
for (const file of PROTECTED_FILES) {
|
|
50
|
+
const projectFile = path.join(projectPath, file);
|
|
51
|
+
const templateFile = path.join(templatePath, file);
|
|
52
|
+
if (!existsSync(projectFile)) {
|
|
53
|
+
results.push({
|
|
54
|
+
file,
|
|
55
|
+
status: 'missing',
|
|
56
|
+
message: 'Required file is missing',
|
|
57
|
+
canAutoFix: true,
|
|
58
|
+
});
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (!existsSync(templateFile)) {
|
|
62
|
+
// Template file doesn't exist - skip validation
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
const projectContent = await readFile(projectFile, 'utf-8');
|
|
66
|
+
const templateContent = await readFile(templateFile, 'utf-8');
|
|
67
|
+
if (projectContent === templateContent) {
|
|
68
|
+
results.push({
|
|
69
|
+
file,
|
|
70
|
+
status: 'ok',
|
|
71
|
+
message: 'File matches template',
|
|
72
|
+
canAutoFix: false,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
results.push({
|
|
77
|
+
file,
|
|
78
|
+
status: 'modified',
|
|
79
|
+
message: 'File has been modified from template',
|
|
80
|
+
canAutoFix: true,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return results;
|
|
85
|
+
}
|
|
86
|
+
export async function findUnexpectedRootFiles(projectPath) {
|
|
87
|
+
const { readdirSync } = await import('fs');
|
|
88
|
+
const files = readdirSync(projectPath);
|
|
89
|
+
const unexpected = [];
|
|
90
|
+
for (const file of files) {
|
|
91
|
+
if (!EXPECTED_ROOT_FILES.includes(file)) {
|
|
92
|
+
unexpected.push({
|
|
93
|
+
file,
|
|
94
|
+
message: 'Unexpected file in root directory. Shop Minis projects should keep custom files in the src/ directory.',
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return unexpected;
|
|
99
|
+
}
|
|
100
|
+
export async function resetToTemplate(projectPath, files) {
|
|
101
|
+
const templatePath = getTemplatePath();
|
|
102
|
+
const filesToReset = files || PROTECTED_FILES;
|
|
103
|
+
for (const file of filesToReset) {
|
|
104
|
+
const templateFile = path.join(templatePath, file);
|
|
105
|
+
const projectFile = path.join(projectPath, file);
|
|
106
|
+
if (existsSync(templateFile)) {
|
|
107
|
+
const content = await readFile(templateFile, 'utf-8');
|
|
108
|
+
await writeFile(projectFile, content, 'utf-8');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=template-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-sync.js","sourceRoot":"","sources":["../../src/utils/template-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -99,7 +99,7 @@ const restrictImportsPlugin = (additionalAllowedPaths = []) => {
|
|
|
99
99
|
allowedImportRoots = [
|
|
100
100
|
srcDir,
|
|
101
101
|
nodeModulesDir,
|
|
102
|
-
...additionalAllowedPaths.map(
|
|
102
|
+
...additionalAllowedPaths.map(pathname => normalizePath(path.resolve(pathname))),
|
|
103
103
|
];
|
|
104
104
|
},
|
|
105
105
|
generateBundle(_options, bundle) {
|
|
@@ -133,7 +133,11 @@ export const createViteConfig = ({ mode, allowedExternalPaths = [], }) => {
|
|
|
133
133
|
return {
|
|
134
134
|
root: process.cwd(),
|
|
135
135
|
publicDir: false,
|
|
136
|
-
plugins: [
|
|
136
|
+
plugins: [
|
|
137
|
+
restrictImportsPlugin(allowedExternalPaths),
|
|
138
|
+
react(),
|
|
139
|
+
tailwindcss(),
|
|
140
|
+
],
|
|
137
141
|
assetsInclude: ['**/*.glb', '**/*.gltf'],
|
|
138
142
|
optimizeDeps: {
|
|
139
143
|
include: ['@shopify/shop-minis-react'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite-config.js","sourceRoot":"","sources":["../../src/utils/vite-config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"vite-config.js","sourceRoot":"","sources":["../../src/utils/vite-config.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"access": "public",
|
|
5
5
|
"@shopify:registry": "https://registry.npmjs.org/"
|
|
6
6
|
},
|
|
7
|
-
"version": "0.
|
|
7
|
+
"version": "0.1.2",
|
|
8
8
|
"description": "Shop Minis CLI",
|
|
9
9
|
"main": "build/index.js",
|
|
10
10
|
"bin": {
|
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
"build:cli": "tsc -p tsconfig.build.json && chmod 755 build/index.js && cp src/commands/dev/utils/safari-inspector.applescript build/commands/dev/utils && cpx \"src/schemas/*.json\" build/schemas && pnpm build:cli:examples",
|
|
95
95
|
"build:cli:watch": "chokidar \"./src/**/*.ts\" -c \"pnpm run build:cli\" --silent --initial --ignore '(build|node_modules)'",
|
|
96
96
|
"build:cli:examples": "cpx \"src/commands/create/examples/**/{*,.*}\" build/commands/create/examples",
|
|
97
|
-
"build:cli:graphql": "node --import tsx scripts/graphql-codegen.ts",
|
|
97
|
+
"build:cli:graphql": "node --import tsx scripts/graphql-codegen.ts && pnpm lint:fix",
|
|
98
98
|
"type-check": "tsc --noEmit --incremental false",
|
|
99
99
|
"lint": "eslint . --ext .js,.mjs,.ts,.tsx --format codeframe --cache",
|
|
100
100
|
"lint:fix": "eslint . --ext .js,.mjs,.ts,.tsx --format codeframe --cache --fix",
|