UNPKG

@angular/service-worker

Version:

Angular - service worker tooling!

1 lines • 20.9 kB
{"version":3,"file":"config.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/service-worker/config/src/duration.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/service-worker/config/src/glob.ts","../../../../../darwin_arm64-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":["PARSE_TO_PAIRS","PAIR_SPLIT","parseDurationToMs","duration","matches","array","exec","push","map","match","res","Error","factor","parseInt","reduce","total","value","QUESTION_MARK","WILD_SINGLE","WILD_OPEN","TO_ESCAPE_BASE","replace","with","TO_ESCAPE_WILDCARD_QM","TO_ESCAPE_LITERAL_QM","globToRegex","glob","literalQuestionMark","toEscape","segments","split","reverse","regex","length","segment","pop","processed","escape","DEFAULT_NAVIGATION_URLS","Generator","fs","baseHref","constructor","process","config","unorderedHashTable","assetGroups","processAssetGroups","configVersion","timestamp","Date","now","appData","index","joinUrls","dataGroups","processDataGroups","hashTable","withOrderedKeys","navigationUrls","processNavigationUrls","navigationRequestStrategy","applicationMaxAge","undefined","allFiles","list","seenMap","Set","filesPerGroup","Map","group","resources","versionedFiles","name","fileMatcher","globListToMatcher","files","matchedFiles","filter","file","has","sort","forEach","add","set","allMatchedFiles","concat","Array","from","values","allMatchedHashes","processInBatches","hash","idx","entries","installMode","updateMode","cacheQueryOptions","buildCacheQueryOptions","urls","url","patterns","urlToRegex","strategy","cacheConfig","maxSize","maxAge","timeoutMs","timeout","refreshAheadMs","refreshAhead","cacheOpaqueResponses","version","positive","startsWith","slice","items","batchSize","processFn","batches","i","prev","batch","Promise","all","item","resolve","globs","pattern","RegExp","isMatch","test","indexOf","a","b","endsWith","unorderedObj","orderedObj","Object","keys","key","inOptions","ignoreVary"],"mappings":"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"}