| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- import { existsSync } from 'node:fs';
- import { readdir, readFile, writeFile } from 'node:fs/promises';
- import { dirname, extname, join, resolve } from 'node:path';
- import { fileURLToPath } from 'node:url';
- const packageDir = resolve(dirname(fileURLToPath(import.meta.url)), '..');
- const distDir = join(packageDir, 'dist');
- const relativeSpecifierPattern = /(\bfrom\s*['"]|\bimport\s*\(\s*['"])(\.{1,2}\/[^'"]+)(['"])/g;
- const hasKnownExtension = specifier => extname(specifier) !== '';
- const resolveJsSpecifier = (fileDir, specifier) => {
- if (hasKnownExtension(specifier)) {
- return specifier;
- }
- const candidate = resolve(fileDir, `${specifier}.js`);
- if (existsSync(candidate)) {
- return `${specifier}.js`;
- }
- const indexCandidate = resolve(fileDir, specifier, 'index.js');
- return existsSync(indexCandidate) ? `${specifier}/index.js` : specifier;
- };
- async function collectJsFiles(dir) {
- const entries = await readdir(dir, { withFileTypes: true });
- const files = [];
- for (const entry of entries) {
- const path = join(dir, entry.name);
- if (entry.isDirectory()) {
- files.push(...await collectJsFiles(path));
- continue;
- }
- if (entry.isFile() && extname(entry.name) === '.js') {
- files.push(path);
- }
- }
- return files;
- }
- let changedCount = 0;
- for (const file of await collectJsFiles(distDir)) {
- const source = await readFile(file, 'utf8');
- const fileDir = dirname(file);
- const fixed = source.replace(relativeSpecifierPattern, (_match, prefix, specifier, suffix) => {
- return `${prefix}${resolveJsSpecifier(fileDir, specifier)}${suffix}`;
- });
- if (fixed !== source) {
- await writeFile(file, fixed, 'utf8');
- changedCount += 1;
- }
- }
- console.log(`[pptx-esm] Normalized relative import extensions in ${changedCount} file${changedCount === 1 ? '' : 's'}.`);
|