@shop-on/create-theme 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shop-on/create-theme",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Scaffolds a Shop-On storefront theme: `npm create @shop-on/theme <dir>`.",
5
5
  "license": "SEE LICENSE IN dist/LICENSE.md",
6
6
  "bin": {
@@ -16,9 +16,9 @@
16
16
  "./package.json": "./package.json"
17
17
  },
18
18
  "devDependencies": {
19
- "@types/node": "26.6.3",
19
+ "@types/node": "26.6.5",
20
20
  "typescript": "7.0.2",
21
- "vitest": "5.0.3"
21
+ "vitest": "5.0.5"
22
22
  },
23
23
  "engines": {
24
24
  "node": "^20.19.0 || >=22.12.0"
@@ -26,6 +26,6 @@
26
26
  "scripts": {
27
27
  "template": "node scripts/template.mts",
28
28
  "check-types": "tsc --noEmit",
29
- "test": "vitest run"
29
+ "test": "vitest run --maxWorkers=2"
30
30
  }
31
31
  }
@@ -260,7 +260,7 @@ A theme change is not finished when it type-checks — the artifact carries a ve
260
260
  1. Bump `package.json#version` (semver). Fix → patch; new section, block or setting → minor.
261
261
  2. Prepend a `## X.Y.Z` section to `release-notes.md`. The platform stores only the section matching the uploaded version, so each one carries its own notes.
262
262
  3. `pnpm build` — postbuild emits `.output/theme.json` at the new version, and fails fast if `theme.config.json#locales` omits `"en"`. Check `theme.config.json#locales` matches the catalogs you ship first: a declared locale with no catalog renders default-language copy.
263
- 4. Package. **Don't improvise the tarball.** Two things a hand-rolled `tar` gets wrong: entries must sit **flat at the tarball root** (`-C .output`, pack `.`), and macOS needs `COPYFILE_DISABLE=1` + `--no-mac-metadata` to keep AppleDouble `._*` entries out (drop `--no-mac-metadata` on GNU tar): `COPYFILE_DISABLE=1 tar -czf ../<name>-X.Y.Z.tar.gz -C .output --exclude='.DS_Store' --no-mac-metadata .`. Uploading a version to the theme store isn't open to third-party developers yet; the tarball is as far as this goes for now.
263
+ 4. Package. **Don't hand-roll the tarball**: `npx @shop-on/theme-cli theme pack` writes `<name>-X.Y.Z.tar.gz` in the theme directory (`--out <path>` to put it elsewhere, `--build` to build first). Entries sit flat at the root with no macOS metadata, the same on every OS, and it refuses a build missing a file the theme store requires or older than `package.json`. Uploading a version to the theme store isn't open to third-party developers yet; the tarball is as far as this goes for now.
264
264
 
265
265
  Write the notes **for the merchant, not the diff**: what changes in their store, in their words. Match the file — plain bullets under the heading, no `### Fixed` subsections, no file names, no component names. "Prices now say when tax is included", not "added `taxIncludedCaption` to the price block".
266
266
 
@@ -173,7 +173,7 @@ GID is in place before its `${id}Data` resolver runs:
173
173
  1. **Fetch metaobject entries** — `loadMetaobjectFieldSources(template, product)`
174
174
  collects the union of pinned entry ids (`collectMetaobjectEntryIds`, binding +
175
175
  inline forms) and traversed entry ids (`collectTraversedEntryIds(template,
176
- product.metafields)` — field-bearing `product_metafield` refs), early-returns
176
+ product.metafields)` — field-bearing `product_metafield` refs), early-returns
177
177
  `{}` when none, else batch-fetches (`fetchMetaobject`, deduped + `memoTTL`-
178
178
  cached, capped at 50 with a warning) and builds `{ entry: { key: { type, value } } }`.
179
179
  2. **Whole-value pass — BEFORE the picker-data resolvers.**
@@ -25,7 +25,7 @@ pnpm build # postbuild enforces the build lines
25
25
  The output is one line per finding, `file:line rule message`, followed by the
26
26
  recipe for each rule that fired.
27
27
 
28
- The **audit** lines come from `shop-on theme audit`, in the `@shop-on/cli`
28
+ The **audit** lines come from `shop-on theme audit`, in the `@shop-on/theme-cli`
29
29
  package:
30
30
 
31
31
  ```bash
@@ -41,7 +41,7 @@ missing instead of measuring an empty page. The password template is left
41
41
  out, since it only renders while protection is on, and the audit refuses a
42
42
  protected store.
43
43
 
44
- `@shop-on/cli` isn't published yet. Until it is, measure the **audit** lines
44
+ `@shop-on/theme-cli` isn't published yet. Until it is, measure the **audit** lines
45
45
  by hand, as each one says.
46
46
 
47
47
  ## Performance
@@ -8,16 +8,16 @@ published `@shop-on/theme-*` packages.
8
8
  ## Quick start
9
9
 
10
10
  ```sh
11
- npx @shop-on/cli theme init my-theme # scaffold, log in if needed, write .env, install
11
+ npx @shop-on/theme-cli theme init my-theme # scaffold, log in if needed, write .env, install
12
12
  cd my-theme
13
- npx @shop-on/cli theme dev # open this theme in your store's theme editor
13
+ npx @shop-on/theme-cli theme dev # open this theme in your store's theme editor
14
14
  ```
15
15
 
16
16
  The first time, `theme init` opens your browser on your store's admin:
17
17
  approve the CLI and pick the store. Your staff role needs **Manage online store**. It then writes
18
18
  `.env` with a storefront credential for that store. `.env` holds secrets:
19
19
  never commit it. A store holds at most 5 of these credentials;
20
- `npx @shop-on/cli theme credentials revoke <client-id>` frees one.
20
+ `npx @shop-on/theme-cli theme credentials revoke <client-id>` frees one.
21
21
 
22
22
  `theme dev` runs the theme behind a `cloudflared` tunnel (install it first)
23
23
  and opens the hosted theme editor on a developer preview of it. Confirm the
@@ -17,36 +17,36 @@
17
17
  },
18
18
  "dependencies": {
19
19
  "@bprogress/core": "1.3.4",
20
- "@shop-on/i18n": "^0.1.0",
21
- "@shop-on/theme-contract": "^0.1.0",
22
- "@shop-on/theme-loader": "^0.1.0",
23
- "@shop-on/theme-react": "^0.1.0",
24
- "@shop-on/theme-routes": "^0.1.0",
25
- "@shop-on/theme-runtime": "^0.1.0",
26
- "@shop-on/theme-server": "^0.1.0",
27
- "@shop-on/theme-system": "^0.1.0",
20
+ "@shop-on/i18n": "^0.2.0",
21
+ "@shop-on/theme-contract": "^0.2.0",
22
+ "@shop-on/theme-loader": "^0.2.0",
23
+ "@shop-on/theme-react": "^0.2.0",
24
+ "@shop-on/theme-routes": "^0.2.0",
25
+ "@shop-on/theme-runtime": "^0.2.0",
26
+ "@shop-on/theme-server": "^0.2.0",
27
+ "@shop-on/theme-system": "^0.2.0",
28
28
  "@tailwindcss/vite": "4.3.3",
29
- "@tanstack/react-router": "1.170.41",
30
- "@tanstack/react-start": "1.168.60",
31
- "dotenv": "18.0.5",
29
+ "@tanstack/react-router": "1.170.45",
30
+ "@tanstack/react-start": "1.169.3",
31
+ "dotenv": "18.0.8",
32
32
  "nitro": "3.0.260903-beta",
33
- "react": "19.3.0",
34
- "react-dom": "19.3.0",
33
+ "react": "19.3.1",
34
+ "react-dom": "19.3.1",
35
35
  "tailwindcss": "4.3.3"
36
36
  },
37
37
  "devDependencies": {
38
- "@shop-on/theme-config": "^0.1.0",
39
- "@shop-on/theme-dev-host": "^0.1.0",
38
+ "@shop-on/theme-config": "^0.2.0",
39
+ "@shop-on/theme-dev-host": "^0.2.0",
40
40
  "@spiriit/vite-plugin-svg-spritemap": "7.2.0",
41
- "@types/node": "26.6.3",
41
+ "@types/node": "26.6.5",
42
42
  "@types/react": "19.3.0",
43
43
  "@types/react-dom": "19.3.0",
44
- "@vitejs/plugin-react": "6.1.1",
45
- "gql.tada": "1.11.3",
46
- "happy-dom": "20.10.6",
47
- "oxfmt": "^0.71.0",
44
+ "@vitejs/plugin-react": "6.1.2",
45
+ "gql.tada": "1.11.4",
46
+ "happy-dom": "21.0.4",
47
+ "oxfmt": "^0.74.0",
48
48
  "typescript": "7.0.2",
49
- "vite": "8.3.1",
50
- "vitest": "5.0.3"
49
+ "vite": "8.3.5",
50
+ "vitest": "5.0.5"
51
51
  }
52
52
  }