🏡 index : quine-global-boneyard/electron-builder.git

import { readAsarJson } from "app-builder-lib/out/asar/asar"
import { Platform } from "electron-builder"
import { coerceTypes } from "electron-builder/out/builder"
import { readJson } from "fs-extra"
import * as path from "path"
import { assertThat } from "./helpers/fileAssert"
import { app, linuxDirTarget, modifyPackageJson } from "./helpers/packTester"
import { ExpectStatic } from "vitest"

function createExtraMetadataTest(expect: ExpectStatic, asar: boolean) {
  return app(
    expect,
    {
      targets: linuxDirTarget,
      config: coerceTypes({
        asar,
        linux: {
          executableName: "new-name",
        },
        extraMetadata: {
          version: "1.0.0-beta.19",
          foo: {
            bar: 12,
            updated: "true",
            disabled: "false",
          },
          rootKey: "false",
          rootKeyT: "true",
          rootKeyN: "null",
        },
      }),
    },
    {
      projectDirCreated: projectDir =>
        modifyPackageJson(projectDir, data => {
          data.scripts = {}
          data.devDependencies = { foo: "boo" }
          data.foo = {
            bar: 42,
            existingProp: 22,
          }
        }),
      packed: async context => {
        await assertThat(expect, path.join(context.getContent(Platform.LINUX), "new-name")).isFile()
        if (asar) {
          expect(await readAsarJson(path.join(context.getResources(Platform.LINUX), "app.asar"), "package.json")).toMatchSnapshot()
        } else {
          expect(await readJson(path.join(context.getResources(Platform.LINUX), "app", "package.json"))).toMatchSnapshot()
        }
      },
    }
  )
}

test.ifDevOrLinuxCi("extra metadata", ({ expect }) => createExtraMetadataTest(expect, true))
test.ifDevOrLinuxCi("extra metadata (no asar)", ({ expect }) => createExtraMetadataTest(expect, false))

test("cli", ({ expect }) => {
  // because these methods are internal
  const { configureBuildCommand, normalizeOptions } = require("electron-builder/out/builder")
  const yargs = require("yargs")
    .strict()
    .fail((message: string, error: Error | null) => {
      throw error || new Error(message)
    })
  configureBuildCommand(yargs)

  function parse(input: string): any {
    return normalizeOptions(yargs.parse(input.split(" ")))
  }

  function parseExtraMetadata(input: string) {
    const result = parse(input)
    delete result.targets
    return result
  }

  expect(parseExtraMetadata("--c.extraMetadata.foo=bar")).toMatchSnapshot()
  expect(parseExtraMetadata("--c.extraMetadata.dev.login-url")).toMatchSnapshot()
})