import { walkSync } from "$std/fs/walk.ts";
import { join } from "$std/path/mod.ts";
import { Sort } from "$utils/sort_utils.ts";
import { LatestVersionNumber } from "$utils/version_helpers.ts";
import { Package } from "$classes/package.ts";
console.log("======== LEGACY PACKAGE IMPORTER ========\n");
const found_legacy_modules: Package[] = [];
const packages_root = join(Deno.cwd(), 'packages');
for(const namespaceDir of walkSync(packages_root, { includeFiles: false, maxDepth: 1 })) {
if(namespaceDir.path == packages_root) continue;
const namespace = namespaceDir.name;
for(const packageDir of walkSync(namespaceDir.path, { includeFiles: false, maxDepth: 1 })) {
if(packageDir.path == namespaceDir.path) continue;
const name = packageDir.name;
if(await Package.findOne({ namespace, name })) continue;
for(const versionDir of walkSync(packageDir.path, { includeDirs: false, maxDepth: 1 })) {
if(versionDir.name !== 'metadata.json') continue;
const package_metadata: LegacyMetadata = JSON.parse(Deno.readTextFileSync(versionDir.path));
const versions = Array.from(
new Set(
package_metadata.events.map(e => e.event.replace(/^.*?((?:\d+\.){1,3}\d+)$/, '$1'))
)
).sort(Sort.Version.Descending);
const _package = new Package({
namespace,
name,
tags: [],
versions: {
all: versions,
latest: LatestVersionNumber(versions),
current: null
},
deprecated: package_metadata.deprecated,
events: package_metadata.events.map(e => ({
event: e.event,
version: e.event.replace(/^.*?((?:\d+\.){1,3}\d+)$/, '$1'),
timestamp: new Date(e.timestamp).valueOf(),
token: e.token
}))
})
found_legacy_modules.push(_package);
continue;
}
}
}
console.log(`Found ${found_legacy_modules.length} legacy modules to import\n - ${found_legacy_modules.map(p => p.url.replace(/^\//, '')).join('\n - ')}\n`);
if(found_legacy_modules.length > 0) {
console.log('Running imports...');
await Array.fromAsync(found_legacy_modules.map(lm => lm.save()));
console.log("Imports completed");
} else {
console.log("Nothing to import")
}
interface LegacyMetadata {
events: {
token: string
event: string
timestamp: string
}[]
deprecated: boolean
}