Phase 1 PWA: prayer times, qibla, quran, hijri, tasbih, 99 names
This commit is contained in:
+53
@@ -0,0 +1,53 @@
|
||||
import { promises as fs } from 'node:fs';
|
||||
import path from 'node:path';
|
||||
|
||||
// List of options that changes the prebundling result
|
||||
/** @type {(keyof import('../types/options.d.ts').ResolvedOptions)[]} */
|
||||
const PREBUNDLE_SENSITIVE_OPTIONS = [
|
||||
'compilerOptions',
|
||||
'configFile',
|
||||
'experimental',
|
||||
'extensions',
|
||||
'ignorePluginPreprocessors',
|
||||
'preprocess'
|
||||
];
|
||||
|
||||
/**
|
||||
* @param {string} cacheDir
|
||||
* @param {import('../types/options.d.ts').ResolvedOptions} options
|
||||
* @returns {Promise<boolean>} Whether the Svelte metadata has changed
|
||||
*/
|
||||
export async function saveSvelteMetadata(cacheDir, options) {
|
||||
const svelteMetadata = generateSvelteMetadata(options);
|
||||
const svelteMetadataPath = path.resolve(cacheDir, '_svelte_metadata.json');
|
||||
|
||||
const currentSvelteMetadata = JSON.stringify(svelteMetadata, (_, value) => {
|
||||
// Handle preprocessors
|
||||
return typeof value === 'function' ? value.toString() : value;
|
||||
});
|
||||
|
||||
/** @type {string | undefined} */
|
||||
let existingSvelteMetadata;
|
||||
try {
|
||||
existingSvelteMetadata = await fs.readFile(svelteMetadataPath, 'utf8');
|
||||
} catch {
|
||||
// ignore
|
||||
}
|
||||
|
||||
await fs.mkdir(cacheDir, { recursive: true });
|
||||
await fs.writeFile(svelteMetadataPath, currentSvelteMetadata);
|
||||
return currentSvelteMetadata !== existingSvelteMetadata;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {import('../types/options.d.ts').ResolvedOptions} options
|
||||
* @returns {Partial<import('../types/options.d.ts').ResolvedOptions>}
|
||||
*/
|
||||
function generateSvelteMetadata(options) {
|
||||
/** @type {Record<string, any>} */
|
||||
const metadata = {};
|
||||
for (const key of PREBUNDLE_SENSITIVE_OPTIONS) {
|
||||
metadata[key] = options[key];
|
||||
}
|
||||
return metadata;
|
||||
}
|
||||
Reference in New Issue
Block a user