@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.
Files changed (42) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +1 -1
  3. package/dist/cli/commands/hydrogen/build.js +2 -2
  4. package/dist/cli/commands/hydrogen/build.js.map +1 -1
  5. package/dist/cli/commands/hydrogen/deploy.d.ts +17 -0
  6. package/dist/cli/commands/hydrogen/deploy.js +53 -0
  7. package/dist/cli/commands/hydrogen/deploy.js.map +1 -0
  8. package/dist/cli/commands/hydrogen/preview.d.ts +1 -0
  9. package/dist/cli/commands/hydrogen/preview.js +9 -1
  10. package/dist/cli/commands/hydrogen/preview.js.map +1 -1
  11. package/dist/cli/prompts/git-init.d.ts +1 -0
  12. package/dist/cli/prompts/git-init.js +16 -0
  13. package/dist/cli/prompts/git-init.js.map +1 -0
  14. package/dist/cli/services/build.d.ts +6 -3
  15. package/dist/cli/services/build.js +34 -31
  16. package/dist/cli/services/build.js.map +1 -1
  17. package/dist/cli/services/deploy/config.d.ts +4 -0
  18. package/dist/cli/services/deploy/config.js +48 -0
  19. package/dist/cli/services/deploy/config.js.map +1 -0
  20. package/dist/cli/services/deploy/error.d.ts +2 -0
  21. package/dist/cli/services/deploy/error.js +5 -0
  22. package/dist/cli/services/deploy/error.js.map +1 -0
  23. package/dist/cli/services/deploy/graphql/create_deployment.d.ts +10 -0
  24. package/dist/cli/services/deploy/graphql/create_deployment.js +15 -0
  25. package/dist/cli/services/deploy/graphql/create_deployment.js.map +1 -0
  26. package/dist/cli/services/deploy/graphql/upload_deployment.d.ts +1 -0
  27. package/dist/cli/services/deploy/graphql/upload_deployment.js +11 -0
  28. package/dist/cli/services/deploy/graphql/upload_deployment.js.map +1 -0
  29. package/dist/cli/services/deploy/types.d.ts +27 -0
  30. package/dist/cli/services/deploy/types.js +2 -0
  31. package/dist/cli/services/deploy/types.js.map +1 -0
  32. package/dist/cli/services/deploy/upload.d.ts +5 -0
  33. package/dist/cli/services/deploy/upload.js +61 -0
  34. package/dist/cli/services/deploy/upload.js.map +1 -0
  35. package/dist/cli/services/deploy.d.ts +2 -0
  36. package/dist/cli/services/deploy.js +82 -0
  37. package/dist/cli/services/deploy.js.map +1 -0
  38. package/dist/cli/services/preview.d.ts +4 -1
  39. package/dist/cli/services/preview.js +9 -1
  40. package/dist/cli/services/preview.js.map +1 -1
  41. package/dist/tsconfig.tsbuildinfo +1 -1
  42. 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 scaffold app extensions
10
+ - initialize, build, dev, and deploy Shopify apps — and generate app extensions
11
11
 
12
12
  <p>&nbsp;</p>
13
13
 
@@ -1,4 +1,4 @@
1
- import buildService from '../../services/build.js';
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 buildService({ ...flags, directory, targets });
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,YAAY,MAAM,yBAAyB,CAAA;AAClD,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,YAAY,CAAC,EAAC,GAAG,KAAK,EAAE,SAAS,EAAE,OAAO,EAAC,CAAC,CAAA;IACpD,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 buildService 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 buildService({...flags, directory, targets})\n }\n}\n"]}
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;IAqB1C,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;QAErC,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE;YAC7B,MAAM,eAAe,CAAC,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAA;SACzC;aAAM,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;YAClC,MAAM,aAAa,CAAC,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAA;SACvC;IACH,CAAC;;AA9BM,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,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 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\n if (flags.target === 'worker') {\n await previewInWorker({directory, port})\n } else if (flags.target === 'node') {\n await previewInNode({directory, port})\n }\n }\n}\n"]}
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 BuildOptions {
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 build({ directory, targets, base, verbose }: BuildOptions): Promise<void>;
11
- export default build;
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
- async function build({ directory, targets, base, verbose }) {
3
+ export function buildTaskList({ directory, targets, base, assetBaseURL, verbose }) {
4
4
  const commonConfig = { base, root: directory };
5
- const tasks = Object.entries(targets)
5
+ return Object.entries(targets)
6
6
  .filter(([_, value]) => value)
7
- .map(([key, value]) => {
8
- return {
9
- title: `Building ${key} code`,
10
- task: async (_, task) => {
11
- if (key === 'worker') {
12
- process.env.WORKER = 'true';
13
- }
14
- try {
15
- await viteBuild({
16
- ...commonConfig,
17
- build: {
18
- outDir: `dist/${key}`,
19
- ssr: typeof value === 'string' ? value : undefined,
20
- manifest: key === 'client',
21
- },
22
- logLevel: verbose ? 'info' : 'silent',
23
- });
24
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
25
- }
26
- catch (error) {
27
- const abortError = new kitError.Abort(error.message);
28
- abortError.stack = error.stack;
29
- throw abortError;
30
- }
31
- task.title = `Built ${key} code`;
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;AAWnE,KAAK,UAAU,KAAK,CAAC,EAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAe;IACpE,MAAM,YAAY,GAAG,EAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAC,CAAA;IAE5C,MAAM,KAAK,GAAmB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;SAClD,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC;SAC7B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACpB,OAAO;YACL,KAAK,EAAE,YAAY,GAAG,OAAO;YAC7B,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;gBACtB,IAAI,GAAG,KAAK,QAAQ,EAAE;oBACpB,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAA;iBAC5B;gBACD,IAAI;oBACF,MAAM,SAAS,CAAC;wBACd,GAAG,YAAY;wBACf,KAAK,EAAE;4BACL,MAAM,EAAE,QAAQ,GAAG,EAAE;4BACrB,GAAG,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;4BAClD,QAAQ,EAAE,GAAG,KAAK,QAAQ;yBAC3B;wBACD,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;qBACtC,CAAC,CAAA;oBACF,8DAA8D;iBAC/D;gBAAC,OAAO,KAAU,EAAE;oBACnB,MAAM,UAAU,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;oBACpD,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;oBAC9B,MAAM,UAAU,CAAA;iBACjB;gBAED,IAAI,CAAC,KAAK,GAAG,SAAS,GAAG,OAAO,CAAA;YAClC,CAAC;SACF,CAAA;IACH,CAAC,CAAC,CAAA;IAEJ,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;AAED,eAAe,KAAK,CAAA","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 BuildOptions {\n directory: string\n targets: {[key in Target]: boolean | string}\n base?: string\n verbose?: boolean\n}\n\nasync function build({directory, targets, base, verbose}: BuildOptions) {\n const commonConfig = {base, root: directory}\n\n const tasks: ui.ListrTask[] = Object.entries(targets)\n .filter(([_, value]) => value)\n .map(([key, value]) => {\n return {\n title: `Building ${key} code`,\n task: async (_, task) => {\n if (key === 'worker') {\n process.env.WORKER = 'true'\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\n const list = ui.newListr(tasks, {rendererSilent: environment.local.isUnitTest()})\n\n await list.run()\n}\n\nexport default build\n"]}
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,2 @@
1
+ import { error } from '@shopify/cli-kit';
2
+ export declare const WebPageNotAvailable: () => error.Abort;
@@ -0,0 +1,5 @@
1
+ import { error } from '@shopify/cli-kit';
2
+ export const WebPageNotAvailable = () => {
3
+ return new error.Abort('Web page not available.');
4
+ };
5
+ //# sourceMappingURL=error.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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"]}
@@ -0,0 +1,2 @@
1
+ import { DeployConfig } from './deploy/types.js';
2
+ export declare function deployToOxygen(_config: DeployConfig): Promise<any>;