{"version":3,"file":"pack.test.cjs","names":["filterFilesForZipPackage","fs","pMap","utils","pack","copyPreBuiltResources","SERVERLESS_FOLDER"],"sources":["../../../src/tests/pack.test.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport globby from 'globby';\nimport pMap from 'p-map';\n\nimport { filterFilesForZipPackage, pack, copyPreBuiltResources } from '../pack';\nimport * as utils from '../utils';\nimport type { SwcFunctionDefinitionHandler, FunctionBuildResult } from '../types';\nimport type SwcServerlessPlugin from '../index';\nimport { SERVERLESS_FOLDER } from '../constants';\n\njest.mock('globby');\njest.mock('fs-extra');\njest.mock('p-map');\n\nconst mockCli = {\n  log: jest.fn(),\n};\n\ndescribe('filterFilesForZipPackage', () => {\n  it('should filter out files for another zip package', () => {\n    expect(\n      filterFilesForZipPackage({\n        files: [\n          {\n            localPath: '__only_service-otherFnName/bin/imagemagick/include/ImageMagick/magick/method-attribute.h',\n            rootPath:\n              '/home/capaj/repos/google/search/.swc/.build/__only_service-otherFnName/bin/imagemagick/include/ImageMagick/magick/method-attribute.h',\n          },\n\n          {\n            localPath: '__only_fnAlias/bin/imagemagick/include/ImageMagick/magick/method-attribute.h',\n            rootPath:\n              '/home/capaj/repos/google/search/.swc/.build/__only_fnAlias/bin/imagemagick/include/ImageMagick/magick/method-attribute.h',\n          },\n        ],\n\n        depWhiteList: [],\n        functionAlias: 'fnAlias',\n        isGoogleProvider: false,\n        hasExternals: false,\n        includedFiles: [],\n        excludedFiles: [],\n      })\n    ).toMatchInlineSnapshot(`\n      [\n        {\n          \"localPath\": \"__only_fnAlias/bin/imagemagick/include/ImageMagick/magick/method-attribute.h\",\n          \"rootPath\": \"/home/capaj/repos/google/search/.swc/.build/__only_fnAlias/bin/imagemagick/include/ImageMagick/magick/method-attribute.h\",\n        },\n      ]\n    `);\n  });\n});\n\ndescribe('pack', () => {\n  beforeEach(() => {\n    jest.mocked(globby).sync.mockReturnValue(['hello1.js', 'hello2.js']);\n    jest.mocked(globby).mockResolvedValue([]);\n    jest.mocked(fs).statSync.mockReturnValue({ size: 123 } as fs.Stats);\n\n    jest.mocked(pMap).mockImplementation((entries, mapper) => {\n      return Promise.all((entries as string[]).map((entry, index) => mapper(entry, index)));\n    });\n  });\n\n  afterEach(() => {\n    jest.clearAllMocks();\n  });\n\n  describe('individually', () => {\n    it('should create zips with the functionAlias as the name', async () => {\n      const buildResults: FunctionBuildResult[] = [\n        {\n          bundlePath: 'hello1.js',\n          func: {\n            handler: 'hello1.handler',\n            events: [{ http: { path: 'hello', method: 'get' } }],\n            name: 'serverless-example-dev-hello1',\n            package: {},\n          },\n          functionAlias: 'hello1',\n        },\n        {\n          bundlePath: 'hello2.js',\n          func: {\n            handler: 'hello2.handler',\n            events: [{ http: { path: 'hello', method: 'get' } }],\n            name: 'serverless-example-dev-hello2',\n            package: {},\n          },\n          functionAlias: 'hello2',\n        },\n      ];\n\n      const swcPlugin = {\n        buildResults,\n        serverless: {\n          service: {\n            package: {\n              individually: true,\n            },\n          },\n          cli: mockCli,\n          getVersion: jest.fn().mockReturnValue('3.28.1'),\n        },\n        buildOptions: {\n          zipConcurrency: Infinity,\n          packager: 'yarn',\n          exclude: ['aws-sdk'],\n          external: [],\n          nativeZip: false,\n        },\n        buildDirPath: '/workdir/serverless-swc/examples/individually/.swc/.build',\n        workDirPath: '/workdir/serverless-swc/examples/individually/.swc/',\n        serviceDirPath: '/workdir/serverless-swc/examples/individually',\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      } as unknown as SwcServerlessPlugin;\n\n      const zipSpy = jest.spyOn(utils, 'zip').mockResolvedValue();\n\n      await pack.call(swcPlugin);\n\n      expect(zipSpy).toHaveBeenCalledWith(\n        '/workdir/serverless-swc/examples/individually/.swc/.serverless/hello1.zip',\n        expect.any(Array),\n        expect.any(Boolean)\n      );\n      expect(zipSpy).toHaveBeenCalledWith(\n        '/workdir/serverless-swc/examples/individually/.swc/.serverless/hello2.zip',\n        expect.any(Array),\n        expect.any(Boolean)\n      );\n    });\n\n    it('should call pMap with the right concurrency', async () => {\n      const buildResults: FunctionBuildResult[] = [\n        {\n          bundlePath: 'hello1.js',\n          func: {\n            handler: 'hello1.handler',\n            events: [{ http: { path: 'hello', method: 'get' } }],\n            name: 'serverless-example-dev-hello1',\n            package: {},\n          },\n          functionAlias: 'hello1',\n        },\n        {\n          bundlePath: 'hello2.js',\n          func: {\n            handler: 'hello2.handler',\n            events: [{ http: { path: 'hello', method: 'get' } }],\n            name: 'serverless-example-dev-hello2',\n            package: {},\n          },\n          functionAlias: 'hello2',\n        },\n      ];\n\n      const swcPlugin = {\n        buildResults,\n        serverless: {\n          service: {\n            package: {\n              individually: true,\n            },\n          },\n          cli: mockCli,\n          getVersion: jest.fn().mockReturnValue('3.28.1'),\n        },\n        buildOptions: {\n          zipConcurrency: Infinity,\n          packager: 'yarn',\n          exclude: ['aws-sdk'],\n          external: [],\n          nativeZip: false,\n        },\n        buildDirPath: '/workdir/serverless-swc/examples/individually/.swc/.build',\n        workDirPath: '/workdir/serverless-swc/examples/individually/.swc/',\n        serviceDirPath: '/workdir/serverless-swc/examples/individually',\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      } as unknown as SwcServerlessPlugin;\n\n      await pack.call(swcPlugin);\n\n      expect(pMap).toHaveBeenCalledWith(expect.any(Array), expect.any(Function), {\n        concurrency: Infinity,\n      });\n    });\n  });\n});\n\ndescribe('copyPreBuiltResources', () => {\n  afterEach(() => {\n    jest.clearAllMocks();\n  });\n  function getMockSwcPlugin(bundleIndividually = true): SwcServerlessPlugin {\n    return {\n      functions: {\n        hello1: { handler: 'hello1.handler', events: [], package: { artifact: 'hello1' }, skipSwc: true },\n        hello2: { handler: 'hello2.handler', events: [], package: { artifact: 'hello2' }, skipSwc: true },\n      },\n      serverless: {\n        service: {\n          service: 'testApp',\n          package: {\n            individually: bundleIndividually,\n          },\n        },\n        cli: mockCli,\n        getVersion: jest.fn().mockReturnValue('3.28.1'),\n      },\n      buildOptions: {\n        zipConcurrency: Infinity,\n        packager: 'yarn',\n        exclude: ['aws-sdk'],\n        external: [],\n        nativeZip: false,\n      },\n      buildDirPath: '/workdir/serverless-swc/examples/individually/.swc/.build',\n      workDirPath: '/workdir/serverless-swc/examples/individually/.swc/',\n      serviceDirPath: '/workdir/serverless-swc/examples/individually',\n      packageOutputPath: '/workdir/serverless-swc/examples/minimal',\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    } as unknown as SwcServerlessPlugin;\n  }\n\n  it('should copy the single artifact if not bundling individually', async () => {\n    const mockSwcPlugin = getMockSwcPlugin(false);\n\n    await copyPreBuiltResources.call(mockSwcPlugin);\n\n    expect(mockSwcPlugin.serverless.service.package.artifact).toEqual(\n      `${mockSwcPlugin.workDirPath}${SERVERLESS_FOLDER}/${mockSwcPlugin.serverless.service.service}.zip`\n    );\n    expect(fs.copy).toHaveBeenCalledTimes(1);\n  });\n\n  it('should copy the artifacts for all of the functions when bundling individually', async () => {\n    const mockSwcPlugin = getMockSwcPlugin();\n\n    await copyPreBuiltResources.call(mockSwcPlugin);\n\n    expect(mockSwcPlugin.serverless.service.package.artifact).not.toBeDefined();\n    expect(fs.copy).toHaveBeenCalledTimes(2);\n    Object.keys(mockSwcPlugin.functions).forEach((functionAlias) => {\n      const func = mockSwcPlugin.functions[functionAlias];\n      expect(func?.package?.artifact).toEqual(`.swc/${SERVERLESS_FOLDER}/${functionAlias}.zip`);\n    });\n  });\n\n  it('should not copy over artifacts for functions where `skipSwc` is false', async () => {\n    const mockSwcPlugin = getMockSwcPlugin();\n    mockSwcPlugin.functions.hello3 = {\n      handler: 'hello3.handler',\n      events: [],\n      package: { artifact: 'hello3' },\n      skipSwc: false,\n    } as SwcFunctionDefinitionHandler;\n\n    await copyPreBuiltResources.call(mockSwcPlugin);\n\n    expect(mockSwcPlugin.serverless.service.package.artifact).not.toBeDefined();\n    expect(fs.copy).toHaveBeenCalledTimes(2);\n    Object.keys(mockSwcPlugin.functions).forEach((functionAlias) => {\n      const func = mockSwcPlugin.functions[functionAlias] as SwcFunctionDefinitionHandler;\n      if (func.skipSwc) {\n        expect(func?.package?.artifact).toEqual(`.swc/${SERVERLESS_FOLDER}/${functionAlias}.zip`);\n      }\n    });\n  });\n});\n"],"mappings":"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"}