content: add approved public portfolio projection
This commit is contained in:
33
scripts/materialize-empty-asset-set.mjs
Normal file
33
scripts/materialize-empty-asset-set.mjs
Normal file
@@ -0,0 +1,33 @@
|
||||
import { lstat, mkdir, readFile, readdir } from 'node:fs/promises';
|
||||
import { dirname, resolve } from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
|
||||
const repositoryRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..');
|
||||
const manifestPath = resolve(repositoryRoot, 'content/public/asset-manifest.json');
|
||||
const preparedAssetsPath = resolve(repositoryRoot, 'inputs/prepared-assets');
|
||||
|
||||
const readEmptyManifest = async () => {
|
||||
const manifest = JSON.parse(await readFile(manifestPath, 'utf8'));
|
||||
if (Object.keys(manifest).length !== 1 || !Array.isArray(manifest.assets) || manifest.assets.length !== 0) {
|
||||
throw new Error('Phase 1 asset manifest must contain exactly zero assets.');
|
||||
}
|
||||
};
|
||||
|
||||
const ensureEmptyPreparedAssetDirectory = async () => {
|
||||
try {
|
||||
const stats = await lstat(preparedAssetsPath);
|
||||
if (stats.isSymbolicLink() || !stats.isDirectory()) {
|
||||
throw new Error('Prepared asset path must be a non-symlink directory.');
|
||||
}
|
||||
} catch (error) {
|
||||
if ((error).code !== 'ENOENT') throw error;
|
||||
await mkdir(preparedAssetsPath, { recursive: true });
|
||||
}
|
||||
|
||||
if ((await readdir(preparedAssetsPath)).length !== 0) {
|
||||
throw new Error('Prepared asset directory must be empty during Phase 1.');
|
||||
}
|
||||
};
|
||||
|
||||
await readEmptyManifest();
|
||||
await ensureEmptyPreparedAssetDirectory();
|
||||
Reference in New Issue
Block a user