@storm-stack/core
Version:
A build toolkit and runtime used by Storm Software in TypeScript applications
1 lines • 5.76 kB
Source Map (JSON)
{"version":3,"sources":["../../src/lib/utilities/cache.ts"],"names":["getCacheHashKey","id","code","hash","getString","maxLength","getCacheFileName","hashKey","findFileName","withExtension","getCache","sourceFile","cacheDir","cacheFilePath","joinPaths","existsSync","undefined","cache","readFile","includes","hashComment","setCache","transpiled","removeFile","createDirectory","isWritable","Error","writeFile","trim"],"mappings":";;;;;;;;;;;;;;AAsCA,SAASA,eAAAA,CAAgBC,IAAYC,IAAAA,EAA0B;AAC7D,EAAA,OAAOC,SAAAA,CACL;AACEF,IAAAA,EAAAA;AACAC,IAAAA,IAAAA,EAAME,4BAAUF,IAAAA;GAClB,EACA;IACEG,SAAAA,EAAW;GACb,CAAA;AAEJ;AAVSL,wBAAAA,CAAAA,eAAAA,EAAAA,iBAAAA,CAAAA;AAmBT,SAASM,gBAAAA,CAAiBL,IAAYM,OAAAA,EAAe;AACnD,EAAA,OAAO,CAAA,EAAGC,yBAAaP,EAAAA,EAAI;IAAEQ,aAAAA,EAAe;GAAM,CAAA,IAAMF,OAAAA,CAAAA,MAAAA,CAAAA;AAC1D;AAFSD,wBAAAA,CAAAA,gBAAAA,EAAAA,kBAAAA,CAAAA;AAIT,eAAsBI,QAAAA,CAASC,YAAwBC,QAAAA,EAAgB;AACrE,EAAA,MAAML,OAAAA,GAAUP,eAAAA,CAAgBW,UAAAA,CAAWV,EAAAA,EAAIU,WAAWT,IAAI,CAAA;AAE9D,EAAA,MAAMW,gBAAgBC,mBAAAA,CACpBF,QAAAA,EACAN,iBAAiBK,UAAAA,CAAWV,EAAAA,EAAIM,OAAAA,CAAAA,CAAAA;AAElC,EAAA,IAAI,CAACQ,iBAAAA,CAAWF,aAAAA,CAAAA,EAAgB;AAC9B,IAAA,OAAOG,MAAAA;AACT,EAAA;AAEA,EAAA,MAAMC,KAAAA,GAAQ,MAAMC,iBAAAA,CAASL,aAAAA,CAAAA;AAC7B,EAAA,IAAI,CAACI,KAAAA,CAAME,QAAAA,CAASC,WAAAA,CAAYb,OAAAA,CAAAA,CAAAA,EAAW;AACzC,IAAA,OAAOS,MAAAA;AACT,EAAA;AAEA,EAAA,OAAOC,KAAAA;AACT;AAjBsBP,wBAAAA,CAAAA,QAAAA,EAAAA,UAAAA,CAAAA;AAmBtB,eAAsBW,QAAAA,CACpBV,UAAAA,EACAC,QAAAA,EACAU,UAAAA,EAAmB;AAEnB,EAAA,MAAMf,OAAAA,GAAUP,eAAAA,CAAgBW,UAAAA,CAAWV,EAAAA,EAAIU,WAAWT,IAAI,CAAA;AAE9D,EAAA,MAAMW,gBAAgBC,mBAAAA,CACpBF,QAAAA,EACAN,iBAAiBK,UAAAA,CAAWV,EAAAA,EAAIM,OAAAA,CAAAA,CAAAA;AAElC,EAAA,IAAIQ,iBAAAA,CAAWF,aAAAA,CAAAA,EAAgB;AAC7B,IAAA,MAAMU,sBAAWV,aAAAA,CAAAA;AACnB,EAAA;AAEA,EAAA,IAAIS,UAAAA,EAAY;AACd,IAAA,IAAI,CAACP,iBAAAA,CAAWH,QAAAA,CAAAA,EAAW;AACzB,MAAA,MAAMY,wBAAgBZ,QAAAA,CAAAA;AACxB,IAAA;AACA,IAAA,IAAI,CAAE,MAAMa,iBAAAA,CAAWb,QAAAA,CAAAA,EAAY;AACjC,MAAA,MAAM,IAAIc,KAAAA,CAAM,CAAA,iCAAA,EAAoCd,QAAAA,CAAAA,CAAU,CAAA;AAChE,IAAA;AAEA,IAAA,MAAMe,mBAAAA,CACJd,aAAAA,EACA,CAAA,EAAGS,UAAAA;;AAEPF,EAAAA,WAAAA,CAAYb,OAAAA,CAAAA,CAAAA,CAAAA,CAAWqB,IAAAA,EAAI,CAAA;AAE3B,EAAA;AACF;AA9BsBP,wBAAAA,CAAAA,QAAAA,EAAAA,UAAAA,CAAAA;AAgCtB,SAASD,YAAYb,OAAAA,EAAe;AAClC,EAAA,OAAO,kBAAkBA,OAAAA,CAAAA,GAAAA,CAAAA;AAC3B;AAFSa,wBAAAA,CAAAA,WAAAA,EAAAA,aAAAA,CAAAA","file":"chunk-FWFMIVER.cjs","sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Storm Stack\n\n This code was released as part of the Storm Stack project. Storm Stack\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/storm-stack.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/storm-stack\n Documentation: https://docs.stormsoftware.com/projects/storm-stack\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { isWritable } from \"@stryke/fs/chmod-x\";\nimport { createDirectory } from \"@stryke/fs/helpers\";\nimport { readFile } from \"@stryke/fs/read-file\";\nimport { removeFile } from \"@stryke/fs/remove-file\";\nimport { writeFile } from \"@stryke/fs/write-file\";\nimport { hash } from \"@stryke/hash\";\nimport { existsSync } from \"@stryke/path/exists\";\nimport { findFileName } from \"@stryke/path/file-path-fns\";\nimport { joinPaths } from \"@stryke/path/join-paths\";\nimport type MagicString from \"magic-string\";\nimport type { SourceFile } from \"../../types/compiler\";\nimport { getString } from \"./source-file\";\n\n/**\n * Get the source key.\n *\n * @param id - The name of the file to compile.\n * @param code - The source code to compile.\n * @returns The source key.\n */\nfunction getCacheHashKey(id: string, code: string | MagicString): string {\n return hash(\n {\n id,\n code: getString(code)\n },\n {\n maxLength: 32\n }\n );\n}\n\n/**\n * Get the source key.\n *\n * @param id - The name of the file to compile.\n * @param hashKey - The hash key.\n * @returns The source key.\n */\nfunction getCacheFileName(id: string, hashKey: string): string {\n return `${findFileName(id, { withExtension: false })}_${hashKey}.cache`;\n}\n\nexport async function getCache(sourceFile: SourceFile, cacheDir: string) {\n const hashKey = getCacheHashKey(sourceFile.id, sourceFile.code);\n\n const cacheFilePath = joinPaths(\n cacheDir,\n getCacheFileName(sourceFile.id, hashKey)\n );\n if (!existsSync(cacheFilePath)) {\n return undefined;\n }\n\n const cache = await readFile(cacheFilePath);\n if (!cache.includes(hashComment(hashKey))) {\n return undefined;\n }\n\n return cache;\n}\n\nexport async function setCache(\n sourceFile: SourceFile,\n cacheDir: string,\n transpiled?: string\n) {\n const hashKey = getCacheHashKey(sourceFile.id, sourceFile.code);\n\n const cacheFilePath = joinPaths(\n cacheDir,\n getCacheFileName(sourceFile.id, hashKey)\n );\n if (existsSync(cacheFilePath)) {\n await removeFile(cacheFilePath);\n }\n\n if (transpiled) {\n if (!existsSync(cacheDir)) {\n await createDirectory(cacheDir);\n }\n if (!(await isWritable(cacheDir))) {\n throw new Error(`Cache directory is not writable: ${cacheDir}`);\n }\n\n await writeFile(\n cacheFilePath,\n `${transpiled}\n\n${hashComment(hashKey)}`.trim()\n );\n }\n}\n\nfunction hashComment(hashKey: string): string {\n return `/* storm-stack_${hashKey} */`;\n}\n"]}