# Project Packer

The project packer is a bundle that encapsulates a project generator together with a publisher and executes in a pipeline all the necessary steps so as to have a working project.

# Arguments

export interface PackerFactoryParams {
  publisher?: Publisher
  generator?: ProjectGenerator
  template?: GeneratedFolder
  remoteTemplateDefinition?: RemoteTemplateDefinition
  assets?: AssetsDefinition
}

# API reference

# setPublisher(publisher)

Sets the publisher for all subsequent calls of the pack function

  • Arguments: (Publisher) publisher
  • Returns: void
  • Usage:
import ProjectPacker from "@teleporthq/teleport-project-packer"
import NowPublisher from "@teleporthq/teleport-publisher-now"

const deployToken = "YOUR_DEPLOY_TOKEN_HERE"
NowPublisher.setAccessToken(deployToken)

ProjectPacker.setPublisher(NowPublisher)

# setGenerator(generator)

Sets the generator for all subsequent calls of the pack function

  • Arguments: (ProjectGenerator) generator
  • Returns: void
  • Usage:
import ProjectPacker from "@teleporthq/teleport-project-packer"
import NextGenerator from "@teleporthq/teleport-project-generator-next"

ProjectPacker.setGenerator(NextGenerator)

# setAssets(assets)

Sets the static assets collection for all subsequent calls of the pack function

  • Arguments: (AssetsDefinition) assets
  • Returns: void
  • Usage:
import ProjectPacker from "@teleporthq/teleport-project-packer"

const assets: AssetsDefinition = {
  /* ... */
}

ProjectPacker.setAssets(assets)

# setTemplate(template)

You can define the template in which the generated pages and components will be injected and set it to the packer before running the main pack method

  • Arguments: (GeneratedFolder) template
  • Returns: void
  • Usage:
import ProjectPacker from "@teleporthq/teleport-project-packer"

const template: GeneratedFolder = {
  /* ... */
}

ProjectPacker.setTemplate(template)

# loadTemplate(remoteTemplate)

In case you want to use a remote template (a github repository), you can load it before running the main method

  • Arguments: (RemoteTemplateDefinition) remoteTemplate
  • Returns: Promise<void>
  • Usage:
import ProjectPacker from "@teleporthq/teleport-project-packer"

const remoteTemplate: RemoteTemplateDefinition = {
  /* ... */
}

await ProjectPacker.loadTemplate(remoteTemplate)

# pack(projectUidl, packParams)

  • Arguments:

    • (ProjectUIDL) projectUidl
    • (PackerFactoryParams) packParams
  • Returns: Promise<PublisherResponse>

    • will have the same return type as the chosen publisher
  • Usage:

    import ProjectPacker from "@teleporthq/teleport-project-packer"
    import NowPublisher from "@teleporthq/teleport-publisher-now"
    import NextGenerator from "@teleporthq/teleport-project-generator-next"
    
    const projectUidl: ProjectUIDL = {
      /* ... */
    }
    
    // # Setup the publisher
    const deployToken = "YOUR_DEPLOY_TOKEN_HERE"
    NowPublisher.setAccessToken(deployToken)
    
    // # Setup the packer
    ProjectPacker.setGenerator(NextGenerator)
    ProjectPacker.setPublisher(NowPublisher)
    
    const result = await ProjectPacker.pack(project)
    

# Example

import ProjectPacker from "@teleporthq/teleport-project-packer"
import NowPublisher from "@teleporthq/teleport-publisher-now"
import NextGenerator from "@teleporthq/teleport-project-generator-next"

const projectUidl: ProjectUIDL = {
  /* ... */
}

const assets: AssetsDefinition = {
  /* ... */
}

const remoteTemplateDefinition: RemoteTemplateDefinition = {
  provider: "github",
  username: "teleporthq",
  repo: "teleport-project-template-next",
  auth: {
    token: "YOUR_GITHUB_TOKEN"
  }
}

// # Setup the publisher
const deployToken = "YOUR_DEPLOY_TOKEN_HERE"
NowPublisher.setAccessToken(deployToken)

// # Setup the packer
ProjectPacker.setGenerator(NextGenerator)
ProjectPacker.setPublisher(NowPublisher)

const result = ProjectPacker.pack(project, {
  remoteTemplateDefinition,
  assets
})

console.log(result)

Result:

{
  success: true
  payload: "https://teleport-project-template-next.now.sh"
}