{"version":3,"file":"test-config.mjs","sources":["../../../../../src/server/test-helpers/test-config.ts"],"sourcesContent":["import {LogSeverity} from '@shopify/shopify-api';\nimport {SessionStorage} from '@shopify/shopify-app-session-storage';\nimport {MemorySessionStorage} from '@shopify/shopify-app-session-storage-memory';\nimport {\n  API_KEY,\n  API_SECRET_KEY,\n  APP_URL,\n} from '@shopify/shopify-api/test-helpers';\n\nimport type {AppConfigArg} from '../config-types';\nimport type {FutureFlagOptions} from '../future/flags';\n\nconst TEST_CONFIG = {\n  apiKey: API_KEY,\n  apiSecretKey: API_SECRET_KEY,\n  scopes: ['testScope'] as any,\n  appUrl: APP_URL,\n  adminApiAccessToken: API_KEY,\n  privateAppStorefrontAccessToken: API_KEY,\n  logger: {\n    level: LogSeverity.Debug,\n  },\n  sessionStorage: new MemorySessionStorage(),\n  isTesting: true,\n} as const;\n\nexport function testConfig<\n  Overrides extends TestOverridesArg,\n  Future extends FutureFlagOptions,\n>(\n  {future, ...overrides}: Overrides & {future?: Future} = {} as Overrides & {\n    future?: Future;\n  },\n): TestConfig<Overrides> {\n  return {\n    ...TEST_CONFIG,\n    ...overrides,\n    logger: {\n      ...TEST_CONFIG.logger,\n      ...(overrides as NonNullable<Overrides>).logger,\n    },\n    future,\n  } as any;\n}\n\n/*\n * This type combines both passed in types, by ignoring any keys from Type1 that are present (and not undefined)\n * in Type2, and then adding any keys from Type1 that are not present in Type2.\n *\n * This effectively enables us to create a type that is the const TEST_CONFIG below, plus any overrides passed in with\n * the output being a const object.\n */\ntype Modify<Type1, Type2> = {\n  [key in keyof Type2 as Type2[key] extends undefined\n    ? never\n    : key]: Type2[key];\n} & {\n  [key in keyof Type1 as key extends keyof Type2 ? never : key]: Type1[key];\n};\n\n/*\n * We omit the future prop and then redefine it with a partial of that object so we can pass the fully typed object in\n * to AppConfigArg.\n */\ntype TestOverrides = Partial<\n  Omit<AppConfigArg<SessionStorage, FutureFlagOptions>, 'future'> & {\n    future: Partial<FutureFlagOptions>;\n  }\n>;\n\nexport type TestOverridesArg = undefined | TestOverrides;\n\nexport type TestConfig<Overrides extends TestOverridesArg> = Modify<\n  typeof TEST_CONFIG,\n  Overrides\n> & {\n  future: FutureFlagOptions;\n  logger: AppConfigArg['logger'];\n};\n"],"names":[],"mappings":";;;;AAYA,MAAM,WAAW,GAAG;AAClB,IAAA,MAAM,EAAE,OAAO;AACf,IAAA,YAAY,EAAE,cAAc;IAC5B,MAAM,EAAE,CAAC,WAAW,CAAQ;AAC5B,IAAA,MAAM,EAAE,OAAO;AACf,IAAA,mBAAmB,EAAE,OAAO;AAC5B,IAAA,+BAA+B,EAAE,OAAO;AACxC,IAAA,MAAM,EAAE;QACN,KAAK,EAAE,WAAW,CAAC,KAAK;AACzB,KAAA;IACD,cAAc,EAAE,IAAI,oBAAoB,EAAE;AAC1C,IAAA,SAAS,EAAE,IAAI;CACP;AAEJ,SAAU,UAAU,CAIxB,EAAC,MAAM,EAAE,GAAG,SAAS,EAAA,GAAmC,EAEvD,EAAA;IAED,OAAO;AACL,QAAA,GAAG,WAAW;AACd,QAAA,GAAG,SAAS;AACZ,QAAA,MAAM,EAAE;YACN,GAAG,WAAW,CAAC,MAAM;YACrB,GAAI,SAAoC,CAAC,MAAM;AAChD,SAAA;QACD,MAAM;KACA;AACV;;;;"}