UNPKG

39.2 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../src/AppUpdater.ts"],"names":[],"mappings":"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","sourcesContent":["import { AllPublishOptions, asArray, CancellationToken, newError, PublishConfiguration, UpdateInfo, UUID, DownloadOptions, CancellationError } from \"builder-util-runtime\"\nimport { randomBytes } from \"crypto\"\nimport { Notification } from \"electron\"\nimport { EventEmitter } from \"events\"\nimport { ensureDir, outputFile, readFile, rename, unlink } from \"fs-extra\"\nimport { OutgoingHttpHeaders } from \"http\"\nimport { safeLoad } from \"js-yaml\"\nimport { Lazy } from \"lazy-val\"\nimport * as path from \"path\"\nimport { eq as isVersionsEqual, gt as isVersionGreaterThan, lt as isVersionLessThan, parse as parseVersion, prerelease as getVersionPreleaseComponents, SemVer } from \"semver\"\nimport { AppAdapter } from \"./AppAdapter\"\nimport { createTempUpdateFile, DownloadedUpdateHelper } from \"./DownloadedUpdateHelper\"\nimport { ElectronAppAdapter } from \"./ElectronAppAdapter\"\nimport { ElectronHttpExecutor, getNetSession } from \"./electronHttpExecutor\"\nimport { GenericProvider } from \"./providers/GenericProvider\"\nimport { DOWNLOAD_PROGRESS, Logger, Provider, ResolvedUpdateFileInfo, UPDATE_DOWNLOADED, UpdateCheckResult, UpdateDownloadedEvent, UpdaterSignal } from \"./main\"\nimport { createClient, isUrlProbablySupportMultiRangeRequests } from \"./providerFactory\"\nimport { ProviderPlatform } from \"./providers/Provider\"\nimport Session = Electron.Session\n\nexport abstract class AppUpdater extends EventEmitter {\n /**\n * Whether to automatically download an update when it is found.\n */\n autoDownload: boolean = true\n\n /**\n * Whether to automatically install a downloaded update on app quit (if `quitAndInstall` was not called before).\n *\n * Applicable only on Windows and Linux.\n */\n autoInstallOnAppQuit: boolean = true\n\n /**\n * *GitHub provider only.* Whether to allow update to pre-release versions. Defaults to `true` if application version contains prerelease components (e.g. `0.12.1-alpha.1`, here `alpha` is a prerelease component), otherwise `false`.\n *\n * If `true`, downgrade will be allowed (`allowDowngrade` will be set to `true`).\n */\n allowPrerelease: boolean = false\n\n /**\n * *GitHub provider only.* Get all release notes (from current version to latest), not just the latest.\n * @default false\n */\n fullChangelog: boolean = false\n\n /**\n * Whether to allow version downgrade (when a user from the beta channel wants to go back to the stable channel).\n *\n * Taken in account only if channel differs (pre-release version component in terms of semantic versioning).\n *\n * @default false\n */\n allowDowngrade: boolean = false\n\n /**\n * The current application version.\n */\n readonly currentVersion: SemVer\n\n private _channel: string | null = null\n\n protected downloadedUpdateHelper: DownloadedUpdateHelper | null = null\n\n /**\n * Get the update channel. Not applicable for GitHub. Doesn't return `channel` from the update configuration, only if was previously set.\n */\n get channel(): string | null {\n return this._channel\n }\n\n /**\n * Set the update channel. Not applicable for GitHub. Overrides `channel` in the update configuration.\n *\n * `allowDowngrade` will be automatically set to `true`. If this behavior is not suitable for you, simple set `allowDowngrade` explicitly after.\n */\n set channel(value: string | null) {\n if (this._channel != null) {\n // noinspection SuspiciousTypeOfGuard\n if (typeof value !== \"string\") {\n throw newError(`Channel must be a string, but got: ${value}`, \"ERR_UPDATER_INVALID_CHANNEL\")\n }\n else if (value.length === 0) {\n throw newError(`Channel must be not an empty string`, \"ERR_UPDATER_INVALID_CHANNEL\")\n }\n }\n\n this._channel = value\n this.allowDowngrade = true\n }\n\n /**\n * The request headers.\n */\n requestHeaders: OutgoingHttpHeaders | null = null\n\n protected _logger: Logger = console\n\n // noinspection JSMethodCanBeStatic,JSUnusedGlobalSymbols\n get netSession(): Session {\n return getNetSession()\n }\n\n /**\n * The logger. You can pass [electron-log](https://github.com/megahertz/electron-log), [winston](https://github.com/winstonjs/winston) or another logger with the following interface: `{ info(), warn(), error() }`.\n * Set it to `null` if you would like to disable a logging feature.\n */\n get logger(): Logger | null {\n return this._logger\n }\n\n set logger(value: Logger | null) {\n this._logger = value == null ? new NoOpLogger() : value\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * For type safety you can use signals, e.g. `autoUpdater.signals.updateDownloaded(() => {})` instead of `autoUpdater.on('update-available', () => {})`\n */\n readonly signals = new UpdaterSignal(this)\n\n private _appUpdateConfigPath: string | null = null\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * test only\n * @private\n */\n set updateConfigPath(value: string | null) {\n this.clientPromise = null\n this._appUpdateConfigPath = value\n this.configOnDisk = new Lazy<any>(() => this.loadUpdateConfig())\n }\n\n private clientPromise: Promise<Provider<any>> | null = null\n\n protected readonly stagingUserIdPromise = new Lazy<string>(() => this.getOrCreateStagingUserId())\n\n // public, allow to read old config for anyone\n /** @internal */\n configOnDisk = new Lazy<any>(() => this.loadUpdateConfig())\n\n private checkForUpdatesPromise: Promise<UpdateCheckResult> | null = null\n\n protected readonly app: AppAdapter\n\n protected updateInfoAndProvider: UpdateInfoAndProvider | null = null\n\n /** @internal */\n readonly httpExecutor: ElectronHttpExecutor\n\n protected constructor(options: AllPublishOptions | null | undefined, app?: AppAdapter) {\n super()\n\n this.on(\"error\", (error: Error) => {\n this._logger.error(`Error: ${error.stack || error.message}`)\n })\n\n if (app == null) {\n this.app = new ElectronAppAdapter()\n this.httpExecutor = new ElectronHttpExecutor((authInfo, callback) => this.emit(\"login\", authInfo, callback))\n }\n else {\n this.app = app\n this.httpExecutor = null as any\n }\n\n const currentVersionString = this.app.version\n const currentVersion = parseVersion(currentVersionString)\n if (currentVersion == null) {\n throw newError(`App version is not a valid semver version: \"${currentVersionString}\"`, \"ERR_UPDATER_INVALID_VERSION\")\n }\n this.currentVersion = currentVersion\n this.allowPrerelease = hasPrereleaseComponents(currentVersion)\n\n if (options != null) {\n this.setFeedURL(options)\n\n if (typeof options !== \"string\" && options.requestHeaders) {\n this.requestHeaders = options.requestHeaders\n }\n }\n }\n\n //noinspection JSMethodCanBeStatic,JSUnusedGlobalSymbols\n getFeedURL(): string | null | undefined {\n return \"Deprecated. Do not use it.\"\n }\n\n /**\n * Configure update provider. If value is `string`, [GenericServerOptions](/configuration/publish#genericserveroptions) will be set with value as `url`.\n * @param options If you want to override configuration in the `app-update.yml`.\n */\n setFeedURL(options: PublishConfiguration | AllPublishOptions | string) {\n const runtimeOptions = this.createProviderRuntimeOptions()\n // https://github.com/electron-userland/electron-builder/issues/1105\n let provider: Provider<any>\n if (typeof options === \"string\") {\n provider = new GenericProvider({provider: \"generic\", url: options}, this, {\n ...runtimeOptions,\n isUseMultipleRangeRequest: isUrlProbablySupportMultiRangeRequests(options),\n })\n }\n else {\n provider = createClient(options, this, runtimeOptions)\n }\n this.clientPromise = Promise.resolve(provider)\n }\n\n /**\n * Asks the server whether there is an update.\n */\n checkForUpdates(): Promise<UpdateCheckResult> {\n let checkForUpdatesPromise = this.checkForUpdatesPromise\n if (checkForUpdatesPromise != null) {\n this._logger.info(\"Checking for update (already in progress)\")\n return checkForUpdatesPromise\n }\n\n const nullizePromise = () => this.checkForUpdatesPromise = null\n\n this._logger.info(\"Checking for update\")\n checkForUpdatesPromise = this.doCheckForUpdates()\n .then(it => {\n nullizePromise()\n return it\n })\n .catch(e => {\n nullizePromise()\n this.emit(\"error\", e, `Cannot check for updates: ${(e.stack || e).toString()}`)\n throw e\n })\n\n this.checkForUpdatesPromise = checkForUpdatesPromise\n return checkForUpdatesPromise\n }\n\n public isUpdaterActive(): boolean {\n if (!this.app.isPackaged) {\n this._logger.info(\"Skip checkForUpdatesAndNotify because application is not packed\")\n return false\n }\n return true\n }\n\n // noinspection JSUnusedGlobalSymbols\n checkForUpdatesAndNotify(downloadNotification?: DownloadNotification): Promise<UpdateCheckResult | null> {\n if (!this.isUpdaterActive()) {\n return Promise.resolve(null)\n }\n\n return this.checkForUpdates()\n .then(it => {\n const downloadPromise = it.downloadPromise\n if (downloadPromise == null) {\n const debug = this._logger.debug\n if (debug != null) {\n debug(\"checkForUpdatesAndNotify called, downloadPromise is null\")\n }\n return it\n }\n\n downloadPromise\n .then(() => {\n const notificationContent = this.formatDownloadNotification(it.updateInfo.version, this.app.name, downloadNotification);\n new Notification(notificationContent).show()\n })\n\n return it\n })\n }\n\n private formatDownloadNotification(version: string, appName: string, downloadNotification?: DownloadNotification): DownloadNotification {\n if (downloadNotification == null) {\n downloadNotification = {\n title: \"A new update is ready to install\",\n body: `{appName} version {version} has been downloaded and will be automatically installed on exit`\n }\n }\n downloadNotification = {\n title: downloadNotification.title.replace(\"{appName}\", appName).replace(\"{version}\", version),\n body: downloadNotification.body.replace(\"{appName}\", appName).replace(\"{version}\", version)\n }\n return downloadNotification;\n }\n\n private async isStagingMatch(updateInfo: UpdateInfo): Promise<boolean> {\n const rawStagingPercentage = updateInfo.stagingPercentage\n let stagingPercentage = rawStagingPercentage\n if (stagingPercentage == null) {\n return true\n }\n\n stagingPercentage = parseInt(stagingPercentage as any, 10)\n if (isNaN(stagingPercentage)) {\n this._logger.warn(`Staging percentage is NaN: ${rawStagingPercentage}`)\n return true\n }\n\n // convert from user 0-100 to internal 0-1\n stagingPercentage = stagingPercentage / 100\n\n const stagingUserId = await this.stagingUserIdPromise.value\n const val = UUID.parse(stagingUserId).readUInt32BE(12)\n const percentage = (val / 0xFFFFFFFF)\n this._logger.info(`Staging percentage: ${stagingPercentage}, percentage: ${percentage}, user id: ${stagingUserId}`)\n return percentage < stagingPercentage\n }\n\n private computeFinalHeaders(headers: OutgoingHttpHeaders) {\n if (this.requestHeaders != null) {\n Object.assign(headers, this.requestHeaders)\n }\n return headers\n }\n\n private async isUpdateAvailable(updateInfo: UpdateInfo): Promise<boolean> {\n const latestVersion = parseVersion(updateInfo.version)\n if (latestVersion == null) {\n throw newError(`This file could not be downloaded, or the latest version (from update server) does not have a valid semver version: \"${updateInfo.version}\"`, \"ERR_UPDATER_INVALID_VERSION\")\n }\n\n const currentVersion = this.currentVersion\n if (isVersionsEqual(latestVersion, currentVersion)) {\n return false\n }\n\n const isStagingMatch = await this.isStagingMatch(updateInfo)\n if (!isStagingMatch) {\n return false\n }\n\n // https://github.com/electron-userland/electron-builder/pull/3111#issuecomment-405033227\n // https://github.com/electron-userland/electron-builder/pull/3111#issuecomment-405030797\n const isLatestVersionNewer = isVersionGreaterThan(latestVersion, currentVersion)\n const isLatestVersionOlder = isVersionLessThan(latestVersion, currentVersion)\n\n if (isLatestVersionNewer) {\n return true\n }\n return this.allowDowngrade && isLatestVersionOlder;\n }\n\n protected async getUpdateInfoAndProvider(): Promise<UpdateInfoAndProvider> {\n await this.app.whenReady()\n\n if (this.clientPromise == null) {\n this.clientPromise = this.configOnDisk.value.then(it => createClient(it, this, this.createProviderRuntimeOptions()))\n }\n\n const client = await this.clientPromise\n const stagingUserId = await this.stagingUserIdPromise.value\n client.setRequestHeaders(this.computeFinalHeaders({\"x-user-staging-id\": stagingUserId}))\n return {\n info: await client.getLatestVersion(),\n provider: client,\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n private createProviderRuntimeOptions() {\n return {\n isUseMultipleRangeRequest: true,\n platform: this._testOnlyOptions == null ? process.platform as ProviderPlatform : this._testOnlyOptions.platform,\n executor: this.httpExecutor,\n }\n }\n\n private async doCheckForUpdates(): Promise<UpdateCheckResult> {\n this.emit(\"checking-for-update\")\n\n const result = await this.getUpdateInfoAndProvider()\n const updateInfo = result.info\n if (!await this.isUpdateAvailable(updateInfo)) {\n this._logger.info(`Update for version ${this.currentVersion} is not available (latest version: ${updateInfo.version}, downgrade is ${this.allowDowngrade ? \"allowed\" : \"disallowed\"}).`)\n this.emit(\"update-not-available\", updateInfo)\n return {\n versionInfo: updateInfo,\n updateInfo,\n }\n }\n\n this.updateInfoAndProvider = result\n this.onUpdateAvailable(updateInfo)\n\n const cancellationToken = new CancellationToken()\n //noinspection ES6MissingAwait\n return {\n versionInfo: updateInfo,\n updateInfo,\n cancellationToken,\n downloadPromise: this.autoDownload ? this.downloadUpdate(cancellationToken) : null\n }\n }\n\n protected onUpdateAvailable(updateInfo: UpdateInfo): void {\n this._logger.info(`Found version ${updateInfo.version} (url: ${asArray(updateInfo.files).map(it => it.url).join(\", \")})`)\n this.emit(\"update-available\", updateInfo)\n }\n\n /**\n * Start downloading update manually. You can use this method if `autoDownload` option is set to `false`.\n * @returns {Promise<string>} Path to downloaded file.\n */\n downloadUpdate(cancellationToken: CancellationToken = new CancellationToken()): Promise<any> {\n const updateInfoAndProvider = this.updateInfoAndProvider\n if (updateInfoAndProvider == null) {\n const error = new Error(\"Please check update first\")\n this.dispatchError(error)\n return Promise.reject(error)\n }\n\n this._logger.info(`Downloading update from ${asArray(updateInfoAndProvider.info.files).map(it => it.url).join(\", \")}`)\n const errorHandler = (e: Error): Error => {\n // https://github.com/electron-userland/electron-builder/issues/1150#issuecomment-436891159\n if (!(e instanceof CancellationError)) {\n try {\n this.dispatchError(e)\n }\n catch (nestedError) {\n this._logger.warn(`Cannot dispatch error event: ${nestedError.stack || nestedError}`)\n }\n }\n\n return e\n }\n\n try {\n return this.doDownloadUpdate({\n updateInfoAndProvider,\n requestHeaders: this.computeRequestHeaders(updateInfoAndProvider.provider),\n cancellationToken,\n })\n .catch(e => {\n throw errorHandler(e)\n })\n }\n catch (e) {\n return Promise.reject(errorHandler(e))\n }\n }\n\n protected dispatchError(e: Error): void {\n this.emit(\"error\", e, (e.stack || e).toString())\n }\n\n protected dispatchUpdateDownloaded(event: UpdateDownloadedEvent): void {\n this.emit(UPDATE_DOWNLOADED, event)\n }\n\n protected abstract doDownloadUpdate(downloadUpdateOptions: DownloadUpdateOptions): Promise<Array<string>>\n\n /**\n * Restarts the app and installs the update after it has been downloaded.\n * It should only be called after `update-downloaded` has been emitted.\n *\n * **Note:** `autoUpdater.quitAndInstall()` will close all application windows first and only emit `before-quit` event on `app` after that.\n * This is different from the normal quit event sequence.\n *\n * @param isSilent *windows-only* Runs the installer in silent mode. Defaults to `false`.\n * @param isForceRunAfter Run the app after finish even on silent install. Not applicable for macOS. Ignored if `isSilent` is set to `false`.\n */\n abstract quitAndInstall(isSilent?: boolean, isForceRunAfter?: boolean): void\n\n private async loadUpdateConfig(): Promise<any> {\n if (this._appUpdateConfigPath == null) {\n this._appUpdateConfigPath = this.app.appUpdateConfigPath\n }\n return safeLoad(await readFile(this._appUpdateConfigPath, \"utf-8\"))\n }\n\n private computeRequestHeaders(provider: Provider<any>): OutgoingHttpHeaders {\n const fileExtraDownloadHeaders = provider.fileExtraDownloadHeaders\n if (fileExtraDownloadHeaders != null) {\n const requestHeaders = this.requestHeaders\n return requestHeaders == null ? fileExtraDownloadHeaders : {\n ...fileExtraDownloadHeaders,\n ...requestHeaders,\n }\n }\n return this.computeFinalHeaders({accept: \"*/*\"})\n }\n\n private async getOrCreateStagingUserId(): Promise<string> {\n const file = path.join(this.app.userDataPath, \".updaterId\")\n try {\n const id = await readFile(file, \"utf-8\")\n if (UUID.check(id)) {\n return id\n }\n else {\n this._logger.warn(`Staging user id file exists, but content was invalid: ${id}`)\n }\n }\n catch (e) {\n if (e.code !== \"ENOENT\") {\n this._logger.warn(`Couldn't read staging user ID, creating a blank one: ${e}`)\n }\n }\n\n const id = UUID.v5(randomBytes(4096), UUID.OID)\n this._logger.info(`Generated new staging user ID: ${id}`)\n try {\n await outputFile(file, id)\n }\n catch (e) {\n this._logger.warn(`Couldn't write out staging user ID: ${e}`)\n }\n return id\n }\n\n /** @internal */\n get isAddNoCacheQuery(): boolean {\n const headers = this.requestHeaders\n // https://github.com/electron-userland/electron-builder/issues/3021\n if (headers == null) {\n return true\n }\n\n for (const headerName of Object.keys(headers)) {\n const s = headerName.toLowerCase()\n if (s === \"authorization\" || s === \"private-token\") {\n return false\n }\n }\n return true\n }\n\n /**\n * @private\n * @internal\n */\n _testOnlyOptions: TestOnlyUpdaterOptions | null = null\n\n private async getOrCreateDownloadHelper(): Promise<DownloadedUpdateHelper> {\n let result = this.downloadedUpdateHelper\n if (result == null) {\n const dirName = (await this.configOnDisk.value).updaterCacheDirName\n const logger = this._logger\n if (dirName == null) {\n logger.error(\"updaterCacheDirName is not specified in app-update.yml Was app build using at least electron-builder 20.34.0?\")\n }\n const cacheDir = path.join(this.app.baseCachePath, dirName || this.app.name)\n if (logger.debug != null) {\n logger.debug(`updater cache dir: ${cacheDir}`)\n }\n\n result = new DownloadedUpdateHelper(cacheDir)\n this.downloadedUpdateHelper = result\n }\n return result\n }\n\n protected async executeDownload(taskOptions: DownloadExecutorTask): Promise<Array<string>> {\n const fileInfo = taskOptions.fileInfo\n const downloadOptions: DownloadOptions = {\n headers: taskOptions.downloadUpdateOptions.requestHeaders,\n cancellationToken: taskOptions.downloadUpdateOptions.cancellationToken,\n sha2: (fileInfo.info as any).sha2,\n sha512: fileInfo.info.sha512,\n }\n\n if (this.listenerCount(DOWNLOAD_PROGRESS) > 0) {\n downloadOptions.onProgress = it => this.emit(DOWNLOAD_PROGRESS, it)\n }\n\n const updateInfo = taskOptions.downloadUpdateOptions.updateInfoAndProvider.info\n const version = updateInfo.version\n const packageInfo = fileInfo.packageInfo\n\n function getCacheUpdateFileName(): string {\n // NodeJS URL doesn't decode automatically\n const urlPath = decodeURIComponent(taskOptions.fileInfo.url.pathname)\n if (urlPath.endsWith(`.${taskOptions.fileExtension}`)) {\n return path.posix.basename(urlPath)\n }\n else {\n // url like /latest, generate name\n return `update.${taskOptions.fileExtension}`\n }\n }\n\n const downloadedUpdateHelper = await this.getOrCreateDownloadHelper()\n const cacheDir = downloadedUpdateHelper.cacheDirForPendingUpdate\n await ensureDir(cacheDir)\n const updateFileName = getCacheUpdateFileName()\n let updateFile = path.join(cacheDir, updateFileName)\n const packageFile = packageInfo == null ? null : path.join(cacheDir, `package-${version}${path.extname(packageInfo.path) || \".7z\"}`)\n\n const done = async (isSaveCache: boolean) => {\n await downloadedUpdateHelper.setDownloadedFile(updateFile, packageFile, updateInfo, fileInfo, updateFileName, isSaveCache)\n await taskOptions.done!!({\n ...updateInfo,\n downloadedFile: updateFile,\n })\n return packageFile == null ? [updateFile] : [updateFile, packageFile]\n }\n\n const log = this._logger\n const cachedUpdateFile = await downloadedUpdateHelper.validateDownloadedPath(updateFile, updateInfo, fileInfo, log)\n if (cachedUpdateFile != null) {\n updateFile = cachedUpdateFile\n return await done(false)\n }\n\n const removeFileIfAny = async () => {\n await downloadedUpdateHelper.clear()\n .catch(() => {\n // ignore\n })\n return await unlink(updateFile)\n .catch(() => {\n // ignore\n })\n }\n\n const tempUpdateFile = await createTempUpdateFile(`temp-${updateFileName}`, cacheDir, log)\n try {\n await taskOptions.task(tempUpdateFile, downloadOptions, packageFile, removeFileIfAny)\n await rename(tempUpdateFile, updateFile)\n }\n catch (e) {\n await removeFileIfAny()\n\n if (e instanceof CancellationError) {\n log.info(\"cancelled\")\n this.emit(\"update-cancelled\", updateInfo)\n }\n throw e\n }\n\n log.info(`New version ${version} has been downloaded to ${updateFile}`)\n return await done(true)\n }\n}\n\nexport interface DownloadUpdateOptions {\n readonly updateInfoAndProvider: UpdateInfoAndProvider\n readonly requestHeaders: OutgoingHttpHeaders\n readonly cancellationToken: CancellationToken\n}\n\nfunction hasPrereleaseComponents(version: SemVer) {\n const versionPrereleaseComponent = getVersionPreleaseComponents(version)\n return versionPrereleaseComponent != null && versionPrereleaseComponent.length > 0\n}\n\n/** @private */\nexport class NoOpLogger implements Logger {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n info(message?: any) {\n // ignore\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n warn(message?: any) {\n // ignore\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n error(message?: any) {\n // ignore\n }\n}\n\nexport interface UpdateInfoAndProvider {\n info: UpdateInfo\n provider: Provider<any>\n}\n\nexport interface DownloadExecutorTask {\n readonly fileExtension: string\n readonly fileInfo: ResolvedUpdateFileInfo\n readonly downloadUpdateOptions: DownloadUpdateOptions\n readonly task: (destinationFile: string, downloadOptions: DownloadOptions, packageFile: string | null, removeTempDirIfAny: () => Promise<any>) => Promise<any>\n\n readonly done?: (event: UpdateDownloadedEvent) => Promise<any>\n}\n\nexport interface DownloadNotification {\n body: string\n title: string\n}\n\n/** @private */\nexport interface TestOnlyUpdaterOptions {\n platform: ProviderPlatform\n\n isUseDifferentialDownload?: boolean\n}\n"],"sourceRoot":""}