{"version":3,"file":"bundle.test.mjs","names":["swcBundle","bundle"],"sources":["../../../src/tests/bundle.test.ts"],"sourcesContent":["import path from 'node:path';\nimport { bundle as swcBundle } from '@swc/core';\nimport type { BundleOptions } from '@swc/core/spack';\nimport pMap from 'p-map';\nimport type { PartialDeep } from 'type-fest';\n\nimport { bundle } from '../bundle';\n\nimport type { Configuration, FunctionBuildResult, FunctionEntry } from '../types';\nimport type SwcServerlessPlugin from '../index';\n\njest.mock('@swc/core', () => ({\n  bundle: jest.fn().mockResolvedValue({}),\n}));\njest.mock('p-map');\njest.mock('fs-extra', () => ({\n  mkdirSync: jest.fn(),\n  writeFileSync: jest.fn(),\n}));\n\nconst getBuild = async () => {\n  return swcBundle;\n};\n\nconst swcPlugin = (override?: Partial<SwcServerlessPlugin>): SwcServerlessPlugin =>\n  ({\n    prepare: jest.fn(),\n    serverless: {\n      cli: {\n        log: jest.fn(),\n      },\n      classes: {\n        Error,\n      },\n    },\n    buildOptions: {\n      concurrency: Infinity,\n\n      target: 'node',\n      external: [],\n      exclude: ['aws-sdk'],\n      nativeZip: false,\n      packager: 'npm',\n      installExtraArgs: [],\n      watch: {},\n      keepOutputDirectory: false,\n      packagerOptions: {},\n\n      outputFileExtension: '.js',\n    },\n    plugins: [],\n    buildDirPath: '/workdir/.swc',\n    functionEntries: [],\n    log: {\n      error: jest.fn(),\n      warning: jest.fn(),\n      notice: jest.fn(),\n      info: jest.fn(),\n      debug: jest.fn(),\n      verbose: jest.fn(),\n      success: jest.fn(),\n    },\n    ...override,\n  } as PartialDeep<SwcServerlessPlugin> as SwcServerlessPlugin);\n\nbeforeEach(() => {\n  jest.mocked(swcBundle).mockImplementation(async (optionsArg: any) => {\n    // Generate a response that will match output[file] logic\n    const options = optionsArg as BundleOptions;\n    if (typeof options.entry === 'string') {\n      const entryName = path.basename(options.entry);\n      return {\n        [entryName]: {\n          code: 'mock-code',\n          map: 'mock-map',\n        },\n      };\n    }\n    return {};\n  });\n  jest.mocked(pMap).mockImplementation((entries, mapper) => {\n    return Promise.all((entries as string[]).map((entry, index) => mapper(entry, index)));\n  });\n});\n\nafterEach(() => {\n  jest.resetAllMocks();\n});\n\nit('should call swc only once when functions share the same entry', async () => {\n  const functionEntries: FunctionEntry[] = [\n    {\n      entry: 'file1.ts',\n      func: {\n        events: [],\n        handler: 'file1.handler',\n      },\n      functionAlias: 'func1',\n    },\n    {\n      entry: 'file1.ts',\n      func: {\n        events: [],\n        handler: 'file1.handler2',\n      },\n      functionAlias: 'func2',\n    },\n  ];\n\n  await bundle.call(swcPlugin({ functionEntries }));\n\n  const proxy = await getBuild();\n  expect(proxy).toHaveBeenCalledTimes(1);\n});\n\nit('should only call swc multiple times when functions have different entries', async () => {\n  const functionEntries: FunctionEntry[] = [\n    {\n      entry: 'file1.ts',\n      func: {\n        events: [],\n        handler: 'file1.handler',\n      },\n      functionAlias: 'func1',\n    },\n    {\n      entry: 'file2.ts',\n      func: {\n        events: [],\n        handler: 'file2.handler',\n      },\n      functionAlias: 'func2',\n    },\n  ];\n\n  await bundle.call(swcPlugin({ functionEntries }));\n\n  const proxy = await getBuild();\n  expect(proxy).toHaveBeenCalledTimes(2);\n});\n\nit('should set buildResults after compilation is complete', async () => {\n  const functionEntries: FunctionEntry[] = [\n    {\n      entry: 'file1.ts',\n      func: {\n        events: [],\n        handler: 'file1.handler',\n      },\n      functionAlias: 'func1',\n    },\n    {\n      entry: 'file2.ts',\n      func: {\n        events: [],\n        handler: 'file2.handler',\n      },\n      functionAlias: 'func2',\n    },\n  ];\n\n  const expectedResults: FunctionBuildResult[] = [\n    {\n      bundlePath: 'file1.js',\n      func: { events: [], handler: 'file1.handler' },\n      functionAlias: 'func1',\n    },\n    {\n      bundlePath: 'file2.js',\n      func: { events: [], handler: 'file2.handler' },\n      functionAlias: 'func2',\n    },\n  ];\n\n  const plugin = swcPlugin({ functionEntries });\n\n  await bundle.call(plugin);\n\n  expect(plugin.buildResults).toStrictEqual(expectedResults);\n});\n\nit('should set the concurrency for pMap with the concurrency specified', async () => {\n  const functionEntries: FunctionEntry[] = [\n    {\n      entry: 'file1.ts',\n      func: {\n        events: [],\n        handler: 'file1.handler',\n      },\n      functionAlias: 'func1',\n    },\n  ];\n\n  const plugin = swcPlugin({ functionEntries });\n\n  await bundle.call(plugin);\n\n  expect(pMap).toHaveBeenCalledWith(expect.any(Array), expect.any(Function), {\n    concurrency: Infinity,\n  });\n});\n\nit('should filter out non swc options', async () => {\n  const functionEntries: FunctionEntry[] = [\n    {\n      entry: 'file1.ts',\n      func: {\n        events: [],\n        handler: 'file1.handler',\n      },\n      functionAlias: 'func1',\n    },\n  ];\n\n  const plugin = swcPlugin({ functionEntries });\n\n  await bundle.call(plugin);\n\n  const config: any = {\n    entry: 'file1.ts',\n    target: 'node',\n    external: [],\n    externalModules: ['aws-sdk'],\n    output: {\n      name: 'file1.js',\n      path: '/workdir/.swc',\n    },\n  };\n\n  const proxy = await getBuild();\n\n  expect(proxy).toHaveBeenCalledWith(config);\n});\n\ndescribe('buildOption platform node', () => {\n  it('should set buildResults buildPath after compilation is complete with default extension', async () => {\n    const functionEntries: FunctionEntry[] = [\n      {\n        entry: 'file1.ts',\n        func: {\n          events: [],\n          handler: 'file1.handler',\n        },\n        functionAlias: 'func1',\n      },\n      {\n        entry: 'file2.ts',\n        func: {\n          events: [],\n          handler: 'file2.handler',\n        },\n        functionAlias: 'func2',\n      },\n    ];\n\n    const expectedResults: FunctionBuildResult[] = [\n      {\n        bundlePath: 'file1.js',\n        func: { events: [], handler: 'file1.handler' },\n        functionAlias: 'func1',\n      },\n      {\n        bundlePath: 'file2.js',\n        func: { events: [], handler: 'file2.handler' },\n        functionAlias: 'func2',\n      },\n    ];\n\n    const plugin = swcPlugin({ functionEntries });\n\n    await bundle.call(plugin);\n\n    expect(plugin.buildResults).toStrictEqual(expectedResults);\n  });\n\n  it('should set buildResults buildPath after compilation is complete with \".cjs\" extension', async () => {\n    const functionEntries: FunctionEntry[] = [\n      {\n        entry: 'file1.ts',\n        func: {\n          events: [],\n          handler: 'file1.handler',\n        },\n        functionAlias: 'func1',\n      },\n      {\n        entry: 'file2.ts',\n        func: {\n          events: [],\n          handler: 'file2.handler',\n        },\n        functionAlias: 'func2',\n      },\n    ];\n\n    const buildOptions: Partial<Configuration> = {\n      concurrency: Infinity,\n\n      target: 'node',\n      external: [],\n      exclude: ['aws-sdk'],\n      nativeZip: false,\n      packager: 'npm',\n      installExtraArgs: [],\n      watch: {},\n      keepOutputDirectory: false,\n      packagerOptions: {},\n\n      outputFileExtension: '.cjs',\n    };\n\n    const expectedResults: FunctionBuildResult[] = [\n      {\n        bundlePath: 'file1.cjs',\n        func: { events: [], handler: 'file1.handler' },\n        functionAlias: 'func1',\n      },\n      {\n        bundlePath: 'file2.cjs',\n        func: { events: [], handler: 'file2.handler' },\n        functionAlias: 'func2',\n      },\n    ];\n\n    const plugin = swcPlugin({ functionEntries, buildOptions: buildOptions as any });\n\n    await bundle.call(plugin);\n\n    expect(plugin.buildResults).toStrictEqual(expectedResults);\n  });\n\n  it('should error when trying to use \".mjs\" extension', async () => {\n    const functionEntries: FunctionEntry[] = [\n      {\n        entry: 'file1.ts',\n        func: {\n          events: [],\n          handler: 'file1.handler',\n        },\n        functionAlias: 'func1',\n      },\n      {\n        entry: 'file2.ts',\n        func: {\n          events: [],\n          handler: 'file2.handler',\n        },\n        functionAlias: 'func2',\n      },\n    ];\n\n    const buildOptions: Partial<Configuration> = {\n      concurrency: Infinity,\n\n      target: 'node',\n      external: [],\n      exclude: ['aws-sdk'],\n      nativeZip: false,\n      packager: 'npm',\n      installExtraArgs: [],\n      watch: {},\n      keepOutputDirectory: false,\n      packagerOptions: {},\n\n      outputFileExtension: '.mjs',\n    };\n\n    const plugin = swcPlugin({ functionEntries, buildOptions: buildOptions as any });\n\n    const expectedError = 'ERROR: Non esm builds should not output a file with extension \".mjs\".';\n\n    try {\n      await bundle.call(plugin);\n    } catch (error) {\n      expect(error).toHaveProperty('message', expectedError);\n    }\n  });\n});\n\ndescribe('buildOption platform neutral', () => {\n  it('should set buildResults buildPath after compilation is complete with default extension', async () => {\n    const functionEntries: FunctionEntry[] = [\n      {\n        entry: 'file1.ts',\n        func: {\n          events: [],\n          handler: 'file1.handler',\n        },\n        functionAlias: 'func1',\n      },\n      {\n        entry: 'file2.ts',\n        func: {\n          events: [],\n          handler: 'file2.handler',\n        },\n        functionAlias: 'func2',\n      },\n    ];\n\n    const buildOptions: Partial<Configuration> = {\n      concurrency: Infinity,\n\n      target: 'node',\n      external: [],\n      exclude: ['aws-sdk'],\n      nativeZip: false,\n      packager: 'npm',\n      installExtraArgs: [],\n      watch: {},\n      keepOutputDirectory: false,\n      packagerOptions: {},\n\n      outputFileExtension: '.js',\n    };\n\n    const expectedResults: FunctionBuildResult[] = [\n      {\n        bundlePath: 'file1.js',\n        func: { events: [], handler: 'file1.handler' },\n        functionAlias: 'func1',\n      },\n      {\n        bundlePath: 'file2.js',\n        func: { events: [], handler: 'file2.handler' },\n        functionAlias: 'func2',\n      },\n    ];\n\n    const plugin = swcPlugin({ functionEntries, buildOptions: buildOptions as any });\n\n    await bundle.call(plugin);\n\n    expect(plugin.buildResults).toStrictEqual(expectedResults);\n  });\n\n  it('should set buildResults buildPath after compilation is complete with \".mjs\" extension', async () => {\n    const functionEntries: FunctionEntry[] = [\n      {\n        entry: 'file1.ts',\n        func: {\n          events: [],\n          handler: 'file1.handler',\n        },\n        functionAlias: 'func1',\n      },\n      {\n        entry: 'file2.ts',\n        func: {\n          events: [],\n          handler: 'file2.handler',\n        },\n        functionAlias: 'func2',\n      },\n    ];\n\n    const buildOptions: Partial<Configuration> = {\n      concurrency: Infinity,\n\n      target: 'node',\n      external: [],\n      exclude: ['aws-sdk'],\n      nativeZip: false,\n      packager: 'npm',\n      installExtraArgs: [],\n      watch: {},\n      keepOutputDirectory: false,\n      packagerOptions: {},\n\n      outputFileExtension: '.mjs',\n    };\n\n    const expectedResults: FunctionBuildResult[] = [\n      {\n        bundlePath: 'file1.mjs',\n        func: { events: [], handler: 'file1.handler' },\n        functionAlias: 'func1',\n      },\n      {\n        bundlePath: 'file2.mjs',\n        func: { events: [], handler: 'file2.handler' },\n        functionAlias: 'func2',\n      },\n    ];\n\n    const plugin = swcPlugin({ functionEntries, buildOptions: buildOptions as any });\n\n    await bundle.call(plugin);\n\n    expect(plugin.buildResults).toStrictEqual(expectedResults);\n  });\n\n  it('should error when trying to use \".cjs\" extension', async () => {\n    const functionEntries: FunctionEntry[] = [\n      {\n        entry: 'file1.ts',\n        func: {\n          events: [],\n          handler: 'file1.handler',\n        },\n        functionAlias: 'func1',\n      },\n      {\n        entry: 'file2.ts',\n        func: {\n          events: [],\n          handler: 'file2.handler',\n        },\n        functionAlias: 'func2',\n      },\n    ];\n\n    const buildOptions: Partial<Configuration> = {\n      concurrency: Infinity,\n\n      target: 'node',\n      external: [],\n      exclude: ['aws-sdk'],\n      nativeZip: false,\n      packager: 'npm',\n      installExtraArgs: [],\n      watch: {},\n      keepOutputDirectory: false,\n      packagerOptions: {},\n\n      outputFileExtension: '.cjs',\n    };\n\n    const plugin = swcPlugin({ functionEntries, buildOptions: buildOptions as any });\n\n    const expectedError = 'ERROR: format \"esm\" or platform \"neutral\" should not output a file with extension \".cjs\".';\n\n    try {\n      await bundle.call(plugin);\n    } catch (error) {\n      expect(error).toHaveProperty('message', expectedError);\n    }\n  });\n});\n"],"mappings":"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"}