{"version":3,"sources":["jsdelivr-header.js","/npm/src/tasks/validation-util.ts","/npm/src/tasks/util.ts","/npm/src/model/license-type.ts","/npm/src/tasks/parser.ts","/npm/src/tasks/meta.ts","/npm/src/model/log-level.ts","/npm/src/common/logger.ts","/npm/src/tasks/clean.ts","/npm/src/plugins/gulp-hbs-runtime.ts","/npm/node_modules/filesize/lib/filesize.js","/npm/src/tasks/build-util.ts","/npm/src/tasks/build.ts","/npm/src/tasks/generate-config-util.ts","/npm/src/tasks/generate-test-util.ts","/npm/src/tasks/generate-source-util.ts","/npm/src/tasks/generate-demo-source-util.ts","/npm/src/tasks/generate-package-config.ts","/npm/src/tasks/generate.ts","/npm/src/tasks/lint.ts","/npm/src/tasks/format.ts","/npm/src/tasks/test-util.ts","/npm/src/plugins/karma-packer-plugin.ts","/npm/src/tasks/test.ts","/npm/src/tasks/watch.ts","/npm/src/tasks/version.ts","/npm/src/index.ts"],"names":[],"mappings":"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","file":"/npm/packer-cli@2.17.8/bundle/packer-cli.cjs.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/packer-cli@2.17.8/bundle/packer-cli.cjs.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import inspector from 'schema-inspector';\nimport forOwn from 'lodash/forOwn';\nimport path from 'path';\n\nimport { Logger } from '../common/logger';\nimport { PackerConfig } from '../model/packer-config';\n\n/**\n * Schema inspector packer config validation schema.\n */\nexport const packerSchema = {\n  type: 'object',\n  optional: false,\n  $mapDef: true,\n  properties: {\n    entry: {\n      type: 'string',\n      optional: false,\n      def: 'index.js'\n    },\n    source: {\n      type: 'string',\n      optional: false,\n      def: 'src'\n    },\n    dist: {\n      type: 'string',\n      optional: false,\n      def: 'dist'\n    },\n    tmp: {\n      type: 'string',\n      optional: false,\n      def: '.tmp'\n    },\n    compiler: {\n      type: 'object',\n      optional: false,\n      $mapDef: true,\n      properties: {\n        dependencyMapMode: {\n          type: 'string',\n          optional: false,\n          def: 'cross-map-peer-dependency',\n          pattern: /^(cross-map-peer-dependency|cross-map-dependency|map-dependency|map-peer-dependency|all)$/\n        },\n        packageFieldsToCopy: {\n          type: 'array',\n          optional: false,\n          def: ['name', 'version', 'description', 'keywords', 'author', 'repository', 'license', 'bugs', 'homepage'],\n          items: {\n            type: 'string'\n          }\n        },\n        sourceMap: {\n          type: ['string', 'boolean'],\n          optional: false,\n          pattern: /^(inline)$/,\n          def: true\n        },\n        customRollupPluginExtractor: {\n          type: ['null', 'function'],\n          optional: false,\n          def: null\n        },\n        build: {\n          type: 'object',\n          optional: false,\n          $mapDef: true,\n          properties: {\n            bundleMin: {\n              type: 'boolean',\n              optional: false,\n              def: true\n            },\n            es5: {\n              type: 'boolean',\n              optional: false,\n              def: false\n            },\n            es5Min: {\n              type: 'boolean',\n              optional: false,\n              def: false\n            },\n            esnext: {\n              type: 'boolean',\n              optional: false,\n              def: true\n            },\n            esnextMin: {\n              type: 'boolean',\n              optional: false,\n              def: true\n            }\n          }\n        },\n        buildMode: {\n          type: 'string',\n          optional: false,\n          def: 'browser',\n          pattern: /^(browser|node|node-cli)$/\n        },\n        script: {\n          type: 'object',\n          optional: false,\n          $mapDef: true,\n          properties: {\n            preprocessor: {\n              type: 'string',\n              optional: false,\n              def: 'none',\n              pattern: /^(none|typescript)$/\n            },\n            tsd: {\n              type: 'string',\n              optional: false,\n              def: 'typings'\n            },\n            image: {\n              type: 'object',\n              optional: false,\n              $mapDef: true,\n              properties: {\n                inlineLimit: {\n                  type: 'number',\n                  optional: false,\n                  gt: 0,\n                  def: 1000000\n                },\n                outDir: {\n                  type: 'string',\n                  optional: false,\n                  def: 'images'\n                }\n              }\n            }\n          }\n        },\n        style: {\n          type: ['object', 'boolean'],\n          optional: false,\n          $acceptOnly: 'false',\n          $mapDef: true,\n          properties: {\n            inline: {\n              type: 'boolean',\n              optional: false,\n              def: false\n            },\n            outDir: {\n              type: 'string',\n              optional: false,\n              def: 'styles'\n            },\n            preprocessor: {\n              type: 'string',\n              optional: false,\n              def: 'none',\n              pattern: /^(scss|sass|less|stylus|none)$/\n            },\n            image: {\n              type: 'object',\n              optional: false,\n              $mapDef: true,\n              properties: {\n                inlineLimit: {\n                  type: 'number',\n                  optional: false,\n                  gt: 0,\n                  def: 1000000\n                },\n                outDir: {\n                  type: 'string',\n                  optional: false,\n                  def: 'images'\n                }\n              }\n            }\n          }\n        },\n        concurrentBuild: {\n          type: 'boolean',\n          optional: false,\n          def: true\n        },\n        advanced: {\n          type: 'object',\n          optional: false,\n          $mapDef: true,\n          properties: {\n            rollup: {\n              type: 'object',\n              optional: false,\n              $mapDef: true,\n              properties: {\n                inputOptions: {\n                  type: 'object',\n                  optional: false,\n                  def: {}\n                },\n                outputOptions: {\n                  type: 'object',\n                  optional: false,\n                  def: {}\n                },\n                watchOptions: {\n                  type: 'object',\n                  optional: false,\n                  def: {}\n                },\n                pluginOptions: {\n                  type: 'object',\n                  optional: false,\n                  $mapDef: true,\n                  properties: {\n                    ignoreImport: {\n                      type: 'object',\n                      optional: false,\n                      def: {}\n                    },\n                    postCss: {\n                      type: 'object',\n                      optional: false,\n                      def: {}\n                    },\n                    nodeResolve: {\n                      type: 'object',\n                      optional: false,\n                      def: {}\n                    },\n                    commonjs: {\n                      type: 'object',\n                      optional: false,\n                      def: {}\n                    },\n                    json: {\n                      type: 'object',\n                      optional: false,\n                      def: {}\n                    },\n                    globals: {\n                      type: 'object',\n                      optional: false,\n                      def: {}\n                    },\n                    babel: {\n                      type: 'object',\n                      optional: false,\n                      def: {}\n                    },\n                    typescript: {\n                      type: 'object',\n                      optional: false,\n                      def: {}\n                    },\n                    replace: {\n                      type: 'object',\n                      optional: false,\n                      def: {}\n                    },\n                    image: {\n                      type: 'object',\n                      optional: false,\n                      def: {}\n                    },\n                    handlebars: {\n                      type: 'object',\n                      optional: false,\n                      def: {}\n                    },\n                    filesize: {\n                      type: 'object',\n                      optional: false,\n                      def: {}\n                    },\n                    browserSync: {\n                      type: 'object',\n                      optional: false,\n                      def: {}\n                    }\n                  }\n                }\n              }\n            },\n            other: {\n              type: 'object',\n              optional: false,\n              $mapDef: true,\n              properties: {\n                terser: {\n                  type: 'object',\n                  optional: false,\n                  def: {}\n                },\n                cssnano: {\n                  type: 'object',\n                  optional: false,\n                  def: {}\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    assetPaths: {\n      type: 'array',\n      optional: false,\n      items: {\n        type: 'string'\n      },\n      def: []\n    },\n    copy: {\n      type: 'array',\n      optional: false,\n      items: {\n        type: 'string'\n      },\n      def: ['README.md', 'LICENSE']\n    },\n    ignore: {\n      type: 'array',\n      optional: false,\n      items: {\n        type: 'string'\n      },\n      def: []\n    },\n    replacePatterns: {\n      type: 'array',\n      optional: false,\n      items: {\n        type: 'object',\n        properties: {\n          include: {\n            type: ['string', 'array'],\n            optional: false,\n            items: {\n              type: 'string'\n            }\n          },\n          exclude: {\n            type: ['string', 'array'],\n            optional: true,\n            items: {\n              type: 'string'\n            }\n          },\n          test: {\n            type: ['string', 'object'],\n            optional: true\n          },\n          replace: {\n            type: 'string',\n            optional: true\n          },\n          match: {\n            type: 'object',\n            optional: true\n          },\n          text: {\n            type: 'string',\n            optional: true\n          },\n          file: {\n            type: 'string',\n            optional: true\n          },\n          pathReplaceCallback: {\n            type: 'function',\n            optional: true\n          }\n        }\n      },\n      def: []\n    },\n    bundle: {\n      type: 'object',\n      optional: false,\n      $mapDef: true,\n      properties: {\n        externals: {\n          type: 'array',\n          optional: false,\n          items: {\n            type: 'string'\n          },\n          def: []\n        },\n        globals: {\n          type: 'object',\n          optional: false\n        },\n        mapExternals: {\n          type: 'boolean',\n          optional: false,\n          def: true\n        },\n        format: {\n          type: 'string',\n          optional: false,\n          def: 'umd',\n          pattern: /^(umd|amd|iife|system|cjs|esm)$/\n        },\n        namespace: {\n          type: 'string',\n          optional: false,\n          def: 'com.lib'\n        },\n        amd: {\n          type: 'object',\n          optional: false,\n          $mapDef: true,\n          properties: {\n            define: {\n              type: 'string',\n              optional: false,\n              def: ''\n            },\n            id: {\n              type: 'string',\n              optional: false,\n              def: ''\n            }\n          }\n        }\n      }\n    },\n    test: {\n      type: 'object',\n      optional: false,\n      $mapDef: true,\n      properties: {\n        framework: {\n          type: 'string',\n          optional: false,\n          def: 'jasmine',\n          pattern: /^(jasmine|mocha|jest)$/\n        },\n        environment: {\n          type: 'string',\n          optional: false,\n          def: 'jsdom',\n          pattern: /^(browser|jsdom|node|enzyme)$/\n        },\n        advanced: {\n          type: 'object',\n          optional: false,\n          $mapDef: true,\n          properties: {\n            jasmine: {\n              default: {\n                type: 'string',\n                optional: false,\n                def: 'jasmine --config=jasmine.json'\n              },\n              watch: {\n                type: 'string',\n                optional: false,\n                def: 'jasmine --config=jasmine.json'\n              },\n              coverageDefault: {\n                type: 'string',\n                optional: false,\n                def: 'nyc jasmine --config=jasmine.json'\n              },\n              coverageWatch: {\n                type: 'string',\n                optional: false,\n                def: 'nyc jasmine --config=jasmine.json'\n              }\n            },\n            mocha: {\n              default: {\n                type: 'string',\n                optional: false,\n                def: 'mocha --opts mocha.opts \"./{,!(node_modules)/**/}*.[sS]pec.<ext-glob>\"'\n              },\n              watch: {\n                type: 'string',\n                optional: false,\n                def: 'mocha --opts mocha.opts --watch \"./{,!(node_modules)/**/}*.[sS]pec.<ext-glob>\"'\n              },\n              coverageDefault: {\n                type: 'string',\n                optional: false,\n                def: 'nyc mocha --opts mocha.opts --watch \"./{,!(node_modules)/**/}*.[sS]pec.<ext-glob>\"'\n              },\n              coverageWatch: {\n                type: 'string',\n                optional: false,\n                def: 'nyc mocha --opts mocha.opts --watch \"./{,!(node_modules)/**/}*.[sS]pec.<ext-glob>\"'\n              }\n            },\n            jest: {\n              default: {\n                type: 'string',\n                optional: false,\n                def: 'jest --config=jest.config.js'\n              },\n              watch: {\n                type: 'string',\n                optional: false,\n                def: 'jest --config=jest.config.js --watch'\n              },\n              coverageDefault: {\n                type: 'string',\n                optional: false,\n                def: 'jest --config=jest.config.js --coverage'\n              },\n              coverageWatch: {\n                type: 'string',\n                optional: false,\n                def: 'jest --config=jest.config.js --coverage --watch'\n              }\n            }\n          }\n        }\n      }\n    },\n    serve: {\n      type: ['object', 'boolean'],\n      optional: false,\n      $acceptOnly: 'false',\n      $mapDef: true,\n      properties: {\n        demoDir: {\n          type: 'string',\n          optional: false,\n          def: 'demo/watch'\n        },\n        helperDir: {\n          type: 'string',\n          optional: false,\n          def: 'demo/helper'\n        },\n        serveDir: {\n          type: 'array',\n          optional: false,\n          items: {\n            type: 'string'\n          },\n          def: []\n        },\n        open: {\n          type: 'boolean',\n          optional: false,\n          def: true\n        },\n        port: {\n          type: 'number',\n          optional: false,\n          gt: 0,\n          lt: 65535,\n          def: 4000\n        }\n      }\n    },\n    license: {\n      type: 'object',\n      optional: false,\n      $mapDef: true,\n      properties: {\n        banner: {\n          type: 'boolean',\n          optional: false,\n          def: true\n        }\n      }\n    },\n    format: {\n      type: 'object',\n      optional: false,\n      $mapDef: true,\n      properties: {\n        extensions: {\n          type: 'array',\n          optional: false,\n          def: ['js', 'jsx', 'ts', 'tsx', 'html', 'scss', 'css', 'less', 'json'],\n          items: {\n            type: 'string'\n          }\n        },\n        advanced: {\n          optional: false,\n          $mapDef: true,\n          properties: {\n            command: {\n              type: 'string',\n              optional: false,\n              def: 'prettier --write **/*.{<ext-glob>}'\n            }\n          }\n        }\n      }\n    },\n    lint: {\n      type: 'object',\n      optional: false,\n      $mapDef: true,\n      properties: {\n        advanced: {\n          optional: false,\n          $mapDef: true,\n          properties: {\n            style: {\n              type: 'string',\n              optional: false,\n              def: 'stylelint **/*.{styl,scss,sass,less,css}'\n            },\n            typescript: {\n              type: 'string',\n              optional: false,\n              def: 'tslint **/*.{ts,tsx}'\n            },\n            javascript: {\n              type: 'string',\n              optional: false,\n              def: 'eslint **/*.{js,mjs}'\n            }\n          }\n        }\n      }\n    }\n  }\n};\n\n/**\n * Recursively map object defaults.\n * @param schema Inspector schema.\n */\nconst mapObjectDefaults = (schema) => {\n  const obj: any = {};\n  forOwn(schema.properties, (value, key) => {\n    if (value.def) {\n      obj[key] = value.def;\n    } else if (value.properties) {\n      obj[key] = mapObjectDefaults(value);\n    }\n  });\n\n  return obj;\n};\n\n/**\n * Extend schema inspector sanitizations.\n */\ninspector.Sanitization.extend({\n  /**\n   * Map object defaults if invalid.\n   * @param schema Inspector schema.\n   * @param candidate Current sanitization candidate.\n   */\n  // Do not use arrow functions for this.\n  // tslint:disable-next-line\n  mapDef: function(schema, candidate) {\n    let invalidType: boolean;\n    if (Array.isArray(schema.type)) {\n      invalidType = !schema.type.includes(typeof candidate);\n    } else {\n      invalidType = typeof candidate !== schema.type;\n    }\n\n    if (schema.$mapDef && candidate === null && invalidType) {\n      return mapObjectDefaults(schema);\n    }\n\n    return candidate;\n  },\n\n  /**\n   * Set accept only boolean value if not valid.\n   * @param schema Inspector schema.\n   * @param candidate Current sanitization candidate.\n   */\n  // Do not use arrow functions for this.\n  // tslint:disable-next-line\n  acceptOnly: function(schema, candidate) {\n    if (schema.$acceptOnly && typeof candidate === 'boolean') {\n      if (String(candidate) !== schema.$acceptOnly) {\n        this.report(`support only boolean value '${schema.$acceptOnly}' or object`);\n        return mapObjectDefaults(schema);\n      }\n    }\n\n    return candidate;\n  }\n});\n\n/**\n * Extend schema inspector validations.\n */\ninspector.Validation.extend({\n  /**\n   * Validate whether candidate value is accept only boolean value.\n   * @param schema Inspector schema.\n   * @param candidate Current validating candidate.\n   */\n  // Do not use arrow functions for this.\n  // tslint:disable-next-line\n  acceptOnly: function(schema, candidate) {\n    if (schema.$acceptOnly && typeof candidate === 'boolean') {\n      if (String(candidate) !== schema.$acceptOnly) {\n        this.report(`support only boolean value '${schema.$acceptOnly}' or object`);\n        return mapObjectDefaults(schema);\n      }\n    }\n  }\n});\n\n/**\n * Cross validate configuration of dependent config errors.\n * @param packerConfig Packer configuration reference.\n * @param log Logger reference.\n */\nexport const crossValidateConfig = (packerConfig: PackerConfig, log: Logger): void => {\n  const commonMsg = 'malformed packer config (.packerrc.js):\\n';\n  const entryExt = path.extname(packerConfig.entry);\n  if (packerConfig.compiler.script.preprocessor === 'typescript' && !['.ts', '.tsx'].includes(entryExt)) {\n    log.error(commonMsg + \"Entry extension must be '.ts' when script preprocessor is 'typescript'\");\n    process.exit(1);\n  }\n\n  if (\n    packerConfig.compiler.script.preprocessor === 'none' &&\n    !['.js', '.jsx', '.es6', '.es', '.mjs'].includes(entryExt)\n  ) {\n    log.error(\n      commonMsg +\n        \"Entry extension must be '.js', '.jsx', '.es6', '.es' or '.mjs' \" +\n        \"when script preprocessor is 'none'\"\n    );\n    process.exit(1);\n  }\n\n  if (['node', 'node-cli'].includes(packerConfig.compiler.buildMode)) {\n    if (!['cjs', 'esm'].includes(packerConfig.bundle.format)) {\n      log.error(commonMsg + \"Bundle format must be 'cjs' or 'esm' when bundle mode is 'node' or 'node-cli'\");\n      process.exit(1);\n    }\n\n    if (packerConfig.serve !== false) {\n      log.error(commonMsg + \"Serve on watch mode is not supported when bundle format is 'cjs' or 'esm'\");\n      process.exit(1);\n    }\n  }\n\n  if (\n    packerConfig.compiler.buildMode === 'browser' &&\n    !['umd', 'amd', 'iife', 'system'].includes(packerConfig.bundle.format)\n  ) {\n    log.error(commonMsg + \"Bundle format must be 'umd', 'amd', 'iife' or 'system' when bundle mode is 'browser'\");\n    process.exit(1);\n  }\n\n  if (packerConfig.test.framework === 'jest' && packerConfig.test.environment === 'browser') {\n    log.error(commonMsg + \"Test environment 'browser' is not supported when test framework is 'jest'\");\n    process.exit(1);\n  }\n\n  if (['jasmine', 'mocha'].includes(packerConfig.test.framework) && packerConfig.test.environment === 'enzyme') {\n    log.error(commonMsg + \"Test environment 'enzyme' is only supported when test framework is 'jasmine' or 'mocha'\");\n    process.exit(1);\n  }\n};\n","import { spawn, SpawnOptions, StdioOptions } from 'child_process';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { Logger } from '../common/logger';\nimport mergeWith from 'lodash/mergeWith';\nimport chokidar from 'chokidar';\n\nconst isWindows = process.platform === 'win32';\n\nexport const args = process.argv.splice(2);\n\n/**\n * Run shell command in node environment.\n * @param command Shell command with arguments.\n * @param dir Execution dir.\n * @param log Logger reference.\n */\nexport const runShellCommand = (command: string, dir: string, log: Logger) => {\n  const commandSegments = command.split(' ');\n  const baseCmd = commandSegments.shift();\n  const cmd = isWindows ? `${baseCmd}.cmd` : baseCmd;\n  const options: SpawnOptions = {\n    cwd: dir,\n    detached: false,\n    stdio: 'inherit' as StdioOptions\n  };\n\n  log.trace('shell command execution options:\\n%o', options);\n  log.trace('shell command: %s %s', cmd, commandSegments.join(' '));\n\n  return new Promise(\n    (resolve: () => void): void => {\n      const childProcess = spawn(cmd, commandSegments, options);\n      childProcess.on('close', () => {\n        resolve();\n      });\n    }\n  );\n};\n\n/**\n * Make relative directory path by fragments.\n * Create none existing fragments and ignore existing.\n * @param fragments Directory path fragments.\n */\nexport const makeRelativeDirPath = (...fragments: string[]): void => {\n  let currentPath = process.cwd();\n  for (const fragment of fragments) {\n    currentPath = path.join(currentPath, fragment);\n    if (!fs.existsSync(currentPath)) {\n      fs.mkdirSync(currentPath);\n    }\n  }\n};\n\n/**\n * Write file async.\n * @param filePath Path to write the file.\n * @param data Data to include in the file being written.\n */\nexport const writeFile = (filePath: string, data: any): Promise<void> => {\n  return new Promise<void>((resolve: () => void, reject: (e: Error) => void) => {\n    fs.writeFile(\n      filePath,\n      data,\n      (err: NodeJS.ErrnoException): void => {\n        if (err) {\n          reject(err);\n          return;\n        }\n\n        resolve();\n      }\n    );\n  });\n};\n\n/**\n * Read file async.\n * @param filePath Path to read the file from.\n */\nexport const readFile = (filePath: string): Promise<string> => {\n  return new Promise<string>((resolve: (data: string) => void, reject: (e: Error) => void) => {\n    fs.readFile(\n      filePath,\n      (err: NodeJS.ErrnoException, data: Buffer): void => {\n        if (err) {\n          reject(err);\n          return;\n        }\n\n        resolve(data.toString('utf8'));\n      }\n    );\n  });\n};\n\n/**\n * Read configuration file sync.\n * @param filePath File path.\n */\nexport const readConfigFile = <T>(filePath: string): T => {\n  if (fs.existsSync(filePath)) {\n    return JSON.parse(fs.readFileSync(filePath, 'utf-8'));\n  }\n\n  const jsPath = `${filePath}.js`;\n  if (fs.existsSync(jsPath)) {\n    return require(jsPath);\n  }\n\n  throw Error(`${path.basename(filePath)} configuration file not found in ${filePath}`);\n};\n\n/**\n * Merge objects deep.\n * @param object Base object.\n * @param source Source objects to merge.\n */\nexport function mergeDeep<K, J>(object: K, source: J): K;\nexport function mergeDeep<K, J>(object: K, ...source: J[]): K & J;\nexport function mergeDeep(object: any, ...source: any[]): any {\n  return mergeWith(object, source, (objValue, srcValue) => {\n    if (Array.isArray(objValue)) {\n      if (Array.isArray(srcValue)) {\n        return srcValue;\n      }\n\n      return [];\n    }\n\n    if (typeof objValue !== typeof srcValue) {\n      return srcValue;\n    }\n  });\n}\n\n/**\n * Watch source for changes and execute callback function\n * @param watchPath Watch path or paths glob collection.\n * @param callback Callback function to execute on change\n */\nexport const watchSource = async (watchPath: string | string[], callback: () => Promise<void>) => {\n  await callback();\n  const watcher = chokidar.watch(watchPath, {\n    ignored: 'node_modules/**',\n    cwd: process.cwd()\n  });\n  await new Promise(() => {\n    watcher.on('change', async () => {\n      await callback();\n    });\n  });\n};\n\n/**\n * Import peer dependencies dynamically on runtime.\n * @param module Module name.\n * @param log Logger reference.\n */\nexport function requireDependency<T extends any>(module: string, log: Logger): T {\n  const requirePath = require.resolve(module, {\n    paths: [path.join(process.cwd(), 'node_modules')]\n  });\n\n  log.trace(\"import '%s' module from '%s'\", module, requirePath);\n  return require(requirePath);\n}\n","/**\n * Library license type.\n */\nexport class LicenseType {\n  public static readonly MIT = 'MIT License';\n  public static readonly APACHE_2 = 'Apache License 2.0';\n  public static readonly MPL_2 = 'Mozilla Public License 2.0';\n  public static readonly BSD_2 = 'BBSD 2-Clause FreeBSD License';\n  public static readonly BSD_3 = 'BSD 3-Clause Revised License';\n  public static readonly ISC = 'Internet Systems Consortium (ISC) License';\n  public static readonly LGPL_3 = 'GNU Lesser General Public License v3.0 only';\n  public static readonly GLP_3 = 'GNU General Public License v3.0 only';\n  public static readonly UNLICENSE = 'The Unlicense';\n}\n","import { ScriptPreprocessor } from '../model/script-preprocessor';\nimport { StylePreprocessor } from '../model/style-preprocessor';\nimport { LicenseType } from '../model/license-type';\nimport { PackerOptions } from '../model/packer-options';\nimport { BuildMode } from '../model/build-mode';\nimport { TestEnvironment } from '../model/test-environment';\n\n/**\n * Parse style extension by preprocessor type.\n * @param preprocessor Style preprocessor type.\n */\nexport const parseStylePreprocessorExtension = (preprocessor: StylePreprocessor): string => {\n  switch (preprocessor) {\n    case 'scss':\n      return 'scss';\n    case 'sass':\n      return 'sass';\n    case 'less':\n      return 'less';\n    case 'stylus':\n      return 'styl';\n    case 'none':\n      return 'css';\n  }\n};\n\n/**\n * Parse license file name by license type.\n * @param license License type.\n */\nexport const parseLicenseType = (license: string): string => {\n  let licenseFileName = '';\n\n  switch (license) {\n    case LicenseType.MIT:\n      licenseFileName = 'MIT';\n      break;\n    case LicenseType.APACHE_2:\n      licenseFileName = 'Apache-2.0';\n      break;\n    case LicenseType.MPL_2:\n      licenseFileName = 'MPL-2.0';\n      break;\n    case LicenseType.BSD_2:\n      licenseFileName = 'BSD-2-Clause-FreeBSD';\n      break;\n    case LicenseType.BSD_3:\n      licenseFileName = 'BSD-3-Clause';\n      break;\n    case LicenseType.ISC:\n      licenseFileName = 'ISC';\n      break;\n    case LicenseType.LGPL_3:\n      licenseFileName = 'LGPL-3.0';\n      break;\n    case LicenseType.GLP_3:\n      licenseFileName = 'GPL-3.0';\n      break;\n    case LicenseType.UNLICENSE:\n      licenseFileName = 'Unlicense';\n      break;\n  }\n\n  return licenseFileName;\n};\n\n/**\n * Parse script transpiler by preprocessor type.\n * @param preprocessor Script preprocessor type.\n */\nexport const parseScriptPreprocessorExtension = (preprocessor: ScriptPreprocessor): string => {\n  switch (preprocessor) {\n    case 'typescript':\n      return 'ts';\n    case 'none':\n    default:\n      return 'js';\n  }\n};\n\n/**\n * Parse script transpiler by preprocessor type and extract extension glob.\n * @param preprocessor Script preprocessor type.\n */\nexport const parseScriptPreprocessorExtensionGlob = (preprocessor: ScriptPreprocessor): string => {\n  const scriptExt = parseScriptPreprocessorExtension(preprocessor);\n  return `{${scriptExt},${scriptExt}x}`;\n};\n\n/**\n * Parse karma script transpiler by preprocessor type and extract extension glob.\n * @param preprocessor Script preprocessor type.\n */\nexport const parseKarmaScriptPreprocessorExtensionGlob = (preprocessor: ScriptPreprocessor): string => {\n  const scriptExt = parseScriptPreprocessorExtension(preprocessor);\n  return `+(${scriptExt}|${scriptExt}x)`;\n};\n\n/**\n * Parse package build mode.\n * @param packerOptions Packer options object.\n */\nexport const parseBuildMode = (packerOptions: PackerOptions): BuildMode => {\n  if (packerOptions.browserCompliant) {\n    return 'browser';\n  } else if (packerOptions.cliProject) {\n    return 'node-cli';\n  }\n\n  return 'node';\n};\n\n/**\n * Parse test environment type.\n * @param packerOptions Packer options object.\n */\nexport const parseTestEnvironment = (packerOptions: PackerOptions): TestEnvironment => {\n  let testEnvironment: TestEnvironment = 'node';\n  if (packerOptions.testFramework === 'jest' && packerOptions.reactLib && packerOptions.useEnzyme) {\n    testEnvironment = 'enzyme';\n  } else {\n    testEnvironment = packerOptions.testEnvironment || (packerOptions.browserCompliant ? 'jsdom' : 'node');\n  }\n\n  return testEnvironment;\n};\n","import path from 'path';\nimport fs from 'fs';\nimport chalk from 'chalk';\nimport * as inspector from 'schema-inspector';\n\nimport { PackerConfig } from '../model/packer-config';\nimport { PackageConfig } from '../model/package-config';\nimport { BabelConfig } from '../model/babel-config';\n\nimport { Logger } from '../common/logger';\nimport { crossValidateConfig, packerSchema } from './validation-util';\nimport { args, mergeDeep, readConfigFile, readFile } from './util';\nimport { parseScriptPreprocessorExtensionGlob } from './parser';\n\n/**\n * Metadata reader class.\n */\nclass MetaData {\n  private packerConfig: PackerConfig;\n  private packageConfig: PackageConfig;\n  private babelConfig: BabelConfig;\n  private bannerTemplate: string;\n  private packerHelpSummary: string;\n  private packerBanner: string;\n\n  /**\n   * Fetch packer configuration object.\n   * Return if already exist in cache, else read -> validate -> sanitize configuration data.\n   * Configuration read logic will lookup for all extend packer config paths and merged configuration\n   * from base to local order.\n   * @param log Logger reference.\n   */\n  public fetchPackerConfig(log: Logger): void {\n    if (this.packerConfig) {\n      return;\n    }\n\n    const projectConf: PackerConfig = require(this.readConfigPath(log));\n\n    // Read all parent packer configuration.\n    const readConf = (sourceConf) => {\n      const conf = sourceConf[sourceConf.length - 1];\n      if (conf && typeof conf === 'object' && conf.extend) {\n        let parentConfPath;\n        if (conf.extend.startsWith('~/packer-cli')) {\n          parentConfPath = path.join(__dirname, conf.extend.replace('~/packer-cli', '..'));\n        } else {\n          parentConfPath = path.isAbsolute(conf.extend) ? conf.extend : path.join(process.cwd(), conf.extend);\n        }\n\n        log.trace('read parent packer config from path: %s', parentConfPath);\n        return readConf([...sourceConf, require(parentConfPath)]);\n      } else {\n        return sourceConf;\n      }\n    };\n\n    const confCollection = readConf([projectConf]).reverse();\n    let packerConfig: PackerConfig = null;\n    if (confCollection.length > 1) {\n      const baseConf = confCollection.shift();\n      packerConfig = mergeDeep(baseConf, ...confCollection);\n    } else {\n      packerConfig = confCollection[0];\n    }\n\n    log.trace('merged packer config:\\n%o', packerConfig);\n    const validation = inspector.validate(packerSchema, packerConfig);\n    if (!validation.valid) {\n      log.warn('malformed packer config (.packerrc.js):\\n%s\\nusing default configuration', validation.format());\n    }\n\n    const sanitizedData = inspector.sanitize(packerSchema, packerConfig).data as PackerConfig;\n\n    crossValidateConfig(sanitizedData, log);\n    // Replace glob extension pattern with dynamic extensions.\n    const mochaConf = sanitizedData.test.advanced.mocha;\n    const formatConf = sanitizedData.format.advanced;\n    const lintConf = sanitizedData.lint.advanced;\n    const extGlob = parseScriptPreprocessorExtensionGlob(sanitizedData.compiler.script.preprocessor);\n    mochaConf.coverageWatch = this.replaceExtensionGlob(extGlob, mochaConf.coverageWatch);\n    mochaConf.coverageDefault = this.replaceExtensionGlob(extGlob, mochaConf.coverageDefault);\n    mochaConf.watch = this.replaceExtensionGlob(extGlob, mochaConf.watch);\n    mochaConf.default = this.replaceExtensionGlob(extGlob, mochaConf.default);\n\n    const formatExtGlob = sanitizedData.format.extensions.join(',');\n    formatConf.command = this.replaceExtensionGlob(formatExtGlob, formatConf.command);\n\n    this.packerConfig = sanitizedData;\n  }\n\n  /**\n   * Read and cache packer configuration.\n   * @param log Logger reference.\n   */\n  public readPackerConfig(log: Logger): PackerConfig {\n    if (this.packerConfig) {\n      return this.packerConfig;\n    }\n\n    this.fetchPackerConfig(log);\n    return this.packerConfig;\n  }\n\n  /**\n   * Read and cache local package.json file configuration.\n   */\n  public readPackageData(): PackageConfig {\n    if (this.packageConfig) {\n      return this.packageConfig;\n    }\n\n    this.packageConfig = require(path.join(process.cwd(), 'package.json'));\n    return this.packageConfig;\n  }\n\n  /**\n   * Read and cache babel configuration.\n   */\n  public readBabelConfig(): BabelConfig {\n    if (this.babelConfig) {\n      return this.babelConfig;\n    }\n\n    this.babelConfig = readConfigFile(path.join(process.cwd(), '.babelrc'));\n    return this.babelConfig;\n  }\n\n  /**\n   * Read and cache banner template.\n   */\n  public async readBannerTemplate(): Promise<string> {\n    if (this.bannerTemplate) {\n      return this.bannerTemplate;\n    }\n\n    this.bannerTemplate = await readFile(path.join(process.cwd(), '.packer/banner.hbs'));\n    return this.bannerTemplate;\n  }\n\n  /**\n   * Read and cache packer help summary.\n   */\n  public async readPackerHelpSummary(): Promise<string> {\n    if (this.packerHelpSummary) {\n      return this.packerHelpSummary;\n    }\n\n    this.packerHelpSummary = await readFile(path.join(__dirname, '../resources/dynamic/packer-help.txt'));\n    return this.packerHelpSummary;\n  }\n\n  /**\n   * Read and cache packer banner.\n   */\n  public async readPackerBanner(): Promise<string> {\n    if (this.packerBanner) {\n      return this.packerBanner;\n    }\n\n    this.packerBanner = await readFile(path.join(__dirname, '../resources/dynamic/banner.txt'));\n    return this.packerBanner;\n  }\n\n  /**\n   * Read packer configuration path.\n   * Use dynamic packer config path if available, else use .packerrc.js config in project root.\n   * @param log Logger reference.\n   */\n  private readConfigPath(log: Logger): string {\n    const dynamicConfIndex = args.findIndex(\n      (value: string): boolean => {\n        return value.startsWith('--config') || value.startsWith('-c');\n      }\n    );\n\n    let confPath: string;\n    if (dynamicConfIndex > -1) {\n      const dynamicConf = args[dynamicConfIndex + 1];\n      if (!dynamicConf) {\n        log.error(\n          'config file path not defined with config option.\\n%s \"%s\"',\n          chalk.reset('correct packer command with'),\n          chalk.blue('packer <command> --config path/to/packerrc.js')\n        );\n        process.exit(1);\n      }\n\n      confPath = path.isAbsolute(dynamicConf) ? dynamicConf : path.join(process.cwd(), dynamicConf);\n      log.info('using dynamic packer config in %s', confPath);\n\n      if (!fs.existsSync(confPath)) {\n        log.error('packer config file not found');\n        process.exit(1);\n      }\n    } else {\n      confPath = path.join(process.cwd(), '.packerrc.js');\n\n      if (!fs.existsSync(confPath)) {\n        log.error(\n          'Current directory does not contain packer config.\\n%s \"%s %s\"',\n          chalk.reset('Generate new project via'),\n          chalk.blue('packer generate'),\n          chalk.green('<project name>')\n        );\n        process.exit(1);\n      }\n    }\n\n    return confPath;\n  }\n\n  /**\n   * Replace extension glob pattern with actual extension.\n   * @param extGlob Extension glob.\n   * @param command Target command.\n   */\n  private replaceExtensionGlob(extGlob: string, command: string): string {\n    return command.replace('<ext-glob>', extGlob);\n  }\n}\n\n/**\n * Export static meta instance.\n */\nexport const meta = new MetaData();\n","/**\n * Log level.\n */\nexport enum LogLevel {\n  TRACE = 0,\n  INFO,\n  WARN,\n  ERROR,\n  SILENT\n}\n","import chalk from 'chalk';\nimport padStart from 'lodash/padStart';\n\nimport { args } from '../tasks/util';\nimport { LogLevel } from '../model/log-level';\n\n/**\n * Get current context log level\n */\nconst getLogLevel = (): LogLevel => {\n  let logLevel = LogLevel.INFO;\n  if (args.includes('--info')) {\n    logLevel = LogLevel.INFO;\n  } else if (args.includes('--error')) {\n    logLevel = LogLevel.ERROR;\n  } else if (args.includes('--warn')) {\n    logLevel = LogLevel.WARN;\n  } else if (args.includes('--trace')) {\n    logLevel = LogLevel.TRACE;\n  } else if (args.includes('--silent')) {\n    logLevel = LogLevel.SILENT;\n  }\n\n  return logLevel;\n};\n\n/**\n * Packer logger class.\n * Log messages depending on the log level.\n */\nexport class Logger {\n  public static readonly level: LogLevel = getLogLevel();\n\n  /**\n   * Create logger instance with task name.\n   * @param taskName\n   */\n  public static create(taskName: string): Logger {\n    return new Logger(taskName);\n  }\n\n  public readonly taskName: string;\n\n  private constructor(taskName: string) {\n    this.taskName = taskName ? `${chalk.green(taskName)} ` : '';\n  }\n\n  /**\n   * Get formatted current time.\n   */\n  public static get currentTime(): string {\n    const d = new Date();\n    const h = padStart(String(d.getHours()), 2, '0');\n    const m = padStart(String(d.getMinutes()), 2, '0');\n    const s = padStart(String(d.getSeconds()), 2, '0');\n    const ms = padStart(String(d.getMilliseconds()), 3, '0');\n    const time = `[${h}:${m}:${s}:${ms}]`;\n    return chalk.gray(time);\n  }\n\n  /**\n   * Log error message.\n   * @param message log message with console format expressions.\n   * @param optionalParams Optional arguments to message.\n   */\n  public error(message: string, ...optionalParams: any[]): void {\n    if (Logger.level <= LogLevel.ERROR) {\n      console.log(`${Logger.currentTime} ${this.taskName}${chalk.red(message)}`, ...optionalParams);\n    }\n  }\n\n  /**\n   * Log warning message.\n   * @param message log message with console format expressions.\n   * @param optionalParams Optional arguments to message.\n   */\n  public warn(message: string, ...optionalParams: any[]): void {\n    if (Logger.level <= LogLevel.WARN) {\n      console.log(`${Logger.currentTime} ${this.taskName}${chalk.yellow(message)}`, ...optionalParams);\n    }\n  }\n\n  /**\n   * Log info message.\n   * @param message log message with console format expressions.\n   * @param optionalParams Optional arguments to message.\n   */\n  public info(message: string, ...optionalParams: any[]): void {\n    if (Logger.level <= LogLevel.INFO) {\n      console.log(`${Logger.currentTime} ${this.taskName}${chalk.blue(message)}`, ...optionalParams);\n    }\n  }\n\n  /**\n   * Log trace message.\n   * @param message log message with console format expressions.\n   * @param optionalParams Optional arguments to message.\n   */\n  public trace(message: string, ...optionalParams: any[]): void {\n    if (Logger.level <= LogLevel.TRACE) {\n      console.log(`${Logger.currentTime} ${this.taskName}${message}`, ...optionalParams);\n    }\n  }\n}\n\nexport default Logger;\n","import gulp from 'gulp';\nimport clean from 'gulp-clean';\nimport path from 'path';\n\nimport { meta } from './meta';\nimport logger from '../common/logger';\n\n/**\n * Initialize clean gulp tasks\n */\nexport default function init() {\n  /**\n   * Temporary file clean gulp task.\n   * Clean tmp directory specified in packer config.\n   */\n  gulp.task('tmp:clean', () => {\n    const log = logger.create('[tmp:clean]');\n    try {\n      log.trace('start');\n      const config = meta.readPackerConfig(log);\n      return gulp\n        .src([path.join(process.cwd(), config.tmp)], {\n          allowEmpty: true,\n          read: false\n        })\n        .pipe(clean());\n    } catch (e) {\n      log.error('task failure:\\n', e.stack || e.message);\n      process.exit(1);\n    }\n  });\n\n  /**\n   * Watch build temporary file clean gulp task.\n   * Clean tmp directory specified in packer config.\n   */\n  gulp.task('watch:tmp:clean', () => {\n    const log = logger.create('[watch:tmp:clean]');\n    try {\n      log.trace('start');\n      const config = meta.readPackerConfig(log);\n      return gulp\n        .src([path.join(process.cwd(), config.tmp, 'watch')], {\n          allowEmpty: true,\n          read: false\n        })\n        .pipe(clean());\n    } catch (e) {\n      log.error('task failure:\\n', e.stack || e.message);\n      process.exit(1);\n    }\n  });\n\n  /**\n   * Build distribution clean gulp task.\n   * Clean dist directory specified in packer config.\n   */\n  gulp.task('build:clean', () => {\n    const log = logger.create('[build:clean]');\n    try {\n      log.trace('start');\n      const config = meta.readPackerConfig(log);\n      return gulp\n        .src([path.join(process.cwd(), config.dist)], {\n          allowEmpty: true,\n          read: false\n        })\n        .pipe(clean());\n    } catch (e) {\n      log.error('task failure:\\n', e.message, e.stack);\n      process.exit(1);\n    }\n  });\n\n  /**\n   * Clean all temporary and distribution artifacts gulp task.\n   * Clean temporary and build artifact directories on parallel mode.\n   */\n  gulp.task('clean', gulp.parallel('tmp:clean', 'build:clean'));\n}\n","import through, { TransformCallback } from 'through2';\nimport PluginError from 'plugin-error';\nimport handlebars from 'handlebars';\nimport path from 'path';\nimport * as stream from 'stream';\n\n/**\n * Gulp handlebars runtime options.\n */\nexport interface GulpHandlebarsOptions {\n  replaceExt?: string;\n  rename?: string;\n}\n\n/**\n * Gulp handlebars runtime plugin.\n * @param data Template data to complile template with.\n * @param options Plugin options.\n */\nexport default function gulpHbsRuntime(data: any, options?: GulpHandlebarsOptions): stream.Transform {\n  return through.obj(\n    (chunk: any, enc: string, callback: TransformCallback): void => {\n      try {\n        if (chunk.isNull() || chunk.extname !== '.hbs') {\n          return callback(null, chunk);\n        }\n\n        const template = handlebars.compile(String(chunk.contents));\n        const renderedTemplate = template(data);\n\n        if (chunk.isBuffer()) {\n          chunk.contents = Buffer.from(renderedTemplate);\n        }\n\n        if (chunk.isStream()) {\n          const fileStream = through();\n          fileStream.write(renderedTemplate);\n          chunk.contents = fileStream;\n        }\n\n        if (options) {\n          if (typeof options.replaceExt !== 'undefined') {\n            chunk.path = chunk.path.replace('.hbs', options.replaceExt);\n          }\n\n          if (typeof options.rename !== 'undefined') {\n            chunk.path = path.join(path.dirname(chunk.path), options.rename);\n          }\n        }\n\n        callback(null, chunk);\n      } catch (err) {\n        console.error(err);\n        throw new PluginError('gulp-hbs-runtime', 'Data parse failure!');\n      }\n    }\n  );\n}\n","\"use strict\";\n\n/**\r\n * filesize\r\n *\r\n * @copyright 2019 Jason Mulligan <jason.mulligan@avoidwork.com>\r\n * @license BSD-3-Clause\r\n * @version 6.0.1\r\n */\n(function (global) {\n  var b = /^(b|B)$/,\n      symbol = {\n    iec: {\n      bits: [\"b\", \"Kib\", \"Mib\", \"Gib\", \"Tib\", \"Pib\", \"Eib\", \"Zib\", \"Yib\"],\n      bytes: [\"B\", \"KiB\", \"MiB\", \"GiB\", \"TiB\", \"PiB\", \"EiB\", \"ZiB\", \"YiB\"]\n    },\n    jedec: {\n      bits: [\"b\", \"Kb\", \"Mb\", \"Gb\", \"Tb\", \"Pb\", \"Eb\", \"Zb\", \"Yb\"],\n      bytes: [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"]\n    }\n  },\n      fullform = {\n    iec: [\"\", \"kibi\", \"mebi\", \"gibi\", \"tebi\", \"pebi\", \"exbi\", \"zebi\", \"yobi\"],\n    jedec: [\"\", \"kilo\", \"mega\", \"giga\", \"tera\", \"peta\", \"exa\", \"zetta\", \"yotta\"]\n  };\n  /**\r\n   * filesize\r\n   *\r\n   * @method filesize\r\n   * @param  {Mixed}   arg        String, Int or Float to transform\r\n   * @param  {Object}  descriptor [Optional] Flags\r\n   * @return {String}             Readable file size String\r\n   */\n\n  function filesize(arg) {\n    var descriptor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var result = [],\n        val = 0,\n        e = void 0,\n        base = void 0,\n        bits = void 0,\n        ceil = void 0,\n        full = void 0,\n        fullforms = void 0,\n        locale = void 0,\n        localeOptions = void 0,\n        neg = void 0,\n        num = void 0,\n        output = void 0,\n        round = void 0,\n        unix = void 0,\n        separator = void 0,\n        spacer = void 0,\n        standard = void 0,\n        symbols = void 0;\n\n    if (isNaN(arg)) {\n      throw new TypeError(\"Invalid number\");\n    }\n\n    bits = descriptor.bits === true;\n    unix = descriptor.unix === true;\n    base = descriptor.base || 2;\n    round = descriptor.round !== void 0 ? descriptor.round : unix ? 1 : 2;\n    locale = descriptor.locale !== void 0 ? descriptor.locale : \"\";\n    localeOptions = descriptor.localeOptions || {};\n    separator = descriptor.separator !== void 0 ? descriptor.separator : \"\";\n    spacer = descriptor.spacer !== void 0 ? descriptor.spacer : unix ? \"\" : \" \";\n    symbols = descriptor.symbols || {};\n    standard = base === 2 ? descriptor.standard || \"jedec\" : \"jedec\";\n    output = descriptor.output || \"string\";\n    full = descriptor.fullform === true;\n    fullforms = descriptor.fullforms instanceof Array ? descriptor.fullforms : [];\n    e = descriptor.exponent !== void 0 ? descriptor.exponent : -1;\n    num = Number(arg);\n    neg = num < 0;\n    ceil = base > 2 ? 1000 : 1024; // Flipping a negative number to determine the size\n\n    if (neg) {\n      num = -num;\n    } // Determining the exponent\n\n\n    if (e === -1 || isNaN(e)) {\n      e = Math.floor(Math.log(num) / Math.log(ceil));\n\n      if (e < 0) {\n        e = 0;\n      }\n    } // Exceeding supported length, time to reduce & multiply\n\n\n    if (e > 8) {\n      e = 8;\n    }\n\n    if (output === \"exponent\") {\n      return e;\n    } // Zero is now a special case because bytes divide by 1\n\n\n    if (num === 0) {\n      result[0] = 0;\n      result[1] = unix ? \"\" : symbol[standard][bits ? \"bits\" : \"bytes\"][e];\n    } else {\n      val = num / (base === 2 ? Math.pow(2, e * 10) : Math.pow(1000, e));\n\n      if (bits) {\n        val = val * 8;\n\n        if (val >= ceil && e < 8) {\n          val = val / ceil;\n          e++;\n        }\n      }\n\n      result[0] = Number(val.toFixed(e > 0 ? round : 0));\n\n      if (result[0] === ceil && e < 8 && descriptor.exponent === void 0) {\n        result[0] = 1;\n        e++;\n      }\n\n      result[1] = base === 10 && e === 1 ? bits ? \"kb\" : \"kB\" : symbol[standard][bits ? \"bits\" : \"bytes\"][e];\n\n      if (unix) {\n        result[1] = standard === \"jedec\" ? result[1].charAt(0) : e > 0 ? result[1].replace(/B$/, \"\") : result[1];\n\n        if (b.test(result[1])) {\n          result[0] = Math.floor(result[0]);\n          result[1] = \"\";\n        }\n      }\n    } // Decorating a 'diff'\n\n\n    if (neg) {\n      result[0] = -result[0];\n    } // Applying custom symbol\n\n\n    result[1] = symbols[result[1]] || result[1];\n\n    if (locale === true) {\n      result[0] = result[0].toLocaleString();\n    } else if (locale.length > 0) {\n      result[0] = result[0].toLocaleString(locale, localeOptions);\n    } else if (separator.length > 0) {\n      result[0] = result[0].toString().replace(\".\", separator);\n    } // Returning Array, Object, or String (default)\n\n\n    if (output === \"array\") {\n      return result;\n    }\n\n    if (full) {\n      result[1] = fullforms[e] ? fullforms[e] : fullform[standard][e] + (bits ? \"bit\" : \"byte\") + (result[0] === 1 ? \"\" : \"s\");\n    }\n\n    if (output === \"object\") {\n      return {\n        value: result[0],\n        symbol: result[1]\n      };\n    }\n\n    return result.join(spacer);\n  } // Partial application for functional programming\n\n\n  filesize.partial = function (opt) {\n    return function (arg) {\n      return filesize(arg, opt);\n    };\n  }; // CommonJS, AMD, script tag\n\n\n  if (typeof exports !== \"undefined\") {\n    module.exports = filesize;\n  } else if (typeof define === \"function\" && define.amd !== void 0) {\n    define(function () {\n      return filesize;\n    });\n  } else {\n    global.filesize = filesize;\n  }\n})(typeof window !== \"undefined\" ? window : global);\n","import path from 'path';\nimport handlebars from 'handlebars';\nimport glob from 'glob-to-regexp';\nimport chalk from 'chalk';\nimport terser from 'terser';\nimport get from 'lodash/get';\n\nimport codeFrameColumns from '@babel/code-frame';\n\nimport { OutputChunk, OutputOptions, rollup, RollupOptions } from 'rollup';\nimport rollupIgnoreImport from 'rollup-plugin-ignore-import';\nimport rollupPostCss from 'rollup-plugin-postcss';\nimport rollupReplace from 'rollup-plugin-re';\nimport rollupIgnore from 'rollup-plugin-ignore';\nimport rollupResolve from '@rollup/plugin-node-resolve';\nimport rollupCommonjs from '@rollup/plugin-commonjs';\nimport rollupJson, { RollupJsonOptions } from '@rollup/plugin-json';\nimport rollupTypescript from 'rollup-plugin-typescript2';\nimport rollupBabel from 'rollup-plugin-babel';\nimport rollupHandlebars from 'rollup-plugin-hbs';\nimport rollupImage from 'rollup-plugin-img';\nimport rollupFilesize from 'rollup-plugin-filesize';\nimport rollupGlobals from 'rollup-plugin-node-globals';\n\nimport { meta } from './meta';\nimport { PackageConfig } from '../model/package-config';\nimport { PackerConfig } from '../model/packer-config';\nimport logger, { Logger } from '../common/logger';\nimport { LogLevel } from '../model/log-level';\nimport { mergeDeep, readFile, requireDependency, writeFile } from './util';\nimport { PackageModuleType } from '../model/package-module-type';\nimport { BabelConfig } from '../model/babel-config';\nimport fileSize from 'filesize';\nimport cssnano from 'cssnano';\nimport * as TS from 'typescript';\n\n/**\n * Get distribution banner comment.\n * @param packerConfig Packer configuration object.\n * @param packageConfig Package configuration object.\n */\nexport const getBanner = async (packerConfig: PackerConfig, packageConfig: PackageConfig) => {\n  if (packerConfig.license.banner) {\n    const bannerTemplate = await meta.readBannerTemplate();\n    return handlebars.compile(bannerTemplate)({\n      config: packerConfig,\n      pkg: packageConfig\n    });\n  }\n};\n\n/**\n * Get rollup base configuration.\n * @param packerConfig Packer configuration object.\n * @param packageConfig Package configuration object.\n * @param banner Banner comment.\n * @param sourceMap If true, a separate sourcemap file will be created. If inline, the sourcemap will be appended to\n * the resulting output file as a data URI.\n */\nexport const getBaseConfig = (\n  packerConfig: PackerConfig,\n  packageConfig: PackageConfig,\n  banner: string,\n  sourceMap?: boolean | 'inline'\n) => {\n  return {\n    input: path.join(packerConfig.source, packerConfig.entry),\n    output: {\n      banner,\n      name: packageConfig.name,\n      sourcemap: typeof sourceMap !== 'undefined' ? sourceMap : packerConfig.compiler.sourceMap\n    }\n  };\n};\n\n/**\n * Get rollup style build plugins.\n * @param packerConfig Packer configuration object.\n * @param packageConfig Package configuration object.\n * @param watch Copy stylesheets artifacts to watch temp directory if true, else dist directory.\n * @param main Indicate whether it is the main build task to emit stylesheets. Otherwise, ignore style sheet building\n * unless style inline mode is enabled.\n * @param log Logger reference.\n */\nexport const getStyleBuildPlugins = (\n  packerConfig: PackerConfig,\n  packageConfig: PackageConfig,\n  watch: boolean,\n  main: boolean,\n  log: Logger\n) => {\n  if (!packerConfig.compiler.style) {\n    log.trace('style build disabled');\n    return [];\n  }\n\n  if (!main && !packerConfig.compiler.style.inline) {\n    log.trace('ignore style imports to avoid redundant style compilation');\n    return [\n      rollupIgnoreImport(\n        mergeDeep(\n          {\n            exclude: 'node_modules/**',\n            extensions: ['.scss', '.sass', '.styl', '.css', '.less']\n          },\n          packerConfig.compiler.advanced.rollup.pluginOptions.ignoreImport\n        )\n      )\n    ];\n  }\n\n  log.trace('init style build plugins');\n  const styleDir = watch ? path.join(packerConfig.tmp, 'watch') : packerConfig.dist;\n  const fileName = packageConfig.name + '.css';\n  const styleDist = path.join(process.cwd(), styleDir, packerConfig.compiler.style.outDir, fileName);\n  log.trace('stylesheet dist file name %s', styleDist);\n\n  return [\n    rollupPostCss(\n      mergeDeep(\n        {\n          exclude: 'node_modules/**',\n          extract: packerConfig.compiler.style.inline ? false : styleDist,\n          config: {\n            path: path.join(process.cwd(), 'postcss.config.js'),\n            ctx: {\n              config: packerConfig\n            }\n          },\n          // disable sourcemaps when inline bundling\n          sourceMap: packerConfig.compiler.style.inline ? false : packerConfig.compiler.sourceMap\n        },\n        packerConfig.compiler.advanced.rollup.pluginOptions.postCss\n      )\n    )\n  ];\n};\n\n/**\n * Generate minified style sheets.\n * @param packerConfig Packer configuration object.\n * @param packageConfig Package configuration object.\n * @param log Logger reference.\n */\nexport const generateMinStyleSheet = async (\n  packerConfig: PackerConfig,\n  packageConfig: PackageConfig,\n  log: Logger\n): Promise<void> => {\n  if (!packerConfig.compiler.style || packerConfig.compiler.style.inline) {\n    return;\n  }\n\n  const nano = requireDependency<typeof cssnano>('cssnano', log);\n\n  const srcPath = path.join(process.cwd(), packerConfig.dist, packerConfig.compiler.style.outDir);\n  const srcFileName = `${packageConfig.name}.css`;\n  const srcFilePath = path.join(srcPath, srcFileName);\n  const srcMinFileName = `${packageConfig.name}.min.css`;\n  const srcMinFilePath = path.join(srcPath, srcMinFileName);\n  const srcCss = await readFile(srcFilePath);\n  const options: any = {\n    from: srcFileName,\n    to: srcMinFileName\n  };\n\n  // only set cssnano sourcemap options when sourcemap is true\n  if (packerConfig.compiler.sourceMap === true) {\n    const srcMapFilePath = path.join(srcPath, `${packageConfig.name}.css.map`);\n    const srcMapCss = await readFile(srcMapFilePath);\n    options.map = {\n      sourcesContent: true,\n      prev: srcMapCss\n    };\n  }\n\n  let result;\n\n  log.trace('cssnano options:\\n%o', options);\n  try {\n    result = await nano.process(String(srcCss), mergeDeep(options, packerConfig.compiler.advanced.other.cssnano));\n  } catch (e) {\n    log.error('style minify failure:\\n%s', e.stack || e.message);\n    process.exit(1);\n  }\n\n  await writeFile(srcMinFilePath, result.css);\n\n  // save sourcemap file only when sourcemap true\n  if (packerConfig.compiler.sourceMap === true) {\n    const srcMinMapFilePath = path.join(srcPath, `${srcMinFileName}.map`);\n    await writeFile(srcMinMapFilePath, result.map);\n  }\n};\n\n/**\n * Get rollup dependency resolve plugins.\n * @param packerConfig  Packer configuration object.\n */\nexport const getDependencyResolvePlugins = (packerConfig: PackerConfig) => {\n  const mainFields = [ 'module', 'jsnext', 'main' ];\n  if (packerConfig.compiler.buildMode) {\n    mainFields.push('browser');\n  }\n\n  const plugins = [\n    rollupIgnore(packerConfig.ignore),\n    rollupResolve(\n      mergeDeep(\n        {\n          mainFields,\n          extensions: ['.mjs', '.js', '.jsx', '.json', '.node'],\n          browser: packerConfig.compiler.buildMode === 'browser',\n          preferBuiltins: true\n        },\n        packerConfig.compiler.advanced.rollup.pluginOptions.nodeResolve\n      )\n    ),\n    rollupCommonjs(\n      mergeDeep(\n        {\n          include: 'node_modules/**'\n        },\n        packerConfig.compiler.advanced.rollup.pluginOptions.commonjs\n      )\n    ),\n    rollupJson(packerConfig.compiler.advanced.rollup.pluginOptions.json as RollupJsonOptions)\n  ];\n\n  // include global and builtin plugins only when browser build mode is enabled\n  if (packerConfig.compiler.buildMode === 'browser') {\n    plugins.push(rollupGlobals(packerConfig.compiler.advanced.rollup.pluginOptions.globals));\n  }\n\n  return plugins;\n};\n\n/**\n * Get script build rollup plugins.\n * @param packageModule Package module type.\n * @param generateDefinition Generate type definitions if true.\n * @param check Set to false to avoid doing any diagnostic checks on the code.\n * @param packerConfig Packer configuration object.\n * @param babelConfig Babel configuration object.\n * @param typescript Typescript compiler reference.\n * @param log  Logger reference.\n */\nexport const getScriptBuildPlugin = (\n  packageModule: PackageModuleType,\n  generateDefinition: boolean,\n  check: boolean,\n  packerConfig: PackerConfig,\n  babelConfig: BabelConfig,\n  typescript: typeof TS,\n  log: Logger\n) => {\n  const plugins = [];\n  if (packerConfig.compiler.script.preprocessor === 'typescript') {\n    const buildConf: RollupPluginTypescriptOptions = {\n      check,\n      tsconfig: `tsconfig.json`,\n      typescript,\n      cacheRoot: path.join(process.cwd(), packerConfig.tmp, 'build', packageModule, '.rts2_cache'),\n      clean: true\n    };\n\n    if (generateDefinition) {\n      buildConf.tsconfigOverride = {\n        compilerOptions: {\n          declaration: true,\n          declarationDir: path.join(process.cwd(), packerConfig.dist, packerConfig.compiler.script.tsd)\n        }\n      };\n\n      buildConf.useTsconfigDeclarationDir = true;\n    }\n\n    plugins.push(\n      rollupTypescript(mergeDeep(buildConf, packerConfig.compiler.advanced.rollup.pluginOptions.typescript))\n    );\n  }\n\n  const moduleConfig = get(babelConfig, `env.${packageModule}`);\n  if (!moduleConfig) {\n    log.error('%s module configuration not found in .babelrc', packageModule);\n    process.exit(1);\n  }\n\n  plugins.push(\n    rollupBabel(\n      mergeDeep(\n        {\n          babelrc: false,\n          exclude: 'node_modules/**',\n          extensions: ['.js', '.jsx', '.es6', '.es', '.mjs', '.ts', '.tsx'],\n          plugins: moduleConfig.plugins || [],\n          presets: moduleConfig.presets || [],\n          runtimeHelpers: true\n        },\n        packerConfig.compiler.advanced.rollup.pluginOptions.babel\n      )\n    )\n  );\n\n  return plugins;\n};\n\n/**\n * Get pre bundle rollup plugins.\n * @param packerConfig Packer configuration object.\n */\nexport const getPreBundlePlugins = (packerConfig: PackerConfig) => {\n  const plugins = [];\n  if (packerConfig.replacePatterns.length) {\n    plugins.push(\n      rollupReplace(\n        mergeDeep(\n          {\n            exclude: 'node_modules/**',\n            patterns: packerConfig.replacePatterns\n          },\n          packerConfig.compiler.advanced.rollup.pluginOptions.replace\n        )\n      )\n    );\n  }\n  plugins.push(\n    rollupHandlebars(packerConfig.compiler.advanced.rollup.pluginOptions.handlebars),\n    rollupImage(\n      mergeDeep(\n        {\n          exclude: 'node_modules/**',\n          extensions: /\\.(png|jpg|jpeg|gif|svg)$/,\n          limit: packerConfig.compiler.script.image.inlineLimit,\n          output: path.join(packerConfig.dist, packerConfig.compiler.script.image.outDir)\n        },\n        packerConfig.compiler.advanced.rollup.pluginOptions.image\n      )\n    )\n  );\n\n  return plugins;\n};\n\n/**\n * Get post bundle rollup plugins.\n * @param task Gulp task name.\n * @param type Package module type.\n * @param packerConfig Packer config object.\n */\nexport const getPostBundlePlugins = (packerConfig: PackerConfig, task: string, type: PackageModuleType) => {\n  if (logger.level <= LogLevel.INFO) {\n    return [\n      rollupFilesize(\n        mergeDeep(\n          {\n            showMinifiedSize: false,\n            showBrotliSize: false,\n            showGzippedSize: false,\n            render: (options: any, sourceBundle: any, { gzipSize, bundleSize }): string => {\n              const bundleFormatted = `bundle size: ${chalk.red(bundleSize)}`;\n              return chalk.yellow(`${logger.currentTime} ${chalk.green(task)} ${type} ${bundleFormatted}`);\n            }\n          },\n          packerConfig.compiler.advanced.rollup.pluginOptions.filesize\n        )\n      )\n    ];\n  }\n\n  return [];\n};\n\n/**\n * Get custom rollup plugins included via packer config.\n * @param packerConfig Packer configuration object.\n * @param type Package module type.\n */\nexport const customRollupPlugins = (packerConfig: PackerConfig, type: PackageModuleType): any[] => {\n  if (packerConfig.compiler.customRollupPluginExtractor) {\n    return packerConfig.compiler.customRollupPluginExtractor(type, packerConfig);\n  }\n\n  return [];\n};\n\n/**\n * Generate bundled artifacts via rollup.\n * @param packerConfig Packer configuration object.\n * @param packageConfig Package configuration object.\n * @param bundleConfig Rollup bundle configuration object.\n * @param type Package module type.\n * @param minify Generate minified bundle artifact if true.\n * @param trackBuildPerformance Track rollup build performance.\n * @param log Logger reference.\n */\nexport const generateBundle = async (\n  packerConfig: PackerConfig,\n  packageConfig: PackageConfig,\n  bundleConfig: RollupOptions,\n  type: PackageModuleType,\n  minify: boolean,\n  trackBuildPerformance: boolean,\n  log: Logger\n): Promise<void> => {\n  log.trace('%s bundle build start', type);\n  const bundle = await rollup(mergeDeep(bundleConfig, packerConfig.compiler.advanced.rollup.inputOptions));\n  const outputOptions = mergeDeep(bundleConfig.output as OutputOptions,\n    packerConfig.compiler.advanced.rollup.outputOptions);\n  const { output } = await bundle.write(outputOptions);\n  const chunks: OutputChunk[] = output.filter((chunk: any) => !chunk.isAsset) as OutputChunk[];\n  const { map, code } = chunks[0];\n\n  log.trace('%s bundle build end', type);\n\n  if (trackBuildPerformance) {\n    // Performance stats should be available on any log level\n    const messageBase = `${logger.currentTime} ${chalk.green(type)}`;\n    console.log(chalk.blue('%s bundle performance statistics:\\n%o'), messageBase, bundle.getTimings());\n  }\n\n  if (minify) {\n    log.trace('%s minified bundle build start', type);\n    const minFileDist = (bundleConfig.output as OutputOptions).file.replace('.js', '.min.js');\n    const minMapFileDist = minFileDist.concat('.map');\n    const minFileName = path.basename(minFileDist);\n    const minMapFileName = minFileName.concat('.map');\n\n    let minSourceMapConfig: any = {\n      content: map,\n      filename: minFileName\n    };\n\n    if (packerConfig.compiler.sourceMap === 'inline') {\n      minSourceMapConfig.url = 'inline';\n    } else if (packerConfig.compiler.sourceMap) {\n      minSourceMapConfig.url = minMapFileName;\n    } else {\n      minSourceMapConfig = undefined;\n    }\n\n    const minData = terser.minify(\n      code,\n      mergeDeep(\n        {\n          sourceMap: minSourceMapConfig,\n          output: {\n            comments: /@preserve|@license|@cc_on/i\n          }\n        },\n        packerConfig.compiler.advanced.other.terser\n      )\n    );\n    log.trace('%s minified bundle terser config\\n%o', type, minData);\n\n    if (minData.error) {\n      const { message, line, col: column } = minData.error;\n      log.error(\n        '%s bundle min build failure \\n%s',\n        type,\n        codeFrameColumns(code, { start: { line, column } }, { message })\n      );\n      process.exit(1);\n    } else {\n      await writeFile(minFileDist, minData.code);\n      if (minSourceMapConfig && minSourceMapConfig.url === minMapFileName) {\n        log.trace('%s minified bundle write source maps', type);\n        await writeFile(minMapFileDist, minData.map);\n      }\n\n      if (logger.level <= LogLevel.INFO) {\n        const  formatOptions = packerConfig.compiler.advanced.rollup.pluginOptions.filesize.format;\n        const size = fileSize(Buffer.byteLength(minData.code), mergeDeep({\n          base: 10\n        }, formatOptions));\n        const minType = `${type} minified size:`;\n        log.info(chalk.yellow(minType), chalk.red(size));\n      }\n    }\n\n    log.trace('%s minified bundle build end', type);\n  }\n};\n\n/**\n * Get external dependency filter function.\n * @param packerConfig Packer config object.\n */\nexport const getExternalFilter = (packerConfig: PackerConfig) => {\n  const filter = packerConfig.bundle.externals.map((external) => glob(external));\n  return (id: string) => {\n    return filter.some((include) => include.test(id));\n  };\n};\n\n/**\n * Extract bundle external.\n * @param packerConfig Packer config object.\n */\nexport const extractBundleExternals = (packerConfig: PackerConfig) => {\n  // Map externals from globals if mapExternals is true.\n  return packerConfig.bundle.mapExternals ? Object.keys(packerConfig.bundle.globals) : getExternalFilter(packerConfig);\n};\n","import path from 'path';\nimport gulp from 'gulp';\nimport gulpAdd from 'gulp-add';\nimport chmod from 'gulp-chmod';\nimport merge from 'lodash/merge';\nimport { ModuleFormat, RollupOptions } from 'rollup';\n\nimport gulpHbsRuntime from '../plugins/gulp-hbs-runtime';\n\nimport { PackageConfig } from '../model/package-config';\nimport logger from '../common/logger';\nimport { meta } from './meta';\nimport {\n  getScriptBuildPlugin,\n  generateBundle,\n  customRollupPlugins,\n  getExternalFilter,\n  extractBundleExternals,\n  generateMinStyleSheet,\n  getBanner,\n  getBaseConfig,\n  getPostBundlePlugins,\n  getPreBundlePlugins,\n  getDependencyResolvePlugins,\n  getStyleBuildPlugins\n} from './build-util';\nimport { args, requireDependency } from './util';\n\nimport * as TS from 'typescript';\n\n/**\n * Initialize build associated gulp tasks.\n */\nexport default function init() {\n  /**\n   * Copy build essentials gulp task.\n   * This task will copy dynamically generated package.json file and packer config specified copy globs.\n   */\n  gulp.task('build:copy:essentials', () => {\n    const log = logger.create('[build:copy:essentials]');\n    try {\n      log.trace('start');\n      const packageJson = meta.readPackageData();\n      const config = meta.readPackerConfig(log);\n\n      const targetPackage: PackageConfig = {};\n\n      // only copy needed properties from project's package json\n      config.compiler.packageFieldsToCopy.forEach((field: string) => {\n        targetPackage[field] = packageJson[field];\n      });\n\n      if (config.compiler.buildMode === 'node-cli') {\n        targetPackage.bin = packageJson.bin;\n      }\n\n      if (config.compiler.build.bundleMin) {\n        targetPackage.main = path.join('bundle', `${packageJson.name}.${config.bundle.format}.min.js`);\n      } else {\n        targetPackage.main = path.join('bundle', `${packageJson.name}.${config.bundle.format}.js`);\n      }\n\n      if (config.compiler.script.preprocessor === 'typescript') {\n        targetPackage.typings = config.compiler.script.tsd\n          ? path.join(config.compiler.script.tsd, 'index.d.ts')\n          : 'index.d.ts';\n      }\n\n      if (config.compiler.build.es5Min) {\n        const esm5MinPath = path.join('fesm5', `${packageJson.name}.esm.min.js`);\n        targetPackage.module = esm5MinPath;\n        targetPackage.fesm5 = esm5MinPath;\n      } else if (config.compiler.build.es5) {\n        const fesm5Path = path.join('fesm5', `${packageJson.name}.esm.js`);\n        targetPackage.module = fesm5Path;\n        targetPackage.fesm5 = fesm5Path;\n      }\n\n      if (config.compiler.build.esnextMin) {\n        const esmNextMinPath = path.join('fesmnext', `${packageJson.name}.esm.min.js`);\n        targetPackage.esnext = esmNextMinPath;\n        targetPackage.fesmnext = esmNextMinPath;\n        targetPackage['jsnext:main'] = esmNextMinPath;\n      } else if (config.compiler.build.esnext) {\n        const esmNextPath = path.join('fesmnext', `${packageJson.name}.esm.js`);\n        targetPackage.esnext = esmNextPath;\n        targetPackage.fesmnext = esmNextPath;\n        targetPackage['jsnext:main'] = esmNextPath;\n      }\n\n      // Map dependencies to target package file\n      switch (config.compiler.dependencyMapMode) {\n        case 'cross-map-peer-dependency':\n          targetPackage.peerDependencies = packageJson.dependencies;\n          break;\n        case 'cross-map-dependency':\n          targetPackage.dependencies = packageJson.peerDependencies;\n          break;\n        case 'map-dependency':\n          targetPackage.dependencies = packageJson.dependencies;\n          break;\n        case 'map-peer-dependency':\n          targetPackage.peerDependencies = packageJson.peerDependencies;\n          break;\n        case 'all':\n          targetPackage.peerDependencies = packageJson.peerDependencies;\n          targetPackage.dependencies = packageJson.dependencies;\n          break;\n      }\n\n      // copy the needed additional files in the 'dist' folder\n      if (config.copy.length > 0) {\n        log.trace('copy static files and package.json');\n        return gulp\n          .src(\n            config.copy.map((copyFile: string) => {\n              return path.join(process.cwd(), copyFile);\n            }),\n            {\n              base: process.cwd()\n            }\n          )\n          .on('error', (e) => {\n            log.error('copy source missing: %s\\n', e.stack || e.message);\n            process.exit(1);\n          })\n          .pipe(gulpAdd('package.json', JSON.stringify(targetPackage, null, 2)))\n          .pipe(gulp.dest(path.join(process.cwd(), config.dist)))\n          .on('finish', () => {\n            log.trace('end');\n          });\n      } else {\n        log.trace('copy package.json');\n        return gulpAdd('package.json', JSON.stringify(targetPackage, null, 2))\n          .pipe(gulp.dest(path.join(process.cwd(), config.dist)))\n          .on('finish', () => {\n            log.trace('end');\n          });\n      }\n    } catch (e) {\n      log.error('task failure: %s\\n', e.stack || e.message);\n      process.exit(1);\n    }\n  });\n\n  /**\n   * Copy bin artifacts gulp task.\n   * This task will copy bin artifact only when build mode is node-cli\n   */\n  gulp.task('build:copy:bin', () => {\n    const log = logger.create('[build:copy:bin]');\n    try {\n      log.trace('start');\n      const packageJson = meta.readPackageData();\n      const config = meta.readPackerConfig(log);\n\n      if (config.compiler.buildMode !== 'node-cli') {\n        log.trace('not a cli project: bin copy abort');\n        log.trace('start');\n        return;\n      }\n\n      return gulp\n        .src([path.join(process.cwd(), '.packer/bin.hbs')])\n        .on('error', (e) => {\n          log.error('bin source missing: %s\\n', e.stack || e.message);\n          process.exit(1);\n        })\n        .pipe(\n          gulpHbsRuntime(\n            {\n              packageName: packageJson.name,\n              format: config.bundle.format\n            },\n            {\n              rename: `${packageJson.name}.js`\n            }\n          )\n        )\n        .pipe(\n          chmod({\n            group: {\n              execute: true,\n              read: true\n            },\n            others: {\n              execute: true,\n              read: true\n            },\n            owner: {\n              execute: true,\n              read: true,\n              write: true\n            }\n          })\n        ) // Grant read and execute permission.\n        .pipe(gulp.dest(path.join(process.cwd(), config.dist, 'bin')))\n        .on('finish', () => {\n          log.trace('end');\n        });\n    } catch (e) {\n      log.error('task failure: %s\\n', e.stack || e.message);\n      process.exit(1);\n    }\n  });\n\n  /**\n   * Copy build artifacts gulp task.\n   * Run copy essentials and bin on parallel mode.\n   */\n  gulp.task('build:copy', gulp.parallel('build:copy:essentials', 'build:copy:bin'));\n\n  /**\n   * Build distribution bundles gulp task.\n   * This task contains the core logic to build scripts and styles via rollup.\n   */\n  gulp.task('build:bundle', async () => {\n    const log = logger.create('[build:bundle]');\n    try {\n      log.trace(' start');\n      const packerConfig = meta.readPackerConfig(log);\n      const packageConfig = meta.readPackageData();\n      const babelConfig = meta.readBabelConfig();\n      const banner = await getBanner(packerConfig, packageConfig);\n      const baseConfig = getBaseConfig(packerConfig, packageConfig, banner);\n      const externals = extractBundleExternals(packerConfig);\n      const buildTasks: Array<Promise<void>> = [];\n      const bundleFileName = `${packageConfig.name}.${packerConfig.bundle.format}.js`;\n      const trackBuildPerformance = args.includes('--perf') || args.includes('-P');\n\n      let typescript: typeof TS = null;\n      if (packerConfig.compiler.script.preprocessor === 'typescript') {\n        typescript = requireDependency<typeof TS>('typescript', log);\n      }\n\n      // flat bundle.\n      const flatConfig: RollupOptions = merge({}, baseConfig, {\n        external: externals,\n        output: {\n          amd: packerConfig.bundle.amd,\n          file: path.join(process.cwd(), packerConfig.dist, 'bundle', bundleFileName),\n          format: packerConfig.bundle.format,\n          globals: packerConfig.bundle.globals,\n          name: packerConfig.bundle.namespace\n        },\n        perf: trackBuildPerformance,\n        plugins: [\n          ...getStyleBuildPlugins(packerConfig, packageConfig, false, true, log),\n          ...getPreBundlePlugins(packerConfig),\n          ...getDependencyResolvePlugins(packerConfig),\n          ...getScriptBuildPlugin('bundle', true, true, packerConfig, babelConfig, typescript, log),\n          ...getPostBundlePlugins(packerConfig, '[build:bundle]', 'bundle'),\n          ...customRollupPlugins(packerConfig, 'bundle')\n        ]\n      });\n\n      log.trace('flat bundle rollup config:\\n%o', flatConfig);\n      buildTasks.push(\n        generateBundle(\n          packerConfig,\n          packageConfig,\n          flatConfig,\n          'bundle',\n          packerConfig.compiler.build.bundleMin,\n          trackBuildPerformance,\n          log\n        )\n      );\n\n      if (packerConfig.compiler.build.es5) {\n        // FESM+ES5 flat module bundle.\n        const es5config: RollupOptions = merge({}, baseConfig, {\n          external: getExternalFilter(packerConfig),\n          output: {\n            file: path.join(process.cwd(), packerConfig.dist, 'fesm5', `${packageConfig.name}.esm.js`),\n            format: 'esm' as ModuleFormat\n          },\n          perf: trackBuildPerformance,\n          plugins: [\n            ...getStyleBuildPlugins(packerConfig, packageConfig, false, false, log),\n            ...getPreBundlePlugins(packerConfig),\n            ...getDependencyResolvePlugins(packerConfig),\n            ...getScriptBuildPlugin('es5', false, true, packerConfig, babelConfig, typescript, log),\n            ...getPostBundlePlugins(packerConfig, '[build:bundle]', 'es5'),\n            ...customRollupPlugins(packerConfig, 'es5')\n          ]\n        });\n\n        log.trace('es5 bundle rollup config:\\n%o', es5config);\n        buildTasks.push(\n          generateBundle(\n            packerConfig,\n            packageConfig,\n            es5config,\n            'es5',\n            packerConfig.compiler.build.es5Min,\n            trackBuildPerformance,\n            log\n          )\n        );\n      }\n\n      if (packerConfig.compiler.build.esnext) {\n        // FESM+ESNEXT flat module bundle.\n        const esnextConfig: RollupOptions = merge({}, baseConfig, {\n          external: getExternalFilter(packerConfig),\n          output: {\n            file: path.join(process.cwd(), packerConfig.dist, 'fesmnext', `${packageConfig.name}.esm.js`),\n            format: 'esm' as ModuleFormat\n          },\n          perf: trackBuildPerformance,\n          plugins: [\n            ...getStyleBuildPlugins(packerConfig, packageConfig, false, false, log),\n            ...getPreBundlePlugins(packerConfig),\n            ...getDependencyResolvePlugins(packerConfig),\n            ...getScriptBuildPlugin('esnext', false, true, packerConfig, babelConfig, typescript, log),\n            ...getPostBundlePlugins(packerConfig, '[build:bundle]', 'esnext'),\n            ...customRollupPlugins(packerConfig, 'esnext')\n          ]\n        });\n\n        log.trace('esnext bundle rollup config:\\n%o', esnextConfig);\n        buildTasks.push(\n          generateBundle(\n            packerConfig,\n            packageConfig,\n            esnextConfig,\n            'esnext',\n            packerConfig.compiler.build.esnextMin,\n            trackBuildPerformance,\n            log\n          )\n        );\n      }\n\n      if (packerConfig.compiler.concurrentBuild) {\n        await Promise.all(buildTasks);\n      } else {\n        for (const task of buildTasks) {\n          await task;\n        }\n      }\n\n      await generateMinStyleSheet(packerConfig, packageConfig, log);\n\n      log.trace('end');\n    } catch (e) {\n      log.error('task failure:\\n%s', e.stack || e.message);\n      process.exit(1);\n    }\n  });\n\n  /**\n   * Library build gulp task.\n   * Clean distribution directory and run build copy and bundle tasks on parallel mode.\n   */\n  gulp.task('build', gulp.series('build:clean', gulp.parallel('build:copy', 'build:bundle')));\n}\n","import path from 'path';\nimport gulp, { TaskFunction } from 'gulp';\nimport gulpAdd from 'gulp-add';\n\nimport { DependencyMap } from '../model/dependency-map';\nimport { BrowserBundleFormat } from '../model/browser-bundle-format';\nimport { NodeBundleFormat } from '../model/node-bundle-format';\nimport { BuildMode } from '../model/build-mode';\nimport { PackerOptions } from '../model/packer-options';\nimport { PackageConfig } from '../model/package-config';\n\nimport gulpHbsRuntime from '../plugins/gulp-hbs-runtime';\nimport { Logger } from '../common/logger';\nimport { parseLicenseType } from './parser';\nimport { TestEnvironment } from '../model/test-environment';\n\n/**\n * Parse package dependency map mode.\n * @param packerOptions Packer options object.\n */\nexport const parseDependencyMapMode = (packerOptions: PackerOptions): DependencyMap => {\n  if (packerOptions.cliProject) {\n    return 'map-dependency';\n  }\n\n  return 'cross-map-peer-dependency';\n};\n\n/**\n * Parse package bundle format.\n * @param packerOptions Packer options object.\n */\nexport const parseBundleFormat = (packerOptions: PackerOptions): NodeBundleFormat | BrowserBundleFormat => {\n  if (packerOptions.browserCompliant) {\n    return packerOptions.bundleFormat || 'umd';\n  }\n\n  return 'cjs';\n};\n\n/**\n * Generate and copy packer configuration file.\n * @param packerOptions Packer options object.\n * @param scriptExt Script file extension.\n * @param buildMode Package build mode.\n * @param testEnvironment Test environment type.\n * @param projectDir Project root directory.\n */\nexport const copyPackerConfig = (\n  packerOptions: PackerOptions,\n  scriptExt: string,\n  buildMode: BuildMode,\n  testEnvironment: TestEnvironment,\n  projectDir: string\n): TaskFunction => {\n  const entryFile = `index.${scriptExt}`;\n  const mapMode = parseDependencyMapMode(packerOptions);\n  const bundleFormat = parseBundleFormat(packerOptions);\n  const packerTemplatePath = path.join(__dirname, '../resources/dynamic/.packerrc.js.hbs');\n\n  return () => {\n    return gulp\n      .src([packerTemplatePath])\n      .pipe(\n        gulpHbsRuntime(\n          {\n            entry: entryFile,\n            buildMode,\n            scriptPreprocessor: packerOptions.scriptPreprocessor,\n            styleSupport: packerOptions.styleSupport,\n            inlineStyle: packerOptions.bundleStyles,\n            stylePreprocessor: packerOptions.stylePreprocessor,\n            isMocha: packerOptions.testFramework === 'mocha',\n            isReactLib: packerOptions.reactLib,\n            bundleFormat,\n            namespace: packerOptions.namespace,\n            amdId: packerOptions.amdId,\n            testFramework: packerOptions.testFramework,\n            testEnvironment,\n            serveSupport: packerOptions.browserCompliant,\n            dependencyMapMode: mapMode\n          },\n          {\n            replaceExt: ''\n          }\n        )\n      )\n      .pipe(gulp.dest(projectDir));\n  };\n};\n\n/**\n * Copy license file.\n * @param packerOptions Packer options object.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const licenseCopy = (packerOptions: PackerOptions, projectDir: string, log: Logger): TaskFunction => {\n  log.trace('copy license file');\n  const license = parseLicenseType(packerOptions.license);\n  const licenseFilePath = path.join(__dirname, '../resources/dynamic/license', `${license}.hbs`);\n  log.trace('license file path: %s', licenseFilePath);\n\n  const templateData = {\n    year: packerOptions.year,\n    author: packerOptions.author\n  };\n  log.trace('template data: %o', templateData);\n\n  return () => {\n    return gulp\n      .src([licenseFilePath])\n      .on('error', (e) => {\n        log.error('missing license file template: %s\\n', e.stack || e.message);\n        process.exit(1);\n      })\n      .pipe(\n        gulpHbsRuntime(templateData, {\n          rename: 'LICENSE'\n        })\n      )\n      .pipe(gulp.dest(projectDir));\n  };\n};\n\n/**\n * Copy readme.md file.\n * @param packageConfig Package configuration object.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyReadme = (packageConfig: PackageConfig, projectDir: string, log: Logger): TaskFunction => {\n  log.trace('copy base dynamic and static config');\n\n  const templateData = {\n    packageName: packageConfig.name,\n    packageDescription: packageConfig.description\n  };\n  log.trace('template data: %o', templateData);\n\n  return () => {\n    return gulp\n      .src([path.join(__dirname, '../resources/dynamic/README.md.hbs')])\n      .on('error', (e) => {\n        log.error('missing README.md template: %s\\n', e.stack || e.message);\n        process.exit(1);\n      })\n      .pipe(\n        gulpHbsRuntime(templateData, {\n          replaceExt: ''\n        })\n      )\n      .pipe(gulp.dest(projectDir));\n  };\n};\n\n/**\n * Copy babel configuration.\n * @param packerOptions Packer options object.\n * @param buildMode Project build mode.\n * @param testEnvironment Test environment type.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyBabelConfig = (\n  packerOptions: PackerOptions,\n  buildMode: BuildMode,\n  testEnvironment: TestEnvironment,\n  projectDir: string,\n  log: Logger\n): TaskFunction => {\n  log.trace('copy babel config');\n  const babelrc = path.join(__dirname, '../resources/dynamic/.babelrc.hbs');\n  log.trace('babel config glob: %s', babelrc);\n\n  const templateData = {\n    browserCompliant: buildMode === 'browser',\n    reactLib: packerOptions.reactLib,\n    isBrowserEnvironment: testEnvironment === 'browser',\n    cjsTestModule: packerOptions.testFramework === 'jasmine' || packerOptions.testFramework === 'mocha'\n  };\n  log.trace('template data: %o', templateData);\n\n  return () => {\n    return gulp\n      .src([babelrc])\n      .pipe(\n        gulpHbsRuntime(templateData, {\n          replaceExt: ''\n        })\n      )\n      .pipe(gulp.dest(projectDir));\n  };\n};\n\n/**\n * Copy gitignore file.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyGitIgnore = (projectDir: string, log: Logger): TaskFunction => {\n  log.trace('copy gitignore');\n  const gitignore = path.join(__dirname, '../resources/dynamic/.gitignore.hbs');\n  log.trace('.gitignore.hbs path: %s', gitignore);\n\n  return () => {\n    return gulp\n      .src([gitignore])\n      .on('error', (e) => {\n        log.error('missing .gitignore template: %s\\n', e.stack || e.message);\n        process.exit(1);\n      })\n      .pipe(\n        gulpHbsRuntime(\n          {},\n          {\n            replaceExt: ''\n          }\n        )\n      )\n      .pipe(gulp.dest(projectDir));\n  };\n};\n\n/**\n * Copy packer asset (banner.hbs and bin.hbs) files.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyPackerAssets = (projectDir: string, log: Logger): TaskFunction => {\n  log.trace('copy packer assets');\n  const banner = path.join(__dirname, '../resources/dynamic/packer/banner.hbs');\n  log.trace('banner template path: %s', banner);\n\n  const bin = path.join(__dirname, '../resources/dynamic/packer/bin.hbs');\n  log.trace('bin template path: %s', bin);\n\n  return () => {\n    return gulp\n      .src([banner, bin])\n      .on('error', (e) => {\n        log.error('missing packer asset: %s\\n', e.stack || e.message);\n        process.exit(1);\n      })\n      .pipe(gulp.dest(path.join(projectDir, '.packer')));\n  };\n};\n\n/**\n * Copy typescript configuration tsconfig.json and tslint.json files.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyTypescriptConfig = (projectDir: string, log: Logger): TaskFunction => {\n  const tsconfig = path.join(__dirname, '../resources/static/tsconfig.json');\n  log.trace('tsconfig.json path: %s', tsconfig);\n\n  const tslint = path.join(__dirname, '../resources/static/tslint.json');\n  log.trace('tslint.json path: %s', tslint);\n\n  return () => {\n    return gulp\n      .src([tsconfig, tslint])\n      .on('error', (e) => {\n        log.error('missing config file: %s\\n', e.stack || e.message);\n        process.exit(1);\n      })\n      .pipe(gulp.dest(projectDir));\n  };\n};\n\n/**\n * Copy postcss configuration file.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyPostCssConfig = (projectDir: string, log: Logger): TaskFunction => {\n  const postCss = path.join(__dirname, '../resources/static/postcss.config.js');\n  log.trace('karma.conf.js path: %s', postCss);\n\n  return () => {\n    return gulp\n      .src([postCss])\n      .on('error', (e) => {\n        log.error('missing config file: %s\\n', e.stack || e.message);\n        process.exit(1);\n      })\n      .pipe(gulp.dest(projectDir));\n  };\n};\n\n/**\n * Copy ESLint configuration file.\n * @param packerOptions Packer options object reference.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyEsLintConfig = (packerOptions: PackerOptions, projectDir: string, log: Logger): TaskFunction => {\n  const eslintrc = path.join(__dirname, '../resources/dynamic/.eslintrc.json.hbs');\n  const eslintignore = path.join(__dirname, '../resources/static/.eslintignore');\n  log.trace('eslintrc.json.hbs path: %s', eslintrc);\n  log.trace('eslintignore path: %s', eslintignore);\n\n  return () => {\n    return gulp\n      .src([eslintrc, eslintignore])\n      .on('error', (e) => {\n        log.error('missing config file: %s\\n', e.stack || e.message);\n        process.exit(1);\n      })\n      .pipe(\n        gulpHbsRuntime(\n          {\n            testFramework: packerOptions.testFramework\n          },\n          {\n            replaceExt: ''\n          }\n        )\n      )\n      .pipe(gulp.dest(projectDir));\n  };\n};\n\n/**\n * Copy style lint configuration file.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyStyleLintConfig = (projectDir: string, log: Logger): TaskFunction => {\n  const stylelintrc = path.join(__dirname, '../resources/static/.stylelintrc.json');\n  const stylelintignore = path.join(__dirname, '../resources/static/.stylelintignore');\n  log.trace('.stylelintrc.json path: %s', stylelintrc);\n  log.trace('.stylelintignore path: %s', stylelintignore);\n\n  return () => {\n    return gulp\n      .src([stylelintrc, stylelintignore])\n      .on('error', (e) => {\n        log.error('missing config file: %s\\n', e.stack || e.message);\n        process.exit(1);\n      })\n      .pipe(gulp.dest(projectDir));\n  };\n};\n\n/**\n * Copy common configuration (package.json, .editorconfig and travis.yml) files\n * @param packageConfig Package configuration object.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyCommonConfig = (packageConfig: PackageConfig, projectDir: string, log: Logger): TaskFunction => {\n  log.trace('copy base dynamic and static config');\n  const editorConfig = path.join(__dirname, '../resources/static/.editorconfig');\n  log.trace('.editorconfig path: %s', editorConfig);\n\n  const travis = path.join(__dirname, '../resources/static/.travis.yml');\n  log.trace('.travis.yml path: %s', travis);\n\n  return () => {\n    return gulp\n      .src([editorConfig, travis])\n      .on('error', (e) => {\n        log.error('missing config file: %s\\n', e.stack || e.message);\n        process.exit(1);\n      })\n      .pipe(gulpAdd('package.json', JSON.stringify(packageConfig, null, 2)))\n      .pipe(gulp.dest(projectDir));\n  };\n};\n\n/**\n * Copy prettier configuration file.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyPrettierConfig = (projectDir: string, log: Logger): TaskFunction => {\n  const prettierrc = path.join(__dirname, '../resources/static/.prettierrc');\n  const prettierignore = path.join(__dirname, '../resources/static/.prettierignore');\n  log.trace('.prettierrc path: %s', prettierrc);\n  log.trace('.prettierignore path: %s', prettierignore);\n\n  return () => {\n    return gulp\n      .src([prettierrc, prettierignore])\n      .on('error', (e) => {\n        log.error('missing config file: %s\\n', e.stack || e.message);\n        process.exit(1);\n      })\n      .pipe(gulp.dest(projectDir));\n  };\n};\n\n/**\n * Get project configuration file generation gulp tasks.\n * @param packerOptions Packer configuration object.\n * @param packageConfig Package configuration object.\n * @param buildMode Project build mode.\n * @param scriptExt Script file extension.\n * @param testEnvironment Test environment type.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const getConfigFileGenerateTasks = (\n  packerOptions: PackerOptions,\n  packageConfig: PackageConfig,\n  buildMode: BuildMode,\n  scriptExt: string,\n  testEnvironment: TestEnvironment,\n  projectDir: string,\n  log: Logger\n): TaskFunction[] => {\n  const tasks: TaskFunction[] = [];\n\n  if (packerOptions.scriptPreprocessor === 'typescript') {\n    tasks.push(copyTypescriptConfig(projectDir, log));\n  } else {\n    tasks.push(copyEsLintConfig(packerOptions, projectDir, log));\n  }\n\n  if (packerOptions.styleSupport) {\n    tasks.push(copyPostCssConfig(projectDir, log));\n    tasks.push(copyStyleLintConfig(projectDir, log));\n  }\n\n  tasks.push(licenseCopy(packerOptions, projectDir, log));\n  tasks.push(copyReadme(packageConfig, projectDir, log));\n  tasks.push(copyBabelConfig(packerOptions, buildMode, testEnvironment, projectDir, log));\n  tasks.push(copyGitIgnore(projectDir, log));\n  tasks.push(copyPackerAssets(projectDir, log));\n  tasks.push(copyCommonConfig(packageConfig, projectDir, log));\n  tasks.push(copyPackerConfig(packerOptions, scriptExt, buildMode, testEnvironment, projectDir));\n  tasks.push(copyPrettierConfig(projectDir, log));\n\n  return tasks;\n};\n","import path from 'path';\nimport gulp, { TaskFunction } from 'gulp';\n\nimport gulpHbsRuntime from '../plugins/gulp-hbs-runtime';\nimport { Logger } from '../common/logger';\n\nimport { PackerOptions } from '../model/packer-options';\nimport { TestEnvironment } from '../model/test-environment';\n\n/**\n * Parse script transpiler by preprocessor type and extract extension glob depending on enzyme support.\n * @param packerOptions Packer options object.\n * @param scriptExt Script file extension.\n */\nexport const parseSpecScriptExtension = (packerOptions: PackerOptions, scriptExt: string): string => {\n  if (packerOptions.useEnzyme) {\n    return `{${scriptExt},${scriptExt}x}`;\n  } else {\n    return scriptExt;\n  }\n};\n\n/**\n * Copy jasmine configuration file.\n * @param packerOptions Packer options object.\n * @param testEnvironment Test environment type.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyJasmineConfig = (\n  packerOptions: PackerOptions,\n  testEnvironment: TestEnvironment,\n  projectDir: string,\n  log: Logger\n): TaskFunction => {\n  const jasmine = path.join(__dirname, '../resources/dynamic/jasmine.json.hbs');\n  log.trace('jasmine.json path: %s', jasmine);\n\n  return () => {\n    return gulp\n      .src([jasmine])\n      .on('error', (e) => {\n        log.error('missing config file: %s\\n', e.stack || e.message);\n        process.exit(1);\n      })\n      .pipe(\n        gulpHbsRuntime(\n          {\n            isTypescript: packerOptions.scriptPreprocessor === 'typescript',\n            useEnzyme: packerOptions.useEnzyme,\n            useJsDom: testEnvironment === 'jsdom'\n          },\n          {\n            replaceExt: ''\n          }\n        )\n      )\n      .pipe(gulp.dest(projectDir));\n  };\n};\n\n/**\n * Copy jasmine helper script files.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyJasmineHelpers = (projectDir: string, log: Logger): TaskFunction => {\n  const helpersGlob = path.join(__dirname, '../resources/dynamic/example/test/jasmine/helpers/**/*');\n  log.trace('jasmine helpers path glob: %s', helpersGlob);\n\n  return () => {\n    return gulp\n      .src([helpersGlob])\n      .on('error', (e) => {\n        log.error('missing config file: %s\\n', e.stack || e.message);\n        process.exit(1);\n      })\n      .pipe(gulp.dest(path.join(projectDir, 'helpers')));\n  };\n};\n\n/**\n * Copy jasmine test spec files.\n * @param scriptGlob Script extension glob.\n * @param scriptExt Script file extension.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyJasmineSpec = (\n  scriptGlob: string,\n  scriptExt: string,\n  projectDir: string,\n  log: Logger\n): TaskFunction => {\n  const specGlob = path.join(\n    __dirname,\n    '../resources/dynamic/example/test/jasmine',\n    scriptExt,\n    `spec/**/*.${scriptGlob}`\n  );\n  log.trace('jasmine spec path glob: %s', specGlob);\n\n  return () => {\n    return gulp\n      .src([specGlob])\n      .on('error', (e) => {\n        log.error('missing config file: %s\\n', e.stack || e.message);\n        process.exit(1);\n      })\n      .pipe(gulp.dest(path.join(projectDir, 'spec')));\n  };\n};\n\n/**\n * Copy karma jasmine test spec files.\n * @param scriptGlob Script extension glob.\n * @param scriptExt Script file extension.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyKarmaJasmineSpec = (\n  scriptGlob: string,\n  scriptExt: string,\n  projectDir: string,\n  log: Logger\n): TaskFunction => {\n  const specGlob = path.join(\n    __dirname,\n    '../resources/dynamic/example/test/karma/jasmine',\n    scriptExt,\n    `spec/**/*.${scriptGlob}`\n  );\n  log.trace('jasmine spec path glob: %s', specGlob);\n\n  return () => {\n    return gulp\n      .src([specGlob])\n      .on('error', (e) => {\n        log.error('missing config file: %s\\n', e.stack || e.message);\n        process.exit(1);\n      })\n      .pipe(gulp.dest(path.join(projectDir, 'spec')));\n  };\n};\n\n/**\n * Copy jasmine configuration file.\n * @param packerOptions Packer options object.\n * @param testEnvironment Test environment type.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyMochaConfig = (\n  packerOptions: PackerOptions,\n  testEnvironment: TestEnvironment,\n  projectDir: string,\n  log: Logger\n): TaskFunction => {\n  const mocha = path.join(__dirname, '../resources/dynamic/mocha.opts.hbs');\n  log.trace('mocha.opts path: %s', mocha);\n\n  return () => {\n    return gulp\n      .src([mocha])\n      .on('error', (e) => {\n        log.error('missing config file: %s\\n', e.stack || e.message);\n        process.exit(1);\n      })\n      .pipe(\n        gulpHbsRuntime(\n          {\n            isTypescript: packerOptions.scriptPreprocessor === 'typescript',\n            useEnzyme: packerOptions.useEnzyme,\n            useJsDom: testEnvironment === 'jsdom'\n          },\n          {\n            replaceExt: ''\n          }\n        )\n      )\n      .pipe(gulp.dest(projectDir));\n  };\n};\n\n/**\n * Copy mocha helper script files. Used as mocha require scripts.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyMochaHelpers = (projectDir: string, log: Logger): TaskFunction => {\n  const helpersGlob = path.join(__dirname, '../resources/dynamic/example/test/mocha/helpers/**/*');\n  log.trace('mocha helpers path glob: %s', helpersGlob);\n\n  return () => {\n    return gulp\n      .src([helpersGlob])\n      .on('error', (e) => {\n        log.error('missing config file: %s\\n', e.stack || e.message);\n        process.exit(1);\n      })\n      .pipe(gulp.dest(path.join(projectDir, 'helpers')));\n  };\n};\n\n/**\n * Copy mocha test spec files.\n * @param scriptGlob Script extension glob.\n * @param scriptExt Script file extension.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyMochaTestSpec = (\n  scriptGlob: string,\n  scriptExt: string,\n  projectDir: string,\n  log: Logger\n): TaskFunction => {\n  const testGlob = path.join(\n    __dirname,\n    '../resources/dynamic/example/test/mocha',\n    scriptExt,\n    `test/**/*.${scriptGlob}`\n  );\n  log.trace('mocha test spec path glob: %s', testGlob);\n\n  return () => {\n    return gulp\n      .src([testGlob])\n      .on('error', (e) => {\n        log.error('missing config file: %s\\n', e.stack || e.message);\n        process.exit(1);\n      })\n      .pipe(gulp.dest(path.join(projectDir, 'test')));\n  };\n};\n\n/**\n * Copy karma mocha test spec files.\n * @param scriptExt Script file extension.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyKarmaMochaTestSpec = (scriptExt: string, projectDir: string, log: Logger): TaskFunction => {\n  const testGlob = path.join(__dirname, '../resources/dynamic/example/test/karma/mocha', scriptExt, 'spec/**/*');\n  log.trace('mocha test spec path glob: %s', testGlob);\n\n  return () => {\n    return gulp\n      .src([testGlob])\n      .on('error', (e) => {\n        log.error('missing config file: %s\\n', e.stack || e.message);\n        process.exit(1);\n      })\n      .pipe(gulp.dest(path.join(projectDir, 'test')));\n  };\n};\n\n/**\n * Copy jest configuration file.\n * @param packerOptions Packer options object.\n * @param testEnvironment Test environment type.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyJestConfig = (\n  packerOptions: PackerOptions,\n  testEnvironment: TestEnvironment,\n  projectDir: string,\n  log: Logger\n): TaskFunction => {\n  const jest = path.join(__dirname, '../resources/dynamic/jest.config.js.hbs');\n  log.trace('jest.config.js path: %s', jest);\n\n  return () => {\n    return gulp\n      .src([jest])\n      .on('error', (e) => {\n        log.error('missing config file: %s\\n', e.stack || e.message);\n        process.exit(1);\n      })\n      .pipe(\n        gulpHbsRuntime(\n          {\n            isTypescript: packerOptions.scriptPreprocessor === 'typescript',\n            testEnvironment,\n            useEnzyme: packerOptions.useEnzyme\n          },\n          {\n            replaceExt: ''\n          }\n        )\n      )\n      .pipe(gulp.dest(projectDir));\n  };\n};\n\n/**\n * Copy jest mock scripts.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyJestMockScripts = (projectDir: string, log: Logger): TaskFunction => {\n  const mockScriptGlob = path.join(__dirname, '../resources/dynamic/example/test/jest/__mocks__/**/*');\n  log.trace('mock script glob bath: %s', mockScriptGlob);\n\n  return () => {\n    return gulp\n      .src([mockScriptGlob])\n      .on('error', (e) => {\n        log.error('missing config file: %s\\n', e.stack || e.message);\n        process.exit(1);\n      })\n      .pipe(gulp.dest(path.join(projectDir, '__mocks__')));\n  };\n};\n\n/**\n * Copy jest test files.\n * @param scriptGlob Script extension glob.\n * @param scriptExt Script file extension.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyJestTests = (scriptGlob: string, scriptExt: string, projectDir: string, log: Logger): TaskFunction => {\n  const testsGlob = path.join(\n    __dirname,\n    '../resources/dynamic/example/test/jest',\n    scriptExt,\n    `__tests__/**/*.${scriptGlob}`\n  );\n  log.trace('jest tests path glob: %s', testsGlob);\n\n  return () => {\n    return gulp\n      .src([testsGlob])\n      .on('error', (e) => {\n        log.error('missing config file: %s\\n', e.stack || e.message);\n        process.exit(1);\n      })\n      .pipe(gulp.dest(path.join(projectDir, '__tests__')));\n  };\n};\n\n/**\n * Copy test typescript configuration (tsconfig.test.json) file.\n * @param packerOptions Packer options object reference.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyTestTypescriptConfig = (\n  packerOptions: PackerOptions,\n  projectDir: string,\n  log: Logger\n): TaskFunction => {\n  const tsconfig = path.join(__dirname, '../resources/dynamic/tsconfig.test.json.hbs');\n  log.trace('tsconfig.test.json.hbs path: %s', tsconfig);\n\n  return () => {\n    return gulp\n      .src([tsconfig])\n      .on('error', (e) => {\n        log.error('missing config file: %s\\n', e.stack || e.message);\n        process.exit(1);\n      })\n      .pipe(\n        gulpHbsRuntime(\n          {\n            isJest: packerOptions.testFramework === 'jest'\n          },\n          {\n            replaceExt: ''\n          }\n        )\n      )\n      .pipe(gulp.dest(projectDir));\n  };\n};\n\n/**\n * Copy karma configuration (karma.conf.js) file.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyKarmaConfig = (projectDir: string, log: Logger): TaskFunction => {\n  const karma = path.join(__dirname, '../resources/static/karma.conf.js');\n  log.trace('karma.conf.js path: %s', karma);\n\n  return () => {\n    return gulp\n      .src([karma])\n      .on('error', (e) => {\n        log.error('missing config file: %s\\n', e.stack || e.message);\n        process.exit(1);\n      })\n      .pipe(gulp.dest(projectDir));\n  };\n};\n\n/**\n * Get test specification generator gulp task functions.\n * @param packerOptions Packer options object.\n * @param scriptExt Script file extension.\n * @param testEnvironment Test environment type.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const getTestSpecGeneratorTasks = (\n  packerOptions: PackerOptions,\n  scriptExt: string,\n  testEnvironment: TestEnvironment,\n  projectDir: string,\n  log: Logger\n): TaskFunction[] => {\n  const tasks: TaskFunction[] = [];\n  const scriptGlob = parseSpecScriptExtension(packerOptions, scriptExt);\n\n  if (packerOptions.testFramework === 'jest') {\n    tasks.push(copyJestConfig(packerOptions, testEnvironment, projectDir, log));\n    tasks.push(copyJestMockScripts(projectDir, log));\n    tasks.push(copyJestTests(scriptGlob, scriptExt, projectDir, log));\n\n    if (packerOptions.scriptPreprocessor === 'typescript') {\n      tasks.push(copyTestTypescriptConfig(packerOptions, projectDir, log));\n    }\n  } else {\n    if (testEnvironment === 'browser') {\n      tasks.push(copyKarmaConfig(projectDir, log));\n\n      if (packerOptions.testFramework === 'jasmine') {\n        tasks.push(copyKarmaJasmineSpec(scriptGlob, scriptExt, projectDir, log));\n      }\n\n      if (packerOptions.testFramework === 'mocha') {\n        tasks.push(copyKarmaMochaTestSpec(scriptExt, projectDir, log));\n      }\n    } else {\n      if (packerOptions.scriptPreprocessor === 'typescript') {\n        tasks.push(copyTestTypescriptConfig(packerOptions, projectDir, log));\n      }\n\n      if (packerOptions.testFramework === 'jasmine') {\n        tasks.push(copyJasmineConfig(packerOptions, testEnvironment, projectDir, log));\n        tasks.push(copyJasmineHelpers(projectDir, log));\n        tasks.push(copyJasmineSpec(scriptGlob, scriptExt, projectDir, log));\n      }\n\n      if (packerOptions.testFramework === 'mocha') {\n        tasks.push(copyMochaConfig(packerOptions, testEnvironment, projectDir, log));\n        tasks.push(copyMochaHelpers(projectDir, log));\n        tasks.push(copyMochaTestSpec(scriptGlob, scriptExt, projectDir, log));\n      }\n    }\n  }\n\n  return tasks;\n};\n","import * as path from 'path';\nimport gulp, { TaskFunction } from 'gulp';\n\nimport gulpHbsRuntime from '../plugins/gulp-hbs-runtime';\n\nimport { Logger } from '../common/logger';\n\nimport { PackerOptions } from '../model/packer-options';\nimport { BuildMode } from '../model/build-mode';\n\n/**\n * Copy example style sheets.\n * @param styleExt Style sheet extension.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyExampleStyleSheets = (styleExt: string, projectDir: string, log: Logger): TaskFunction => {\n  log.trace('copy styles');\n\n  const styleGlob = path.join(__dirname, '../resources/dynamic/example/common/style', `**/*.${styleExt}`);\n  log.trace('style glob: %s', styleGlob);\n\n  return () => {\n    return gulp.src([styleGlob]).pipe(gulp.dest(path.join(projectDir, 'src/style')));\n  };\n};\n\n/**\n * Copy example handlebars templates.\n * @param project DirProject root directory.\n * @param log Logger reference.\n */\nexport const copyExampleTemplates = (projectDir: string, log: Logger): TaskFunction => {\n  log.trace('copy templates');\n\n  const templatePath = path.join(__dirname, '../resources/dynamic/example/common/templates/**/*');\n  log.trace('template path: %s', templatePath);\n\n  return () => {\n    return gulp.src([templatePath]).pipe(gulp.dest(path.join(projectDir, 'src/templates')));\n  };\n};\n\n/**\n * Copy example assets.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyExampleAsset = (projectDir: string, log: Logger): TaskFunction => {\n  log.trace('copy assets');\n\n  const assetsPath = path.join(__dirname, '../resources/dynamic/example/common/assets/**/*');\n  log.trace('assets path: %s', assetsPath);\n\n  return () => {\n    return gulp.src([assetsPath]).pipe(gulp.dest(path.join(projectDir, 'src/assets')));\n  };\n};\n\n/**\n * Copy example source.\n * @param packerOptions Packer options object.\n * @param buildMode Package build mode.\n * @param scriptExt Script file extension.\n * @param styleExt Style sheet extension.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyExampleSource = (\n  packerOptions: PackerOptions,\n  buildMode: BuildMode,\n  scriptExt: string,\n  styleExt: string,\n  projectDir: string,\n  log: Logger\n): TaskFunction => {\n  log.trace('copy source');\n\n  const fileExtensions = [scriptExt, 'hbs'];\n  if (packerOptions.reactLib) {\n    fileExtensions.push(`${scriptExt}x`);\n  }\n\n  const exampleGlob = path.join(\n    __dirname,\n    '../resources/dynamic/example',\n    scriptExt,\n    `**/*.{${fileExtensions.join(',')}}`\n  );\n  log.trace('example glob: %s', exampleGlob);\n\n  const templateData = {\n    styleExt,\n    styleSupport: packerOptions.styleSupport,\n    cliProject: buildMode === 'node-cli',\n    reactLib: packerOptions.reactLib,\n    jasmineEnzyme: packerOptions.useEnzyme && packerOptions.testFramework === 'jasmine'\n  };\n  log.trace('template data: %o', templateData);\n\n  return () => {\n    return gulp\n      .src([exampleGlob])\n      .pipe(\n        gulpHbsRuntime(templateData, {\n          replaceExt: ''\n        })\n      )\n      .pipe(gulp.dest(path.join(projectDir, 'src')));\n  };\n};\n\n/**\n * Get example source generation gulp tasks.\n * @param packerOptions Packer options object.\n * @param styleExt Style sheet file extension.\n * @param scriptExt Script file extension.\n * @param buildMode Project build mode.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const getExampleSourceGenerationsTasks = (\n  packerOptions: PackerOptions,\n  styleExt: string,\n  scriptExt: string,\n  buildMode: BuildMode,\n  projectDir: string,\n  log: Logger\n): TaskFunction[] => {\n  const tasks: TaskFunction[] = [\n    copyExampleAsset(projectDir, log),\n    copyExampleSource(packerOptions, buildMode, scriptExt, styleExt, projectDir, log)\n  ];\n\n  if (!packerOptions.reactLib) {\n    tasks.push(copyExampleTemplates(projectDir, log));\n  }\n\n  if (packerOptions.styleSupport) {\n    tasks.push(copyExampleStyleSheets(styleExt, projectDir, log));\n  }\n\n  return tasks;\n};\n","import * as path from 'path';\nimport gulp, { TaskFunction } from 'gulp';\n\nimport gulpHbsRuntime from '../plugins/gulp-hbs-runtime';\nimport { Logger } from '../common/logger';\n\nimport { BuildMode } from '../model/build-mode';\nimport { PackerOptions } from '../model/packer-options';\n\n/**\n * Copy demo helper require.js script.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyDemoHelperRequireJs = (projectDir: string, log: Logger): TaskFunction => {\n  log.trace('copy demo helper require.min.js');\n  const srcPath = path.join(__dirname, '../resources/dynamic/demo/helper/require.min.js');\n  log.trace('require.min.js path: %s', srcPath);\n  return () => {\n    return gulp\n      .src([srcPath])\n      .on('error', (e) => {\n        log.error('missing helper file: %s\\n', e.stack || e.message);\n        process.exit(1);\n      })\n      .pipe(gulp.dest(path.join(projectDir, 'demo/helper')));\n  };\n};\n\n/**\n * Copy demo helper system.js script.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyDemoHelperSystemJs = (projectDir: string, log: Logger): TaskFunction => {\n  log.trace('copy demo helper system.min.js');\n  const srcPath = path.join(__dirname, '../resources/dynamic/demo/helper/system.min.js');\n  log.trace('require.min.js path: %s', srcPath);\n  return () => {\n    return gulp\n      .src([srcPath])\n      .on('error', (e) => {\n        log.error('missing helper file: %s\\n', e.stack || e.message);\n        process.exit(1);\n      })\n      .pipe(gulp.dest(path.join(projectDir, 'demo/helper')));\n  };\n};\n\n/**\n * Copy demo source.\n * HTML entry files if browser compliant, else javascript files.\n * @param packerOptions Packer options object.\n * @param buildMode Project build mode.\n * @param packageName Target package name.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const copyDemoSource = (\n  packerOptions: PackerOptions,\n  buildMode: BuildMode,\n  packageName: string,\n  projectDir: string,\n  log: Logger\n): TaskFunction => {\n  log.trace('copy demo resources');\n  const isAmd = packerOptions.bundleFormat === 'amd';\n  const isIife = packerOptions.bundleFormat === 'umd' || packerOptions.bundleFormat === 'iife';\n  const isSystem = packerOptions.bundleFormat === 'system';\n  const templateGlob = buildMode === 'browser' ? '*.html.hbs' : '*.js.hbs';\n  const demoTemplateGlob = path.join(__dirname, '../resources/dynamic/demo/**', templateGlob);\n  log.trace('demo template glob: %s', demoTemplateGlob);\n\n  const templateData = {\n    projectName: packageName,\n    includeStyles: packerOptions.styleSupport && packerOptions.bundleStyles,\n    namespace: packerOptions.namespace,\n    watchDir: '.tmp/watch',\n    distDir: 'dist',\n    require: isAmd,\n    iife: isIife,\n    system: isSystem,\n    format: packerOptions.bundleFormat,\n    amdModule: packerOptions.amdId,\n    reactLib: packerOptions.reactLib\n  };\n  log.trace('template data: %o', templateData);\n\n  return () => {\n    return gulp\n      .src([demoTemplateGlob])\n      .pipe(\n        gulpHbsRuntime(templateData, {\n          replaceExt: ''\n        })\n      )\n      .pipe(gulp.dest(path.join(projectDir, 'demo')));\n  };\n};\n\n/**\n * Get demo source generation gulp tasks.\n * @param packerOptions Packer options object.\n * @param buildMode Project build mode.\n * @param packageName Package configuration object.\n * @param projectDir Project root directory.\n * @param log Logger reference.\n */\nexport const getDemoSourceGenerationTasks = (\n  packerOptions: PackerOptions,\n  buildMode: BuildMode,\n  packageName: string,\n  projectDir: string,\n  log: Logger\n): TaskFunction[] => {\n  const tasks: TaskFunction[] = [];\n\n  if (buildMode !== 'node-cli') {\n    tasks.push(copyDemoSource(packerOptions, buildMode, packageName, projectDir, log));\n  }\n\n  if (buildMode === 'browser') {\n    if (packerOptions.bundleFormat === 'system') {\n      tasks.push(copyDemoHelperSystemJs(projectDir, log));\n    }\n\n    if (packerOptions.bundleFormat === 'amd') {\n      tasks.push(copyDemoHelperRequireJs(projectDir, log));\n    }\n  }\n\n  return tasks;\n};\n","import * as path from 'path';\n\nimport { PackerOptions } from '../model/packer-options';\nimport { PackageConfig, PackageKeyValueLiteral } from '../model/package-config';\n\nimport { parseLicenseType } from './parser';\nimport {\n  name as sourcePackageName,\n  version as sourcePackageVersion,\n  devDependencies as sourceDevDependencies,\n  dependencies as sourceDependencies\n} from '../../package.json';\nimport { TestEnvironment } from '../model/test-environment';\n\nconst IstanbulConfig = {\n  extension: ['.js', '.jsx', '.ts', '.tsx'],\n  include: ['src/**'],\n  reporter: ['lcov', 'text-summary', 'html'],\n  'temp-dir': '.tmp/nyc_output'\n};\n\nconst mapDependencies = (dependencies: string[]): PackageKeyValueLiteral => {\n  return dependencies.reduce((previous: {}, current: string) => {\n    return Object.assign(previous, {\n      [current]: sourceDevDependencies[current] || sourceDependencies[current]\n    });\n  }, {});\n};\n\n/**\n * Build package.json configuration for generated project.\n * @param packerOptions Packer options object.\n * @param testEnvironment Test environment type.\n * @param packageName Package name.\n */\nexport const buildPackageConfig = (\n  packerOptions: PackerOptions,\n  testEnvironment: TestEnvironment,\n  packageName: string\n): PackageConfig => {\n  let projectAuthor = '';\n  if (packerOptions.author) {\n    projectAuthor = packerOptions.author;\n\n    if (packerOptions.email) {\n      projectAuthor += ` <${packerOptions.email}>`;\n    }\n  }\n\n  let projectUrl = '';\n  let projectRepository = '';\n  if (packerOptions.githubUsername) {\n    projectUrl = `https://github.com/${packerOptions.githubUsername}/${packageName}`;\n    projectRepository = `${projectUrl}.git`;\n  }\n\n  const packageConfig: PackageConfig = {\n    name: packageName,\n    version: '1.0.0',\n    description: packerOptions.description || '',\n    keywords: packerOptions.keywords ? packerOptions.keywords.split(',') : [],\n    scripts: {\n      build: 'packer build',\n      watch: 'packer watch',\n      start: 'npm run watch',\n      test: 'packer test --watch',\n      'test:coverage': 'packer test --coverage --watch',\n      'test:ci': 'packer test',\n      'test:coverage:ci': 'packer test --coverage',\n      clean: 'packer clean',\n      preversion: 'npm run build',\n      postversion: 'git push && git push --tags',\n      prerelease: 'npm run build',\n      release: 'npm publish dist',\n      lint: 'packer lint',\n      'lint:script': 'packer lint --script',\n      format: 'packer format'\n    },\n    author: projectAuthor,\n    repository: projectRepository,\n    license: parseLicenseType(packerOptions.license),\n    homepage: packerOptions.website || projectUrl,\n    dependencies: {},\n    devDependencies: {},\n    private: false\n  };\n\n  const dependencies = ['@babel/runtime-corejs3', 'core-js'];\n\n  const devDependencies = [\n    '@babel/core',\n    '@babel/preset-env',\n    '@babel/register',\n    '@babel/plugin-transform-runtime'\n  ];\n\n  if (packerOptions.reactLib) {\n    devDependencies.push('@babel/preset-react');\n    dependencies.push('react', 'react-dom');\n  } else {\n    dependencies.push('handlebars');\n  }\n\n  if (packerOptions.scriptPreprocessor === 'typescript') {\n    dependencies.push('tslib');\n    devDependencies.push('typescript', 'tslint');\n\n    if (packerOptions.reactLib) {\n      devDependencies.push('@types/react', '@types/react-dom');\n    }\n  } else {\n    devDependencies.push(\n      'eslint',\n      'eslint-config-standard',\n      'eslint-plugin-import',\n      'eslint-plugin-node',\n      'eslint-plugin-promise',\n      'eslint-plugin-standard'\n    );\n  }\n\n  if (packerOptions.testFramework === 'jest') {\n    devDependencies.push('jest');\n    devDependencies.push('jest-haste-map');\n    devDependencies.push('jest-resolve');\n\n    if (packerOptions.scriptPreprocessor === 'typescript') {\n      devDependencies.push('@types/jest', 'ts-jest');\n    } else if (packerOptions.scriptPreprocessor === 'none') {\n      devDependencies.push('babel-jest', 'babel-core');\n    }\n\n    if (packerOptions.useEnzyme) {\n      devDependencies.push('enzyme', 'jest-enzyme', 'jest-environment-enzyme', 'enzyme-adapter-react-16');\n\n      if (packerOptions.scriptPreprocessor === 'typescript') {\n        devDependencies.push('@types/enzyme');\n      }\n    }\n  }\n\n  if (packerOptions.testFramework === 'jasmine') {\n    if (packerOptions.scriptPreprocessor === 'typescript') {\n      devDependencies.push('@types/jasmine');\n\n      if (testEnvironment !== 'browser') {\n        devDependencies.push('ts-node');\n      }\n    }\n\n    if (testEnvironment === 'browser') {\n      devDependencies.push(\n        'puppeteer',\n        'karma',\n        'karma-chrome-launcher',\n        'karma-coverage',\n        'jasmine-core',\n        'karma-jasmine',\n        'karma-jasmine-html-reporter'\n      );\n    } else {\n      packageConfig.nyc = IstanbulConfig;\n\n      devDependencies.push('jasmine', 'nyc', 'ignore-styles');\n\n      if (testEnvironment === 'jsdom') {\n        devDependencies.push('jsdom');\n      }\n    }\n\n    if (packerOptions.useEnzyme) {\n      devDependencies.push('enzyme', 'jasmine-enzyme', 'enzyme-adapter-react-16');\n\n      if (packerOptions.scriptPreprocessor === 'typescript') {\n        devDependencies.push('@types/enzyme', '@types/jasmine-enzyme');\n      }\n    }\n  }\n\n  if (packerOptions.testFramework === 'mocha') {\n    if (packerOptions.scriptPreprocessor === 'typescript') {\n      devDependencies.push('@types/chai', '@types/mocha');\n\n      if (testEnvironment !== 'browser') {\n        devDependencies.push('ts-node');\n      }\n    }\n\n    if (testEnvironment === 'browser') {\n      devDependencies.push(\n        'puppeteer',\n        'karma',\n        'karma-chrome-launcher',\n        'karma-coverage',\n        'karma-mocha',\n        'mocha',\n        'chai'\n      );\n    } else {\n      packageConfig.nyc = IstanbulConfig;\n\n      devDependencies.push('mocha', 'chai', 'nyc', 'ignore-styles');\n\n      if (testEnvironment === 'jsdom') {\n        devDependencies.push('jsdom');\n      }\n    }\n\n    if (packerOptions.useEnzyme) {\n      devDependencies.push('enzyme', 'chai-enzyme', 'cheerio', 'enzyme-adapter-react-16');\n\n      if (packerOptions.scriptPreprocessor === 'typescript') {\n        devDependencies.push('@types/enzyme', '@types/chai-enzyme');\n      }\n    }\n  }\n\n  if (packerOptions.styleSupport) {\n    packageConfig.scripts['lint:style'] = 'packer lint --style';\n\n    devDependencies.push('stylelint', 'stylelint-config-standard', 'autoprefixer', 'postcss-url', 'cssnano');\n\n    if (packerOptions.stylePreprocessor === 'scss' || packerOptions.stylePreprocessor === 'sass') {\n      devDependencies.push('node-sass');\n    }\n\n    if (packerOptions.stylePreprocessor === 'less') {\n      devDependencies.push('less');\n    }\n\n    if (packerOptions.stylePreprocessor === 'stylus') {\n      devDependencies.push('stylus');\n    }\n  }\n\n  packageConfig.dependencies = mapDependencies(dependencies);\n  packageConfig.devDependencies = mapDependencies(devDependencies);\n  packageConfig.devDependencies[sourcePackageName] = `^${sourcePackageVersion}`;\n  if (packerOptions.cliProject) {\n    packageConfig.bin = {\n      [packageName]: path.join('bin', `${packageConfig.name}.js`)\n    };\n  }\n\n  return packageConfig;\n};\n","import gulp, { TaskFunction } from 'gulp';\nimport path from 'path';\nimport chalk from 'chalk';\nimport isEmail from 'validator/lib/isEmail';\nimport isUrl from 'validator/lib/isURL';\nimport npmValidate from 'validate-npm-package-name';\nimport inquirer, { QuestionCollection } from 'inquirer';\n\nimport { args, runShellCommand } from './util';\nimport logger from '../common/logger';\n\nimport { LicenseType } from '../model/license-type';\nimport { PackerOptions } from '../model/packer-options';\n\nimport {\n  parseBuildMode,\n  parseScriptPreprocessorExtension,\n  parseStylePreprocessorExtension,\n  parseTestEnvironment\n} from './parser';\nimport { getConfigFileGenerateTasks } from './generate-config-util';\nimport { getTestSpecGeneratorTasks } from './generate-test-util';\nimport { getExampleSourceGenerationsTasks } from './generate-source-util';\nimport { getDemoSourceGenerationTasks } from './generate-demo-source-util';\nimport { buildPackageConfig } from './generate-package-config';\n\n/**\n * Initialize project generation associated gulp tasks\n */\nexport default function init() {\n  /**\n   * Project generate gulp task.\n   */\n  gulp.task('generate', async () => {\n    const log = logger.create('[generate]');\n    try {\n      log.trace('start');\n      const questions: QuestionCollection<PackerOptions> = [\n        {\n          message: 'Give us a small description about the library (optional)?',\n          name: 'description',\n          type: 'input'\n        },\n        {\n          message: 'Give us a set of comma separated package keywords (optional)?',\n          name: 'keywords',\n          type: 'input'\n        },\n        {\n          message: \"Author's name (optional)?\",\n          name: 'author',\n          type: 'input'\n        },\n        {\n          message: \"Author's email address (optional)?\",\n          name: 'email',\n          type: 'input',\n          when: (answers: PackerOptions) => {\n            return !!answers.author;\n          },\n          validate: (value: string) => {\n            return !value || isEmail(value) ? true : 'Value must be a valid email address';\n          }\n        },\n        {\n          message: \"Author's github username (optional)?\",\n          name: 'githubUsername',\n          type: 'input',\n          validate: () => {\n            return true; // todo: add GH username validation here\n          }\n        },\n        {\n          message: 'Library homepage link (optional)?',\n          name: 'website',\n          type: 'input',\n          validate: (value: string) => {\n            return !value || isUrl(value) ? true : 'Value must be a valid URL';\n          }\n        },\n        {\n          choices: ['none', 'typescript'],\n          default: 0,\n          message: \"What's the script pre processor you want to use?\",\n          name: 'scriptPreprocessor',\n          type: 'list'\n        },\n        {\n          default: true,\n          message: 'Do you want style sheet support?',\n          name: 'styleSupport',\n          type: 'confirm'\n        },\n        {\n          choices: ['scss', 'sass', 'less', 'stylus', 'none'],\n          default: 0,\n          message: \"What's the style pre processor you want to use?\",\n          name: 'stylePreprocessor',\n          type: 'list',\n          when: (answers: PackerOptions) => {\n            return answers.styleSupport;\n          }\n        },\n        {\n          default: false,\n          message: 'Do you want to inline bundle styles within script?',\n          name: 'bundleStyles',\n          type: 'confirm',\n          when: (answers: PackerOptions) => {\n            return answers.styleSupport;\n          }\n        },\n        {\n          default: true,\n          message: 'Are you building a browser compliant library?',\n          name: 'browserCompliant',\n          type: 'confirm'\n        },\n        {\n          default: false,\n          message: 'Are you building a node CLI project?',\n          name: 'cliProject',\n          type: 'confirm',\n          when: (answers: PackerOptions) => {\n            return !answers.browserCompliant;\n          }\n        },\n        {\n          default: false,\n          message: 'Are you building a react library?',\n          name: 'reactLib',\n          type: 'confirm',\n          when: (answers: PackerOptions) => {\n            return answers.browserCompliant;\n          }\n        },\n        {\n          choices: ['umd', 'amd', 'iife', 'system'],\n          default: 0,\n          message: \"What's the build bundle format you want to use?\",\n          name: 'bundleFormat',\n          type: 'list',\n          when: (answers: PackerOptions) => {\n            return answers.browserCompliant;\n          }\n        },\n        {\n          default: 'my-lib',\n          message: \"What's the AMD id you want to use?\",\n          name: 'amdId',\n          type: 'input',\n          validate: (value: string) => {\n            const matches = value.match(/^(?:[a-z]\\d*(?:-[a-z])?)*$/i);\n            return !!matches || \"AMD id should only contain alphabetic characters, i.e: 'my-bundle'\";\n          },\n          when: (answers: PackerOptions) => {\n            return answers.bundleFormat === 'umd' || answers.bundleFormat === 'amd';\n          }\n        },\n        {\n          default: 'com.lib',\n          message: \"What's the library namespace you want to use?\",\n          name: 'namespace',\n          type: 'input',\n          validate: (value: string) => {\n            const matches = value.match(/^(?:[a-z]\\d*(?:\\.[a-z])?)+$/i);\n            return !!matches || \"Namespace should be an object path, i.e: 'ys.nml.lib'\";\n          },\n          when: (answers: PackerOptions) => {\n            return (\n              answers.bundleFormat === 'umd' || answers.bundleFormat === 'iife' || answers.bundleFormat === 'system'\n            );\n          }\n        },\n        {\n          choices: ['jest', 'mocha', 'jasmine'],\n          default: 0,\n          message: 'Which unit test framework do you want to use?',\n          name: 'testFramework',\n          type: 'list',\n          when: (answers: PackerOptions) => {\n            return answers.reactLib;\n          }\n        },\n        {\n          choices: ['mocha', 'jasmine', 'jest'],\n          default: 0,\n          message: 'Which unit test framework do you want to use?',\n          name: 'testFramework',\n          type: 'list',\n          when: (answers: PackerOptions) => {\n            return !answers.reactLib;\n          }\n        },\n        {\n          default: true,\n          message: 'Do you want to use enzyme to test react components?',\n          name: 'useEnzyme',\n          type: 'confirm',\n          when: (answers: PackerOptions) => {\n            return answers.reactLib;\n          }\n        },\n        {\n          choices: ['jsdom', 'browser'],\n          default: 0,\n          message: 'Choose the test environment that will be used for testing?',\n          name: 'testEnvironment',\n          type: 'list',\n          when: (answers: PackerOptions) => {\n            return (\n              answers.browserCompliant &&\n              !answers.reactLib &&\n              (answers.testFramework === 'jasmine' || answers.testFramework === 'mocha')\n            );\n          }\n        },\n        {\n          default: new Date().getFullYear(),\n          message: \"What's the library copyright year (optional)?\",\n          name: 'year',\n          type: 'input'\n        },\n        {\n          choices: [\n            LicenseType.MIT,\n            LicenseType.APACHE_2,\n            LicenseType.MPL_2,\n            LicenseType.BSD_2,\n            LicenseType.BSD_3,\n            LicenseType.ISC,\n            LicenseType.LGPL_3,\n            LicenseType.GLP_3,\n            LicenseType.UNLICENSE\n          ],\n          default: 0,\n          message: \"What's the license you want to use?\",\n          name: 'license',\n          type: 'list'\n        },\n        {\n          default: false,\n          message: 'Do you want to use yarn as package manager?',\n          name: 'isYarn',\n          type: 'confirm'\n        }\n      ];\n\n      if (args.length < 2) {\n        log.error(\n          'Please provide a library name to generate the project\\n%s',\n          chalk.blue('npx packer-cli generate my-library')\n        );\n        process.exit(1);\n        return;\n      }\n\n      const packageName = args[1];\n      const packageNameValidity = npmValidate(packageName);\n      if (!packageNameValidity.validForNewPackages) {\n        if (packageNameValidity.errors) {\n          log.error('Package name error: %s', packageNameValidity.errors.join('\\n'));\n        } else if (packageNameValidity.warnings) {\n          log.error('Package name error: %s', packageNameValidity.warnings.join('\\n'));\n        }\n\n        process.exit(1);\n        return;\n      }\n\n      const options: PackerOptions = await inquirer.prompt<PackerOptions>(questions);\n      options.bundleFormat = options.bundleFormat || 'cjs';\n\n      const testEnvironment = parseTestEnvironment(options);\n      const packageConfig = buildPackageConfig(options, testEnvironment, packageName);\n      const scriptExt = parseScriptPreprocessorExtension(options.scriptPreprocessor);\n      const projectDir = path.join(process.cwd(), packageName);\n      const styleExt = parseStylePreprocessorExtension(options.stylePreprocessor);\n      const buildMode = parseBuildMode(options);\n\n      const tasks: TaskFunction[] = [\n        ...getExampleSourceGenerationsTasks(options, styleExt, scriptExt, buildMode, projectDir, log),\n        ...getTestSpecGeneratorTasks(options, scriptExt, testEnvironment, projectDir, log),\n        ...getDemoSourceGenerationTasks(options, buildMode, packageName, projectDir, log),\n        ...getConfigFileGenerateTasks(options, packageConfig, buildMode, scriptExt, testEnvironment, projectDir, log)\n      ];\n\n      await gulp.series([\n        gulp.parallel(tasks),\n        async () => {\n          if (!args.includes('--skipInstall') && !args.includes('-sk')) {\n            await runShellCommand(options.isYarn ? 'yarn install' : 'npm install', projectDir, log);\n          }\n\n          log.info('📦 package generated 🚀');\n        }\n      ])(() => {\n        // No implementation\n      });\n    } catch (e) {\n      log.error('task failure\\n%s', e.stack || e.message);\n      process.exit(1);\n    }\n  });\n}\n","import gulp from 'gulp';\nimport path from 'path';\n\nimport { meta } from './meta';\nimport { runShellCommand } from './util';\nimport logger from '../common/logger';\n\n/**\n * Initialize lint gulp tasks.\n */\nexport default function init() {\n  /**\n   * Lint style source gulp task.\n   * Execute style lint on source directory.\n   */\n  gulp.task('lint:style', async () => {\n    const log = logger.create('[lint:style]');\n    try {\n      const config = meta.readPackerConfig(log);\n\n      if (config.compiler.style) {\n        log.info('start');\n\n        await runShellCommand(config.lint.advanced.style, process.cwd(), log);\n        log.info('end');\n      } else {\n        log.trace('skip style lint');\n      }\n    } catch (e) {\n      log.error('task failure: %s\\n', e.stack || e.message);\n      process.exit(1);\n    }\n  });\n\n  /**\n   * Lint typescript source gulp task.\n   * Execute tslint on source directory.\n   */\n  gulp.task('lint:script:ts', async () => {\n    const log = logger.create('[lint:script:ts]');\n    try {\n      const config = meta.readPackerConfig(log);\n\n      if (config.compiler.script.preprocessor === 'typescript') {\n        log.info('start');\n\n        await runShellCommand(config.lint.advanced.typescript, process.cwd(), log);\n        log.info('end');\n      } else {\n        log.trace('skip script tslint');\n      }\n    } catch (e) {\n      log.error('task failure: %s\\n', e.stack || e.message);\n      process.exit(1);\n    }\n  });\n\n  /**\n   * Lint javascript source gulp task.\n   * Execute eslint on source directory.\n   */\n  gulp.task('lint:script:es', async () => {\n    const log = logger.create('[lint:script:es]');\n    try {\n      const config = meta.readPackerConfig(log);\n\n      if (config.compiler.script.preprocessor === 'none') {\n        log.info('start');\n\n        await runShellCommand(config.lint.advanced.javascript, process.cwd(), log);\n        log.info('end');\n      } else {\n        log.trace('skip script eslint');\n      }\n    } catch (e) {\n      log.error('task failure: %s\\n', e.stack || e.message);\n      process.exit(1);\n    }\n  });\n\n  /**\n   * Lint all script files gulp task.\n   * Run typescript lint and javascript lint gulp tasks on series mode.\n   */\n  gulp.task('lint:script', gulp.series('lint:script:ts', 'lint:script:es'));\n\n  /**\n   * Lint both styles and script files.\n   * Run style lint and script lint tasks on series mode.\n   */\n  gulp.task('lint', gulp.series('lint:style', 'lint:script'));\n}\n","import gulp from 'gulp';\n\nimport { meta } from './meta';\nimport { runShellCommand } from './util';\nimport logger from '../common/logger';\n\n/**\n * Initialize lint gulp tasks.\n */\nexport default function init() {\n  /**\n   * Auto format source gulp task.\n   * Execute prettier on source directory.\n   */\n  gulp.task('format', async () => {\n    const log = logger.create('[format]');\n    try {\n      const config = meta.readPackerConfig(log);\n\n      log.info('start');\n      await runShellCommand(config.format.advanced.command, process.cwd(), log);\n      log.info('end');\n    } catch (e) {\n      log.error('task failure: %s\\n', e.stack || e.message);\n      process.exit(1);\n    }\n  });\n}\n","import { PackerConfig } from '../model/packer-config';\n\nimport { Logger } from '../common/logger';\nimport { args, runShellCommand, watchSource } from './util';\nimport { parseScriptPreprocessorExtensionGlob } from './parser';\n\n/**\n * Run unit test framework in node environment.\n * Support running test spec with coverage mode and normal mode.\n * @param packerConfig Packer config object.\n * @param log Logger reference.\n */\nexport const runNodeUnitTest = async (packerConfig: PackerConfig, log: Logger): Promise<void> => {\n  try {\n    process.env.BABEL_ENV = process.env.BABEL_ENV || 'test';\n\n    const globScriptExtensions = parseScriptPreprocessorExtensionGlob(packerConfig.compiler.script.preprocessor);\n    const watchGlob = `**/*.${globScriptExtensions}`;\n\n    const watchMode = args.includes('--watch') || args.includes('-W');\n    if (args.includes('--coverage') || args.includes('-C')) {\n      switch (packerConfig.test.framework) {\n        case 'jasmine':\n          if (watchMode) {\n            await watchSource(watchGlob, async () => {\n              await runShellCommand(packerConfig.test.advanced.jasmine.coverageWatch, process.cwd(), log);\n            });\n          } else {\n            await runShellCommand(packerConfig.test.advanced.jasmine.coverageDefault, process.cwd(), log);\n          }\n          break;\n        case 'mocha':\n          if (watchMode) {\n            await runShellCommand(packerConfig.test.advanced.mocha.coverageWatch, process.cwd(), log);\n          } else {\n            await runShellCommand(packerConfig.test.advanced.mocha.coverageDefault, process.cwd(), log);\n          }\n          break;\n        case 'jest':\n          if (watchMode) {\n            await runShellCommand(packerConfig.test.advanced.jest.coverageWatch, process.cwd(), log);\n          } else {\n            await runShellCommand(packerConfig.test.advanced.jest.coverageDefault, process.cwd(), log);\n          }\n          break;\n      }\n    } else {\n      switch (packerConfig.test.framework) {\n        case 'jasmine':\n          if (watchMode) {\n            await watchSource(watchGlob, async () => {\n              await runShellCommand(packerConfig.test.advanced.jasmine.watch, process.cwd(), log);\n            });\n          } else {\n            await runShellCommand(packerConfig.test.advanced.jasmine.default, process.cwd(), log);\n          }\n          break;\n        case 'mocha':\n          if (watchMode) {\n            await runShellCommand(packerConfig.test.advanced.mocha.watch, process.cwd(), log);\n          } else {\n            await runShellCommand(packerConfig.test.advanced.mocha.default, process.cwd(), log);\n          }\n          break;\n        case 'jest':\n          if (watchMode) {\n            await runShellCommand(packerConfig.test.advanced.jest.watch, process.cwd(), log);\n          } else {\n            await runShellCommand(packerConfig.test.advanced.jest.default, process.cwd(), log);\n          }\n          break;\n      }\n    }\n  } catch (e) {\n    log.error('test execution failure\\n%o', e);\n  }\n};\n","import rollupIstanbul from 'rollup-plugin-istanbul';\nimport karmaRollupPreprocessor from 'karma-rollup-preprocessor';\n\nimport {\n  getScriptBuildPlugin,\n  extractBundleExternals,\n  getPreBundlePlugins,\n  getDependencyResolvePlugins,\n  getStyleBuildPlugins,\n  customRollupPlugins\n} from '../tasks/build-util';\nimport { args, requireDependency } from '../tasks/util';\nimport { parseKarmaScriptPreprocessorExtensionGlob } from '../tasks/parser';\nimport { Logger } from '../common/logger';\n\nimport { meta } from '../tasks/meta';\n\nimport * as TS from 'typescript';\n\n/**\n * Get karma packer plugin\n */\nexport const karmaPackerPlugin = (log: Logger) => {\n  try {\n    const typescript = requireDependency<typeof TS>('typescript', log);\n    const packerConfig = meta.readPackerConfig(log);\n    const packageConfig = meta.readPackageData();\n    const babelConfig = meta.readBabelConfig();\n    const scriptExt = parseKarmaScriptPreprocessorExtensionGlob(packerConfig.compiler.script.preprocessor);\n\n    const testGlob = `spec/**/*.spec.${scriptExt}`;\n    log.trace('test glob: %s', testGlob);\n\n    const preprocessors = {};\n    preprocessors[testGlob] = ['rollup'];\n\n    let coveragePlugins = [];\n    if (args.includes('--coverage') || args.includes('-C')) {\n      log.trace('identified as coverage task');\n      coveragePlugins = [\n        rollupIstanbul({\n          exclude: ['node_modules/**']\n        })\n      ];\n    }\n\n    /**\n     * This is just a normal Rollup config object,\n     * except that `input` is handled for you.\n     */\n    const externals = extractBundleExternals(packerConfig);\n    const rollupPreprocessor = {\n      external: externals,\n      output: {\n        format: 'iife',\n        name: 'test',\n        sourcemap: 'inline',\n        globals: packerConfig.bundle.globals\n      },\n      plugins: [\n        ...getStyleBuildPlugins(packerConfig, packageConfig, false, false, log),\n        ...getPreBundlePlugins(packerConfig),\n        ...getDependencyResolvePlugins(packerConfig),\n        ...getScriptBuildPlugin('bundle', false, false, packerConfig, babelConfig, typescript, log),\n        ...customRollupPlugins(packerConfig, 'bundle'),\n        ...coveragePlugins\n      ]\n    };\n\n    const framework = String(packerConfig.test.framework).toLowerCase();\n\n    return {\n      rollupPreprocessor,\n      preprocessors,\n      karmaRollupPreprocessor,\n      framework,\n      testGlob\n    };\n  } catch (e) {\n    log.error('task failure: %s\\n', e.stack || e.message);\n    process.exit(1);\n  }\n};\n","import gulp from 'gulp';\nimport path from 'path';\n\nimport { meta } from './meta';\nimport logger from '../common/logger';\n\nimport { runNodeUnitTest } from './test-util';\nimport { requireDependency } from './util';\nimport { karmaPackerPlugin } from '../plugins/karma-packer-plugin';\n\nimport karma, { ConfigOptions } from 'karma';\n\n/**\n * Initialize test associated gulp tasks.\n */\nexport default function init() {\n  /**\n   * Unit test execution gulp task.\n   *\n   */\n  gulp.task('test', async () => {\n    const log = logger.create('[test]');\n    try {\n      log.trace('start');\n      const packerConfig = meta.readPackerConfig(log);\n      /**\n       * Use karma if browser build mode and not using jest, else use standalone test execution\n       * depending on test framework.\n       */\n      if (packerConfig.test.environment === 'browser') {\n        log.trace('start test suite execution via karma');\n        const { Server, config } = requireDependency<typeof karma>('karma', log);\n\n        const karmaPackerConfig: any = {\n          packer: karmaPackerPlugin(log)\n        };\n        const karmaConfig = config.parseConfig(path.join(process.cwd(), 'karma.conf.js'),\n          karmaPackerConfig) as ConfigOptions;\n        const server = new Server(karmaConfig, (exitCode) => {\n          log.info('Karma has exited with %d', exitCode);\n          process.exit(exitCode);\n        });\n\n        server.start();\n      } else {\n        log.trace('start standalone test suite execution');\n        await runNodeUnitTest(packerConfig, log);\n      }\n    } catch (e) {\n      log.error('task failure: %s\\n', e.stack || e.message);\n      process.exit(1);\n    }\n  });\n}\n","import gulp from 'gulp';\nimport merge from 'lodash/merge';\nimport path from 'path';\n\nimport { RollupWatcherEvent, RollupWatchOptions, watch } from 'rollup';\nimport rollupBrowserSync from 'rollup-plugin-browsersync';\n\nimport {\n  getScriptBuildPlugin,\n  extractBundleExternals,\n  getBanner,\n  getBaseConfig,\n  getPreBundlePlugins,\n  getDependencyResolvePlugins,\n  getStyleBuildPlugins,\n  customRollupPlugins\n} from './build-util';\n\nimport { meta } from './meta';\nimport { makeRelativeDirPath, mergeDeep, requireDependency } from './util';\nimport logger from '../common/logger';\n\nimport * as TS from 'typescript';\n\n/**\n * Initialize source watch associated gulp tasks.\n */\nexport default function init() {\n  /**\n   * Watch and build source gulp task.\n   * Watch source and realtime compile when source files change.\n   * Serve and live reload demo page if bundle is browser compliant.\n   */\n  gulp.task('build:watch', async () => {\n    const log = logger.create('[watch]');\n    try {\n      const typescript = requireDependency<typeof TS>('typescript', log);\n      const packerConfig = meta.readPackerConfig(log);\n      const packageConfig = meta.readPackageData();\n      const babelConfig = meta.readBabelConfig();\n      const banner = await getBanner(packerConfig, packageConfig);\n      const baseConfig = getBaseConfig(packerConfig, packageConfig, banner, 'inline');\n\n      makeRelativeDirPath(packerConfig.tmp, 'watch');\n\n      let rollupServePlugins = [];\n      if (packerConfig.serve && packerConfig.bundle.format !== 'cjs') {\n        log.trace('build bundle with serve support');\n        const additionalServeDir = packerConfig.serve.serveDir.map((dir: string) => path.join(process.cwd(), dir));\n\n        rollupServePlugins = [\n          rollupBrowserSync(\n            mergeDeep(\n              {\n                server: [\n                  path.join(process.cwd(), packerConfig.tmp, 'watch'),\n                  path.join(process.cwd(), packerConfig.serve.demoDir),\n                  path.join(process.cwd(), packerConfig.serve.helperDir),\n                  ...additionalServeDir\n                ],\n                open: packerConfig.serve.open,\n                ui: {\n                  port: packerConfig.serve.port\n                },\n                files: [\n                  path.join(process.cwd(), packerConfig.tmp, 'watch/**/*'),\n                  path.join(process.cwd(), packerConfig.serve.demoDir, '**/*')\n                ]\n              },\n              packerConfig.compiler.advanced.rollup.pluginOptions.browserSync\n            )\n          )\n        ];\n      } else {\n        log.trace('build serve disabled or not supported for bundle type');\n      }\n\n      const externals = extractBundleExternals(packerConfig);\n      const targetFileName = `${packageConfig.name}.${packerConfig.bundle.format}.js`;\n      const watchConfig: RollupWatchOptions = merge({}, baseConfig, {\n        external: externals,\n        output: {\n          file: path.join(process.cwd(), packerConfig.tmp, 'watch', targetFileName),\n          format: packerConfig.bundle.format,\n          globals: packerConfig.bundle.globals,\n          name: packerConfig.bundle.namespace\n        },\n        plugins: [\n          ...getStyleBuildPlugins(packerConfig, packageConfig, true, true, log),\n          ...getPreBundlePlugins(packerConfig),\n          ...getDependencyResolvePlugins(packerConfig),\n          ...getScriptBuildPlugin('bundle', false, false, packerConfig, babelConfig, typescript, log),\n          ...rollupServePlugins,\n          ...customRollupPlugins(packerConfig, 'bundle')\n        ],\n        watch: {\n          exclude: ['node_modules/**']\n        }\n      });\n      log.trace('rollup config:\\n%o', watchConfig);\n\n      const watcher = await watch([mergeDeep(watchConfig, packerConfig.compiler.advanced.rollup.watchOptions)]);\n      watcher.on('event', (event: RollupWatcherEvent) => {\n        switch (event.code) {\n          case 'START':\n            log.info('watch - bundling start');\n            break;\n          case 'BUNDLE_START':\n            log.info('watch - bundle start');\n            break;\n          case 'BUNDLE_END':\n            log.info('watch - bundle end (%d)', event.duration);\n            break;\n          case 'END':\n            log.info('watch - bundling end');\n            break;\n          case 'ERROR':\n            log.error('watch - bundling failure\\n%o', event.error);\n            break;\n        }\n      });\n    } catch (e) {\n      log.error('task failure: %s\\n', e.stack || e.message);\n      process.exit(1);\n    }\n  });\n\n  /**\n   * Watch source gulp task.\n   * Clean watch temporary files and start watch build task in series.\n   */\n  gulp.task('watch', gulp.series('watch:tmp:clean', 'build:watch'));\n}\n","import gulp from 'gulp';\nimport chalk from 'chalk';\n\nimport { name, version } from '../../package.json';\nimport logger from '../common/logger';\n\n/**\n * Initialize version log associated gulp tasks.\n */\nexport default function init() {\n  /**\n   * Log packer version gulp task.\n   */\n  gulp.task('version', async () => {\n    const log = logger.create('[version]');\n    try {\n      console.log(chalk.blue('%s version: %s'), name, chalk.red(version));\n    } catch (e) {\n      log.error('task failure:\\n', e.stack || e.message);\n      process.exit(1);\n    }\n  });\n}\n","import gulp from 'gulp';\nimport chalk from 'chalk';\n\nimport initClean from './tasks/clean';\nimport initBuild from './tasks/build';\nimport initGenerate from './tasks/generate';\nimport initLint from './tasks/lint';\nimport initFormat from './tasks/format';\nimport initTest from './tasks/test';\nimport initWatch from './tasks/watch';\nimport initVersion from './tasks/version';\nimport { args } from './tasks/util';\n\nimport { meta } from './tasks/meta';\nimport logger from './common/logger';\n\n/**\n * Initialize packer CLI tasks.\n */\nexport const initPacker = async () => {\n  const log = logger.create('');\n  try {\n    switch (args[0]) {\n      case '--help':\n      case '-h':\n        console.log(await meta.readPackerHelpSummary());\n        break;\n      case '--version':\n      case '-v':\n        initVersion();\n        gulp.series('version')(() => {\n          // no implementation\n        });\n        break;\n      case 'generate':\n      case 'g':\n        initGenerate();\n        console.log(chalk.red(await meta.readPackerBanner()));\n        gulp.series('generate')(() => {\n          // no implementation\n        });\n        break;\n      case 'build':\n      case 'b':\n        initClean();\n        initBuild();\n        meta.fetchPackerConfig(log);\n        gulp.series('build')(() => {\n          // no implementation\n        });\n        break;\n      case 'watch':\n      case 'w':\n        initClean();\n        initWatch();\n        meta.fetchPackerConfig(log);\n        gulp.series('watch')(() => {\n          // no implementation\n        });\n        break;\n      case 'test':\n      case 't':\n        initTest();\n        meta.fetchPackerConfig(log);\n        gulp.series('test')(() => {\n          // no implementation\n        });\n        break;\n      case 'clean':\n      case 'c':\n        initClean();\n        meta.fetchPackerConfig(log);\n        gulp.series('clean')(() => {\n          // no implementation\n        });\n        break;\n      case 'lint':\n      case 'l': {\n        initLint();\n        meta.fetchPackerConfig(log);\n        if (args.includes('--style') || args.includes('-st')) {\n          gulp.series('lint:style')(() => {\n            // no implementation\n          });\n          break;\n        } else if (args.includes('--script') || args.includes('-sc')) {\n          gulp.series('lint:script')(() => {\n            // no implementation\n          });\n          break;\n        } else {\n          gulp.series('lint')(() => {\n            // no implementation\n          });\n        }\n        break;\n      }\n      case 'format':\n      case 'f': {\n        initFormat();\n        meta.fetchPackerConfig(log);\n        gulp.series('format')(() => {\n          // no implementation\n        });\n        break;\n      }\n      default:\n        log.error('Invalid task name argument\\n%s%s', chalk.reset('try '), chalk.blue('packer --help'));\n        process.exit(1);\n    }\n  } catch (e) {\n    log.error('packer init failure: %s\\n', e.stack || e.message);\n  }\n};\n"]}