Skip to content

Commit 9c35fb1

Browse files
committed
move polyfill to it's own file
1 parent c72ce03 commit 9c35fb1

File tree

2 files changed

+23
-23
lines changed

2 files changed

+23
-23
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
interface PromiseWithResolvers<T> {
2+
promise: Promise<T>
3+
resolve: (value: T | PromiseLike<T>) => void
4+
reject: (reason?: unknown) => void
5+
}
6+
7+
// Polyfill for Promise.withResolvers
8+
// Can remove once our minimum supported Node version is 22
9+
export function promiseWithResolvers<T>(): PromiseWithResolvers<T> {
10+
if (typeof Promise.withResolvers === 'function') {
11+
return Promise.withResolvers<T>()
12+
}
13+
14+
let resolve!: (value: T | PromiseLike<T>) => void
15+
let reject!: (reason?: unknown) => void
16+
const promise = new Promise<T>((_resolve, _reject) => {
17+
resolve = _resolve
18+
reject = _reject
19+
})
20+
21+
return {promise, resolve, reject}
22+
}

packages/theme/src/cli/utilities/theme-environment/theme-environment.ts

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,35 +6,13 @@ import {reconcileAndPollThemeEditorChanges} from './remote-theme-watcher.js'
66
import {uploadTheme} from '../theme-uploader.js'
77
import {renderTasksToStdErr} from '../theme-ui.js'
88
import {renderThrownError} from '../errors.js'
9+
import {promiseWithResolvers} from '../../polyfills/promiseWithResolvers.js'
910
import {createApp, defineEventHandler, defineLazyEventHandler, toNodeListener, handleCors} from 'h3'
1011
import {fetchChecksums} from '@shopify/cli-kit/node/themes/api'
1112
import {createServer} from 'node:http'
1213
import type {Checksum, Theme} from '@shopify/cli-kit/node/themes/types'
1314
import type {DevServerContext} from './types.js'
1415

15-
// Polyfill for Promise.withResolvers
16-
// Can remove once our minimum supported Node version is 22
17-
interface PromiseWithResolvers<T> {
18-
promise: Promise<T>
19-
resolve: (value: T | PromiseLike<T>) => void
20-
reject: (reason?: unknown) => void
21-
}
22-
23-
function promiseWithResolvers<T>(): PromiseWithResolvers<T> {
24-
if (typeof Promise.withResolvers === 'function') {
25-
return Promise.withResolvers<T>()
26-
}
27-
28-
let resolve!: (value: T | PromiseLike<T>) => void
29-
let reject!: (reason?: unknown) => void
30-
const promise = new Promise<T>((_resolve, _reject) => {
31-
resolve = _resolve
32-
reject = _reject
33-
})
34-
35-
return {promise, resolve, reject}
36-
}
37-
3816
export function setupDevServer(theme: Theme, ctx: DevServerContext) {
3917
const {promise: backgroundJobPromise, reject: rejectBackgroundJob} = promiseWithResolvers<never>()
4018

0 commit comments

Comments
 (0)