From 94c6ee4ae2bf02327c86c4bd23112263bfb550ea Mon Sep 17 00:00:00 2001 From: Polle Pas Date: Mon, 2 Sep 2024 14:40:40 +0200 Subject: [PATCH 01/18] Add include param to search endpoint --- server/src/handlers/search.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/server/src/handlers/search.rs b/server/src/handlers/search.rs index 647bb8151..bef7fa993 100644 --- a/server/src/handlers/search.rs +++ b/server/src/handlers/search.rs @@ -39,6 +39,7 @@ pub struct SearchQuery { /// e.g. `prop:val` or `prop:val~1` or `prop:val~1 AND prop2:val2` /// See https://docs.rs/tantivy/latest/tantivy/query/struct.QueryParser.html pub filters: Option, + pub include: Option, } const DEFAULT_RETURN_LIMIT: usize = 30; @@ -91,9 +92,13 @@ pub async fn search_query( let mut results_resource = atomic_lib::plugins::search::search_endpoint().to_resource(store)?; results_resource.set_subject(subject.clone()); - let resources = get_resources(req, &appstate, &subject, subjects, limit)?; - timer.add("get_resources"); - results_resource.set(urls::ENDPOINT_RESULTS.into(), resources.into(), store)?; + if params.include.unwrap_or(false) { + timer.add("get_resources"); + let resources = get_resources(req, &appstate, &subject, subjects.clone(), limit)?; + results_resource.set(urls::ENDPOINT_RESULTS.into(), resources.into(), store)?; + } else { + results_resource.set(urls::ENDPOINT_RESULTS.into(), subjects.into(), store)?; + } let mut builder = HttpResponse::Ok(); builder.append_header(("Server-Timing", timer.header_value())); From fe26bebd9f059ca9cdb91a38a8441650ed330fcf Mon Sep 17 00:00:00 2001 From: Polle Pas Date: Mon, 2 Sep 2024 14:43:40 +0200 Subject: [PATCH 02/18] #952 Add create-template package and initial sveltekit template --- browser/.eslintrc.cjs | 1 + browser/create-template/.gitignore | 1 + browser/create-template/package.json | 36 + browser/create-template/readme.md | 15 + .../src/buildEndUsageString.ts | 48 + browser/create-template/src/copyTemplate.ts | 14 + .../create-template/src/createOutputFolder.ts | 24 + browser/create-template/src/index.ts | 42 + browser/create-template/src/usage.ts | 7 + browser/create-template/src/utils.ts | 14 + .../templates/sveltekit-site/.gitignore | 21 + .../templates/sveltekit-site/.npmrc | 1 + .../templates/sveltekit-site/.prettierignore | 4 + .../templates/sveltekit-site/.prettierrc | 8 + .../templates/sveltekit-site/README.md | 38 + .../sveltekit-site/atomic.config.json | 6 + .../templates/sveltekit-site/eslint.config.js | 33 + .../templates/sveltekit-site/package.json | 43 + .../templates/sveltekit-site/src/app.d.ts | 13 + .../templates/sveltekit-site/src/app.html | 12 + .../sveltekit-site/src/index.test.ts | 7 + .../src/lib/atomic/getAllBlogposts.ts | 16 + .../src/lib/atomic/getCurrentResource.ts | 36 + .../sveltekit-site/src/lib/atomic/getStore.ts | 24 + .../src/lib/atomic/preloadResources.ts | 25 + .../src/lib/components/Footer.svelte | 22 + .../components/Icons/FaMagnifyingGlass.svelte | 5 + .../lib/components/Layout/Container.svelte | 10 + .../src/lib/components/Layout/HStack.svelte | 43 + .../src/lib/components/Layout/VStack.svelte | 34 + .../src/lib/components/Loader.svelte | 18 + .../src/lib/components/Navbar.svelte | 52 + .../src/lib/components/Searchbar.svelte | 39 + .../src/lib/components/SiteWrapper.svelte | 41 + .../templates/sveltekit-site/src/lib/index.ts | 1 + .../src/lib/stores/currentSubject.ts | 4 + .../templates/sveltekit-site/src/lib/utils.ts | 23 + .../src/lib/views/Block/BlockView.svelte | 20 + .../lib/views/Block/ImageGalleryBlock.svelte | 32 + .../src/lib/views/Block/TextBlock.svelte | 17 + .../src/lib/views/DefaultView.svelte | 7 + .../lib/views/FullPage/BlogIndexPage.svelte | 86 + .../lib/views/FullPage/BlogpostPage.svelte | 52 + .../lib/views/FullPage/DefaultFullPage.svelte | 13 + .../lib/views/FullPage/FullPageView.svelte | 27 + .../lib/views/FullPage/PageFullPage.svelte | 35 + .../lib/views/ListItem/BlogListItem.svelte | 82 + .../lib/views/ListItem/ListItemView.svelte | 18 + .../src/lib/views/MenuItem/MenuItem.svelte | 106 + .../lib/views/MenuItem/MenuItemLink.svelte | 34 + .../sveltekit-site/src/routes/+layout.svelte | 24 + .../sveltekit-site/src/routes/+layout.ts | 2 + .../sveltekit-site/src/routes/+page.svelte | 20 + .../sveltekit-site/src/routes/+page.ts | 20 + .../src/routes/[...path]/+error.svelte | 27 + .../src/routes/[...path]/+page.svelte | 13 + .../src/routes/[...path]/+page.ts | 20 + .../sveltekit-site/src/styles/reset.css | 92 + .../sveltekit-site/static/favicon.png | Bin 0 -> 1571 bytes .../templates/sveltekit-site/svelte.config.js | 18 + .../templates/sveltekit-site/tsconfig.json | 19 + .../templates/sveltekit-site/vite.config.ts | 12 + browser/create-template/tsconfig.json | 18 + browser/pnpm-lock.yaml | 21628 +++++++++------- 64 files changed, 13742 insertions(+), 9481 deletions(-) create mode 100644 browser/create-template/.gitignore create mode 100644 browser/create-template/package.json create mode 100644 browser/create-template/readme.md create mode 100644 browser/create-template/src/buildEndUsageString.ts create mode 100644 browser/create-template/src/copyTemplate.ts create mode 100644 browser/create-template/src/createOutputFolder.ts create mode 100644 browser/create-template/src/index.ts create mode 100644 browser/create-template/src/usage.ts create mode 100644 browser/create-template/src/utils.ts create mode 100644 browser/create-template/templates/sveltekit-site/.gitignore create mode 100644 browser/create-template/templates/sveltekit-site/.npmrc create mode 100644 browser/create-template/templates/sveltekit-site/.prettierignore create mode 100644 browser/create-template/templates/sveltekit-site/.prettierrc create mode 100644 browser/create-template/templates/sveltekit-site/README.md create mode 100644 browser/create-template/templates/sveltekit-site/atomic.config.json create mode 100644 browser/create-template/templates/sveltekit-site/eslint.config.js create mode 100644 browser/create-template/templates/sveltekit-site/package.json create mode 100644 browser/create-template/templates/sveltekit-site/src/app.d.ts create mode 100644 browser/create-template/templates/sveltekit-site/src/app.html create mode 100644 browser/create-template/templates/sveltekit-site/src/index.test.ts create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/atomic/getAllBlogposts.ts create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/atomic/getCurrentResource.ts create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/atomic/getStore.ts create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/atomic/preloadResources.ts create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/components/Footer.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/components/Icons/FaMagnifyingGlass.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/components/Layout/Container.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/components/Layout/HStack.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/components/Layout/VStack.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/components/Loader.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/components/Navbar.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/components/Searchbar.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/components/SiteWrapper.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/index.ts create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/stores/currentSubject.ts create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/utils.ts create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/views/Block/BlockView.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/views/Block/ImageGalleryBlock.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/views/Block/TextBlock.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/views/DefaultView.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/views/FullPage/BlogIndexPage.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/views/FullPage/BlogpostPage.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/views/FullPage/DefaultFullPage.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/views/FullPage/FullPageView.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/views/FullPage/PageFullPage.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/views/ListItem/BlogListItem.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/views/ListItem/ListItemView.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/views/MenuItem/MenuItem.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/lib/views/MenuItem/MenuItemLink.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/routes/+layout.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/routes/+layout.ts create mode 100644 browser/create-template/templates/sveltekit-site/src/routes/+page.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/routes/+page.ts create mode 100644 browser/create-template/templates/sveltekit-site/src/routes/[...path]/+error.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/routes/[...path]/+page.svelte create mode 100644 browser/create-template/templates/sveltekit-site/src/routes/[...path]/+page.ts create mode 100644 browser/create-template/templates/sveltekit-site/src/styles/reset.css create mode 100644 browser/create-template/templates/sveltekit-site/static/favicon.png create mode 100644 browser/create-template/templates/sveltekit-site/svelte.config.js create mode 100644 browser/create-template/templates/sveltekit-site/tsconfig.json create mode 100644 browser/create-template/templates/sveltekit-site/vite.config.ts create mode 100644 browser/create-template/tsconfig.json diff --git a/browser/.eslintrc.cjs b/browser/.eslintrc.cjs index 0e72f8c92..ca5d3e6fc 100644 --- a/browser/.eslintrc.cjs +++ b/browser/.eslintrc.cjs @@ -35,6 +35,7 @@ module.exports = { 'react/tsconfig.json', 'data-browser/tsconfig.json', 'e2e/tsconfig.json', + 'create-template/tsconfig.json', ], }, plugins: ['react', '@typescript-eslint', 'prettier', 'react-hooks', 'jsx-a11y'], diff --git a/browser/create-template/.gitignore b/browser/create-template/.gitignore new file mode 100644 index 000000000..5e56e040e --- /dev/null +++ b/browser/create-template/.gitignore @@ -0,0 +1 @@ +/bin diff --git a/browser/create-template/package.json b/browser/create-template/package.json new file mode 100644 index 000000000..a1c66e31e --- /dev/null +++ b/browser/create-template/package.json @@ -0,0 +1,36 @@ +{ + "version": "0.39.0", + "author": "Polle Pas", + "dependencies": { + "@tomic/lib": "workspace:*", + "chalk": "^5.3.0", + "prettier": "3.0.3" + }, + "devDependencies": { + "@types/node": "^20.11.5", + "typescript": "^5.4.5" + }, + "description": "", + "license": "MIT", + "name": "create-atomic", + "publishConfig": { + "access": "public" + }, + "scripts": { + "build": "tsc", + "lint": "eslint ./src --ext .js,.ts", + "lint-fix": "eslint ./src --ext .js,.ts --fix", + "prepublishOnly": "pnpm run build && pnpm run lint-fix", + "watch": "tsc --build --watch", + "start": "pnpm exec tsc --build --watch", + "tsc": "pnpm exec tsc --build", + "typecheck": "pnpm exec tsc --noEmit" + }, + "bin": { + "create-template": "./bin/src/index.js" + }, + "type": "module", + "peerDependencies": { + "@tomic/lib": "workspace:*" + } +} diff --git a/browser/create-template/readme.md b/browser/create-template/readme.md new file mode 100644 index 000000000..5d73c8ebb --- /dev/null +++ b/browser/create-template/readme.md @@ -0,0 +1,15 @@ +# @tomic/template + +```cli +npm create @tomic/template +``` + +Preconfigured: + +```cli +npm create @tomic/template my-project -- --template sveltekit-site --server-url https://my-atomic-server.com +pnpm create @tomic/template my-project --template sveltekit-site --server-url https://my-atomic-server.com +bun create @tomic/template my-project --template sveltekit-site --server-url https://my-atomic-server.com +``` + +_Check out [the docs here](https://docs.atomicdata.dev/js-cli)._ diff --git a/browser/create-template/src/buildEndUsageString.ts b/browser/create-template/src/buildEndUsageString.ts new file mode 100644 index 000000000..671e24025 --- /dev/null +++ b/browser/create-template/src/buildEndUsageString.ts @@ -0,0 +1,48 @@ +import chalk from 'chalk'; + +export function buildEndUsageString(template: string, folder: string): string { + const packageManager = getPackagemanager(); + + const commands = [ + chalk.blue('\nTo continue run the following commands:'), + `cd ${folder}`, + `${packageManager} install`, + runCommand(packageManager, 'update-ontologies'), + startCommand(template, packageManager), + ]; + + return commands.join('\n'); +} + +function getPackagemanager(): string { + const userAgent = process.env.npm_config_user_agent; + const defaultPackageManager = 'npm'; + + if (!userAgent) { + return defaultPackageManager; + } + + if (userAgent.includes('yarn')) { + return 'yarn'; + } else if (userAgent.includes('pnpm')) { + return 'pnpm'; + } + + return defaultPackageManager; +} + +function runCommand(packageManager: string = 'npm', command: string) { + if (packageManager === 'npm' && command !== 'start') { + return `npm run ${command}`; + } + + return `${packageManager} ${command}`; +} + +function startCommand(template: string, packageManager: string) { + if (template === 'sveltekit-site') { + return runCommand(packageManager, 'dev'); + } + + return runCommand(packageManager, 'start'); +} diff --git a/browser/create-template/src/copyTemplate.ts b/browser/create-template/src/copyTemplate.ts new file mode 100644 index 000000000..5f4e5f6c4 --- /dev/null +++ b/browser/create-template/src/copyTemplate.ts @@ -0,0 +1,14 @@ +import chalk from 'chalk'; +import fs from 'node:fs'; +import path from 'node:path'; + +export function copyTemplate(template: string, outputDir: string): void { + // Copy the specified dir from the templates folder to the output dir + fs.cpSync( + path.join(import.meta.dirname, `../../templates/${template}`), + outputDir, + { recursive: true }, + ); + + console.log(`${chalk.green('Success!')} Created template in ${outputDir}`); +} diff --git a/browser/create-template/src/createOutputFolder.ts b/browser/create-template/src/createOutputFolder.ts new file mode 100644 index 000000000..8dc9ee42f --- /dev/null +++ b/browser/create-template/src/createOutputFolder.ts @@ -0,0 +1,24 @@ +import fs from 'node:fs'; +import { ask } from './utils.js'; + +export async function createOutputFolder(outputDir: string): Promise { + if (fs.existsSync(outputDir)) { + const shouldContinue = await ask( + `Folder already exists, Everything in the existing folder will be deleted. Continue? (y/n) `, + ); + + if (shouldContinue.toLowerCase() !== 'y') { + console.error('Aborted'); + process.exit(0); + } + + fs.rmSync(outputDir, { recursive: true }); + } + + try { + fs.mkdirSync(outputDir); + } catch (error) { + console.error(`Failed to create directory: ${outputDir}`); + process.exit(1); + } +} diff --git a/browser/create-template/src/index.ts b/browser/create-template/src/index.ts new file mode 100644 index 000000000..3ad248a37 --- /dev/null +++ b/browser/create-template/src/index.ts @@ -0,0 +1,42 @@ +#!/usr/bin/env node +/* eslint-disable no-console */ +import path from 'node:path'; +import { parseArgs } from 'node:util'; +import { copyTemplate } from './copyTemplate.js'; +import { createOutputFolder } from './createOutputFolder.js'; +import { buildEndUsageString } from './buildEndUsageString.js'; + +const templates = ['sveltekit-site']; + +const args = parseArgs({ + options: { + template: { + type: 'string', + }, + }, + allowPositionals: true, +}); + +if (!args.values.template) { + console.error( + 'Missing template argument, provide a template by adding --template