@shopify/shop-minis-cli 0.0.226 → 0.1.3
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/codemod/releases/index.js +2 -0
- package/build/commands/codemod/releases/index.js.map +1 -1
- package/build/commands/codemod/releases/v0-1-3.d.ts +6 -0
- package/build/commands/codemod/releases/v0-1-3.js +30 -0
- package/build/commands/codemod/releases/v0-1-3.js.map +1 -0
- 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 +6 -1
- 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/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
|
@@ -5,12 +5,14 @@ import { upgrade as upgrade_0_0_195 } from './v0-0-195.js';
|
|
|
5
5
|
import { upgrade as upgrade_0_0_197 } from './v0-0-197.js';
|
|
6
6
|
import { upgrade as upgrade_0_0_214 } from './v0-0-214.js';
|
|
7
7
|
import { upgrade as upgrade_0_0_223 } from './v0-0-223.js';
|
|
8
|
+
import { upgrade as upgrade_0_1_3 } from './v0-1-3.js';
|
|
8
9
|
// It will never be possible to "upgrade" from a legacy/standalone mini to a web mini with codemods so this list has been reset
|
|
9
10
|
const upgrades = [
|
|
10
11
|
upgrade_0_0_195,
|
|
11
12
|
upgrade_0_0_197,
|
|
12
13
|
upgrade_0_0_214,
|
|
13
14
|
upgrade_0_0_223,
|
|
15
|
+
upgrade_0_1_3,
|
|
14
16
|
];
|
|
15
17
|
// the list of upgrades must be sorted by version. just making sure of it
|
|
16
18
|
upgrades.sort(({ version: upgradeVersion1 }, { version: upgradeVersion2 }) => semverGreaterThan(upgradeVersion1, upgradeVersion2) ? 1 : -1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/codemod/releases/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,8BAA8B,CAAA;AACxD,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAEL,EAAE,IAAI,iBAAiB,EACvB,GAAG,IAAI,kBAAkB,GAC1B,MAAM,QAAQ,CAAA;AAGf,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,MAAM,eAAe,CAAA;AACxD,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,MAAM,eAAe,CAAA;AACxD,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,MAAM,eAAe,CAAA;AACxD,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/codemod/releases/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,8BAA8B,CAAA;AACxD,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAEL,EAAE,IAAI,iBAAiB,EACvB,GAAG,IAAI,kBAAkB,GAC1B,MAAM,QAAQ,CAAA;AAGf,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,MAAM,eAAe,CAAA;AACxD,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,MAAM,eAAe,CAAA;AACxD,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,MAAM,eAAe,CAAA;AACxD,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,MAAM,eAAe,CAAA;AACxD,OAAO,EAAC,OAAO,IAAI,aAAa,EAAC,MAAM,aAAa,CAAA;AAEpD,+HAA+H;AAC/H,MAAM,QAAQ,GAAgC;IAC5C,eAAe;IACf,eAAe;IACf,eAAe;IACf,eAAe;IACf,aAAa;CACd,CAAA;AAED,yEAAyE;AACzE,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAC,OAAO,EAAE,eAAe,EAAC,EAAE,EAAC,OAAO,EAAE,eAAe,EAAC,EAAE,EAAE,CACvE,iBAAiB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC7D,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAClC,WAAW,EACX,SAAS,EACT,UAAU,EACV,OAAO,GAMR;IACC,WAAW,CACT,kCAAkC,WAAW,eAAe,SAAS,EAAE,CACxE,CAAA;IACD,KAAK,MAAM,EAAC,YAAY,EAAE,OAAO,EAAE,YAAY,EAAC,IAAI,QAAQ,EAAE;QAC5D,IACE,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC;YACvC,kBAAkB,CAAC,OAAO,EAAE,SAAS,CAAC,EACtC;YACA,WAAW,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAA;YACtD,MAAM,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;YACvC,wBAAwB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;SAChD;KACF;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA,CAAC,gDAAgD;AAClE,CAAC;AAED,SAAS,wBAAwB,CAAC,OAAe,EAAE,YAAsB;IACvE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;QACxB,OAAM;KACP;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,OAAO,iBAAiB,CAAC,CAAC,CAAA;IAC9E,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,gBAAgB,EAAE,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { SemVer } from 'semver';
|
|
2
|
+
import { ApplyReleaseUpgradeOptions, ReleaseUpgradeFileExports } from './types.js';
|
|
3
|
+
export declare const version: SemVer;
|
|
4
|
+
export declare const releaseNotes: string[];
|
|
5
|
+
export declare const applyUpgrade: (_miniHandle: string, _options: ApplyReleaseUpgradeOptions) => Promise<void>;
|
|
6
|
+
export declare const upgrade: ReleaseUpgradeFileExports;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { SemVer } from 'semver';
|
|
4
|
+
import { getMiniBasePath } from '../../../utils/path.js';
|
|
5
|
+
import { getTemplatePath } from '../../../utils/template-sync.js';
|
|
6
|
+
export const version = new SemVer('0.1.3');
|
|
7
|
+
export const releaseNotes = [
|
|
8
|
+
'Disabled allowJs in tsconfig.json - TypeScript files (.ts/.tsx) are now required',
|
|
9
|
+
];
|
|
10
|
+
export const applyUpgrade = async (_miniHandle, _options) => {
|
|
11
|
+
const basePath = getMiniBasePath();
|
|
12
|
+
const templatePath = getTemplatePath();
|
|
13
|
+
// Copy tsconfig.json from template to enforce TypeScript-only files
|
|
14
|
+
const templateTsconfigPath = path.join(templatePath, 'tsconfig.json');
|
|
15
|
+
const projectTsconfigPath = path.join(basePath, 'tsconfig.json');
|
|
16
|
+
if (fs.existsSync(templateTsconfigPath)) {
|
|
17
|
+
const templateContent = fs.readFileSync(templateTsconfigPath, {
|
|
18
|
+
encoding: 'utf8',
|
|
19
|
+
});
|
|
20
|
+
fs.writeFileSync(projectTsconfigPath, templateContent, {
|
|
21
|
+
encoding: 'utf8',
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
export const upgrade = {
|
|
26
|
+
version,
|
|
27
|
+
releaseNotes,
|
|
28
|
+
applyUpgrade,
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=v0-1-3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v0-1-3.js","sourceRoot":"","sources":["../../../../src/commands/codemod/releases/v0-1-3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAA;AAE7B,OAAO,EAAC,eAAe,EAAC,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAC,eAAe,EAAC,MAAM,iCAAiC,CAAA;AAI/D,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAA;AAE1C,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,kFAAkF;CACnF,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,WAAmB,EACnB,QAAoC,EACpC,EAAE;IACF,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAA;IAClC,MAAM,YAAY,GAAG,eAAe,EAAE,CAAA;IAEtC,oEAAoE;IACpE,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAAA;IACrE,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;IAEhE,IAAI,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE;QACvC,MAAM,eAAe,GAAG,EAAE,CAAC,YAAY,CAAC,oBAAoB,EAAE;YAC5D,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAA;QACF,EAAE,CAAC,aAAa,CAAC,mBAAmB,EAAE,eAAe,EAAE;YACrD,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAA;KACH;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,OAAO,GAA8B;IAChD,OAAO;IACP,YAAY;IACZ,YAAY;CACb,CAAA"}
|
|
@@ -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,6 +1,11 @@
|
|
|
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
|
-
"allowJs":
|
|
8
|
+
"allowJs": false,
|
|
4
9
|
"resolveJsonModule": true,
|
|
5
10
|
"allowSyntheticDefaultImports": true,
|
|
6
11
|
"esModuleInterop": 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":"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"}
|
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"}
|
|
@@ -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.3",
|
|
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",
|