Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. |
a25fc78 to
f1ff200
Compare
0fd3c26 to
141233b
Compare
f1ff200 to
31060ea
Compare
141233b to
06bccee
Compare
31060ea to
c22afce
Compare
d13b2b2 to
ef2ca4e
Compare
c22afce to
178b934
Compare
ef2ca4e to
9c06d65
Compare
178b934 to
010e9ae
Compare
9c06d65 to
854f0c7
Compare
010e9ae to
0de775d
Compare
854f0c7 to
f4baca8
Compare
0de775d to
0420085
Compare
Coverage report
Test suite run success4000 tests passing in 1531 suites. Report generated by 🧪jest coverage report action from 4acc557 |
0420085 to
9bb0683
Compare
c034d57 to
0c42a4b
Compare
c020200 to
6951bbf
Compare
98db2aa to
c211225
Compare
6951bbf to
206fa23
Compare
c211225 to
94743d0
Compare
206fa23 to
4f587b6
Compare
0d033d6 to
22bd069
Compare
db87cdd to
2a58e58
Compare
22bd069 to
521b27d
Compare
521b27d to
d52a5f6
Compare
Differences in type declarationsWe detected differences in the type declarations generated by Typescript for this branch compared to the baseline ('main' branch). Please, review them to ensure they are backward-compatible. Here are some important things to keep in mind:
New type declarationspackages/cli-kit/dist/public/node/custom-oclif-loader.d.tsimport { Command, Config } from '@oclif/core';
import { Options } from '@oclif/core/interfaces';
export declare class ShopifyConfig extends Config {
constructor(options: Options);
customPriority(commands: Command.Loadable[]): Command.Loadable | undefined;
}
Existing type declarationspackages/cli-kit/dist/public/node/cli-launcher.d.ts@@ -3,7 +3,7 @@ interface Options {
argv?: string[];
}
/**
- * Launches the CLI.
+ * Launches the CLI through our custom OCLIF loader.
*
* @param options - Options.
* @returns A promise that resolves when the CLI has been launched.
packages/cli-kit/dist/public/node/path.d.ts import type { URL } from 'url';
/**
* Joins a list of paths together.
*
* @param paths - Paths to join.
* @returns Joined path.
*/
export declare function joinPath(...paths: string[]): string;
/**
* Normalizes a path.
*
* @param path - Path to normalize.
* @returns Normalized path.
*/
export declare function normalizePath(path: string): string;
/**
* Resolves a list of paths together.
*
* @param paths - Paths to resolve.
* @returns Resolved path.
*/
export declare function resolvePath(...paths: string[]): string;
/**
* Returns the relative path from one path to another.
*
* @param from - Path to resolve from.
* @param to - Path to resolve to.
* @returns Relative path.
*/
export declare function relativePath(from: string, to: string): string;
/**
* Returns whether the path is absolute.
*
* @param path - Path to check.
* @returns Whether the path is absolute.
*/
export declare function isAbsolutePath(path: string): boolean;
/**
* Returns the directory name of a path.
*
* @param path - Path to get the directory name of.
* @returns Directory name.
*/
export declare function dirname(path: string): string;
/**
* Returns the base name of a path.
*
* @param path - Path to get the base name of.
* @param ext - Optional extension to remove from the result.
* @returns Base name.
*/
export declare function basename(path: string, ext?: string): string;
/**
* Returns the extension of the path.
*
* @param path - Path to get the extension of.
* @returns Extension.
*/
export declare function extname(path: string): string;
/**
* Parses a path into its components (root, dir, base, ext, name).
*
* @param path - Path to parse.
* @returns Parsed path object.
*/
export declare function parsePath(path: string): {
root: string;
dir: string;
base: string;
ext: string;
name: string;
};
/**
* Given an absolute filesystem path, it makes it relative to
* the current working directory. This is useful when logging paths
* to allow the users to click on the file and let the OS open it
* in the editor of choice.
*
* @param path - Path to relativize.
* @param dir - Current working directory.
* @returns Relativized path.
*/
export declare function relativizePath(path: string, dir?: string): string;
/**
* Given 2 paths, it returns whether the second path is a subpath of the first path.
*
* @param mainPath - The main path.
* @param subpath - The subpath.
* @returns Whether the subpath is a subpath of the main path.
*/
export declare function isSubpath(mainPath: string, subpath: string): boolean;
/**
* Given a module's import.meta.url it returns the directory containing the module.
*
* @param moduleURL - The value of import.meta.url in the context of the caller module.
* @returns The path to the directory containing the caller module.
*/
export declare function moduleDirectory(moduleURL: string | URL): string;
/**
* When running a script using `npm run`, something interesting happens. If the current
* folder does not have a `package.json` or a `node_modules` folder, npm will traverse
* the directory tree upwards until it finds one. Then it will run the script and set
* `process.cwd()` to that folder, while the actual path is stored in the INIT_CWD
* environment variable (see here: https://docs.npmjs.com/cli/v9/commands/npm-run-script#description).
*
* @returns The path to the current working directory.
*/
export declare function cwd(): string;
/**
* Tries to get the value of the `--path` argument, if provided.
*
* @param argv - The arguments to search for the `--path` argument.
* @returns The value of the `--path` argument, if provided.
*/
export declare function sniffForPath(argv?: string[]): string | undefined;
/**
* Returns whether the `--json` or `-j` flags are present in the arguments.
*
* @param argv - The arguments to search for the `--json` and `-j` flags.
* @returns Whether the `--json` or `-j` flag is present in the arguments.
*/
export declare function sniffForJson(argv?: string[]): boolean;
+/**
+ * Removes any `..` traversal segments from a relative path and calls `warn`
+ * if any were stripped. Normal `..` that cancel out within the path (e.g.
+ * `foo/../bar` → `bar`) are collapsed but never allowed to escape the root.
+ * Both `/` and `\` are treated as separators for cross-platform safety.
+ *
+ * @param input - The relative path to sanitize.
+ * @param warn - Called with a human-readable warning when traversal segments are removed.
+ * @returns The sanitized path (may be an empty string if all segments were traversal).
+ */
+export declare function sanitizeRelativePath(input: string, warn: (msg: string) => void): string;
|
d52a5f6 to
c5a0afc
Compare
2a58e58 to
cd40db3
Compare
elanalynn
left a comment
There was a problem hiding this comment.
🎩 'd. Everything works. Deploy is successful and the assets are uploaded to the dev bucket.
|
/snapit |
|
🫰✨ Thanks @alfonso-noriega! Your snapshot has been published to npm. Test the snapshot by installing your package globally: npm i -g --@shopify:registry=https://registry.npmjs.org @shopify/cli@0.0.0-snapshot-20260327142115Caution After installing, validate the version by running |
…hema and config keys
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
cd40db3 to
9c5a652
Compare
|
/snapit |
|
🫰✨ Thanks @alfonso-noriega! Your snapshot has been published to npm. Test the snapshot by installing your package globally: npm i -g --@shopify:registry=https://registry.npmjs.org @shopify/cli@0.0.0-snapshot-20260327144705Caution After installing, validate the version by running |
| return { | ||
| admin: { | ||
| // eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
| static_root: (remoteContent as any).admin.static_root, |
There was a problem hiding this comment.
you should probably validate here that admin is not null, otherwise it could crash
|
/snapit |
|
🫰✨ Thanks @alfonso-noriega! Your snapshot has been published to npm. Test the snapshot by installing your package globally: npm i -g --@shopify:registry=https://registry.npmjs.org @shopify/cli@0.0.0-snapshot-20260330090510Caution After installing, validate the version by running |

WHY are these changes introduced?
The admin extension type was previously hardcoded as a string literal, which prevented proper specification handling and caused inconsistencies in the extension system.
WHAT is this pull request doing?
AdminSpecIdentifierconstant and corresponding specification file for admin extensionsAdminSpecIdentifierin the configuration extension IDs arrayuidStrategyparameter support to contract-based module specificationsHow to test your changes?
Measuring impact
How do we know this change was effective? Please choose one:
Checklist