{"version":3,"file":"config.mjs","sources":["../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/service-worker/config/src/duration.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/service-worker/config/src/glob.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/packages/service-worker/config/src/generator.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nconst PARSE_TO_PAIRS = /([0-9]+[^0-9]+)/g;\nconst PAIR_SPLIT = /^([0-9]+)([dhmsu]+)$/;\n\nexport function parseDurationToMs(duration: string): number {\n  const matches: string[] = [];\n\n  let array: RegExpExecArray | null;\n  while ((array = PARSE_TO_PAIRS.exec(duration)) !== null) {\n    matches.push(array[0]);\n  }\n  return matches\n    .map((match) => {\n      const res = PAIR_SPLIT.exec(match);\n      if (res === null) {\n        throw new Error(`Not a valid duration: ${match}`);\n      }\n      let factor: number = 0;\n      switch (res[2]) {\n        case 'd':\n          factor = 86400000;\n          break;\n        case 'h':\n          factor = 3600000;\n          break;\n        case 'm':\n          factor = 60000;\n          break;\n        case 's':\n          factor = 1000;\n          break;\n        case 'u':\n          factor = 1;\n          break;\n        default:\n          throw new Error(`Not a valid duration unit: ${res[2]}`);\n      }\n      return parseInt(res[1]) * factor;\n    })\n    .reduce((total, value) => total + value, 0);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nconst QUESTION_MARK = '[^/]';\nconst WILD_SINGLE = '[^/]*';\nconst WILD_OPEN = '(?:.+\\\\/)?';\n\nconst TO_ESCAPE_BASE = [\n  {replace: /\\./g, with: '\\\\.'},\n  {replace: /\\+/g, with: '\\\\+'},\n  {replace: /\\*/g, with: WILD_SINGLE},\n];\nconst TO_ESCAPE_WILDCARD_QM = [...TO_ESCAPE_BASE, {replace: /\\?/g, with: QUESTION_MARK}];\nconst TO_ESCAPE_LITERAL_QM = [...TO_ESCAPE_BASE, {replace: /\\?/g, with: '\\\\?'}];\n\nexport function globToRegex(glob: string, literalQuestionMark = false): string {\n  const toEscape = literalQuestionMark ? TO_ESCAPE_LITERAL_QM : TO_ESCAPE_WILDCARD_QM;\n  const segments = glob.split('/').reverse();\n  let regex: string = '';\n  while (segments.length > 0) {\n    const segment = segments.pop()!;\n    if (segment === '**') {\n      if (segments.length > 0) {\n        regex += WILD_OPEN;\n      } else {\n        regex += '.*';\n      }\n    } else {\n      const processed = toEscape.reduce(\n        (segment, escape) => segment.replace(escape.replace, escape.with),\n        segment,\n      );\n      regex += processed;\n      if (segments.length > 0) {\n        regex += '\\\\/';\n      }\n    }\n  }\n  return regex;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {parseDurationToMs} from './duration';\nimport {Filesystem} from './filesystem';\nimport {globToRegex} from './glob';\nimport {AssetGroup, Config} from './in';\n\nconst DEFAULT_NAVIGATION_URLS = [\n  '/**', // Include all URLs.\n  '!/**/*.*', // Exclude URLs to files (containing a file extension in the last segment).\n  '!/**/*__*', // Exclude URLs containing `__` in the last segment.\n  '!/**/*__*/**', // Exclude URLs containing `__` in any other segment.\n];\n\n/**\n * Consumes service worker configuration files and processes them into control files.\n *\n * @publicApi\n */\nexport class Generator {\n  constructor(\n    readonly fs: Filesystem,\n    private baseHref: string,\n  ) {}\n\n  async process(config: Config): Promise<Object> {\n    const unorderedHashTable = {};\n    const assetGroups = await this.processAssetGroups(config, unorderedHashTable);\n\n    return {\n      configVersion: 1,\n      timestamp: Date.now(),\n      appData: config.appData,\n      index: joinUrls(this.baseHref, config.index),\n      assetGroups,\n      dataGroups: this.processDataGroups(config),\n      hashTable: withOrderedKeys(unorderedHashTable),\n      navigationUrls: processNavigationUrls(this.baseHref, config.navigationUrls),\n      navigationRequestStrategy: config.navigationRequestStrategy ?? 'performance',\n      applicationMaxAge: config.applicationMaxAge\n        ? parseDurationToMs(config.applicationMaxAge)\n        : undefined,\n    };\n  }\n\n  private async processAssetGroups(\n    config: Config,\n    hashTable: {[file: string]: string | undefined},\n  ): Promise<Object[]> {\n    // Retrieve all files of the build.\n    const allFiles = await this.fs.list('/');\n    const seenMap = new Set<string>();\n    const filesPerGroup = new Map<AssetGroup, string[]>();\n\n    // Computed which files belong to each asset-group.\n    for (const group of config.assetGroups || []) {\n      if ((group.resources as any).versionedFiles) {\n        throw new Error(\n          `Asset-group '${group.name}' in 'ngsw-config.json' uses the 'versionedFiles' option, ` +\n            \"which is no longer supported. Use 'files' instead.\",\n        );\n      }\n\n      const fileMatcher = globListToMatcher(group.resources.files || []);\n      const matchedFiles = allFiles\n        .filter(fileMatcher)\n        .filter((file) => !seenMap.has(file))\n        .sort();\n\n      matchedFiles.forEach((file) => seenMap.add(file));\n      filesPerGroup.set(group, matchedFiles);\n    }\n\n    // Compute hashes for all matched files and add them to the hash-table.\n    const allMatchedFiles = ([] as string[]).concat(...Array.from(filesPerGroup.values())).sort();\n    const allMatchedHashes = await processInBatches(allMatchedFiles, 500, (file) =>\n      this.fs.hash(file),\n    );\n    allMatchedFiles.forEach((file, idx) => {\n      hashTable[joinUrls(this.baseHref, file)] = allMatchedHashes[idx];\n    });\n\n    // Generate and return the processed asset-groups.\n    return Array.from(filesPerGroup.entries()).map(([group, matchedFiles]) => ({\n      name: group.name,\n      installMode: group.installMode || 'prefetch',\n      updateMode: group.updateMode || group.installMode || 'prefetch',\n      cacheQueryOptions: buildCacheQueryOptions(group.cacheQueryOptions),\n      urls: matchedFiles.map((url) => joinUrls(this.baseHref, url)),\n      patterns: (group.resources.urls || []).map((url) => urlToRegex(url, this.baseHref, true)),\n    }));\n  }\n\n  private processDataGroups(config: Config): Object[] {\n    return (config.dataGroups || []).map((group) => {\n      return {\n        name: group.name,\n        patterns: group.urls.map((url) => urlToRegex(url, this.baseHref, true)),\n        strategy: group.cacheConfig.strategy || 'performance',\n        maxSize: group.cacheConfig.maxSize,\n        maxAge: parseDurationToMs(group.cacheConfig.maxAge),\n        timeoutMs: group.cacheConfig.timeout && parseDurationToMs(group.cacheConfig.timeout),\n        refreshAheadMs:\n          group.cacheConfig.refreshAhead && parseDurationToMs(group.cacheConfig.refreshAhead),\n        cacheOpaqueResponses: group.cacheConfig.cacheOpaqueResponses,\n        cacheQueryOptions: buildCacheQueryOptions(group.cacheQueryOptions),\n        version: group.version !== undefined ? group.version : 1,\n      };\n    });\n  }\n}\n\nexport function processNavigationUrls(\n  baseHref: string,\n  urls = DEFAULT_NAVIGATION_URLS,\n): {positive: boolean; regex: string}[] {\n  return urls.map((url) => {\n    const positive = !url.startsWith('!');\n    url = positive ? url : url.slice(1);\n    return {positive, regex: `^${urlToRegex(url, baseHref)}$`};\n  });\n}\n\nasync function processInBatches<I, O>(\n  items: I[],\n  batchSize: number,\n  processFn: (item: I) => O | Promise<O>,\n): Promise<O[]> {\n  const batches = [];\n\n  for (let i = 0; i < items.length; i += batchSize) {\n    batches.push(items.slice(i, i + batchSize));\n  }\n\n  return batches.reduce(\n    async (prev, batch) =>\n      (await prev).concat(await Promise.all(batch.map((item) => processFn(item)))),\n    Promise.resolve<O[]>([]),\n  );\n}\n\nfunction globListToMatcher(globs: string[]): (file: string) => boolean {\n  const patterns = globs.map((pattern) => {\n    if (pattern.startsWith('!')) {\n      return {\n        positive: false,\n        regex: new RegExp('^' + globToRegex(pattern.slice(1)) + '$'),\n      };\n    } else {\n      return {\n        positive: true,\n        regex: new RegExp('^' + globToRegex(pattern) + '$'),\n      };\n    }\n  });\n  return (file: string) => matches(file, patterns);\n}\n\nfunction matches(file: string, patterns: {positive: boolean; regex: RegExp}[]): boolean {\n  return patterns.reduce((isMatch, pattern) => {\n    if (pattern.positive) {\n      return isMatch || pattern.regex.test(file);\n    } else {\n      return isMatch && !pattern.regex.test(file);\n    }\n  }, false);\n}\n\nfunction urlToRegex(url: string, baseHref: string, literalQuestionMark?: boolean): string {\n  if (!url.startsWith('/') && url.indexOf('://') === -1) {\n    // Prefix relative URLs with `baseHref`.\n    // Strip a leading `.` from a relative `baseHref` (e.g. `./foo/`), since it would result in an\n    // incorrect regex (matching a literal `.`).\n    url = joinUrls(baseHref.replace(/^\\.(?=\\/)/, ''), url);\n  }\n\n  return globToRegex(url, literalQuestionMark);\n}\n\nfunction joinUrls(a: string, b: string): string {\n  if (a.endsWith('/') && b.startsWith('/')) {\n    return a + b.slice(1);\n  } else if (!a.endsWith('/') && !b.startsWith('/')) {\n    return a + '/' + b;\n  }\n  return a + b;\n}\n\nfunction withOrderedKeys<T extends {[key: string]: any}>(unorderedObj: T): T {\n  const orderedObj = {} as {[key: string]: any};\n  Object.keys(unorderedObj)\n    .sort()\n    .forEach((key) => (orderedObj[key] = unorderedObj[key]));\n  return orderedObj as T;\n}\n\nfunction buildCacheQueryOptions(\n  inOptions?: Pick<CacheQueryOptions, 'ignoreSearch'>,\n): CacheQueryOptions {\n  return {\n    ignoreVary: true,\n    ...inOptions,\n  };\n}\n"],"names":[],"mappings":"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"}