UNPKG

@deep-foundation/npm-packager

Version:

NPM packager package for [Deep](https://deep.foundation/). It handles installation and publication of `deep-package` packages. This package is included in each [Deep](https://deep.foundation/) instance, there is no need to install it manually.

328 lines (295 loc) 10.9 kB
import {describe, expect, test} from '@jest/globals'; import fetch from 'node-fetch'; import { generateApolloClient } from '@deep-foundation/hasura/client'; import { DeepClient } from '@deep-foundation/deeplinks/imports/client'; import config from './config.json'; import { gql } from "@apollo/client/index.js"; let apollo = null; let deep = null; const searchNpmPackages = async (query) => { const deepPackageKeyword = 'deep-package'; const textParameter = encodeURIComponent(`${query} keywords:${deepPackageKeyword}`); const url = `https://registry.npmjs.com/-/v1/search?text=${textParameter}`; const response = await fetch(url); const data = await response.json(); return data; }; const getDeepPackagesVersions = async (packagesNames) => { const { data: data } = await deep.apolloClient.query({ query: gql`query GetPackagesVersionsByName($packageVersionTypeId: bigint, $packageNamespaceTypeId: bigint, $packageActiveTypeId: bigint, $packagesNames: [String]) { namespaces: links(where: {type_id: {_eq: $packageNamespaceTypeId}, string: { value: {_in: $packagesNames }}}) { id name: value versions: out(where: {type_id: {_eq: $packageVersionTypeId}, string: {value: {_is_null: false}}}) { id version: value packageId: to_id } active: out(where: {type_id: {_eq: $packageVersionTypeId}, string: {value: {_is_null: false}}}) { id version: value packageId: to_id } } }`, variables: { "packageVersionTypeId": await deep.id('@deep-foundation/core', 'PackageVersion'), "packageNamespaceTypeId": await deep.id('@deep-foundation/core', 'PackageNamespace'), "packageActiveTypeId": await deep.id('@deep-foundation/core', 'PackageNamespace'), "packagesNames": packagesNames }, }); console.log(JSON.stringify(data, null, 2)); return data.namespaces.map(namespace => { const activeVersion = namespace.active.map(version => { return { packageId: version?.packageId, version: version?.version?.value } })[0]; return { namespaceId: namespace.id, name: namespace.name.value, activeVersion: activeVersion, versions: namespace.versions.map(version => { return { packageId: version?.packageId, version: version?.version?.value, isActive: version?.packageId === activeVersion?.packageId } }) } }) }; const combinedPackagesSearch = async (query) => { const remotePackages = await searchNpmPackages(query); const packagesNames = remotePackages.objects.map(rp => rp.package.name); const localPackages = await await getDeepPackagesVersions(packagesNames); const localPackagesHash = {}; for (const localPackage of localPackages) { localPackagesHash[localPackage.name] = localPackage; } const packages = remotePackages.objects.map(rp => { return { remotePackage: rp.package, localPackage: localPackagesHash[rp.package.name], } }); return { installedPackages: packages.filter(p => !!p.localPackage), notInstalledPackages: packages.filter(p => !p.localPackage) }; }; const getPackageFromNpm = async (packageName) => { const url = `https://registry.npmjs.com/${packageName}`; const response = await fetch(url); const data = await response.json(); return data; }; const ensureDeepClientCreated = async () => { if (!deep) { apollo = generateApolloClient(config.endpoint); deep = new DeepClient({ apolloClient: apollo }); } } describe('packager tests', () => { it('npm packages search', async () => { const query1 = '123456789'; const data1 = await searchNpmPackages(query1) as any; console.log(JSON.stringify(data1, null, 2)); expect(data1.objects.length).toBe(0); const query2 = '@deep-foundation/pow'; const data2 = await searchNpmPackages(query2) as any; console.log(JSON.stringify(data2, null, 2)); expect(data2.objects.length).toBe(1); const query3 = ''; const data3 = await searchNpmPackages(query3) as any; console.log(JSON.stringify(data3, null, 2)); const npmPackagerPackages = data3.objects.filter(p => p.package.name === '@deep-foundation/npm-packager') expect(npmPackagerPackages.length).toBe(1); }); it.skip('package versions', async () => { await ensureDeepClientCreated(); const namespaces = await getDeepPackagesVersions(["@deep-foundation/core"]); console.log(JSON.stringify(namespaces, null, 2)); expect(namespaces.length).toBe(1); const firstNamespace = namespaces[0]; expect(firstNamespace.versions[0].version).toBe("0.0.0"); }); it.skip('combined packages search', async () => { await ensureDeepClientCreated(); const packages1 = await combinedPackagesSearch("@deep-foundation/pow"); console.log(JSON.stringify(packages1, null, 2)); expect(packages1.installedPackages.length).toBe(1); const localPackage1 = packages1.installedPackages[0].localPackage; expect(localPackage1.versions[0].version).toBe("0.0.7"); const packages2 = await combinedPackagesSearch(""); console.log(JSON.stringify(packages2, null, 2)); expect(packages2.installedPackages.length).toBe(1); expect(packages2.notInstalledPackages.length).toBe(3); const localPackage2 = packages2.installedPackages[0].localPackage; expect(localPackage2.versions[0].version).toBe("0.0.7"); }); it.skip('npm package', async () => { await ensureDeepClientCreated(); const packageName = '@deep-foundation/pow'; const data = await getPackageFromNpm(packageName) as any; console.log(JSON.stringify(data, null, 2)); const versions = Object.keys(data.versions); versions.sort(); console.log(versions); expect(versions[0]).toBe("0.0.0"); }); it.skip('deep.linkId bug', async () => { await ensureDeepClientCreated(); expect(deep.linkId).toBe(config.userId); }); it.skip('GPT prompt', async () => { await ensureDeepClientCreated(); const userId = config.userId; // Create a node-link type with name Example1. await deep.insert({ type_id: await deep.id('@deep-foundation/core', 'Type'), in: { data: { from_id: userId, type_id: await deep.id('@deep-foundation/core', 'Contain'), string: { data: { value: 'Example1' } }, } }, }); // Create a node-link type with name Example2. // It has attached value of String type. await deep.insert({ type_id: await deep.id('@deep-foundation/core', 'Type'), in: { data: { from_id: userId, type_id: await deep.id('@deep-foundation/core', 'Contain'), string: { data: { value: 'Example2' } }, } }, out: { data: { type_id: await deep.id('@deep-foundation/core', 'Value'), to_id: await deep.id('@deep-foundation/core', 'String'), } } }); // Create a node-link type with name Human. // It has attached properties such as age (Number type), gender (String type), and name (String type). await deep.insert({ type_id: await deep.id('@deep-foundation/core', 'Type'), in: { data: [ { from_id: userId, type_id: await deep.id('@deep-foundation/core', 'Contain'), string: { data: { value: 'Human' } }, }, { from_id: await deep.id('@deep-foundation/core', 'Any'), type_id: await deep.id('@deep-foundation/core', 'Type'), in: { data: { from_id: userId, type_id: await deep.id('@deep-foundation/core', 'Contain'), string: { data: { value: 'Age' } }, } }, out: { data: { type_id: await deep.id('@deep-foundation/core', 'Value'), to_id: await deep.id('@deep-foundation/core', 'Number'), } } }, { from_id: await deep.id('@deep-foundation/core', 'Any'), type_id: await deep.id('@deep-foundation/core', 'Type'), in: { data: { from_id: userId, type_id: await deep.id('@deep-foundation/core', 'Contain'), string: { data: { value: 'Name' } }, } }, out: { data: { type_id: await deep.id('@deep-foundation/core', 'Value'), to_id: await deep.id('@deep-foundation/core', 'String'), } } }, { from_id: await deep.id('@deep-foundation/core', 'Any'), type_id: await deep.id('@deep-foundation/core', 'Type'), in: { data: { from_id: userId, type_id: await deep.id('@deep-foundation/core', 'Contain'), string: { data: { value: 'Gender' } }, } }, out: { data: { type_id: await deep.id('@deep-foundation/core', 'Value'), to_id: await deep.id('@deep-foundation/core', 'String'), } } }, ] } }); }); it.skip('GPT result 1', async () => { await ensureDeepClientCreated(); const userId = config.userId; // Create Vehicle type. await deep.insert({ type_id: await deep.id('@deep-foundation/core', 'Type'), in: { data: { from_id: userId, type_id: await deep.id('@deep-foundation/core', 'Contain'), string: { data: { value: 'Vehicle' } }, } }, }); }); it.skip('GPT result 2', async () => { await ensureDeepClientCreated(); const userId = config.userId; // Create a node-link type with name Vehicle. // It has attached properties such as NumberOfWheels (Number type). await deep.insert({ type_id: await deep.id('@deep-foundation/core', 'Type'), in: { data: [ { from_id: userId, type_id: await deep.id('@deep-foundation/core', 'Contain'), string: { data: { value: 'Vehicle' } }, }, { from_id: await deep.id('@deep-foundation/core', 'Any'), type_id: await deep.id('@deep-foundation/core', 'Type'), in: { data: { from_id: userId, type_id: await deep.id('@deep-foundation/core', 'Contain'), string: { data: { value: 'NumberOfWheels' } }, } }, out: { data: { type_id: await deep.id('@deep-foundation/core', 'Value'), to_id: await deep.id('@deep-foundation/core', 'Number'), } } }, ] } }); }); });