@shopify/cli-hydrogen 3.11.0 → 3.13.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/CHANGELOG.md +29 -0
- package/README.md +1 -1
- package/dist/cli/commands/hydrogen/build.js +2 -2
- package/dist/cli/commands/hydrogen/build.js.map +1 -1
- package/dist/cli/commands/hydrogen/deploy.d.ts +17 -0
- package/dist/cli/commands/hydrogen/deploy.js +53 -0
- package/dist/cli/commands/hydrogen/deploy.js.map +1 -0
- package/dist/cli/commands/hydrogen/preview.d.ts +1 -0
- package/dist/cli/commands/hydrogen/preview.js +9 -1
- package/dist/cli/commands/hydrogen/preview.js.map +1 -1
- package/dist/cli/prompts/git-init.d.ts +1 -0
- package/dist/cli/prompts/git-init.js +16 -0
- package/dist/cli/prompts/git-init.js.map +1 -0
- package/dist/cli/services/build.d.ts +6 -3
- package/dist/cli/services/build.js +34 -31
- package/dist/cli/services/build.js.map +1 -1
- package/dist/cli/services/deploy/config.d.ts +4 -0
- package/dist/cli/services/deploy/config.js +48 -0
- package/dist/cli/services/deploy/config.js.map +1 -0
- package/dist/cli/services/deploy/error.d.ts +2 -0
- package/dist/cli/services/deploy/error.js +5 -0
- package/dist/cli/services/deploy/error.js.map +1 -0
- package/dist/cli/services/deploy/graphql/create_deployment.d.ts +10 -0
- package/dist/cli/services/deploy/graphql/create_deployment.js +15 -0
- package/dist/cli/services/deploy/graphql/create_deployment.js.map +1 -0
- package/dist/cli/services/deploy/graphql/upload_deployment.d.ts +1 -0
- package/dist/cli/services/deploy/graphql/upload_deployment.js +11 -0
- package/dist/cli/services/deploy/graphql/upload_deployment.js.map +1 -0
- package/dist/cli/services/deploy/types.d.ts +27 -0
- package/dist/cli/services/deploy/types.js +2 -0
- package/dist/cli/services/deploy/types.js.map +1 -0
- package/dist/cli/services/deploy/upload.d.ts +5 -0
- package/dist/cli/services/deploy/upload.js +61 -0
- package/dist/cli/services/deploy/upload.js.map +1 -0
- package/dist/cli/services/deploy.d.ts +2 -0
- package/dist/cli/services/deploy.js +82 -0
- package/dist/cli/services/deploy.js.map +1 -0
- package/dist/cli/services/preview.d.ts +4 -1
- package/dist/cli/services/preview.js +9 -1
- package/dist/cli/services/preview.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,34 @@
|
|
|
1
1
|
# @shopify/cli-hydrogen
|
|
2
2
|
|
|
3
|
+
## 3.13.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- e2714449: Addition of --env flag to cli-hydrogen package
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- a225e415: - cli-kit:
|
|
12
|
+
- Added additional Git functionality for commits, generating .gitignore templates, and ensuring commands are run in a Git project.
|
|
13
|
+
- Added new Oxygen service type for interacting with the Oyxgen service
|
|
14
|
+
- New method for creating readable file streams
|
|
15
|
+
- create-hydrogen
|
|
16
|
+
- Added support for initializing a local Git repository when you create a new Hydrogen project
|
|
17
|
+
- Updated dependencies [a979c0de]
|
|
18
|
+
- Updated dependencies [afa808cb]
|
|
19
|
+
- Updated dependencies [a225e415]
|
|
20
|
+
- Updated dependencies [5336b01f]
|
|
21
|
+
- Updated dependencies [2239cad9]
|
|
22
|
+
- @shopify/cli-kit@3.13.0
|
|
23
|
+
|
|
24
|
+
## 3.12.0
|
|
25
|
+
|
|
26
|
+
### Patch Changes
|
|
27
|
+
|
|
28
|
+
- 5aaa340d: Fixes errors running `shopify hydrogen preview` due to missing stream support.
|
|
29
|
+
- Updated dependencies [454641be]
|
|
30
|
+
- @shopify/cli-kit@3.12.0
|
|
31
|
+
|
|
3
32
|
## 3.11.0
|
|
4
33
|
|
|
5
34
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
With the Shopify command line interface (Shopify CLI 3.0), you can:
|
|
9
9
|
- build custom storefronts and manage their hosting
|
|
10
|
-
- initialize, build, dev, and deploy Shopify apps — and
|
|
10
|
+
- initialize, build, dev, and deploy Shopify apps — and generate app extensions
|
|
11
11
|
|
|
12
12
|
<p> </p>
|
|
13
13
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { build } from '../../services/build.js';
|
|
2
2
|
import { hydrogenFlags } from '../../flags.js';
|
|
3
3
|
import { Flags } from '@oclif/core';
|
|
4
4
|
import { path, cli } from '@shopify/cli-kit';
|
|
@@ -17,7 +17,7 @@ export default class Build extends Command {
|
|
|
17
17
|
worker: flags.target === 'worker' ? entry : false,
|
|
18
18
|
node: flags.target === 'node' ? entry : false,
|
|
19
19
|
};
|
|
20
|
-
await
|
|
20
|
+
await build({ ...flags, directory, targets });
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
Build.description = 'Builds a Hydrogen storefront for production';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../../src/cli/commands/hydrogen/build.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../../src/cli/commands/hydrogen/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,yBAAyB,CAAA;AAC7C,OAAO,EAAC,aAAa,EAAC,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAA;AACjC,OAAO,EAAC,IAAI,EAAE,GAAG,EAAC,MAAM,kBAAkB,CAAA;AAC1C,OAAO,OAAO,MAAM,oCAAoC,CAAA;AAExD,MAAM,gBAAgB,GAAG;IACvB,IAAI,EAAE,kCAAkC;IACxC,MAAM,EAAE,oCAAoC;CAC7C,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IA4BxC,KAAK,CAAC,GAAG;QACP,MAAM,EAAC,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACvC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAA;QAEvE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,gBAAgB,CAAC,KAAK,CAAC,MAA2B,CAAC,CAAA;QAEhF,MAAM,OAAO,GAAG;YACd,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;YACjD,IAAI,EAAE,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;SAC9C,CAAA;QAED,MAAM,KAAK,CAAC,EAAC,GAAG,KAAK,EAAE,SAAS,EAAE,OAAO,EAAC,CAAC,CAAA;IAC7C,CAAC;;AAxCM,iBAAW,GAAG,6CAA6C,CAAA;AAC3D,WAAK,GAAG;IACb,GAAG,GAAG,CAAC,WAAW;IAClB,IAAI,EAAE,aAAa,CAAC,IAAI;IACxB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;QACjB,WAAW,EAAE,4CAA4C;QACzD,GAAG,EAAE,yBAAyB;KAC/B,CAAC;IACF,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;QACpB,WAAW,EAAE,uBAAuB;QACpC,GAAG,EAAE,2BAA2B;QAChC,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,IAAI;KACd,CAAC;IACF,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,mDAAmD;QAChE,OAAO,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC3B,OAAO,EAAE,QAAQ;QACjB,GAAG,EAAE,2BAA2B;KACjC,CAAC;IACF,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;QAClB,WAAW,EAAE,iEAAiE;QAC9E,GAAG,EAAE,8BAA8B;KACpC,CAAC;CACH,CAAA","sourcesContent":["import {build} from '../../services/build.js'\nimport {hydrogenFlags} from '../../flags.js'\nimport {Flags} from '@oclif/core'\nimport {path, cli} from '@shopify/cli-kit'\nimport Command from '@shopify/cli-kit/node/base-command'\n\nconst PLATFORM_ENTRIES = {\n node: `@shopify/hydrogen/platforms/node`,\n worker: `@shopify/hydrogen/platforms/worker`,\n}\n\nexport default class Build extends Command {\n static description = 'Builds a Hydrogen storefront for production'\n static flags = {\n ...cli.globalFlags,\n path: hydrogenFlags.path,\n base: Flags.string({\n description: ' the public path when served in production',\n env: 'SHOPIFY_FLAG_BUILD_BASE',\n }),\n client: Flags.boolean({\n description: 'build the client code',\n env: 'SHOPIFY_FLAG_BUILD_CLIENT',\n allowNo: true,\n default: true,\n }),\n target: Flags.string({\n char: 't',\n description: 'the target platform to build for (worker or node)',\n options: ['node', 'worker'],\n default: 'worker',\n env: 'SHOPIFY_FLAG_BUILD_TARGET',\n }),\n entry: Flags.string({\n description: 'produce Server Side Rendering (SSR) build for node environments',\n env: 'SHOPIFY_FLAG_BUILD_SSR_ENTRY',\n }),\n }\n\n async run(): Promise<void> {\n const {flags} = await this.parse(Build)\n const directory = flags.path ? path.resolve(flags.path) : process.cwd()\n\n const entry = flags.entry || PLATFORM_ENTRIES[flags.target as 'node' | 'worker']\n\n const targets = {\n client: flags.client,\n worker: flags.target === 'worker' ? entry : false,\n node: flags.target === 'node' ? entry : false,\n }\n\n await build({...flags, directory, targets})\n }\n}\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import Command from '@shopify/cli-kit/node/base-command';
|
|
2
|
+
export default class Deploy extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static hidden: boolean;
|
|
5
|
+
static flags: {
|
|
6
|
+
deploymentToken: import("@oclif/core/lib/interfaces").OptionFlag<string>;
|
|
7
|
+
commitMessage: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
8
|
+
commitAuthor: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
9
|
+
healthCheck: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
assumeYes: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
11
|
+
oxygenAddress: import("@oclif/core/lib/interfaces").OptionFlag<string>;
|
|
12
|
+
path: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
13
|
+
install: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
14
|
+
verbose: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
15
|
+
};
|
|
16
|
+
run(): Promise<void>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { hydrogenFlags } from '../../flags.js';
|
|
2
|
+
import { deployToOxygen } from '../../services/deploy.js';
|
|
3
|
+
import { output, cli, environment, path } from '@shopify/cli-kit';
|
|
4
|
+
import Command from '@shopify/cli-kit/node/base-command';
|
|
5
|
+
import { Flags } from '@oclif/core';
|
|
6
|
+
export default class Deploy extends Command {
|
|
7
|
+
async run() {
|
|
8
|
+
const isShopify = await environment.local.isShopify();
|
|
9
|
+
if (!isShopify) {
|
|
10
|
+
output.warn('Command coming soon...');
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const { flags } = await this.parse(Deploy);
|
|
14
|
+
const dir = flags.path ? path.resolve(flags.path) : process.cwd();
|
|
15
|
+
await deployToOxygen({ ...flags, path: dir });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
Deploy.description = 'Deploy your Hydrogen app to Oxygen hosting';
|
|
19
|
+
Deploy.hidden = true;
|
|
20
|
+
Deploy.flags = {
|
|
21
|
+
...cli.globalFlags,
|
|
22
|
+
...hydrogenFlags,
|
|
23
|
+
deploymentToken: Flags.string({
|
|
24
|
+
required: true,
|
|
25
|
+
env: 'SHOPIFY_HYDROGEN_FLAG_DEPLOYMENT_TOKEN',
|
|
26
|
+
description: 'Specify your Oxygen deployment token.',
|
|
27
|
+
}),
|
|
28
|
+
commitMessage: Flags.string({
|
|
29
|
+
env: 'SHOPIFY_HYDROGEN_FLAG_COMMIT_MESSAGE',
|
|
30
|
+
description: 'Override the default Git commit message.',
|
|
31
|
+
}),
|
|
32
|
+
commitAuthor: Flags.string({
|
|
33
|
+
env: 'SHOPIFY_HYDROGEN_FLAG_COMMIT_AUTHOR',
|
|
34
|
+
description: 'Override the default Git commit author.',
|
|
35
|
+
}),
|
|
36
|
+
healthCheck: Flags.boolean({
|
|
37
|
+
env: 'SHOPIFY_HYDROGEN_FLAG_HEALTH_CHECK',
|
|
38
|
+
default: true,
|
|
39
|
+
description: 'Require a health check before the deployment succeeds.',
|
|
40
|
+
}),
|
|
41
|
+
assumeYes: Flags.boolean({
|
|
42
|
+
char: 'y',
|
|
43
|
+
env: 'SHOPIFY_HYDROGEN_FLAG_ASSUME_YES',
|
|
44
|
+
default: false,
|
|
45
|
+
description: 'Automatic yes to prompts. Assume "yes" as answer to all prompts and run non-interactively.',
|
|
46
|
+
}),
|
|
47
|
+
oxygenAddress: Flags.string({
|
|
48
|
+
hidden: true,
|
|
49
|
+
env: 'SHOPIFY_HYDROGEN_FLAG_OXYGEN_ADDRESS',
|
|
50
|
+
default: 'oxygen-dms.shopifycloud.com',
|
|
51
|
+
}),
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=deploy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../../src/cli/commands/hydrogen/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAC,cAAc,EAAC,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAC,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC/D,OAAO,OAAO,MAAM,oCAAoC,CAAA;AACxD,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAA;AAEjC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IAsClC,KAAK,CAAC,GAAG;QACd,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,CAAA;QACrD,IAAI,CAAC,SAAS,EAAE;YACd,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;YACrC,OAAM;SACP;QAED,MAAM,EAAC,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACxC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAA;QAEjE,MAAM,cAAc,CAAC,EAAC,GAAG,KAAK,EAAE,IAAI,EAAE,GAAG,EAAC,CAAC,CAAA;IAC7C,CAAC;;AAhDM,kBAAW,GAAG,4CAA4C,CAAA;AAC1D,aAAM,GAAG,IAAI,CAAA;AAEb,YAAK,GAAG;IACb,GAAG,GAAG,CAAC,WAAW;IAClB,GAAG,aAAa;IAChB,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC;QAC5B,QAAQ,EAAE,IAAI;QACd,GAAG,EAAE,wCAAwC;QAC7C,WAAW,EAAE,uCAAuC;KACrD,CAAC;IACF,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC;QAC1B,GAAG,EAAE,sCAAsC;QAC3C,WAAW,EAAE,0CAA0C;KACxD,CAAC;IACF,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC;QACzB,GAAG,EAAE,qCAAqC;QAC1C,WAAW,EAAE,yCAAyC;KACvD,CAAC;IACF,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC;QACzB,GAAG,EAAE,oCAAoC;QACzC,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,wDAAwD;KACtE,CAAC;IACF,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;QACvB,IAAI,EAAE,GAAG;QACT,GAAG,EAAE,kCAAkC;QACvC,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,4FAA4F;KAC1G,CAAC;IACF,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC;QAC1B,MAAM,EAAE,IAAI;QACZ,GAAG,EAAE,sCAAsC;QAC3C,OAAO,EAAE,6BAA6B;KACvC,CAAC;CACH,CAAA","sourcesContent":["import {hydrogenFlags} from '../../flags.js'\nimport {deployToOxygen} from '../../services/deploy.js'\nimport {output, cli, environment, path} from '@shopify/cli-kit'\nimport Command from '@shopify/cli-kit/node/base-command'\nimport {Flags} from '@oclif/core'\n\nexport default class Deploy extends Command {\n static description = 'Deploy your Hydrogen app to Oxygen hosting'\n static hidden = true\n\n static flags = {\n ...cli.globalFlags,\n ...hydrogenFlags,\n deploymentToken: Flags.string({\n required: true,\n env: 'SHOPIFY_HYDROGEN_FLAG_DEPLOYMENT_TOKEN',\n description: 'Specify your Oxygen deployment token.',\n }),\n commitMessage: Flags.string({\n env: 'SHOPIFY_HYDROGEN_FLAG_COMMIT_MESSAGE',\n description: 'Override the default Git commit message.',\n }),\n commitAuthor: Flags.string({\n env: 'SHOPIFY_HYDROGEN_FLAG_COMMIT_AUTHOR',\n description: 'Override the default Git commit author.',\n }),\n healthCheck: Flags.boolean({\n env: 'SHOPIFY_HYDROGEN_FLAG_HEALTH_CHECK',\n default: true,\n description: 'Require a health check before the deployment succeeds.',\n }),\n assumeYes: Flags.boolean({\n char: 'y',\n env: 'SHOPIFY_HYDROGEN_FLAG_ASSUME_YES',\n default: false,\n description: 'Automatic yes to prompts. Assume \"yes\" as answer to all prompts and run non-interactively.',\n }),\n oxygenAddress: Flags.string({\n hidden: true,\n env: 'SHOPIFY_HYDROGEN_FLAG_OXYGEN_ADDRESS',\n default: 'oxygen-dms.shopifycloud.com',\n }),\n }\n\n public async run(): Promise<void> {\n const isShopify = await environment.local.isShopify()\n if (!isShopify) {\n output.warn('Command coming soon...')\n return\n }\n\n const {flags} = await this.parse(Deploy)\n const dir = flags.path ? path.resolve(flags.path) : process.cwd()\n\n await deployToOxygen({...flags, path: dir})\n }\n}\n"]}
|
|
@@ -4,6 +4,7 @@ export default class Preview extends Command {
|
|
|
4
4
|
static flags: {
|
|
5
5
|
path: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
6
6
|
port: import("@oclif/core/lib/interfaces").OptionFlag<string>;
|
|
7
|
+
env: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
7
8
|
target: import("@oclif/core/lib/interfaces").OptionFlag<string>;
|
|
8
9
|
verbose: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
9
10
|
};
|
|
@@ -8,8 +8,9 @@ export default class Preview extends Command {
|
|
|
8
8
|
const { flags } = await this.parse(Preview);
|
|
9
9
|
const directory = flags.path ? path.resolve(flags.path) : process.cwd();
|
|
10
10
|
const port = parseInt(flags.port, 10);
|
|
11
|
+
const envPath = flags.env;
|
|
11
12
|
if (flags.target === 'worker') {
|
|
12
|
-
await previewInWorker({ directory, port });
|
|
13
|
+
await previewInWorker({ directory, port, envPath });
|
|
13
14
|
}
|
|
14
15
|
else if (flags.target === 'node') {
|
|
15
16
|
await previewInNode({ directory, port });
|
|
@@ -27,6 +28,13 @@ Preview.flags = {
|
|
|
27
28
|
default: '3000',
|
|
28
29
|
env: 'SHOPIFY_FLAG_PORT',
|
|
29
30
|
}),
|
|
31
|
+
env: Flags.string({
|
|
32
|
+
char: 'e',
|
|
33
|
+
description: 'the file path to your .env',
|
|
34
|
+
default: undefined,
|
|
35
|
+
parse: (input, _) => Promise.resolve(path.resolve(input)),
|
|
36
|
+
env: 'SHOPIFY_FLAG_ENV_PATH',
|
|
37
|
+
}),
|
|
30
38
|
target: Flags.string({
|
|
31
39
|
char: 't',
|
|
32
40
|
description: 'the target environment (worker or node)',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview.js","sourceRoot":"","sources":["../../../../src/cli/commands/hydrogen/preview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAE,aAAa,EAAC,MAAM,2BAA2B,CAAA;AACxE,OAAO,EAAC,aAAa,EAAC,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAC,IAAI,EAAE,GAAG,EAAC,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAA;AACjC,OAAO,OAAO,MAAM,oCAAoC,CAAA;AAExD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;
|
|
1
|
+
{"version":3,"file":"preview.js","sourceRoot":"","sources":["../../../../src/cli/commands/hydrogen/preview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAE,aAAa,EAAC,MAAM,2BAA2B,CAAA;AACxE,OAAO,EAAC,aAAa,EAAC,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAC,IAAI,EAAE,GAAG,EAAC,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAA;AACjC,OAAO,OAAO,MAAM,oCAAoC,CAAA;AAExD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IA4B1C,KAAK,CAAC,GAAG;QACP,MAAM,EAAC,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACzC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAA;QACvE,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QACrC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAA;QAEzB,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE;YAC7B,MAAM,eAAe,CAAC,EAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAC,CAAC,CAAA;SAClD;aAAM,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;YAClC,MAAM,aAAa,CAAC,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAA;SACvC;IACH,CAAC;;AAtCM,mBAAW,GAAG,2DAA2D,CAAA;AACzE,aAAK,GAAG;IACb,GAAG,GAAG,CAAC,WAAW;IAClB,IAAI,EAAE,aAAa,CAAC,IAAI;IACxB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;QACjB,IAAI,EAAE,GAAG;QACT,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,uCAAuC;QACpD,OAAO,EAAE,MAAM;QACf,GAAG,EAAE,mBAAmB;KACzB,CAAC;IACF,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC;QAChB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,4BAA4B;QACzC,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzD,GAAG,EAAE,uBAAuB;KAC7B,CAAC;IACF,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,yCAAyC;QACtD,OAAO,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC3B,OAAO,EAAE,QAAQ;QACjB,GAAG,EAAE,6BAA6B;KACnC,CAAC;CACH,CAAA","sourcesContent":["import {previewInWorker, previewInNode} from '../../services/preview.js'\nimport {hydrogenFlags} from '../../flags.js'\nimport {path, cli} from '@shopify/cli-kit'\nimport {Flags} from '@oclif/core'\nimport Command from '@shopify/cli-kit/node/base-command'\n\nexport default class Preview extends Command {\n static description = 'Run a Hydrogen storefront locally in a worker environment'\n static flags = {\n ...cli.globalFlags,\n path: hydrogenFlags.path,\n port: Flags.string({\n char: 'p',\n hidden: true,\n description: 'the port to run the preview server on',\n default: '3000',\n env: 'SHOPIFY_FLAG_PORT',\n }),\n env: Flags.string({\n char: 'e',\n description: 'the file path to your .env',\n default: undefined,\n parse: (input, _) => Promise.resolve(path.resolve(input)),\n env: 'SHOPIFY_FLAG_ENV_PATH',\n }),\n target: Flags.string({\n char: 't',\n description: 'the target environment (worker or node)',\n options: ['node', 'worker'],\n default: 'worker',\n env: 'SHOPIFY_FLAG_PREVIEW_TARGET',\n }),\n }\n\n async run(): Promise<void> {\n const {flags} = await this.parse(Preview)\n const directory = flags.path ? path.resolve(flags.path) : process.cwd()\n const port = parseInt(flags.port, 10)\n const envPath = flags.env\n\n if (flags.target === 'worker') {\n await previewInWorker({directory, port, envPath})\n } else if (flags.target === 'node') {\n await previewInNode({directory, port})\n }\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const gitInit: () => Promise<boolean>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ui } from '@shopify/cli-kit';
|
|
2
|
+
export const gitInit = async () => {
|
|
3
|
+
const question = {
|
|
4
|
+
type: 'select',
|
|
5
|
+
name: 'initialize',
|
|
6
|
+
message: "Git version control hasn't been initialized for this directory. Do you want to do that now?",
|
|
7
|
+
choices: [
|
|
8
|
+
{ name: 'Yes', value: 'yes' },
|
|
9
|
+
{ name: 'No', value: 'no' },
|
|
10
|
+
],
|
|
11
|
+
default: 'yes',
|
|
12
|
+
};
|
|
13
|
+
const promptResults = await ui.prompt([question]);
|
|
14
|
+
return promptResults.initialize === 'yes';
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=git-init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-init.js","sourceRoot":"","sources":["../../../src/cli/prompts/git-init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,EAAE,EAAC,MAAM,kBAAkB,CAAA;AAEnC,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,IAAsB,EAAE;IAClD,MAAM,QAAQ,GAAgB;QAC5B,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,6FAA6F;QACtG,OAAO,EAAE;YACP,EAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAC;YAC3B,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC;SAC1B;QACD,OAAO,EAAE,KAAK;KACf,CAAA;IAED,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEjD,OAAO,aAAa,CAAC,UAAU,KAAK,KAAK,CAAA;AAC3C,CAAC,CAAA","sourcesContent":["import {ui} from '@shopify/cli-kit'\n\nexport const gitInit = async (): Promise<boolean> => {\n const question: ui.Question = {\n type: 'select',\n name: 'initialize',\n message: \"Git version control hasn't been initialized for this directory. Do you want to do that now?\",\n choices: [\n {name: 'Yes', value: 'yes'},\n {name: 'No', value: 'no'},\n ],\n default: 'yes',\n }\n\n const promptResults = await ui.prompt([question])\n\n return promptResults.initialize === 'yes'\n}\n"]}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
+
import { ui } from '@shopify/cli-kit';
|
|
1
2
|
declare type Target = 'node' | 'client' | 'worker';
|
|
2
|
-
interface
|
|
3
|
+
interface DevOptions {
|
|
3
4
|
directory: string;
|
|
4
5
|
targets: {
|
|
5
6
|
[key in Target]: boolean | string;
|
|
6
7
|
};
|
|
7
8
|
base?: string;
|
|
9
|
+
assetBaseURL?: string;
|
|
8
10
|
verbose?: boolean;
|
|
9
11
|
}
|
|
10
|
-
declare function
|
|
11
|
-
export
|
|
12
|
+
export declare function buildTaskList({ directory, targets, base, assetBaseURL, verbose }: DevOptions): ui.ListrTask[];
|
|
13
|
+
export declare function build(options: DevOptions): Promise<void>;
|
|
14
|
+
export {};
|
|
@@ -1,39 +1,42 @@
|
|
|
1
1
|
import { build as viteBuild } from 'vite';
|
|
2
2
|
import { ui, environment, error as kitError } from '@shopify/cli-kit';
|
|
3
|
-
|
|
3
|
+
export function buildTaskList({ directory, targets, base, assetBaseURL, verbose }) {
|
|
4
4
|
const commonConfig = { base, root: directory };
|
|
5
|
-
|
|
5
|
+
return Object.entries(targets)
|
|
6
6
|
.filter(([_, value]) => value)
|
|
7
|
-
.map(([key, value]) => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
7
|
+
.map(([key, value]) => ({
|
|
8
|
+
title: `Building ${key} code`,
|
|
9
|
+
task: async (_, task) => {
|
|
10
|
+
if (key === 'worker') {
|
|
11
|
+
process.env.WORKER = 'true';
|
|
12
|
+
}
|
|
13
|
+
if (assetBaseURL) {
|
|
14
|
+
process.env.HYDROGEN_ASSET_BASE_URL = assetBaseURL;
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
await viteBuild({
|
|
18
|
+
...commonConfig,
|
|
19
|
+
build: {
|
|
20
|
+
outDir: `dist/${key}`,
|
|
21
|
+
ssr: typeof value === 'string' ? value : undefined,
|
|
22
|
+
manifest: key === 'client',
|
|
23
|
+
},
|
|
24
|
+
logLevel: verbose ? 'info' : 'silent',
|
|
25
|
+
});
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
const abortError = new kitError.Abort(error.message);
|
|
30
|
+
abortError.stack = error.stack;
|
|
31
|
+
throw abortError;
|
|
32
|
+
}
|
|
33
|
+
task.title = `Built ${key} code`;
|
|
34
|
+
},
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
export async function build(options) {
|
|
38
|
+
const tasks = await buildTaskList(options);
|
|
35
39
|
const list = ui.newListr(tasks, { rendererSilent: environment.local.isUnitTest() });
|
|
36
40
|
await list.run();
|
|
37
41
|
}
|
|
38
|
-
export default build;
|
|
39
42
|
//# sourceMappingURL=build.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/cli/services/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,IAAI,SAAS,EAAC,MAAM,MAAM,CAAA;AACvC,OAAO,EAAC,EAAE,EAAE,WAAW,EAAE,KAAK,IAAI,QAAQ,EAAC,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/cli/services/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,IAAI,SAAS,EAAC,MAAM,MAAM,CAAA;AACvC,OAAO,EAAC,EAAE,EAAE,WAAW,EAAE,KAAK,IAAI,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAYnE,MAAM,UAAU,aAAa,CAAC,EAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAa;IACzF,MAAM,YAAY,GAAG,EAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAC,CAAA;IAE5C,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;SAC3B,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC;SAC7B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QACtB,KAAK,EAAE,YAAY,GAAG,OAAO;QAC7B,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;YACtB,IAAI,GAAG,KAAK,QAAQ,EAAE;gBACpB,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAA;aAC5B;YACD,IAAI,YAAY,EAAE;gBAChB,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,YAAY,CAAA;aACnD;YAED,IAAI;gBACF,MAAM,SAAS,CAAC;oBACd,GAAG,YAAY;oBACf,KAAK,EAAE;wBACL,MAAM,EAAE,QAAQ,GAAG,EAAE;wBACrB,GAAG,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;wBAClD,QAAQ,EAAE,GAAG,KAAK,QAAQ;qBAC3B;oBACD,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;iBACtC,CAAC,CAAA;gBACF,8DAA8D;aAC/D;YAAC,OAAO,KAAU,EAAE;gBACnB,MAAM,UAAU,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;gBACpD,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;gBAC9B,MAAM,UAAU,CAAA;aACjB;YAED,IAAI,CAAC,KAAK,GAAG,SAAS,GAAG,OAAO,CAAA;QAClC,CAAC;KACF,CAAC,CAAC,CAAA;AACP,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAmB;IAC7C,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAA;IAE1C,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAC,cAAc,EAAE,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,EAAC,CAAC,CAAA;IAEjF,MAAM,IAAI,CAAC,GAAG,EAAE,CAAA;AAClB,CAAC","sourcesContent":["import {build as viteBuild} from 'vite'\nimport {ui, environment, error as kitError} from '@shopify/cli-kit'\n\ntype Target = 'node' | 'client' | 'worker'\n\ninterface DevOptions {\n directory: string\n targets: {[key in Target]: boolean | string}\n base?: string\n assetBaseURL?: string\n verbose?: boolean\n}\n\nexport function buildTaskList({directory, targets, base, assetBaseURL, verbose}: DevOptions): ui.ListrTask[] {\n const commonConfig = {base, root: directory}\n\n return Object.entries(targets)\n .filter(([_, value]) => value)\n .map(([key, value]) => ({\n title: `Building ${key} code`,\n task: async (_, task) => {\n if (key === 'worker') {\n process.env.WORKER = 'true'\n }\n if (assetBaseURL) {\n process.env.HYDROGEN_ASSET_BASE_URL = assetBaseURL\n }\n\n try {\n await viteBuild({\n ...commonConfig,\n build: {\n outDir: `dist/${key}`,\n ssr: typeof value === 'string' ? value : undefined,\n manifest: key === 'client',\n },\n logLevel: verbose ? 'info' : 'silent',\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n const abortError = new kitError.Abort(error.message)\n abortError.stack = error.stack\n throw abortError\n }\n\n task.title = `Built ${key} code`\n },\n }))\n}\n\nexport async function build(options: DevOptions) {\n const tasks = await buildTaskList(options)\n\n const list = ui.newListr(tasks, {rendererSilent: environment.local.isUnitTest()})\n\n await list.run()\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { DeployConfig, ReqDeployConfig } from './types.js';
|
|
2
|
+
export declare const validateProject: (config: DeployConfig) => Promise<void>;
|
|
3
|
+
export declare const initializeGit: (config: DeployConfig) => Promise<void>;
|
|
4
|
+
export declare const fillDeployConfig: (config: DeployConfig) => Promise<ReqDeployConfig>;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { gitInit } from '../../prompts/git-init.js';
|
|
2
|
+
import { git, error } from '@shopify/cli-kit';
|
|
3
|
+
const MINIMAL_GIT_IGNORE = {
|
|
4
|
+
system: ['.DS_Store'],
|
|
5
|
+
logs: ['logs', '*.log', 'npm-debug.log*', 'yarn-debug.log*', 'yarn-error.log*'],
|
|
6
|
+
testing: ['/coverage', '*.lcov'],
|
|
7
|
+
dependencies: ['/node_modules', '.npm', '.yarn-integrity', '/.pnp', '.pnp.js'],
|
|
8
|
+
typescript: ['*.tsbuildinfo'],
|
|
9
|
+
environment: ['.env', '.env.test', '.env.local'],
|
|
10
|
+
production: ['/dist'],
|
|
11
|
+
};
|
|
12
|
+
export const validateProject = async (config) => {
|
|
13
|
+
await git.ensurePresentOrAbort();
|
|
14
|
+
try {
|
|
15
|
+
await git.ensureInsideGitDirectory(config.path);
|
|
16
|
+
}
|
|
17
|
+
catch (err) {
|
|
18
|
+
if (err?.message !== git.OutsideGitDirectoryError(config.path).message)
|
|
19
|
+
throw error;
|
|
20
|
+
await initializeGit(config);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
export const initializeGit = async (config) => {
|
|
24
|
+
if (!config.assumeYes) {
|
|
25
|
+
const shouldGitInit = await gitInit();
|
|
26
|
+
if (!shouldGitInit)
|
|
27
|
+
throw new error.AbortSilent();
|
|
28
|
+
}
|
|
29
|
+
await git.initializeRepository(config.path);
|
|
30
|
+
git.createGitIgnore(config.path, MINIMAL_GIT_IGNORE);
|
|
31
|
+
await git.addAll(config.path);
|
|
32
|
+
await git.commit('Initial commit generated by Hydrogen', { directory: config.path });
|
|
33
|
+
};
|
|
34
|
+
export const fillDeployConfig = async (config) => {
|
|
35
|
+
const [latestCommit, commitRef] = await Promise.all([
|
|
36
|
+
git.getLatestCommit(config.path),
|
|
37
|
+
git.getHeadSymbolicRef(config.path),
|
|
38
|
+
]);
|
|
39
|
+
return {
|
|
40
|
+
...config,
|
|
41
|
+
commitMessage: config.commitMessage ?? latestCommit.message,
|
|
42
|
+
commitAuthor: config.commitAuthor ?? latestCommit.author_name,
|
|
43
|
+
commitSha: latestCommit.hash,
|
|
44
|
+
timestamp: latestCommit.date,
|
|
45
|
+
commitRef,
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/cli/services/deploy/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,2BAA2B,CAAA;AACjD,OAAO,EAAC,GAAG,EAAE,KAAK,EAAC,MAAM,kBAAkB,CAAA;AAE3C,MAAM,kBAAkB,GAA0B;IAChD,MAAM,EAAE,CAAC,WAAW,CAAC;IACrB,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,CAAC;IAC/E,OAAO,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC;IAChC,YAAY,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,SAAS,CAAC;IAC9E,UAAU,EAAE,CAAC,eAAe,CAAC;IAC7B,WAAW,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC;IAChD,UAAU,EAAE,CAAC,OAAO,CAAC;CACtB,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,MAAoB,EAAE,EAAE;IAC5D,MAAM,GAAG,CAAC,oBAAoB,EAAE,CAAA;IAChC,IAAI;QACF,MAAM,GAAG,CAAC,wBAAwB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;KAChD;IAAC,OAAO,GAAY,EAAE;QACrB,IAAK,GAAmB,EAAE,OAAO,KAAK,GAAG,CAAC,wBAAwB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO;YAAE,MAAM,KAAK,CAAA;QACpG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAA;KAC5B;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,MAAoB,EAAE,EAAE;IAC1D,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;QACrB,MAAM,aAAa,GAAG,MAAM,OAAO,EAAE,CAAA;QACrC,IAAI,CAAC,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAA;KAClD;IAED,MAAM,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC3C,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAA;IACpD,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,GAAG,CAAC,MAAM,CAAC,sCAAsC,EAAE,EAAC,SAAS,EAAE,MAAM,CAAC,IAAI,EAAC,CAAC,CAAA;AACpF,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,MAAoB,EAA4B,EAAE;IACvF,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAClD,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC;QAChC,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC;KACpC,CAAC,CAAA;IAEF,OAAO;QACL,GAAG,MAAM;QACT,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,YAAY,CAAC,OAAO;QAC3D,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,YAAY,CAAC,WAAW;QAC7D,SAAS,EAAE,YAAY,CAAC,IAAI;QAC5B,SAAS,EAAE,YAAY,CAAC,IAAI;QAC5B,SAAS;KACV,CAAA;AACH,CAAC,CAAA","sourcesContent":["import {DeployConfig, ReqDeployConfig} from './types.js'\nimport {gitInit} from '../../prompts/git-init.js'\nimport {git, error} from '@shopify/cli-kit'\n\nconst MINIMAL_GIT_IGNORE: git.GitIgnoreTemplate = {\n system: ['.DS_Store'],\n logs: ['logs', '*.log', 'npm-debug.log*', 'yarn-debug.log*', 'yarn-error.log*'],\n testing: ['/coverage', '*.lcov'],\n dependencies: ['/node_modules', '.npm', '.yarn-integrity', '/.pnp', '.pnp.js'],\n typescript: ['*.tsbuildinfo'],\n environment: ['.env', '.env.test', '.env.local'],\n production: ['/dist'],\n}\n\nexport const validateProject = async (config: DeployConfig) => {\n await git.ensurePresentOrAbort()\n try {\n await git.ensureInsideGitDirectory(config.path)\n } catch (err: unknown) {\n if ((err as error.Abort)?.message !== git.OutsideGitDirectoryError(config.path).message) throw error\n await initializeGit(config)\n }\n}\n\nexport const initializeGit = async (config: DeployConfig) => {\n if (!config.assumeYes) {\n const shouldGitInit = await gitInit()\n if (!shouldGitInit) throw new error.AbortSilent()\n }\n\n await git.initializeRepository(config.path)\n git.createGitIgnore(config.path, MINIMAL_GIT_IGNORE)\n await git.addAll(config.path)\n await git.commit('Initial commit generated by Hydrogen', {directory: config.path})\n}\n\nexport const fillDeployConfig = async (config: DeployConfig): Promise<ReqDeployConfig> => {\n const [latestCommit, commitRef] = await Promise.all([\n git.getLatestCommit(config.path),\n git.getHeadSymbolicRef(config.path),\n ])\n\n return {\n ...config,\n commitMessage: config.commitMessage ?? latestCommit.message,\n commitAuthor: config.commitAuthor ?? latestCommit.author_name,\n commitSha: latestCommit.hash,\n timestamp: latestCommit.date,\n commitRef,\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../../../src/cli/services/deploy/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAA;AAEtC,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,EAAE;IACtC,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAA;AACnD,CAAC,CAAA","sourcesContent":["import {error} from '@shopify/cli-kit'\n\nexport const WebPageNotAvailable = () => {\n return new error.Abort('Web page not available.')\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { OxygenError } from '../types.js';
|
|
2
|
+
export declare const CreateDeploymentQuery: string;
|
|
3
|
+
export interface CreateDeploymentQuerySchema {
|
|
4
|
+
createDeployment: CreateDeploymentResponse;
|
|
5
|
+
}
|
|
6
|
+
export interface CreateDeploymentResponse {
|
|
7
|
+
deploymentID: string;
|
|
8
|
+
assetBaseURL: string;
|
|
9
|
+
error: OxygenError;
|
|
10
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { gql } from 'graphql-request';
|
|
2
|
+
export const CreateDeploymentQuery = gql `
|
|
3
|
+
mutation createDeployment($input: CreateDeploymentInput!) {
|
|
4
|
+
createDeployment(input: $input) {
|
|
5
|
+
deploymentID
|
|
6
|
+
assetBaseURL
|
|
7
|
+
error {
|
|
8
|
+
code
|
|
9
|
+
unrecoverable
|
|
10
|
+
debugInfo
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
`;
|
|
15
|
+
//# sourceMappingURL=create_deployment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create_deployment.js","sourceRoot":"","sources":["../../../../../src/cli/services/deploy/graphql/create_deployment.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,iBAAiB,CAAA;AAEnC,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAA;;;;;;;;;;;;CAYvC,CAAA","sourcesContent":["import {OxygenError} from '../types.js'\nimport {gql} from 'graphql-request'\n\nexport const CreateDeploymentQuery = gql`\n mutation createDeployment($input: CreateDeploymentInput!) {\n createDeployment(input: $input) {\n deploymentID\n assetBaseURL\n error {\n code\n unrecoverable\n debugInfo\n }\n }\n }\n`\n\nexport interface CreateDeploymentQuerySchema {\n createDeployment: CreateDeploymentResponse\n}\n\nexport interface CreateDeploymentResponse {\n deploymentID: string\n assetBaseURL: string\n error: OxygenError\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const UploadDeploymentQuery: string;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { gql } from 'graphql-request';
|
|
2
|
+
export const UploadDeploymentQuery = gql `
|
|
3
|
+
mutation uploadDeployment($file: Upload!, $deploymentID: ID!) {
|
|
4
|
+
uploadDeployment(file: $file, deploymentID: $deploymentID) {
|
|
5
|
+
deployment {
|
|
6
|
+
previewURL
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
`;
|
|
11
|
+
//# sourceMappingURL=upload_deployment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload_deployment.js","sourceRoot":"","sources":["../../../../../src/cli/services/deploy/graphql/upload_deployment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,iBAAiB,CAAA;AAEnC,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAA;;;;;;;;CAQvC,CAAA","sourcesContent":["import {gql} from 'graphql-request'\n\nexport const UploadDeploymentQuery = gql`\n mutation uploadDeployment($file: Upload!, $deploymentID: ID!) {\n uploadDeployment(file: $file, deploymentID: $deploymentID) {\n deployment {\n previewURL\n }\n }\n }\n`\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface DeployConfig {
|
|
2
|
+
deploymentToken: string;
|
|
3
|
+
oxygenAddress: string;
|
|
4
|
+
healthCheck: boolean;
|
|
5
|
+
assumeYes: boolean;
|
|
6
|
+
path: string;
|
|
7
|
+
commitMessage?: string;
|
|
8
|
+
commitAuthor?: string;
|
|
9
|
+
commitSha?: string;
|
|
10
|
+
commitRef?: string;
|
|
11
|
+
timestamp?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare type ReqDeployConfig = Required<DeployConfig>;
|
|
14
|
+
export interface OxygenError {
|
|
15
|
+
code: string;
|
|
16
|
+
unrecoverable: boolean;
|
|
17
|
+
debugInfo: string;
|
|
18
|
+
}
|
|
19
|
+
export interface UploadDeploymentResponse {
|
|
20
|
+
data: {
|
|
21
|
+
uploadDeployment: {
|
|
22
|
+
deployment: {
|
|
23
|
+
previewURL: string;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/cli/services/deploy/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface DeployConfig {\n deploymentToken: string\n oxygenAddress: string\n healthCheck: boolean\n assumeYes: boolean\n path: string\n commitMessage?: string\n commitAuthor?: string\n commitSha?: string\n commitRef?: string\n timestamp?: string\n}\nexport type ReqDeployConfig = Required<DeployConfig>\n\nexport interface OxygenError {\n code: string\n unrecoverable: boolean\n debugInfo: string\n}\n\nexport interface UploadDeploymentResponse {\n data: {\n uploadDeployment: {\n deployment: {\n previewURL: string\n }\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ReqDeployConfig } from './types.js';
|
|
2
|
+
import { CreateDeploymentResponse } from './graphql/create_deployment.js';
|
|
3
|
+
export declare const createDeployment: (config: ReqDeployConfig) => Promise<CreateDeploymentResponse>;
|
|
4
|
+
export declare const uploadDeployment: (config: ReqDeployConfig, deploymentID: string) => Promise<string>;
|
|
5
|
+
export declare const healthCheck: (pingUrl: string) => Promise<void>;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { CreateDeploymentQuery, } from './graphql/create_deployment.js';
|
|
2
|
+
import { UploadDeploymentQuery } from './graphql/upload_deployment.js';
|
|
3
|
+
import { WebPageNotAvailable } from './error.js';
|
|
4
|
+
import { api, http, file } from '@shopify/cli-kit';
|
|
5
|
+
import { zip } from '@shopify/cli-kit/node/archiver';
|
|
6
|
+
export const createDeployment = async (config) => {
|
|
7
|
+
const headers = await api.buildHeaders(config.deploymentToken);
|
|
8
|
+
const client = await http.graphqlClient({
|
|
9
|
+
headers,
|
|
10
|
+
url: getOxygenAddress(config.oxygenAddress),
|
|
11
|
+
});
|
|
12
|
+
const variables = {
|
|
13
|
+
input: {
|
|
14
|
+
branch: config.commitRef,
|
|
15
|
+
commitHash: config.commitSha,
|
|
16
|
+
commitAuthor: config.commitAuthor,
|
|
17
|
+
commitMessage: config.commitMessage,
|
|
18
|
+
commitTimestamp: config.timestamp,
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
const response = await client.request(CreateDeploymentQuery, variables);
|
|
22
|
+
return response.createDeployment;
|
|
23
|
+
};
|
|
24
|
+
export const uploadDeployment = async (config, deploymentID) => {
|
|
25
|
+
let headers = await api.buildHeaders(config.deploymentToken);
|
|
26
|
+
const distPath = `${config.path}/dist`;
|
|
27
|
+
const distZipPath = `${distPath}/dist.zip`;
|
|
28
|
+
await zip(distPath, distZipPath);
|
|
29
|
+
const formData = http.formData();
|
|
30
|
+
formData.append('operations', buildOperationsString(deploymentID));
|
|
31
|
+
formData.append('map', JSON.stringify({ '0': ['variables.file'] }));
|
|
32
|
+
formData.append('0', file.createReadStream(distZipPath), { filename: 'upload_dist' });
|
|
33
|
+
delete headers['Content-Type'];
|
|
34
|
+
headers = {
|
|
35
|
+
...headers,
|
|
36
|
+
...formData.getHeaders(),
|
|
37
|
+
};
|
|
38
|
+
const response = await http.shopifyFetch(getOxygenAddress(config.oxygenAddress), {
|
|
39
|
+
method: 'POST',
|
|
40
|
+
body: formData,
|
|
41
|
+
headers,
|
|
42
|
+
});
|
|
43
|
+
const responseData = (await response.json());
|
|
44
|
+
return responseData.data.uploadDeployment.deployment.previewURL;
|
|
45
|
+
};
|
|
46
|
+
export const healthCheck = async (pingUrl) => {
|
|
47
|
+
const url = `${pingUrl}/__health`;
|
|
48
|
+
const result = await http.fetch(url, { method: 'GET' });
|
|
49
|
+
if (result.status !== 200)
|
|
50
|
+
throw WebPageNotAvailable();
|
|
51
|
+
};
|
|
52
|
+
const buildOperationsString = (deploymentID) => {
|
|
53
|
+
return JSON.stringify({
|
|
54
|
+
query: UploadDeploymentQuery,
|
|
55
|
+
variables: { deploymentID, file: null },
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
const getOxygenAddress = (oxygenFqdn) => {
|
|
59
|
+
return `https://${oxygenFqdn}/api/graphql/deploy/v1`;
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=upload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../../src/cli/services/deploy/upload.ts"],"names":[],"mappings":"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","sourcesContent":["import {ReqDeployConfig, UploadDeploymentResponse} from './types.js'\nimport {\n CreateDeploymentResponse,\n CreateDeploymentQuerySchema,\n CreateDeploymentQuery,\n} from './graphql/create_deployment.js'\nimport {UploadDeploymentQuery} from './graphql/upload_deployment.js'\nimport {WebPageNotAvailable} from './error.js'\nimport {api, http, file} from '@shopify/cli-kit'\nimport {zip} from '@shopify/cli-kit/node/archiver'\n\nexport const createDeployment = async (config: ReqDeployConfig): Promise<CreateDeploymentResponse> => {\n const headers = await api.buildHeaders(config.deploymentToken)\n const client = await http.graphqlClient({\n headers,\n url: getOxygenAddress(config.oxygenAddress),\n })\n\n const variables = {\n input: {\n branch: config.commitRef,\n commitHash: config.commitSha,\n commitAuthor: config.commitAuthor,\n commitMessage: config.commitMessage,\n commitTimestamp: config.timestamp,\n },\n }\n\n const response: CreateDeploymentQuerySchema = await client.request(CreateDeploymentQuery, variables)\n return response.createDeployment\n}\n\nexport const uploadDeployment = async (config: ReqDeployConfig, deploymentID: string): Promise<string> => {\n let headers = await api.buildHeaders(config.deploymentToken)\n\n const distPath = `${config.path}/dist`\n const distZipPath = `${distPath}/dist.zip`\n await zip(distPath, distZipPath)\n\n const formData = http.formData()\n formData.append('operations', buildOperationsString(deploymentID))\n formData.append('map', JSON.stringify({'0': ['variables.file']}))\n formData.append('0', file.createReadStream(distZipPath), {filename: 'upload_dist'})\n\n delete headers['Content-Type']\n headers = {\n ...headers,\n ...formData.getHeaders(),\n }\n\n const response = await http.shopifyFetch(getOxygenAddress(config.oxygenAddress), {\n method: 'POST',\n body: formData,\n headers,\n })\n\n const responseData = (await response.json()) as UploadDeploymentResponse\n return responseData.data.uploadDeployment.deployment.previewURL\n}\n\nexport const healthCheck = async (pingUrl: string) => {\n const url = `${pingUrl}/__health`\n const result = await http.fetch(url, {method: 'GET'})\n if (result.status !== 200) throw WebPageNotAvailable()\n}\n\nconst buildOperationsString = (deploymentID: string): string => {\n return JSON.stringify({\n query: UploadDeploymentQuery,\n variables: {deploymentID, file: null},\n })\n}\n\nconst getOxygenAddress = (oxygenFqdn: string): string => {\n return `https://${oxygenFqdn}/api/graphql/deploy/v1`\n}\n"]}
|