Skip to content

Commit 716b0f9

Browse files
authored
Merge pull request #1100 from Shopify/cli-kit-refactor-environment-3
[cli-kit] refactor environment module part 3
2 parents aabea76 + e0d8562 commit 716b0f9

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+207
-183
lines changed

packages/app/src/cli/models/app/loader.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {UIExtensionInstance, UIExtensionSpec} from '../extensions/ui.js'
66
import {ThemeExtensionInstance, ThemeExtensionSpec} from '../extensions/theme.js'
77
import {ThemeExtensionSchema, TypeSchema} from '../extensions/schemas.js'
88
import {FunctionInstance, FunctionSpec} from '../extensions/functions.js'
9-
import {error, file, path, schema, output, environment} from '@shopify/cli-kit'
9+
import {error, file, path, schema, output} from '@shopify/cli-kit'
1010
import {readAndParseDotEnv, DotEnvFile} from '@shopify/cli-kit/node/dot-env'
1111
import {
1212
getDependencies,
@@ -19,6 +19,7 @@ import {getArrayRejectingUndefined} from '@shopify/cli-kit/common/array'
1919
import {camelize} from '@shopify/cli-kit/common/string'
2020
import {hashString} from '@shopify/cli-kit/node/crypto'
2121
import {decodeToml} from '@shopify/cli-kit/node/toml'
22+
import {isShopify} from '@shopify/cli-kit/node/environment/local'
2223

2324
const defaultExtensionDirectory = 'extensions/*'
2425

@@ -263,12 +264,12 @@ class AppLoader {
263264
const specification = this.findSpecificationForType(type) as UIExtensionSpec | undefined
264265

265266
if (!specification) {
266-
const isShopify = await environment.local.isShopify()
267+
const isShopifolk = await isShopify()
267268
const shopifolkMessage = '\nYou might need to enable some beta flags on your Organization or App'
268269
this.abortOrReport(
269270
output.content`Unknown extension type ${output.token.yellow(type)} in ${output.token.path(
270271
configurationPath,
271-
)}. ${isShopify ? shopifolkMessage : ''}`,
272+
)}. ${isShopifolk ? shopifolkMessage : ''}`,
272273
undefined,
273274
configurationPath,
274275
)

packages/app/src/cli/models/extensions/specifications.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@ import {
66
loadUIExtensionSpecificiationsFromPlugins,
77
loadFunctionSpecificationsFromPlugins,
88
} from '../../private/plugins/extension.js'
9-
import {path, environment} from '@shopify/cli-kit'
9+
import {path} from '@shopify/cli-kit'
1010
import {platformAndArch} from '@shopify/cli-kit/node/os'
1111
import {memoize} from '@shopify/cli-kit/common/function'
1212
import {Config} from '@oclif/core'
13+
import {isShopify} from '@shopify/cli-kit/node/environment/local'
1314
import {fileURLToPath} from 'url'
1415

1516
export async function loadUIExtensionSpecifications(config: Config): Promise<UIExtensionSpec[]> {
@@ -29,7 +30,7 @@ export async function loadLocalUIExtensionsSpecifications(): Promise<UIExtension
2930
}
3031

3132
export async function loadLocalFunctionSpecifications(): Promise<FunctionSpec[]> {
32-
const isShopifyUser = await environment.local.isShopify()
33+
const isShopifyUser = await isShopify()
3334
return (await memoizedLoadSpecs('function-specifications')).filter((spec) => !spec.gated || isShopifyUser)
3435
}
3536

packages/app/src/cli/prompts/generate/extension.test.ts

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,13 @@ import {
55
loadLocalUIExtensionsSpecifications,
66
} from '../../models/extensions/specifications.js'
77
import {describe, it, expect, vi, beforeEach} from 'vitest'
8-
import {environment} from '@shopify/cli-kit'
9-
10-
vi.mock('@shopify/cli-kit', async () => {
11-
const cliKit: any = await vi.importActual('@shopify/cli-kit')
12-
return {
13-
...cliKit,
14-
environment: {
15-
local: {
16-
isShopify: vi.fn(),
17-
isUnitTest: vi.fn(() => true),
18-
},
19-
},
20-
}
21-
})
8+
import {isShopify, isUnitTest} from '@shopify/cli-kit/node/environment/local'
9+
10+
vi.mock('@shopify/cli-kit/node/environment/local')
2211

2312
beforeEach(() => {
24-
vi.mocked(environment.local.isShopify).mockResolvedValue(true)
13+
vi.mocked(isShopify).mockResolvedValue(true)
14+
vi.mocked(isUnitTest).mockResolvedValue(true)
2515
})
2616

2717
describe('extension prompt', async () => {

packages/app/src/cli/services/dependencies.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {AppInterface} from '../models/app/app.js'
2-
import {ui, environment} from '@shopify/cli-kit'
2+
import {ui} from '@shopify/cli-kit'
33
import {installNPMDependenciesRecursively} from '@shopify/cli-kit/node/node-package-manager'
4+
import {isUnitTest} from '@shopify/cli-kit/node/environment/local'
45

56
/**
67
* Given an app, it installs its NPM dependencies by traversing
@@ -24,7 +25,7 @@ export async function installAppDependencies(app: AppInterface) {
2425
},
2526
},
2627
],
27-
{rendererSilent: environment.local.isUnitTest()},
28+
{rendererSilent: isUnitTest()},
2829
)
2930
await list.run()
3031
await app.updateDependencies()

packages/app/src/cli/services/deploy.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ import {Extension} from '../models/app/extensions.js'
1515
import {validateExtensions} from '../validators/extensions.js'
1616
import {OrganizationApp} from '../models/organization.js'
1717
import {AllAppExtensionRegistrationsQuerySchema} from '../api/graphql/all_app_extension_registrations.js'
18-
import {path, output, file, environment} from '@shopify/cli-kit'
18+
import {path, output, file} from '@shopify/cli-kit'
19+
import {useThemeBundling} from '@shopify/cli-kit/node/environment/local'
1920

2021
interface DeployOptions {
2122
/** The app to be built and uploaded */
@@ -55,7 +56,7 @@ export const deploy = async (options: DeployOptions) => {
5556
}
5657
}),
5758
)
58-
if (environment.local.useThemeBundling()) {
59+
if (useThemeBundling()) {
5960
const themeExtensions = await Promise.all(
6061
options.app.extensions.theme.map(async (extension) => {
6162
return {
@@ -93,7 +94,7 @@ export const deploy = async (options: DeployOptions) => {
9394
validationErrors = await uploadUIExtensionsBundle({apiKey, bundlePath, extensions, token})
9495
}
9596

96-
if (!environment.local.useThemeBundling()) {
97+
if (!useThemeBundling()) {
9798
await uploadThemeExtensions(options.app.extensions.theme, {apiKey, identifiers, token})
9899
}
99100
identifiers = await uploadFunctionExtensions(app.extensions.function, {identifiers, token})

packages/app/src/cli/services/dev/select-store.test.ts

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ import {fetchAllDevStores} from './fetch.js'
33
import {Organization, OrganizationStore} from '../../models/organization.js'
44
import {reloadStoreListPrompt, selectStorePrompt} from '../../prompts/dev.js'
55
import {beforeEach, describe, expect, it, vi} from 'vitest'
6-
import {environment} from '@shopify/cli-kit'
76
import {partnersRequest} from '@shopify/cli-kit/node/api/partners'
87
import {ensureAuthenticatedPartners} from '@shopify/cli-kit/node/session'
98
import {isSpinEnvironment} from '@shopify/cli-kit/node/environment/spin'
9+
import {firstPartyDev} from '@shopify/cli-kit/node/environment/local'
1010

1111
const ORG1: Organization = {id: '1', businessName: 'org1', appsNext: true}
1212
const STORE1: OrganizationStore = {
@@ -39,6 +39,7 @@ const STORE3: OrganizationStore = {
3939
beforeEach(() => {
4040
vi.mock('../../prompts/dev')
4141
vi.mock('./fetch')
42+
vi.mock('@shopify/cli-kit/node/environment/local')
4243
vi.mock('@shopify/cli-kit/node/system')
4344
vi.mock('@shopify/cli-kit/node/api/partners')
4445
vi.mock('@shopify/cli-kit/node/session')
@@ -52,15 +53,6 @@ beforeEach(() => {
5253
http: {
5354
fetch: vi.fn(),
5455
},
55-
environment: {
56-
local: {
57-
firstPartyDev: vi.fn(),
58-
isUnitTest: vi.fn(() => true),
59-
},
60-
fqdn: {
61-
partnersFqdn: vi.fn(),
62-
},
63-
},
6456
}
6557
})
6658
})
@@ -95,7 +87,7 @@ describe('selectStore', async () => {
9587
// Given
9688
vi.mocked(selectStorePrompt).mockResolvedValueOnce(STORE2)
9789
vi.mocked(isSpinEnvironment).mockReturnValue(true)
98-
vi.mocked(environment.local.firstPartyDev).mockReturnValue(true)
90+
vi.mocked(firstPartyDev).mockReturnValue(true)
9991

10092
// When
10193
const got = await selectStore([STORE1, STORE2], ORG1, 'token')

packages/app/src/cli/services/dev/select-store.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@ import {
66
ConvertDevToTestStoreSchema,
77
ConvertDevToTestStoreVariables,
88
} from '../../api/graphql/convert_dev_to_test_store.js'
9-
import {error, output, ui, environment} from '@shopify/cli-kit'
9+
import {error, output, ui} from '@shopify/cli-kit'
1010
import {partnersRequest} from '@shopify/cli-kit/node/api/partners'
1111
import {sleep} from '@shopify/cli-kit/node/system'
1212
import {isSpinEnvironment} from '@shopify/cli-kit/node/environment/spin'
1313
import {partnersFqdn} from '@shopify/cli-kit/node/environment/fqdn'
14+
import {firstPartyDev, isUnitTest} from '@shopify/cli-kit/node/environment/local'
1415

1516
const CreateStoreLink = async (orgId: string) => {
1617
const url = `https://${await partnersFqdn()}/${orgId}/stores/new?store_type=dev_store`
@@ -82,7 +83,7 @@ async function waitForCreatedStore(orgId: string, token: string): Promise<Organi
8283
},
8384
},
8485
],
85-
{rendererSilent: environment.local.isUnitTest()},
86+
{rendererSilent: isUnitTest()},
8687
)
8788
await list.run()
8889

@@ -107,7 +108,7 @@ export async function convertToTestStoreIfNeeded(
107108
/**
108109
* Is not possible to convert stores to dev ones in spin environmets. Should be created directly as development.
109110
*/
110-
if (isSpinEnvironment() && environment.local.firstPartyDev()) return
111+
if (isSpinEnvironment() && firstPartyDev()) return
111112
if (!store.transferDisabled && !store.convertableToPartnerTest) {
112113
throw new error.Abort(
113114
`The store you specified (${store.shopDomain}) is not a dev store`,

packages/app/src/cli/services/dev/urls.test.ts

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,15 @@ import {testApp} from '../../models/app/app.test-data.js'
1212
import {UpdateURLsQuery} from '../../api/graphql/update_urls.js'
1313
import {GetURLsQuery} from '../../api/graphql/get_urls.js'
1414
import {beforeEach, describe, expect, it, vi} from 'vitest'
15-
import {environment, error, outputMocker, plugins, store, ui} from '@shopify/cli-kit'
15+
import {error, outputMocker, plugins, store, ui} from '@shopify/cli-kit'
1616
import {Config} from '@oclif/core'
1717
import {err, ok} from '@shopify/cli-kit/node/result'
1818
import {AbortSilentError, BugError} from '@shopify/cli-kit/node/error'
1919
import {getAvailableTCPPort} from '@shopify/cli-kit/node/tcp'
2020
import {partnersRequest} from '@shopify/cli-kit/node/api/partners'
2121
import {ensureAuthenticatedPartners} from '@shopify/cli-kit/node/session'
2222
import {isSpin, spinFqdn} from '@shopify/cli-kit/node/environment/spin'
23+
import {codespaceURL, gitpodURL, isUnitTest} from '@shopify/cli-kit/node/environment/local'
2324

2425
beforeEach(() => {
2526
vi.mock('@shopify/cli-kit/node/tcp')
@@ -28,6 +29,8 @@ beforeEach(() => {
2829
vi.mock('@shopify/cli-kit/node/session')
2930
vi.mocked(ensureAuthenticatedPartners).mockResolvedValue('token')
3031
vi.mock('@shopify/cli-kit/node/environment/spin')
32+
vi.mock('@shopify/cli-kit/node/environment/local')
33+
vi.mocked(isUnitTest).mockReturnValue(true)
3134
vi.mock('@shopify/cli-kit', async () => {
3235
const cliKit: any = await vi.importActual('@shopify/cli-kit')
3336
return {
@@ -42,12 +45,6 @@ beforeEach(() => {
4245
store: {
4346
setAppInfo: vi.fn(),
4447
},
45-
environment: {
46-
local: {
47-
codespaceURL: vi.fn(),
48-
gitpodURL: vi.fn(),
49-
},
50-
},
5148
}
5249
})
5350
})
@@ -468,7 +465,7 @@ describe('generateFrontendURL', () => {
468465

469466
it('Returns a gitpod url if we are in a gitpod environment', async () => {
470467
// Given
471-
vi.mocked(environment.local.gitpodURL).mockReturnValue('https://gitpod.url.fqdn.com')
468+
vi.mocked(gitpodURL).mockReturnValue('https://gitpod.url.fqdn.com')
472469
const options = {
473470
app: testApp({hasUIExtensions: () => false}),
474471
tunnel: false,
@@ -487,7 +484,7 @@ describe('generateFrontendURL', () => {
487484

488485
it('Returns a codespace url if we are in a codespace environment', async () => {
489486
// Given
490-
vi.mocked(environment.local.codespaceURL).mockReturnValue('codespace.url.fqdn.com')
487+
vi.mocked(codespaceURL).mockReturnValue('codespace.url.fqdn.com')
491488
const options = {
492489
app: testApp({hasUIExtensions: () => false}),
493490
tunnel: false,

packages/app/src/cli/services/dev/urls.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@ import {updateURLsPrompt} from '../../prompts/dev.js'
22
import {AppInterface} from '../../models/app/app.js'
33
import {UpdateURLsQuery, UpdateURLsQuerySchema, UpdateURLsQueryVariables} from '../../api/graphql/update_urls.js'
44
import {GetURLsQuery, GetURLsQuerySchema, GetURLsQueryVariables} from '../../api/graphql/get_urls.js'
5-
import {environment, output, plugins, store} from '@shopify/cli-kit'
5+
import {output, plugins, store} from '@shopify/cli-kit'
66
import {AbortError, AbortSilentError, BugError} from '@shopify/cli-kit/node/error'
77
import {Config} from '@oclif/core'
88
import {getAvailableTCPPort} from '@shopify/cli-kit/node/tcp'
99
import {isValidURL} from '@shopify/cli-kit/common/url'
1010
import {partnersRequest} from '@shopify/cli-kit/node/api/partners'
1111
import {isSpin, spinFqdn} from '@shopify/cli-kit/node/environment/spin'
12+
import {codespaceURL, gitpodURL} from '@shopify/cli-kit/node/environment/local'
1213

1314
export interface PartnersURLs {
1415
applicationUrl: string
@@ -54,13 +55,13 @@ export async function generateFrontendURL(options: FrontendURLOptions): Promise<
5455

5556
const needsTunnel = (hasExtensions || options.tunnel || options.cachedTunnelPlugin) && !options.noTunnel
5657

57-
if (environment.local.codespaceURL()) {
58-
frontendUrl = `https://${environment.local.codespaceURL()}-${frontendPort}.githubpreview.dev`
58+
if (codespaceURL()) {
59+
frontendUrl = `https://${codespaceURL()}-${frontendPort}.githubpreview.dev`
5960
return {frontendUrl, frontendPort, usingLocalhost}
6061
}
6162

62-
if (environment.local.gitpodURL()) {
63-
const defaultUrl = environment.local.gitpodURL()?.replace('https://', '')
63+
if (gitpodURL()) {
64+
const defaultUrl = gitpodURL()?.replace('https://', '')
6465
frontendUrl = `https://${frontendPort}-${defaultUrl}`
6566
return {frontendUrl, frontendPort, usingLocalhost}
6667
}

packages/app/src/cli/services/environment.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,12 @@ import {Organization, OrganizationApp, OrganizationStore} from '../models/organi
1919
import metadata from '../metadata.js'
2020
import {ThemeExtension} from '../models/app/extensions.js'
2121
import {loadAppName} from '../models/app/loader.js'
22-
import {error as kitError, output, store, ui, environment, error} from '@shopify/cli-kit'
22+
import {error as kitError, output, store, ui, error} from '@shopify/cli-kit'
2323
import {getPackageManager, PackageManager} from '@shopify/cli-kit/node/node-package-manager'
2424
import {tryParseInt} from '@shopify/cli-kit/common/string'
2525
import {ensureAuthenticatedPartners} from '@shopify/cli-kit/node/session'
2626
import {partnersFqdn} from '@shopify/cli-kit/node/environment/fqdn'
27+
import {isUnitTest} from '@shopify/cli-kit/node/environment/local'
2728

2829
export const InvalidApiKeyErrorMessage = (apiKey: string) => {
2930
return {
@@ -369,7 +370,7 @@ async function fetchOrgsAppsAndStores(orgId: string, token: string): Promise<Fet
369370
},
370371
},
371372
],
372-
{rendererSilent: environment.local.isUnitTest()},
373+
{rendererSilent: isUnitTest()},
373374
)
374375
await list.run()
375376
return data

0 commit comments

Comments
 (0)