feat: update to vite.js, Refactor configuration files, remove unused assets, and clean up commented code:
All checks were successful
CI / container-job (push) Successful in 43s
All checks were successful
CI / container-job (push) Successful in 43s
- ace.js: use ts-node-maintained - adonisrc.ts: load vite_provider, sett assetBundler to false, addd hooks property - Dockerfile: change to node version 22 - package.json: remove babel depencies; add @swc/wasm, add vitejs/plugin-vue, add hot-hook, add vite, update eslint-config-prettier, tailwindcss, ts-node-maintained - new vite.config.js and config/vite.ts - inertia.js - improved own vinejs_provider.ts - adapted app.css needed for vitejs - adapted app.ts: new resolve method neede for vitejs relocated resources/js/logo.svg - remove Buffer import into FileUpload.vue - Create.vue: improved submit needed for @inertiajs/vue3 form helper - Edit.vue: mproved submit needed for @inertiajs/vue3 form helper - kernel.ts: load vite_middleware - formated rotes.ts file - rewritten allowed_extensions_mimetypes.ts file (removed typescript errors)
This commit is contained in:
parent
8d47a58d29
commit
4c5a8f5a42
40 changed files with 1647 additions and 4926 deletions
|
@ -1,7 +1,7 @@
|
||||||
################## First Stage - Creating base #########################
|
################## First Stage - Creating base #########################
|
||||||
|
|
||||||
# Created a variable to hold our node base image
|
# Created a variable to hold our node base image
|
||||||
ARG NODE_IMAGE=node:20-bookworm-slim
|
ARG NODE_IMAGE=node:22-bookworm-slim
|
||||||
|
|
||||||
FROM $NODE_IMAGE AS base
|
FROM $NODE_IMAGE AS base
|
||||||
# Install dumb-init and ClamAV, and perform ClamAV database update
|
# Install dumb-init and ClamAV, and perform ClamAV database update
|
||||||
|
|
5
ace.js
5
ace.js
|
@ -15,8 +15,9 @@
|
||||||
/**
|
/**
|
||||||
* Register hook to process TypeScript files using ts-node
|
* Register hook to process TypeScript files using ts-node
|
||||||
*/
|
*/
|
||||||
import { register } from 'node:module';
|
// import { register } from 'node:module';
|
||||||
register('ts-node/esm', import.meta.url);
|
// register('ts-node/esm', import.meta.url);
|
||||||
|
import 'ts-node-maintained/register/esm';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Import ace console entrypoint
|
* Import ace console entrypoint
|
||||||
|
|
167
adonisrc.ts
167
adonisrc.ts
|
@ -1,7 +1,7 @@
|
||||||
import { defineConfig } from '@adonisjs/core/app'
|
import { defineConfig } from '@adonisjs/core/app';
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Commands
|
| Commands
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
@ -10,12 +10,11 @@ export default defineConfig({
|
||||||
| will be scanned automatically from the "./commands" directory.
|
| will be scanned automatically from the "./commands" directory.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
commands: [
|
commands: [
|
||||||
() => import('@adonisjs/core/commands'),
|
() => import('@adonisjs/core/commands'),
|
||||||
() => import('@adonisjs/lucid/commands'),
|
() => import('@adonisjs/lucid/commands'),
|
||||||
() => import('@adonisjs/mail/commands')
|
() => import('@adonisjs/mail/commands')],
|
||||||
],
|
/*
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Preloads
|
| Preloads
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
@ -23,20 +22,20 @@ export default defineConfig({
|
||||||
| List of modules to import before starting the application.
|
| List of modules to import before starting the application.
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
preloads: [
|
preloads: [
|
||||||
() => import('./start/routes.js'),
|
() => import('./start/routes.js'),
|
||||||
() => import('./start/kernel.js'),
|
() => import('./start/kernel.js'),
|
||||||
() => import('#start/validator'),
|
() => import('#start/validator'),
|
||||||
() => import('#start/rules/unique'),
|
() => import('#start/rules/unique'),
|
||||||
() => import('#start/rules/translated_language'),
|
() => import('#start/rules/translated_language'),
|
||||||
() => import('#start/rules/unique_person'),
|
() => import('#start/rules/unique_person'),
|
||||||
() => import('#start/rules/file_length'),
|
() => import('#start/rules/file_length'),
|
||||||
() => import('#start/rules/file_scan'),
|
() => import('#start/rules/file_scan'),
|
||||||
() => import('#start/rules/allowed_extensions_mimetypes'),
|
() => import('#start/rules/allowed_extensions_mimetypes'),
|
||||||
() => import('#start/rules/dependent_array_min_length'),
|
() => import('#start/rules/dependent_array_min_length'),
|
||||||
() => import('#start/rules/referenceValidation')
|
() => import('#start/rules/referenceValidation'),
|
||||||
],
|
],
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Service providers
|
| Service providers
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
@ -45,48 +44,48 @@ export default defineConfig({
|
||||||
| application
|
| application
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
providers: [
|
providers: [
|
||||||
// () => import('./providers/AppProvider.js'),
|
// () => import('./providers/AppProvider.js'),
|
||||||
() => import('@adonisjs/core/providers/app_provider'),
|
() => import('@adonisjs/core/providers/app_provider'),
|
||||||
() => import('@adonisjs/core/providers/hash_provider'),
|
() => import('@adonisjs/core/providers/hash_provider'),
|
||||||
{
|
{
|
||||||
file: () => import('@adonisjs/core/providers/repl_provider'),
|
file: () => import('@adonisjs/core/providers/repl_provider'),
|
||||||
environment: ['repl', 'test'],
|
environment: ['repl', 'test'],
|
||||||
},
|
},
|
||||||
() => import('@adonisjs/session/session_provider'),
|
() => import('@adonisjs/session/session_provider'),
|
||||||
() => import('@adonisjs/core/providers/edge_provider'),
|
() => import('@adonisjs/core/providers/edge_provider'),
|
||||||
() => import('@adonisjs/shield/shield_provider'),
|
() => import('@adonisjs/shield/shield_provider'),
|
||||||
// () => import('@eidellev/inertia-adonisjs'),
|
// () => import('@eidellev/inertia-adonisjs'),
|
||||||
// () => import('@adonisjs/inertia/inertia_provider'),
|
// () => import('@adonisjs/inertia/inertia_provider'),
|
||||||
() => import('#providers/app_provider'),
|
() => import('#providers/app_provider'),
|
||||||
() => import('#providers/inertia_provider'),
|
() => import('#providers/inertia_provider'),
|
||||||
() => import('@adonisjs/lucid/database_provider'),
|
() => import('@adonisjs/lucid/database_provider'),
|
||||||
() => import('@adonisjs/auth/auth_provider'),
|
() => import('@adonisjs/auth/auth_provider'),
|
||||||
// () => import('@eidellev/adonis-stardust'),
|
// () => import('@eidellev/adonis-stardust'),
|
||||||
() => import('@adonisjs/redis/redis_provider'),
|
() => import('@adonisjs/redis/redis_provider'),
|
||||||
() => import('@adonisjs/encore/encore_provider'),
|
// () => import('@adonisjs/encore/encore_provider'),
|
||||||
() => import('@adonisjs/static/static_provider'),
|
() => import('@adonisjs/static/static_provider'),
|
||||||
() => import('#providers/stardust_provider'),
|
() => import('#providers/stardust_provider'),
|
||||||
() => import('#providers/query_builder_provider'),
|
() => import('#providers/query_builder_provider'),
|
||||||
() => import('#providers/token_worker_provider'),
|
() => import('#providers/token_worker_provider'),
|
||||||
// () => import('#providers/validator_provider'),
|
// () => import('#providers/validator_provider'),
|
||||||
() => import('#providers/drive/provider/drive_provider'),
|
() => import('#providers/drive/provider/drive_provider'),
|
||||||
// () => import('@adonisjs/core/providers/vinejs_provider'),
|
// () => import('@adonisjs/core/providers/vinejs_provider'),
|
||||||
() => import('#providers/vinejs_provider'),
|
() => import('#providers/vinejs_provider'),
|
||||||
() => import('@adonisjs/mail/mail_provider')
|
() => import('@adonisjs/mail/mail_provider'),
|
||||||
// () => import('#providers/mail_provider'),
|
() => import('@adonisjs/vite/vite_provider'),
|
||||||
],
|
],
|
||||||
metaFiles: [
|
metaFiles: [
|
||||||
{
|
{
|
||||||
pattern: 'public/**',
|
pattern: 'public/**',
|
||||||
reloadServer: false,
|
reloadServer: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
pattern: 'resources/views/**/*.edge',
|
pattern: 'resources/views/**/*.edge',
|
||||||
reloadServer: false,
|
reloadServer: false,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Tests
|
| Tests
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
@ -95,22 +94,24 @@ export default defineConfig({
|
||||||
| and add additional suites.
|
| and add additional suites.
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
tests: {
|
tests: {
|
||||||
suites: [
|
suites: [
|
||||||
{
|
{
|
||||||
files: ['tests/unit/**/*.spec(.ts|.js)'],
|
files: ['tests/unit/**/*.spec(.ts|.js)'],
|
||||||
name: 'unit',
|
name: 'unit',
|
||||||
timeout: 2000,
|
timeout: 2000,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
files: ['tests/functional/**/*.spec(.ts|.js)'],
|
files: ['tests/functional/**/*.spec(.ts|.js)'],
|
||||||
name: 'functional',
|
name: 'functional',
|
||||||
timeout: 30000,
|
timeout: 30000,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
forceExit: false,
|
forceExit: false,
|
||||||
},
|
},
|
||||||
|
assetsBundler: false,
|
||||||
|
hooks: {
|
||||||
|
onBuildStarting: [() => import('@adonisjs/vite/build_hook')],
|
||||||
})
|
},
|
||||||
|
// assetsBundler: false
|
||||||
|
});
|
||||||
|
|
|
@ -6,7 +6,7 @@ import DoiClientException from '#app/exceptions/DoiClientException';
|
||||||
import { StatusCodes } from 'http-status-codes';
|
import { StatusCodes } from 'http-status-codes';
|
||||||
import logger from '@adonisjs/core/services/logger';
|
import logger from '@adonisjs/core/services/logger';
|
||||||
import { AxiosResponse } from 'axios';
|
import { AxiosResponse } from 'axios';
|
||||||
import axios from 'axios';
|
import { default as axios } from 'axios';
|
||||||
|
|
||||||
export class DoiClient implements DoiClientContract {
|
export class DoiClient implements DoiClientContract {
|
||||||
public username: string;
|
public username: string;
|
||||||
|
@ -50,7 +50,7 @@ export class DoiClient implements DoiClientContract {
|
||||||
'Content-Type': 'application/xml;charset=UTF-8',
|
'Content-Type': 'application/xml;charset=UTF-8',
|
||||||
};
|
};
|
||||||
try {
|
try {
|
||||||
const metadataResponse = await axios.default.put(`${this.serviceUrl}/metadata/${doiValue}`, xmlMeta, { auth, headers });
|
const metadataResponse = await axios.put(`${this.serviceUrl}/metadata/${doiValue}`, xmlMeta, { auth, headers });
|
||||||
|
|
||||||
// Response Codes
|
// Response Codes
|
||||||
// 201 Created: operation successful
|
// 201 Created: operation successful
|
||||||
|
@ -65,7 +65,7 @@ export class DoiClient implements DoiClientContract {
|
||||||
throw new DoiClientException(metadataResponse.status, message);
|
throw new DoiClientException(metadataResponse.status, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
const doiResponse = await axios.default.put(`${this.serviceUrl}/doi/${doiValue}`, `doi=${doiValue}\nurl=${landingPageUrl}`, {
|
const doiResponse = await axios.put(`${this.serviceUrl}/doi/${doiValue}`, `doi=${doiValue}\nurl=${landingPageUrl}`, {
|
||||||
auth,
|
auth,
|
||||||
headers,
|
headers,
|
||||||
});
|
});
|
||||||
|
|
|
@ -3,7 +3,6 @@ import { column, hasMany, belongsTo, SnakeCaseNamingStrategy, computed } from '@
|
||||||
import HashValue from './hash_value.js';
|
import HashValue from './hash_value.js';
|
||||||
import Dataset from './dataset.js';
|
import Dataset from './dataset.js';
|
||||||
import BaseModel from './base_model.js';
|
import BaseModel from './base_model.js';
|
||||||
// import { Buffer } from 'buffer';
|
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import crypto from 'crypto';
|
import crypto from 'crypto';
|
||||||
// import Drive from '@ioc:Adonis/Core/Drive';
|
// import Drive from '@ioc:Adonis/Core/Drive';
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
import { defineConfig } from '@adonisjs/inertia';
|
import { defineConfig } from '@adonisjs/inertia';
|
||||||
import type { HttpContext } from '@adonisjs/core/http';
|
import type { HttpContext } from '@adonisjs/core/http';
|
||||||
|
import type { InferSharedProps } from '@adonisjs/inertia/types'
|
||||||
|
|
||||||
export default defineConfig({
|
const inertiaConfig = defineConfig({
|
||||||
/**
|
/**
|
||||||
* Path to the Edge view that will be used as the root view for Inertia responses
|
* Path to the Edge view that will be used as the root view for Inertia responses
|
||||||
*/
|
*/
|
||||||
|
@ -52,6 +53,12 @@ export default defineConfig({
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export default inertiaConfig
|
||||||
|
|
||||||
|
declare module '@adonisjs/inertia/types' {
|
||||||
|
export interface SharedProps extends InferSharedProps<typeof inertiaConfig> {}
|
||||||
|
}
|
||||||
|
|
||||||
// import { InertiaConfig } from '@ioc:EidelLev/Inertia';
|
// import { InertiaConfig } from '@ioc:EidelLev/Inertia';
|
||||||
|
|
||||||
// /*
|
// /*
|
||||||
|
|
29
config/vite.ts
Normal file
29
config/vite.ts
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
import { defineConfig } from '@adonisjs/vite';
|
||||||
|
|
||||||
|
const viteBackendConfig = defineConfig({
|
||||||
|
/**
|
||||||
|
* The output of vite will be written inside this
|
||||||
|
* directory. The path should be relative from
|
||||||
|
* the application root.
|
||||||
|
*/
|
||||||
|
buildDirectory: 'public/assets',
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The path to the manifest file generated by the
|
||||||
|
* "vite build" command.
|
||||||
|
*/
|
||||||
|
manifestFile: 'public/assets/.vite/manifest.json',
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Feel free to change the value of the "assetsUrl" to
|
||||||
|
* point to a CDN in production.
|
||||||
|
*/
|
||||||
|
assetsUrl: '/assets',
|
||||||
|
|
||||||
|
// neu
|
||||||
|
// scriptAttributes: {
|
||||||
|
// defer: true,
|
||||||
|
// },
|
||||||
|
});
|
||||||
|
|
||||||
|
export default viteBackendConfig;
|
5149
package-lock.json
generated
5149
package-lock.json
generated
File diff suppressed because it is too large
Load diff
32
package.json
32
package.json
|
@ -4,7 +4,8 @@
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"type-check": "tsc --noEmit",
|
"type-check": "tsc --noEmit",
|
||||||
"dev": "node ace serve --watch",
|
"dev": "node ace serve",
|
||||||
|
"devInspect": "node ace serve --watch --node-args='--inspect'",
|
||||||
"compress:xslt": "./node_modules/xslt3/xslt3.js -xsl:public/assets2/datasetxml2oai-pmh.xslt -export:public/assets2/datasetxml2oai.sef.json -t -nogo '-ns:##html5'",
|
"compress:xslt": "./node_modules/xslt3/xslt3.js -xsl:public/assets2/datasetxml2oai-pmh.xslt -export:public/assets2/datasetxml2oai.sef.json -t -nogo '-ns:##html5'",
|
||||||
"compress:solr": "./node_modules/xslt3/xslt3.js -xsl:public/assets2/solr.xslt -export:public/assets2/solr.sef.json -t -nogo '-ns:##html5'",
|
"compress:solr": "./node_modules/xslt3/xslt3.js -xsl:public/assets2/solr.xslt -export:public/assets2/solr.sef.json -t -nogo '-ns:##html5'",
|
||||||
"compress:doi": "./node_modules/xslt3/xslt3.js -xsl:public/assets2/doi_datacite.xslt -export:public/assets2/doi_datacite.sef.json -t -nogo '-ns:##html5'",
|
"compress:doi": "./node_modules/xslt3/xslt3.js -xsl:public/assets2/doi_datacite.xslt -export:public/assets2/doi_datacite.sef.json -t -nogo '-ns:##html5'",
|
||||||
|
@ -26,23 +27,17 @@
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@adonisjs/assembler": "^7.1.1",
|
"@adonisjs/assembler": "^7.1.1",
|
||||||
"@adonisjs/tsconfig": "^1.4.0",
|
"@adonisjs/tsconfig": "^1.4.0",
|
||||||
"@babel/core": "^7.20.12",
|
|
||||||
"@babel/plugin-proposal-class-properties": "^7.18.6",
|
|
||||||
"@babel/plugin-proposal-decorators": "^7.20.13",
|
|
||||||
"@babel/plugin-transform-runtime": "^7.19.6",
|
|
||||||
"@babel/preset-env": "^7.20.2",
|
|
||||||
"@babel/preset-typescript": "^7.18.6",
|
|
||||||
"@japa/assert": "^4.0.1",
|
"@japa/assert": "^4.0.1",
|
||||||
"@japa/plugin-adonisjs": "^4.0.0",
|
"@japa/plugin-adonisjs": "^4.0.0",
|
||||||
"@japa/runner": "^4.2.0",
|
"@japa/runner": "^4.2.0",
|
||||||
"@mdi/js": "^7.1.96",
|
"@mdi/js": "^7.1.96",
|
||||||
"@poppinss/utils": "^6.7.2",
|
"@poppinss/utils": "^6.7.2",
|
||||||
"@swc/core": "^1.10.1",
|
"@swc/wasm": "^1.10.14",
|
||||||
"@symfony/webpack-encore": "^5.0.1",
|
|
||||||
"@tailwindcss/forms": "^0.5.2",
|
"@tailwindcss/forms": "^0.5.2",
|
||||||
"@types/bcryptjs": "^2.4.6",
|
"@types/bcryptjs": "^2.4.6",
|
||||||
"@types/clamscan": "^2.0.4",
|
"@types/clamscan": "^2.0.4",
|
||||||
"@types/escape-html": "^1.0.4",
|
"@types/escape-html": "^1.0.4",
|
||||||
|
"@types/fs-extra": "^11.0.4",
|
||||||
"@types/leaflet": "^1.9.3",
|
"@types/leaflet": "^1.9.3",
|
||||||
"@types/luxon": "^3.4.2",
|
"@types/luxon": "^3.4.2",
|
||||||
"@types/node": "^22.10.2",
|
"@types/node": "^22.10.2",
|
||||||
|
@ -51,24 +46,27 @@
|
||||||
"@types/source-map-support": "^0.5.6",
|
"@types/source-map-support": "^0.5.6",
|
||||||
"@types/sprintf-js": "^1.1.4",
|
"@types/sprintf-js": "^1.1.4",
|
||||||
"@types/supertest": "^6.0.2",
|
"@types/supertest": "^6.0.2",
|
||||||
|
"@vitejs/plugin-vue": "^5.2.1",
|
||||||
"autoprefixer": "^10.4.13",
|
"autoprefixer": "^10.4.13",
|
||||||
"babel-preset-typescript-vue3": "^2.0.17",
|
"babel-preset-typescript-vue3": "^2.0.17",
|
||||||
"chart.js": "^4.2.0",
|
"chart.js": "^4.2.0",
|
||||||
"dotenv-webpack": "^8.0.1",
|
"dotenv-webpack": "^8.0.1",
|
||||||
"eslint": "^8.57.1",
|
"eslint": "^8.57.1",
|
||||||
"eslint-config-prettier": "^9.0.0",
|
"eslint-config-prettier": "^10.0.1",
|
||||||
"eslint-plugin-adonis": "^2.1.1",
|
"eslint-plugin-adonis": "^2.1.1",
|
||||||
"eslint-plugin-prettier": "^5.0.0-alpha.2",
|
"eslint-plugin-prettier": "^5.0.0-alpha.2",
|
||||||
|
"hot-hook": "^0.4.0",
|
||||||
"numeral": "^2.0.6",
|
"numeral": "^2.0.6",
|
||||||
"pinia": "^2.0.30",
|
"pinia": "^2.0.30",
|
||||||
"pino-pretty": "^13.0.0",
|
"pino-pretty": "^13.0.0",
|
||||||
"postcss-loader": "^8.1.1",
|
"postcss-loader": "^8.1.1",
|
||||||
"prettier": "^3.4.2",
|
"prettier": "^3.4.2",
|
||||||
"supertest": "^6.3.3",
|
"supertest": "^6.3.3",
|
||||||
"tailwindcss": "^3.2.4",
|
"tailwindcss": "^3.4.17",
|
||||||
"ts-loader": "^9.4.2",
|
"ts-loader": "^9.4.2",
|
||||||
"ts-node": "^10.9.2",
|
"ts-node-maintained": "^10.9.5",
|
||||||
"typescript": "~5.7",
|
"typescript": "~5.7",
|
||||||
|
"vite": "^6.0.11",
|
||||||
"vue": "^3.4.26",
|
"vue": "^3.4.26",
|
||||||
"vue-facing-decorator": "^3.0.0",
|
"vue-facing-decorator": "^3.0.0",
|
||||||
"vue-loader": "^17.0.1",
|
"vue-loader": "^17.0.1",
|
||||||
|
@ -80,7 +78,6 @@
|
||||||
"@adonisjs/core": "^6.17.0",
|
"@adonisjs/core": "^6.17.0",
|
||||||
"@adonisjs/cors": "^2.2.1",
|
"@adonisjs/cors": "^2.2.1",
|
||||||
"@adonisjs/drive": "^3.2.0",
|
"@adonisjs/drive": "^3.2.0",
|
||||||
"@adonisjs/encore": "^1.0.0",
|
|
||||||
"@adonisjs/inertia": "^2.1.3",
|
"@adonisjs/inertia": "^2.1.3",
|
||||||
"@adonisjs/lucid": "^21.5.1",
|
"@adonisjs/lucid": "^21.5.1",
|
||||||
"@adonisjs/mail": "^9.2.2",
|
"@adonisjs/mail": "^9.2.2",
|
||||||
|
@ -94,7 +91,7 @@
|
||||||
"@fontsource/inter": "^5.0.1",
|
"@fontsource/inter": "^5.0.1",
|
||||||
"@inertiajs/inertia": "^0.11.1",
|
"@inertiajs/inertia": "^0.11.1",
|
||||||
"@inertiajs/vue3": "^2.0.3",
|
"@inertiajs/vue3": "^2.0.3",
|
||||||
"@opensearch-project/opensearch": "^2.4.0",
|
"@opensearch-project/opensearch": "^3.2.0",
|
||||||
"@phc/format": "^1.0.0",
|
"@phc/format": "^1.0.0",
|
||||||
"@poppinss/manager": "^5.0.2",
|
"@poppinss/manager": "^5.0.2",
|
||||||
"@vinejs/vine": "^3.0.0",
|
"@vinejs/vine": "^3.0.0",
|
||||||
|
@ -102,7 +99,6 @@
|
||||||
"bcrypt": "^5.1.1",
|
"bcrypt": "^5.1.1",
|
||||||
"bcryptjs": "^2.4.3",
|
"bcryptjs": "^2.4.3",
|
||||||
"clamscan": "^2.1.2",
|
"clamscan": "^2.1.2",
|
||||||
"crypto": "^1.0.1",
|
|
||||||
"dayjs": "^1.11.7",
|
"dayjs": "^1.11.7",
|
||||||
"deep-email-validator": "^0.1.21",
|
"deep-email-validator": "^0.1.21",
|
||||||
"edge.js": "^6.0.1",
|
"edge.js": "^6.0.1",
|
||||||
|
@ -125,6 +121,12 @@
|
||||||
"vuedraggable": "^4.1.0",
|
"vuedraggable": "^4.1.0",
|
||||||
"xmlbuilder2": "^3.1.1"
|
"xmlbuilder2": "^3.1.1"
|
||||||
},
|
},
|
||||||
|
"hotHook": {
|
||||||
|
"boundaries": [
|
||||||
|
"./app/Controllers/**/*.ts",
|
||||||
|
"./app/middleware/*.ts"
|
||||||
|
]
|
||||||
|
},
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"imports": {
|
"imports": {
|
||||||
"#controllers/*": "./app/Controllers/*.js",
|
"#controllers/*": "./app/Controllers/*.js",
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
module.exports = {
|
module.exports = {
|
||||||
plugins: {
|
plugins: {
|
||||||
// 'postcss-import': {},
|
// 'postcss-import': {},
|
||||||
'tailwindcss/nesting': {},
|
// 'postcss-nesting': {},
|
||||||
|
'tailwindcss/nesting': {},
|
||||||
|
// "@tailwindcss/postcss": {},
|
||||||
|
// tailwindcss: {},
|
||||||
tailwindcss: {},
|
tailwindcss: {},
|
||||||
autoprefixer: {},
|
autoprefixer: {},
|
||||||
},
|
},
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|*/
|
|*/
|
||||||
import type { ApplicationService } from '@adonisjs/core/types';
|
import type { ApplicationService } from '@adonisjs/core/types';
|
||||||
import vine, { BaseLiteralType, Vine } from '@vinejs/vine';
|
import vine, { symbols, BaseLiteralType, Vine } from '@vinejs/vine';
|
||||||
import type { FieldContext, FieldOptions } from '@vinejs/vine/types';
|
import type { FieldContext, FieldOptions } from '@vinejs/vine/types';
|
||||||
// import type { MultipartFile, FileValidationOptions } from '@adonisjs/bodyparser/types';
|
// import type { MultipartFile, FileValidationOptions } from '@adonisjs/bodyparser/types';
|
||||||
import type { MultipartFile } from '@adonisjs/core/bodyparser';
|
import type { MultipartFile } from '@adonisjs/core/bodyparser';
|
||||||
|
@ -12,6 +12,7 @@ import type { FileValidationOptions } from '@adonisjs/core/types/bodyparser';
|
||||||
import { Request, RequestValidator } from '@adonisjs/core/http';
|
import { Request, RequestValidator } from '@adonisjs/core/http';
|
||||||
import MimeType from '#models/mime_type';
|
import MimeType from '#models/mime_type';
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validation options accepted by the "file" rule
|
* Validation options accepted by the "file" rule
|
||||||
*/
|
*/
|
||||||
|
@ -101,7 +102,20 @@ const isMultipartFile = vine.createRule(async (file: MultipartFile | unknown, op
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const MULTIPART_FILE: typeof symbols.SUBTYPE = symbols.SUBTYPE;
|
||||||
|
|
||||||
export class VineMultipartFile extends BaseLiteralType<MultipartFile, MultipartFile, MultipartFile> {
|
export class VineMultipartFile extends BaseLiteralType<MultipartFile, MultipartFile, MultipartFile> {
|
||||||
|
|
||||||
|
[MULTIPART_FILE]: string;
|
||||||
|
// constructor(validationOptions?: FileRuleValidationOptions, options?: FieldOptions) {
|
||||||
|
// super(options, [isMultipartFile(validationOptions || {})]);
|
||||||
|
// this.validationOptions = validationOptions;
|
||||||
|
// this.#private = true;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// clone(): this {
|
||||||
|
// return new VineMultipartFile(this.validationOptions, this.cloneOptions()) as this;
|
||||||
|
// }
|
||||||
// #private;
|
// #private;
|
||||||
// constructor(validationOptions?: FileRuleValidationOptions, options?: FieldOptions, validations?: Validation<any>[]);
|
// constructor(validationOptions?: FileRuleValidationOptions, options?: FieldOptions, validations?: Validation<any>[]);
|
||||||
// clone(): this;
|
// clone(): this;
|
||||||
|
@ -153,7 +167,10 @@ export default class VinejsProvider {
|
||||||
* The validate method can be used to validate the request
|
* The validate method can be used to validate the request
|
||||||
* data for the current request using VineJS validators
|
* data for the current request using VineJS validators
|
||||||
*/
|
*/
|
||||||
Request.macro('validateUsing', function (...args) {
|
Request.macro('validateUsing', function (this: Request, ...args) {
|
||||||
|
if (!this.ctx) {
|
||||||
|
throw new Error('HttpContext is not available');
|
||||||
|
}
|
||||||
return new RequestValidator(this.ctx).validateUsing(...args);
|
return new RequestValidator(this.ctx).validateUsing(...args);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
{
|
|
||||||
"entrypoints": {
|
|
||||||
"app": {
|
|
||||||
"css": [
|
|
||||||
"http://localhost:8080/assets/app.css"
|
|
||||||
],
|
|
||||||
"js": [
|
|
||||||
"http://localhost:8080/assets/app.js"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,102 +0,0 @@
|
||||||
{
|
|
||||||
"assets/app.css": "http://localhost:8080/assets/app.css",
|
|
||||||
"assets/app.js": "http://localhost:8080/assets/app.js",
|
|
||||||
"assets/resources_js_apps_settings_l18n_de_js.js": "http://localhost:8080/assets/resources_js_apps_settings_l18n_de_js.js",
|
|
||||||
"assets/resources_js_apps_settings_l18n_en_js.js": "http://localhost:8080/assets/resources_js_apps_settings_l18n_en_js.js",
|
|
||||||
"assets/resources_js_Pages_Admin_License_Index_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_License_Index_vue.js",
|
|
||||||
"assets/resources_js_Pages_Admin_Mimetype_Create_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_Mimetype_Create_vue.js",
|
|
||||||
"assets/resources_js_Pages_Admin_Mimetype_Delete_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_Mimetype_Delete_vue.js",
|
|
||||||
"assets/resources_js_Pages_Admin_Mimetype_Index_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_Mimetype_Index_vue.js",
|
|
||||||
"assets/resources_js_Pages_Admin_Permission_Create_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_Permission_Create_vue.js",
|
|
||||||
"assets/resources_js_Pages_Admin_Permission_Edit_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_Permission_Edit_vue.js",
|
|
||||||
"assets/resources_js_Pages_Admin_Permission_Index_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_Permission_Index_vue.js",
|
|
||||||
"assets/resources_js_Pages_Admin_Permission_Show_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_Permission_Show_vue.js",
|
|
||||||
"assets/resources_js_Pages_Admin_Role_Create_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_Role_Create_vue.js",
|
|
||||||
"assets/resources_js_Pages_Admin_Role_Edit_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_Role_Edit_vue.js",
|
|
||||||
"assets/resources_js_Pages_Admin_Role_Index_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_Role_Index_vue.js",
|
|
||||||
"assets/resources_js_Pages_Admin_Role_Show_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_Role_Show_vue.js",
|
|
||||||
"assets/resources_js_Pages_Admin_Settings_vue-resources_js_utils_toast_css.css": "http://localhost:8080/assets/resources_js_Pages_Admin_Settings_vue-resources_js_utils_toast_css.css",
|
|
||||||
"assets/resources_js_Pages_Admin_Settings_vue-resources_js_utils_toast_css.js": "http://localhost:8080/assets/resources_js_Pages_Admin_Settings_vue-resources_js_utils_toast_css.js",
|
|
||||||
"assets/resources_js_Pages_Admin_User_Create_vue-resources_js_Components_SimplePasswordMeter_password-f3312a.css": "http://localhost:8080/assets/resources_js_Pages_Admin_User_Create_vue-resources_js_Components_SimplePasswordMeter_password-f3312a.css",
|
|
||||||
"assets/resources_js_Pages_Admin_User_Create_vue-resources_js_Components_SimplePasswordMeter_password-f3312a.js": "http://localhost:8080/assets/resources_js_Pages_Admin_User_Create_vue-resources_js_Components_SimplePasswordMeter_password-f3312a.js",
|
|
||||||
"assets/resources_js_Pages_Admin_User_Edit_vue-resources_js_Components_SimplePasswordMeter_password-m-6dc207.css": "http://localhost:8080/assets/resources_js_Pages_Admin_User_Edit_vue-resources_js_Components_SimplePasswordMeter_password-m-6dc207.css",
|
|
||||||
"assets/resources_js_Pages_Admin_User_Edit_vue-resources_js_Components_SimplePasswordMeter_password-m-6dc207.js": "http://localhost:8080/assets/resources_js_Pages_Admin_User_Edit_vue-resources_js_Components_SimplePasswordMeter_password-m-6dc207.js",
|
|
||||||
"assets/resources_js_Pages_Admin_User_Index_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_User_Index_vue.js",
|
|
||||||
"assets/resources_js_Pages_Admin_User_Show_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_User_Show_vue.js",
|
|
||||||
"assets/resources_js_Pages_App_vue.js": "http://localhost:8080/assets/resources_js_Pages_App_vue.js",
|
|
||||||
"assets/resources_js_Pages_Auth_AccountInfo_vue-resources_js_utils_toast_css-resources_js_Components_-06c7b5.css": "http://localhost:8080/assets/resources_js_Pages_Auth_AccountInfo_vue-resources_js_utils_toast_css-resources_js_Components_-06c7b5.css",
|
|
||||||
"assets/resources_js_Pages_Auth_AccountInfo_vue-resources_js_utils_toast_css-resources_js_Components_-06c7b5.js": "http://localhost:8080/assets/resources_js_Pages_Auth_AccountInfo_vue-resources_js_utils_toast_css-resources_js_Components_-06c7b5.js",
|
|
||||||
"assets/resources_js_Pages_Auth_Login_vue.js": "http://localhost:8080/assets/resources_js_Pages_Auth_Login_vue.js",
|
|
||||||
"assets/resources_js_Pages_Auth_Register_vue.js": "http://localhost:8080/assets/resources_js_Pages_Auth_Register_vue.js",
|
|
||||||
"assets/resources_js_Pages_Dashboard_vue.js": "http://localhost:8080/assets/resources_js_Pages_Dashboard_vue.js",
|
|
||||||
"assets/resources_js_Pages_Editor_Dataset_Approve_vue.js": "http://localhost:8080/assets/resources_js_Pages_Editor_Dataset_Approve_vue.js",
|
|
||||||
"assets/resources_js_Pages_Editor_Dataset_Doi_vue.js": "http://localhost:8080/assets/resources_js_Pages_Editor_Dataset_Doi_vue.js",
|
|
||||||
"assets/resources_js_Pages_Editor_Dataset_Index_vue.js": "http://localhost:8080/assets/resources_js_Pages_Editor_Dataset_Index_vue.js",
|
|
||||||
"assets/resources_js_Pages_Editor_Dataset_Publish_vue.js": "http://localhost:8080/assets/resources_js_Pages_Editor_Dataset_Publish_vue.js",
|
|
||||||
"assets/resources_js_Pages_Editor_Dataset_Receive_vue.js": "http://localhost:8080/assets/resources_js_Pages_Editor_Dataset_Receive_vue.js",
|
|
||||||
"assets/resources_js_Pages_Editor_Dataset_Reject_vue.js": "http://localhost:8080/assets/resources_js_Pages_Editor_Dataset_Reject_vue.js",
|
|
||||||
"assets/resources_js_Pages_Error_vue.js": "http://localhost:8080/assets/resources_js_Pages_Error_vue.js",
|
|
||||||
"assets/resources_js_Pages_Errors_ServerError_vue.js": "http://localhost:8080/assets/resources_js_Pages_Errors_ServerError_vue.js",
|
|
||||||
"assets/resources_js_Pages_Errors_not_found_vue.js": "http://localhost:8080/assets/resources_js_Pages_Errors_not_found_vue.js",
|
|
||||||
"assets/resources_js_Pages_Map_vue-resources_js_Components_Map_draw_component_vue-resources_js_Compon-b0925c.css": "http://localhost:8080/assets/resources_js_Pages_Map_vue-resources_js_Components_Map_draw_component_vue-resources_js_Compon-b0925c.css",
|
|
||||||
"assets/resources_js_Pages_Map_vue-resources_js_Components_Map_draw_component_vue-resources_js_Compon-b0925c.js": "http://localhost:8080/assets/resources_js_Pages_Map_vue-resources_js_Components_Map_draw_component_vue-resources_js_Compon-b0925c.js",
|
|
||||||
"assets/resources_js_Pages_ProfileView_vue.js": "http://localhost:8080/assets/resources_js_Pages_ProfileView_vue.js",
|
|
||||||
"assets/resources_js_Pages_Reviewer_Dataset_Index_vue.js": "http://localhost:8080/assets/resources_js_Pages_Reviewer_Dataset_Index_vue.js",
|
|
||||||
"assets/resources_js_Pages_Reviewer_Dataset_Reject_vue.js": "http://localhost:8080/assets/resources_js_Pages_Reviewer_Dataset_Reject_vue.js",
|
|
||||||
"assets/resources_js_Pages_Reviewer_Dataset_Review_vue.js": "http://localhost:8080/assets/resources_js_Pages_Reviewer_Dataset_Review_vue.js",
|
|
||||||
"assets/resources_js_Pages_Submitter_Dataset_Category_vue.css": "http://localhost:8080/assets/resources_js_Pages_Submitter_Dataset_Category_vue.css",
|
|
||||||
"assets/resources_js_Pages_Submitter_Dataset_Category_vue.js": "http://localhost:8080/assets/resources_js_Pages_Submitter_Dataset_Category_vue.js",
|
|
||||||
"assets/resources_js_Pages_Submitter_Dataset_Create_vue-resources_js_utils_toast_css-resources_js_Com-03a898.css": "http://localhost:8080/assets/resources_js_Pages_Submitter_Dataset_Create_vue-resources_js_utils_toast_css-resources_js_Com-03a898.css",
|
|
||||||
"assets/resources_js_Pages_Submitter_Dataset_Create_vue-resources_js_utils_toast_css-resources_js_Com-03a898.js": "http://localhost:8080/assets/resources_js_Pages_Submitter_Dataset_Create_vue-resources_js_utils_toast_css-resources_js_Com-03a898.js",
|
|
||||||
"assets/resources_js_Pages_Submitter_Dataset_Delete_vue.js": "http://localhost:8080/assets/resources_js_Pages_Submitter_Dataset_Delete_vue.js",
|
|
||||||
"assets/resources_js_Pages_Submitter_Dataset_Edit_vue-resources_js_utils_toast_css-resources_js_Compo-a37b65.css": "http://localhost:8080/assets/resources_js_Pages_Submitter_Dataset_Edit_vue-resources_js_utils_toast_css-resources_js_Compo-a37b65.css",
|
|
||||||
"assets/resources_js_Pages_Submitter_Dataset_Edit_vue-resources_js_utils_toast_css-resources_js_Compo-a37b65.js": "http://localhost:8080/assets/resources_js_Pages_Submitter_Dataset_Edit_vue-resources_js_utils_toast_css-resources_js_Compo-a37b65.js",
|
|
||||||
"assets/resources_js_Pages_Submitter_Dataset_Index_vue.css": "http://localhost:8080/assets/resources_js_Pages_Submitter_Dataset_Index_vue.css",
|
|
||||||
"assets/resources_js_Pages_Submitter_Dataset_Index_vue.js": "http://localhost:8080/assets/resources_js_Pages_Submitter_Dataset_Index_vue.js",
|
|
||||||
"assets/resources_js_Pages_Submitter_Dataset_Release_vue.js": "http://localhost:8080/assets/resources_js_Pages_Submitter_Dataset_Release_vue.js",
|
|
||||||
"assets/resources_js_Pages_Submitter_Person_Index_vue.js": "http://localhost:8080/assets/resources_js_Pages_Submitter_Person_Index_vue.js",
|
|
||||||
"assets/resources_js_Pages_register-view_register-view-component_vue.js": "http://localhost:8080/assets/resources_js_Pages_register-view_register-view-component_vue.js",
|
|
||||||
"assets/vendors-node_modules_mdi_js_mdi_js-node_modules_vue-loader_dist_exportHelper_js.js": "http://localhost:8080/assets/vendors-node_modules_mdi_js_mdi_js-node_modules_vue-loader_dist_exportHelper_js.js",
|
|
||||||
"assets/vendors-node_modules_focus-trap_dist_focus-trap_esm_js-node_modules_notiwind_dist_index_esm_js.js": "http://localhost:8080/assets/vendors-node_modules_focus-trap_dist_focus-trap_esm_js-node_modules_notiwind_dist_index_esm_js.js",
|
|
||||||
"assets/vendors-node_modules_vue-facing-decorator_dist_esm_utils_js.js": "http://localhost:8080/assets/vendors-node_modules_vue-facing-decorator_dist_esm_utils_js.js",
|
|
||||||
"assets/vendors-node_modules_toastify-js_src_toastify_js.js": "http://localhost:8080/assets/vendors-node_modules_toastify-js_src_toastify_js.js",
|
|
||||||
"assets/vendors-node_modules_leaflet_dist_leaflet-src_js-node_modules_leaflet_src_control_Control_Att-adabdc.js": "http://localhost:8080/assets/vendors-node_modules_leaflet_dist_leaflet-src_js-node_modules_leaflet_src_control_Control_Att-adabdc.js",
|
|
||||||
"assets/vendors-node_modules_buffer_index_js-node_modules_vuedraggable_dist_vuedraggable_umd_js.js": "http://localhost:8080/assets/vendors-node_modules_buffer_index_js-node_modules_vuedraggable_dist_vuedraggable_umd_js.js",
|
|
||||||
"assets/vendors-node_modules_mime_dist_src_index_js.js": "http://localhost:8080/assets/vendors-node_modules_mime_dist_src_index_js.js",
|
|
||||||
"assets/vendors-node_modules_numeral_numeral_js-node_modules_chart_js_dist_chart_js.js": "http://localhost:8080/assets/vendors-node_modules_numeral_numeral_js-node_modules_chart_js_dist_chart_js.js",
|
|
||||||
"assets/resources_js_Components_BaseButton_vue.js": "http://localhost:8080/assets/resources_js_Components_BaseButton_vue.js",
|
|
||||||
"assets/resources_js_Stores_main_ts-resources_js_Components_BaseDivider_vue-resources_js_Components_C-b45805.js": "http://localhost:8080/assets/resources_js_Stores_main_ts-resources_js_Components_BaseDivider_vue-resources_js_Components_C-b45805.js",
|
|
||||||
"assets/resources_js_Layouts_LayoutAuthenticated_vue.css": "http://localhost:8080/assets/resources_js_Layouts_LayoutAuthenticated_vue.css",
|
|
||||||
"assets/resources_js_Layouts_LayoutAuthenticated_vue.js": "http://localhost:8080/assets/resources_js_Layouts_LayoutAuthenticated_vue.js",
|
|
||||||
"assets/resources_js_Components_BaseButtons_vue-resources_js_Components_FormControl_vue-resources_js_-d830d6.js": "http://localhost:8080/assets/resources_js_Components_BaseButtons_vue-resources_js_Components_FormControl_vue-resources_js_-d830d6.js",
|
|
||||||
"assets/resources_js_Components_Admin_Pagination_vue-resources_js_Components_BaseButtons_vue-resource-6f3a70.js": "http://localhost:8080/assets/resources_js_Components_Admin_Pagination_vue-resources_js_Components_BaseButtons_vue-resource-6f3a70.js",
|
|
||||||
"assets/resources_js_utils_toast_ts-resources_js_Components_NotificationBar_vue.js": "http://localhost:8080/assets/resources_js_utils_toast_ts-resources_js_Components_NotificationBar_vue.js",
|
|
||||||
"assets/resources_js_Components_Map_draw_component_vue-resources_js_Components_Map_zoom_component_vue-058bcc.js": "http://localhost:8080/assets/resources_js_Components_Map_draw_component_vue-resources_js_Components_Map_zoom_component_vue-058bcc.js",
|
|
||||||
"assets/resources_js_Components_SectionMain_vue-resources_js_Components_SectionTitleLineWithButton_vu-764dfe.js": "http://localhost:8080/assets/resources_js_Components_SectionMain_vue-resources_js_Components_SectionTitleLineWithButton_vu-764dfe.js",
|
|
||||||
"assets/resources_js_Components_BaseButtons_vue-resources_js_Components_NotificationBar_vue-resources-7e06d8.js": "http://localhost:8080/assets/resources_js_Components_BaseButtons_vue-resources_js_Components_NotificationBar_vue-resources-7e06d8.js",
|
|
||||||
"assets/resources_js_Components_Admin_Sort_vue-resources_js_Components_SectionTitleLineWithButton_vue.js": "http://localhost:8080/assets/resources_js_Components_Admin_Sort_vue-resources_js_Components_SectionTitleLineWithButton_vue.js",
|
|
||||||
"assets/resources_js_Components_CardBoxModal_vue.js": "http://localhost:8080/assets/resources_js_Components_CardBoxModal_vue.js",
|
|
||||||
"assets/resources_js_Components_FileUpload_vue-resources_js_Components_FormCheckRadioGroup_vue-resour-25e686.js": "http://localhost:8080/assets/resources_js_Components_FileUpload_vue-resources_js_Components_FormCheckRadioGroup_vue-resour-25e686.js",
|
|
||||||
"assets/fonts/inter-latin-ext-400-normal.woff": "http://localhost:8080/assets/fonts/inter-latin-ext-400-normal.1c20f7dc.woff",
|
|
||||||
"assets/fonts/inter-latin-400-normal.woff": "http://localhost:8080/assets/fonts/inter-latin-400-normal.b0c8fe9d.woff",
|
|
||||||
"assets/fonts/inter-latin-ext-400-normal.woff2": "http://localhost:8080/assets/fonts/inter-latin-ext-400-normal.3d10c85f.woff2",
|
|
||||||
"assets/fonts/inter-latin-400-normal.woff2": "http://localhost:8080/assets/fonts/inter-latin-400-normal.9698cc7d.woff2",
|
|
||||||
"assets/fonts/archivo-black-latin-400-normal.woff2": "http://localhost:8080/assets/fonts/archivo-black-latin-400-normal.fc847a1f.woff2",
|
|
||||||
"assets/fonts/archivo-black-latin-ext-400-normal.woff2": "http://localhost:8080/assets/fonts/archivo-black-latin-ext-400-normal.21761451.woff2",
|
|
||||||
"assets/fonts/inter-cyrillic-ext-400-normal.woff": "http://localhost:8080/assets/fonts/inter-cyrillic-ext-400-normal.e8945162.woff",
|
|
||||||
"assets/fonts/archivo-black-latin-400-normal.woff": "http://localhost:8080/assets/fonts/archivo-black-latin-400-normal.58a301a6.woff",
|
|
||||||
"assets/fonts/inter-cyrillic-ext-400-normal.woff2": "http://localhost:8080/assets/fonts/inter-cyrillic-ext-400-normal.fd1478dc.woff2",
|
|
||||||
"assets/fonts/inter-cyrillic-400-normal.woff": "http://localhost:8080/assets/fonts/inter-cyrillic-400-normal.e2841352.woff",
|
|
||||||
"assets/fonts/inter-greek-400-normal.woff": "http://localhost:8080/assets/fonts/inter-greek-400-normal.a42da273.woff",
|
|
||||||
"assets/fonts/archivo-black-latin-ext-400-normal.woff": "http://localhost:8080/assets/fonts/archivo-black-latin-ext-400-normal.5ab5ba92.woff",
|
|
||||||
"assets/fonts/inter-greek-400-normal.woff2": "http://localhost:8080/assets/fonts/inter-greek-400-normal.a8de720a.woff2",
|
|
||||||
"assets/fonts/inter-cyrillic-400-normal.woff2": "http://localhost:8080/assets/fonts/inter-cyrillic-400-normal.cb04b2ee.woff2",
|
|
||||||
"assets/fonts/inter-greek-ext-400-normal.woff": "http://localhost:8080/assets/fonts/inter-greek-ext-400-normal.b9e1e894.woff",
|
|
||||||
"assets/fonts/inter-vietnamese-400-normal.woff": "http://localhost:8080/assets/fonts/inter-vietnamese-400-normal.96f8adc7.woff",
|
|
||||||
"assets/fonts/inter-greek-ext-400-normal.woff2": "http://localhost:8080/assets/fonts/inter-greek-ext-400-normal.f2fa0d9e.woff2",
|
|
||||||
"assets/fonts/inter-vietnamese-400-normal.woff2": "http://localhost:8080/assets/fonts/inter-vietnamese-400-normal.44c9df13.woff2",
|
|
||||||
"assets/images/marker-icon.png": "http://localhost:8080/assets/images/marker-icon.2b3e1faf.png",
|
|
||||||
"assets/images/layers-2x.png": "http://localhost:8080/assets/images/layers-2x.8f2c4d11.png",
|
|
||||||
"assets/images/layers.png": "http://localhost:8080/assets/images/layers.416d9136.png",
|
|
||||||
"assets/images/Close.svg": "http://localhost:8080/assets/images/Close.e4887675.svg"
|
|
||||||
}
|
|
|
@ -1,19 +1,20 @@
|
||||||
/* @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;500&display=swap'); */
|
/* @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;500&display=swap'); */
|
||||||
/* @import url('https://fonts.googleapis.com/css?family=Roboto:400,400i,600,700'); */
|
/* @import url('https://fonts.googleapis.com/css?family=Roboto:400,400i,600,700'); */
|
||||||
|
|
||||||
@tailwind base;
|
|
||||||
@tailwind components;
|
|
||||||
@tailwind utilities;
|
|
||||||
|
|
||||||
@import '_checkbox-radio-switch.css';
|
@import '_checkbox-radio-switch.css';
|
||||||
@import '_progress.css';
|
@import '_progress.css';
|
||||||
@import '_scrollbars.css';
|
@import '_scrollbars.css';
|
||||||
@import '_table.css';
|
@import '_table.css';
|
||||||
|
|
||||||
@import '~leaflet/dist/leaflet.css';
|
/* @import '~leaflet/dist/leaflet.css'; */
|
||||||
|
@import '~/leaflet/dist/leaflet.css';
|
||||||
@import '@fontsource/inter/index.css';
|
@import '@fontsource/inter/index.css';
|
||||||
@import '@fontsource/archivo-black/index.css';
|
@import '@fontsource/archivo-black/index.css';
|
||||||
|
|
||||||
|
|
||||||
|
@tailwind base;
|
||||||
|
@tailwind components;
|
||||||
|
@tailwind utilities;
|
||||||
:root {
|
:root {
|
||||||
--color-main-background: #ffffff;
|
--color-main-background: #ffffff;
|
||||||
--color-main-background-rgb: 255,255,255;
|
--color-main-background-rgb: 255,255,255;
|
||||||
|
|
|
@ -198,7 +198,7 @@ import DeleteIcon from '@/Components/Icons/Delete.vue';
|
||||||
import RefreshIcon from '@/Components/Icons/Refresh.vue';
|
import RefreshIcon from '@/Components/Icons/Refresh.vue';
|
||||||
// import { Page, PageProps, Errors, ErrorBag } from '@inertiajs/inertia';
|
// import { Page, PageProps, Errors, ErrorBag } from '@inertiajs/inertia';
|
||||||
import Draggable from 'vuedraggable';
|
import Draggable from 'vuedraggable';
|
||||||
import { Buffer } from 'buffer';
|
// import { Buffer } from 'buffer';
|
||||||
import { TethysFile } from '@/Dataset';
|
import { TethysFile } from '@/Dataset';
|
||||||
|
|
||||||
// lastModified: 1691759507591
|
// lastModified: 1691759507591
|
||||||
|
@ -445,18 +445,19 @@ class FileUploadComponent extends Vue {
|
||||||
let localUrl: string = '';
|
let localUrl: string = '';
|
||||||
if (file instanceof File) {
|
if (file instanceof File) {
|
||||||
localUrl = URL.createObjectURL(file as Blob);
|
localUrl = URL.createObjectURL(file as Blob);
|
||||||
} else if (file.fileData) {
|
}
|
||||||
// const blob = new Blob([file.fileData]);
|
// else if (file.fileData) {
|
||||||
// localUrl = URL.createObjectURL(blob);
|
// // const blob = new Blob([file.fileData]);
|
||||||
const parsed = JSON.parse(file.fileData);
|
// // localUrl = URL.createObjectURL(blob);
|
||||||
file.fileData = '';
|
// const parsed = JSON.parse(file.fileData);
|
||||||
// retrieve the original buffer of data
|
// file.fileData = '';
|
||||||
const buff = Buffer.from(parsed.blob, 'base64');
|
// // retrieve the original buffer of data
|
||||||
const blob = new Blob([buff], { type: 'application/octet-stream' });
|
// const buff = Buffer.from(parsed.blob, 'base64');
|
||||||
// file.blob = blob;
|
// const blob = new Blob([buff], { type: 'application/octet-stream' });
|
||||||
localUrl = URL.createObjectURL(blob);
|
// // file.blob = blob;
|
||||||
file.fileSrc = localUrl;
|
// localUrl = URL.createObjectURL(blob);
|
||||||
}
|
// file.fileSrc = localUrl;
|
||||||
|
// }
|
||||||
|
|
||||||
// setTimeout(() => {
|
// setTimeout(() => {
|
||||||
// URL.revokeObjectURL(localUrl);
|
// URL.revokeObjectURL(localUrl);
|
||||||
|
|
|
@ -28,7 +28,7 @@ const form = useForm({
|
||||||
});
|
});
|
||||||
|
|
||||||
const submit = async () => {
|
const submit = async () => {
|
||||||
await form.post(stardust.route('settings.role.store'), form);
|
await form.post(stardust.route('settings.role.store'));
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<script setup>
|
<script setup lang="ts">
|
||||||
import { Head, Link, useForm } from '@inertiajs/vue3';
|
import { Head, useForm } from '@inertiajs/vue3';
|
||||||
import { mdiAccountKey, mdiArrowLeftBoldOutline, mdiFormTextarea } from '@mdi/js';
|
import { mdiAccountKey, mdiArrowLeftBoldOutline, mdiFormTextarea } from '@mdi/js';
|
||||||
import LayoutAuthenticated from '@/Layouts/LayoutAuthenticated.vue';
|
import LayoutAuthenticated from '@/Layouts/LayoutAuthenticated.vue';
|
||||||
import SectionMain from '@/Components/SectionMain.vue';
|
import SectionMain from '@/Components/SectionMain.vue';
|
||||||
|
@ -29,15 +29,15 @@ const props = defineProps({
|
||||||
});
|
});
|
||||||
|
|
||||||
const form = useForm({
|
const form = useForm({
|
||||||
_method: 'put',
|
|
||||||
name: props.role.name,
|
name: props.role.name,
|
||||||
description: props.role.description,
|
description: props.role.description,
|
||||||
permissions: props.roleHasPermissions,
|
permissions: props.roleHasPermissions,
|
||||||
});
|
});
|
||||||
|
|
||||||
const submit = async () => {
|
const submit = async () => {
|
||||||
// await Inertia.post(stardust.route('user.store'), form);
|
// await Inertia.post(stardust.route('user.store'), form); old
|
||||||
await form.put(stardust.route('settings.role.update', [props.role.id]), form);
|
await form.put(stardust.route('settings.role.update', [props.role.id]));
|
||||||
|
// await router.put(stardust.route('settings.role.update', [props.role.id]), form);
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ const submit = async () => {
|
||||||
<!-- <CardBox form @submit.prevent="form.put(stardust.route('role.update', [props.role.id]))"> -->
|
<!-- <CardBox form @submit.prevent="form.put(stardust.route('role.update', [props.role.id]))"> -->
|
||||||
<CardBox form @submit.prevent="submit()">
|
<CardBox form @submit.prevent="submit()">
|
||||||
<FormField label="Name" :class="{ 'text-red-400': form.errors.name }">
|
<FormField label="Name" :class="{ 'text-red-400': form.errors.name }">
|
||||||
<FormControl v-model="form.name" type="text" placeholder="Enter Name" required :error="form.errors.name" is-read-only="true">
|
<FormControl v-model="form.name" type="text" placeholder="Enter Name" required :error="form.errors.name" :is-read-only=true>
|
||||||
<div class="text-red-400 text-sm" v-if="form.errors.name">
|
<div class="text-red-400 text-sm" v-if="form.errors.name">
|
||||||
{{ form.errors.name }}
|
{{ form.errors.name }}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<!-- <SectionFullScreen v-slot="{ cardClass }" :bg="'greenBlue'"> -->
|
<!-- <SectionFullScreen v-slot="{ cardClass }" :bg="'greenBlue'"> -->
|
||||||
<SectionFullScreen v-slot="{ cardClass }">
|
<SectionFullScreen v-slot="{ cardClass }">
|
||||||
<a class="text-2xl font-semibold flex justify-center items-center mb-8 lg:mb-10">
|
<a class="text-2xl font-semibold flex justify-center items-center mb-8 lg:mb-10">
|
||||||
<img src="/logo.svg" class="h-10 mr-4" alt="Windster Logo" />
|
<img src="../../logo.svg" class="h-10 mr-4" alt="Windster Logo" />
|
||||||
<!-- <span class="self-center text-2xl font-bold whitespace-nowrap">Tethys</span> -->
|
<!-- <span class="self-center text-2xl font-bold whitespace-nowrap">Tethys</span> -->
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
|
@ -4,10 +4,10 @@
|
||||||
<h1 class="text-xl font-bold">SKOS Browser</h1>
|
<h1 class="text-xl font-bold">SKOS Browser</h1>
|
||||||
<div class="flex space-x-2">
|
<div class="flex space-x-2">
|
||||||
<button @click="updateApp" title="Update the application">
|
<button @click="updateApp" title="Update the application">
|
||||||
<img src="/Resources/Images/refresh.png" alt="Update" class="w-4 h-4" />
|
<!-- <img src="/Resources/Images/refresh.png" alt="Update" class="w-4 h-4" /> -->
|
||||||
</button>
|
</button>
|
||||||
<button @click="showInfo" title="Info">
|
<button @click="showInfo" title="Info">
|
||||||
<img src="/Resources/Images/info.png" alt="Info" class="w-4 h-4" />
|
<!-- <img src="/Resources/Images/info.png" alt="Info" class="w-4 h-4" /> -->
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
|
@ -45,7 +45,7 @@ import { LayerOptions } from '@/Components/Map/LayerOptions';
|
||||||
import TableKeywords from '@/Components/TableKeywords.vue';
|
import TableKeywords from '@/Components/TableKeywords.vue';
|
||||||
import NotificationBar from '@/Components/NotificationBar.vue';
|
import NotificationBar from '@/Components/NotificationBar.vue';
|
||||||
import FileUploadComponent from '@/Components/FileUpload.vue';
|
import FileUploadComponent from '@/Components/FileUpload.vue';
|
||||||
import Person from '#models/person';
|
import type Person from '#models/person';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
licenses: {
|
licenses: {
|
||||||
|
|
|
@ -9,8 +9,8 @@ import { StyleService } from '@/Stores/style.service';
|
||||||
import { LayoutService } from '@/Stores/layout';
|
import { LayoutService } from '@/Stores/layout';
|
||||||
import { LocaleStore } from '@/Stores/locale';
|
import { LocaleStore } from '@/Stores/locale';
|
||||||
import { darkModeKey, styleKey } from '@/config';
|
import { darkModeKey, styleKey } from '@/config';
|
||||||
// import type { DefineComponent } from 'vue';
|
import type { DefineComponent } from 'vue';
|
||||||
// import { resolvePageComponent } from '@adonisjs/inertia/helpers';
|
import { resolvePageComponent } from '@adonisjs/inertia/helpers';
|
||||||
const pinia = createPinia();
|
const pinia = createPinia();
|
||||||
// import i18n from './i18n';
|
// import i18n from './i18n';
|
||||||
import { EmitterPlugin } from '@/EmitterDirective';
|
import { EmitterPlugin } from '@/EmitterDirective';
|
||||||
|
@ -37,32 +37,19 @@ createInertiaApp({
|
||||||
// color: '#4B5563',
|
// color: '#4B5563',
|
||||||
color: '#22C55E',
|
color: '#22C55E',
|
||||||
},
|
},
|
||||||
// Webpack
|
// Webpack
|
||||||
// resolve: (name) => require(`./Pages/${name}`),
|
// resolve: async (name: string) => {
|
||||||
// resolve: (name) => require(`./Pages/${name}.vue`),
|
// // Dynamically import the Vue component using import
|
||||||
// add default layout
|
// const { default: page } = await import(`./Pages/${name}.vue`);
|
||||||
// resolve: (name) => {
|
// // const page = require(`./Pages/${name}.vue`).default;
|
||||||
// const page = require(`./Pages/${name}.vue`).default;
|
|
||||||
// // if (!page.layout) {
|
// // if (!page.layout) {
|
||||||
// // page.layout = DefaultLayout;
|
// // page.layout = DefaultLayout;
|
||||||
// // }
|
// // }
|
||||||
// return page;
|
// return page;
|
||||||
// },
|
// },
|
||||||
resolve: async (name: string) => {
|
resolve: (name) => {
|
||||||
// Dynamically import the Vue component using import
|
return resolvePageComponent(`./Pages/${name}.vue`, import.meta.glob<DefineComponent>('./Pages/**/*.vue'));
|
||||||
const { default: page } = await import(`./Pages/${name}.vue`);
|
|
||||||
// const page = require(`./Pages/${name}.vue`).default;
|
|
||||||
// if (!page.layout) {
|
|
||||||
// page.layout = DefaultLayout;
|
|
||||||
// }
|
|
||||||
return page;
|
|
||||||
},
|
},
|
||||||
// resolve: (name) => {
|
|
||||||
// return resolvePageComponent(
|
|
||||||
// `./Pages/${name}.vue`,
|
|
||||||
// import.meta.glob<DefineComponent>('./pages/**/*.vue'),
|
|
||||||
// )
|
|
||||||
// },
|
|
||||||
|
|
||||||
setup({ el, App, props, plugin }) {
|
setup({ el, App, props, plugin }) {
|
||||||
const app = createApp({ render: () => h(App, props) })
|
const app = createApp({ render: () => h(App, props) })
|
||||||
|
@ -72,21 +59,16 @@ createInertiaApp({
|
||||||
.use(EmitterPlugin);
|
.use(EmitterPlugin);
|
||||||
// .component('inertia-link', Link)
|
// .component('inertia-link', Link)
|
||||||
|
|
||||||
|
// Listen for navigation event to handle layout changes
|
||||||
// Listen for navigation event to handle layout changes
|
// window.addEventListener('inertia:navigate', () => {
|
||||||
// window.addEventListener('inertia:navigate', () => {
|
// layoutService.isAsideMobileExpanded = false;
|
||||||
// layoutService.isAsideMobileExpanded = false;
|
// layoutService.isAsideLgActive = false;
|
||||||
// layoutService.isAsideLgActive = false;
|
// });
|
||||||
// });
|
|
||||||
|
|
||||||
|
|
||||||
asyncPlugin.install('settings').then(() => {
|
asyncPlugin.install('settings').then(() => {
|
||||||
app.mount(el);
|
app.mount(el);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const styleService = StyleService(pinia);
|
const styleService = StyleService(pinia);
|
||||||
|
|
183
resources/js/logo.svg
Normal file
183
resources/js/logo.svg
Normal file
|
@ -0,0 +1,183 @@
|
||||||
|
<!-- <svg width="60" height="59" viewBox="0 0 60 59" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path
|
||||||
|
d="M22.0604 27.0103C29.7333 23.0893 35.8474 16.6142 39.6254 8.51905C40.1123 7.47585 39.871 6.25371 39.3648 5.21976C38.1966 2.83369 37.9273 0.35731 31.5792 1.07481L29.0769 1.19405C30.0128 1.19405 29.5449 1.19405 29.0769 1.19405C26.2213 9.83921 20.8705 16.9667 13.0175 20.9078C7.54419 23.7048 3.49869 28.7902 1.59493 34.8927L1.08063 36.5412C1.02718 36.7125 0.953783 36.7439 1.03271 36.905V36.905C1.69551 38.2585 2.41237 37.8338 1.24774 36.8773C-0.0162787 35.8391 4.54649 41.9692 8.20235 42.3859C8.98846 42.4755 9.62624 41.8869 9.99718 41.188C12.8897 35.7384 16.5983 29.7497 22.0604 27.0103Z"
|
||||||
|
fill="#3798A6" />
|
||||||
|
<path
|
||||||
|
d="M54.293 18.2545C52.9177 18.0829 51.6326 19.0064 50.8501 20.1503C46.5712 26.4051 40.9276 31.4619 34.0992 34.9362C28.0309 37.9875 23.3905 43.7085 21.2488 50.5738V50.5738C20.8823 51.9051 21.321 53.3053 22.0817 54.4577C22.8541 55.6279 23.2013 56.5055 25.0387 57.2056C25.2331 57.2797 25.4363 57.33 25.6412 57.3659L29.6561 58.0696C30.1014 58.1477 30.5803 57.9029 30.6385 57.4546V57.4546C30.6522 57.3488 30.6656 57.26 30.6995 57.1589C33.5732 48.5843 39.3809 41.6511 47.1875 37.7332C52.0449 35.251 56.5674 29.4173 58.7712 23.8703C59.2774 22.5963 58.9189 21.1675 57.9822 20.1666V20.1666C57.743 19.9111 57.4687 19.6866 57.1678 19.5079C55.698 18.635 54.964 18.3382 54.293 18.2545Z"
|
||||||
|
fill="#3798A6" />
|
||||||
|
<path
|
||||||
|
d="M17.8462 46.7817C18.4399 48.0437 20.2086 47.5179 20.8231 46.2658C23.9715 39.8511 29.07 34.8495 35.2979 31.6915C41.4799 28.5111 46.6705 23.683 50.3399 17.7735C50.6236 17.3166 50.7683 16.7849 50.7594 16.2472C50.658 10.1604 49.3958 9.67645 47.3183 8.9339C45.5442 8.29976 43.3135 8.84337 42.332 10.4516C37.9465 17.6372 31.7406 23.4608 24.3513 27.2417C19.6664 29.5615 15.8593 33.5228 13.4571 38.3374C13.2609 38.7306 13.1639 39.1681 13.1742 39.6074C13.3408 46.715 16.2215 43.2109 17.84 46.768C17.8439 46.7766 17.8422 46.773 17.8462 46.7817V46.7817Z"
|
||||||
|
fill="#3798A6" />
|
||||||
|
</svg> -->
|
||||||
|
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||||
|
y="0px" viewBox="0 0 626.4 224.7" style="enable-background:new 0 0 626.4 224.7;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0 {
|
||||||
|
fill: #336699;
|
||||||
|
}
|
||||||
|
|
||||||
|
.st1 {
|
||||||
|
fill: #00FFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
.st2 {
|
||||||
|
fill: #30D5C8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.st3 {
|
||||||
|
opacity: 0.8;
|
||||||
|
fill: #336699;
|
||||||
|
}
|
||||||
|
|
||||||
|
.st4 {
|
||||||
|
opacity: 0.5;
|
||||||
|
fill: #336699;
|
||||||
|
}
|
||||||
|
|
||||||
|
.st5 {
|
||||||
|
fill: #393939;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<path class="st0"
|
||||||
|
d="M215.3,69.1l-4.4,19.2h-47.1l-4.2,18h43.7l-4.5,19.2h-43.6l-5.9,25.4h47L192,170h-73.1l23.3-100.9H215.3z" />
|
||||||
|
<path class="st0" d="M311.6,88.6h-31.4L261.4,170h-26.1L254,88.6h-31.5l4.5-19.5h89L311.6,88.6z" />
|
||||||
|
<path class="st0" d="M422.1,69.1L398.9,170h-26.1l10.3-44.6h-38.3L334.4,170h-26.1l23.3-100.9h26.1l-8.6,37.1h38.3l8.6-37.1H422.1
|
||||||
|
z" />
|
||||||
|
<path class="st0"
|
||||||
|
d="M536.7,69.1l-51.4,61.9l-9.1,39h-26.2l8.8-37.8l-23.2-63.1h27.9l13,39.6l30.2-39.6H536.7z" />
|
||||||
|
<path class="st0" d="M563.8,171.8c-8.6,0-16.3-0.7-23.1-2.2c-6.8-1.5-12.6-3.3-17.5-5.6l5.2-24.2h2.8c4.7,4.2,10.1,7.5,16.4,9.9
|
||||||
|
c6.3,2.3,13,3.5,20.3,3.5c7.4,0,12.9-1,16.3-3c3.5-2,5.2-4.9,5.2-8.6c0-1.4-0.3-2.6-0.8-3.6c-0.6-1-1.7-2-3.3-3
|
||||||
|
c-1.6-1-3.9-2-6.7-2.9c-2.8-1-6.5-2.1-10.9-3.4c-4.9-1.4-9.3-2.8-13.2-4.4c-3.9-1.6-7.2-3.5-10-5.6c-2.8-2.2-4.8-4.8-6.3-7.7
|
||||||
|
c-1.4-2.9-2.1-6.3-2.1-10.4c0-10.1,4.5-18.2,13.4-24.2c8.9-6,21.1-9,36.6-9c7.5,0,14.5,0.6,21.1,1.8c6.6,1.2,12.2,2.9,16.8,4.9
|
||||||
|
l-4.9,23.2h-2.8c-3.5-3.2-8.2-5.9-13.9-8.1c-5.8-2.2-12.1-3.3-18.9-3.3c-6.7,0-11.9,1-15.5,2.9c-3.7,1.9-5.5,4.6-5.5,8
|
||||||
|
c0,1.6,0.3,2.9,0.8,3.9c0.5,1,1.6,2.1,3.3,3c1.4,0.9,3.7,1.9,6.8,2.9c3.1,1.1,6.8,2.2,11,3.3c11.3,3,19.4,6.6,24.2,10.6
|
||||||
|
s7.2,9.6,7.2,16.5c0,5.8-1.3,11-3.9,15.4c-2.6,4.4-6.2,8-10.8,10.8c-4.8,2.9-10.3,5.1-16.5,6.4
|
||||||
|
C578.5,171.1,571.6,171.8,563.8,171.8z" />
|
||||||
|
</g>
|
||||||
|
<path class="st1" d="M539.2,37.1" />
|
||||||
|
<path class="st1" d="M539.2,37.1" />
|
||||||
|
<polygon class="st2" points="24,213.8 57.7,213.8 98.2,44.6 12.5,45.1 3.7,81 56.7,80.6 " />
|
||||||
|
<polygon class="st0" points="72.1,170.5 112.4,2.8 199.8,2.8 192.4,39.2 137.1,39.2 105.8,170.1 " />
|
||||||
|
<polygon class="st0" points="207,2.6 225.9,2.6 218.6,39 199.9,39 " />
|
||||||
|
<polygon class="st3" points="233.2,2.9 252.1,2.9 244.7,39.4 226.1,39.4 " />
|
||||||
|
<polygon class="st4" points="259.2,2.9 278.1,2.9 270.8,39.4 252.1,39.4 " />
|
||||||
|
<g>
|
||||||
|
<path class="st5" d="M97.4,213.7h-4.7l-8-12.1h-5.8l-2.8,12.1H72l7-30.2h8.3c1.9,0,3.4,0.1,4.5,0.4c1.2,0.2,2.2,0.7,3,1.3
|
||||||
|
c0.8,0.6,1.4,1.2,1.8,2c0.4,0.8,0.7,1.8,0.7,2.9c0,2.5-0.8,4.7-2.4,6.6c-1.6,1.9-3.7,3.2-6.2,4L97.4,213.7z M92.9,191
|
||||||
|
c0-0.7-0.1-1.3-0.3-1.8c-0.2-0.5-0.6-0.9-1-1.3c-0.5-0.4-1.2-0.7-1.9-0.9c-0.7-0.2-1.7-0.2-2.8-0.2h-4.6l-2.7,11.6h4.3
|
||||||
|
c1.3,0,2.5-0.1,3.5-0.4c1-0.2,1.9-0.7,2.7-1.3c0.9-0.7,1.6-1.5,2.1-2.5C92.6,193.2,92.9,192.1,92.9,191z" />
|
||||||
|
<path class="st5" d="M111.5,214.2c-3.2,0-5.6-0.7-7.4-2.2c-1.8-1.5-2.7-3.6-2.7-6.5c0-4.2,1.3-7.7,4-10.7c2.6-3,5.9-4.5,9.8-4.5
|
||||||
|
c2.6,0,4.6,0.6,5.9,1.9c1.4,1.3,2.1,3.1,2.1,5.4c0,0.4-0.1,1-0.2,1.9c-0.1,0.9-0.3,1.9-0.6,3.1h-16.8c-0.1,0.4-0.1,0.8-0.2,1.2
|
||||||
|
c0,0.4-0.1,0.7-0.1,1.1c0,1.9,0.6,3.4,1.8,4.5c1.2,1.1,2.8,1.6,5,1.6c1.5,0,3-0.3,4.6-0.9s2.9-1.2,4-2h0.2l-0.8,4.1
|
||||||
|
c-0.7,0.2-1.3,0.5-1.8,0.7c-0.5,0.2-1.2,0.4-2.1,0.6c-0.8,0.2-1.6,0.4-2.2,0.5C113.3,214.2,112.5,214.2,111.5,214.2z M119.2,199.9
|
||||||
|
c0.1-0.4,0.1-0.7,0.1-1c0-0.3,0-0.6,0-0.9c0-1.4-0.4-2.6-1.2-3.4c-0.8-0.8-2.1-1.2-3.8-1.2c-1.9,0-3.6,0.6-5.1,1.8
|
||||||
|
c-1.5,1.2-2.5,2.8-3,4.7H119.2z" />
|
||||||
|
<path class="st5" d="M132.8,214.3c-1.7,0-3.2-0.2-4.6-0.6s-2.5-0.9-3.4-1.4l0.9-4.1h0.2c0.3,0.2,0.7,0.5,1.1,0.9
|
||||||
|
c0.5,0.3,1,0.7,1.7,1c0.6,0.3,1.4,0.6,2.2,0.8c0.8,0.2,1.7,0.3,2.6,0.3c1.9,0,3.4-0.4,4.5-1.1c1.1-0.7,1.6-1.7,1.6-3.1
|
||||||
|
c0-0.7-0.3-1.3-0.8-1.7c-0.6-0.4-1.4-0.7-2.4-0.9c-0.5-0.1-1.2-0.3-1.9-0.4c-0.7-0.1-1.5-0.3-2.3-0.5c-1.6-0.4-2.8-1.1-3.5-1.9
|
||||||
|
c-0.8-0.8-1.1-1.9-1.1-3.1c0-1.1,0.2-2,0.7-3c0.5-0.9,1.1-1.8,2.1-2.5c0.9-0.7,2-1.3,3.3-1.8c1.3-0.5,2.8-0.7,4.5-0.7
|
||||||
|
c1.4,0,2.7,0.2,4.1,0.5c1.4,0.3,2.5,0.8,3.3,1.3l-0.8,3.9h-0.2c-0.2-0.2-0.5-0.4-1-0.7c-0.4-0.3-1-0.6-1.7-0.9
|
||||||
|
c-0.6-0.3-1.3-0.5-2.1-0.7c-0.8-0.2-1.6-0.3-2.4-0.3c-1.7,0-3.1,0.4-4.1,1.1s-1.6,1.7-1.6,2.9c0,0.7,0.3,1.2,0.8,1.7
|
||||||
|
c0.5,0.5,1.3,0.8,2.4,1.1c0.7,0.2,1.4,0.3,2.1,0.5c0.7,0.1,1.4,0.3,2.1,0.5c1.6,0.4,2.8,1,3.6,1.8s1.2,1.9,1.2,3.1
|
||||||
|
c0,1-0.2,2.1-0.7,3.1c-0.5,1-1.2,1.9-2.2,2.6c-1,0.8-2.1,1.4-3.5,1.8C136,214,134.5,214.3,132.8,214.3z" />
|
||||||
|
<path class="st5" d="M158.2,214.2c-3.2,0-5.6-0.7-7.4-2.2c-1.8-1.5-2.7-3.6-2.7-6.5c0-4.2,1.3-7.7,4-10.7c2.6-3,5.9-4.5,9.8-4.5
|
||||||
|
c2.6,0,4.6,0.6,5.9,1.9c1.4,1.3,2.1,3.1,2.1,5.4c0,0.4-0.1,1-0.2,1.9c-0.1,0.9-0.3,1.9-0.6,3.1h-16.8c-0.1,0.4-0.1,0.8-0.2,1.2
|
||||||
|
c0,0.4-0.1,0.7-0.1,1.1c0,1.9,0.6,3.4,1.8,4.5c1.2,1.1,2.8,1.6,5,1.6c1.5,0,3-0.3,4.6-0.9c1.6-0.6,2.9-1.2,4-2h0.2l-0.8,4.1
|
||||||
|
c-0.7,0.2-1.3,0.5-1.8,0.7c-0.5,0.2-1.2,0.4-2.1,0.6c-0.8,0.2-1.6,0.4-2.2,0.5C160,214.2,159.2,214.2,158.2,214.2z M165.9,199.9
|
||||||
|
c0.1-0.4,0.1-0.7,0.1-1c0-0.3,0-0.6,0-0.9c0-1.4-0.4-2.6-1.2-3.4c-0.8-0.8-2.1-1.2-3.8-1.2c-1.9,0-3.6,0.6-5.1,1.8
|
||||||
|
c-1.5,1.2-2.5,2.8-3,4.7H165.9z" />
|
||||||
|
<path class="st5"
|
||||||
|
d="M186.8,211.3c-0.4,0.2-0.9,0.5-1.5,0.9c-0.6,0.4-1.3,0.7-1.9,1c-0.7,0.3-1.5,0.6-2.3,0.8
|
||||||
|
c-0.9,0.2-1.8,0.3-3,0.3c-1.8,0-3.3-0.5-4.4-1.6c-1.1-1-1.7-2.4-1.7-4.1c0-1.8,0.4-3.3,1.2-4.6c0.8-1.2,2-2.2,3.5-3
|
||||||
|
c1.5-0.8,3.4-1.3,5.6-1.7c2.2-0.3,4.6-0.6,7.4-0.6c0.1-0.4,0.2-0.7,0.2-1c0.1-0.3,0.1-0.6,0.1-0.9c0-0.6-0.1-1.2-0.4-1.6
|
||||||
|
c-0.3-0.4-0.6-0.7-1.1-1c-0.5-0.2-1-0.4-1.7-0.5c-0.6-0.1-1.3-0.1-2.1-0.1c-1.2,0-2.5,0.2-4,0.6c-1.5,0.4-2.7,0.7-3.6,1.1H177
|
||||||
|
l0.8-3.8c0.8-0.2,1.9-0.4,3.4-0.7c1.5-0.3,2.9-0.4,4.3-0.4c2.8,0,5,0.4,6.4,1.3c1.4,0.9,2.1,2.3,2.1,4.2c0,0.4,0,0.8-0.1,1.2
|
||||||
|
s-0.1,0.8-0.2,1.2l-3.6,15.4h-3.8L186.8,211.3z M189.1,201.8c-2.1,0.1-4,0.2-5.6,0.5c-1.6,0.2-3,0.6-4,1c-1.1,0.4-1.9,1.1-2.5,1.8
|
||||||
|
c-0.6,0.8-0.9,1.7-0.9,2.9c0,1,0.3,1.7,1,2.2c0.7,0.5,1.7,0.8,3.1,0.8c1.2,0,2.5-0.3,3.8-0.8c1.3-0.5,2.5-1.2,3.6-2L189.1,201.8z" />
|
||||||
|
<path class="st5" d="M215.9,195.1h-0.2c-0.5-0.1-1-0.2-1.5-0.3c-0.5-0.1-1-0.1-1.7-0.1c-1.3,0-2.5,0.3-3.8,0.9
|
||||||
|
c-1.3,0.6-2.5,1.3-3.6,2.1l-3.7,16.1h-3.9l5.2-22.7h3.9l-0.8,3.3c1.8-1.3,3.3-2.1,4.6-2.6c1.3-0.5,2.5-0.7,3.6-0.7
|
||||||
|
c0.7,0,1.2,0,1.4,0.1c0.3,0,0.7,0.1,1.3,0.2L215.9,195.1z" />
|
||||||
|
<path class="st5" d="M225.2,214.2c-1.4,0-2.7-0.2-3.8-0.5c-1.1-0.3-2.1-0.9-2.9-1.6c-0.8-0.7-1.4-1.6-1.9-2.7
|
||||||
|
c-0.4-1.1-0.7-2.3-0.7-3.7c0-2.1,0.3-4.1,1-5.9c0.7-1.8,1.6-3.5,2.8-4.9c1.2-1.4,2.6-2.4,4.4-3.2c1.7-0.8,3.6-1.2,5.6-1.2
|
||||||
|
c1.3,0,2.6,0.2,3.8,0.5c1.2,0.4,2.2,0.8,3.1,1.3l-0.8,4.1h-0.2c-0.3-0.2-0.6-0.5-1-0.8c-0.4-0.3-0.9-0.6-1.4-0.9
|
||||||
|
c-0.6-0.3-1.2-0.5-1.9-0.7c-0.7-0.2-1.5-0.3-2.3-0.3c-2.6,0-4.8,1.1-6.5,3.3c-1.7,2.2-2.5,4.9-2.5,8.1c0,1.9,0.5,3.4,1.5,4.4
|
||||||
|
c1,1,2.4,1.5,4.2,1.5c0.9,0,1.7-0.1,2.6-0.4c0.9-0.2,1.6-0.5,2.2-0.8c0.7-0.3,1.3-0.6,1.9-1c0.6-0.3,1-0.6,1.2-0.8h0.2l-0.8,4.2
|
||||||
|
c-1.2,0.5-2.4,1-3.8,1.4C227.9,214,226.5,214.2,225.2,214.2z" />
|
||||||
|
<path class="st5" d="M259.9,196.2c0,0.3,0,0.8-0.1,1.3c-0.1,0.6-0.1,1-0.3,1.5l-3.4,14.7h-3.8l3-12.9c0.2-0.7,0.3-1.3,0.4-1.9
|
||||||
|
c0.1-0.5,0.1-1.1,0.1-1.6c0-1.1-0.3-2-0.9-2.6c-0.6-0.6-1.6-0.9-3.1-0.9c-1,0-2.2,0.3-3.4,0.9c-1.2,0.6-2.5,1.2-3.7,2l-3.9,16.9
|
||||||
|
h-3.8l7.3-31.6h3.8l-2.7,11.4c1.5-1,2.8-1.8,4.1-2.3c1.3-0.5,2.6-0.8,3.9-0.8c2,0,3.5,0.5,4.6,1.5
|
||||||
|
C259.4,192.9,259.9,194.3,259.9,196.2z" />
|
||||||
|
<path class="st5" d="M308.1,195.1c0,3.3-0.8,6.4-2.5,9.4c-1.7,3-4,5.2-6.9,6.8c-1.8,1-3.6,1.6-5.5,1.9c-1.9,0.3-4,0.5-6.4,0.5
|
||||||
|
h-8.2l7-30.2h7.1c2.2,0,4.2,0.2,6,0.5c1.8,0.3,3.5,1,5,2c1.4,1,2.5,2.2,3.3,3.8C307.7,191.2,308.1,193,308.1,195.1z M303.8,195.4
|
||||||
|
c0-1.5-0.3-2.9-0.8-4c-0.6-1.1-1.4-2-2.5-2.8c-1.1-0.7-2.3-1.2-3.5-1.5c-1.3-0.2-2.8-0.4-4.8-0.4h-3.4l-5.5,23.6h4.2
|
||||||
|
c1.9,0,3.7-0.2,5.2-0.5c1.5-0.3,3-0.9,4.3-1.6c2.2-1.2,3.9-3,5-5.4C303.3,200.6,303.8,198.1,303.8,195.4z" />
|
||||||
|
<path class="st5"
|
||||||
|
d="M324.7,211.3c-0.4,0.2-0.9,0.5-1.5,0.9c-0.6,0.4-1.3,0.7-1.9,1c-0.7,0.3-1.5,0.6-2.3,0.8
|
||||||
|
c-0.9,0.2-1.8,0.3-3,0.3c-1.8,0-3.3-0.5-4.4-1.6c-1.1-1-1.7-2.4-1.7-4.1c0-1.8,0.4-3.3,1.2-4.6c0.8-1.2,2-2.2,3.5-3
|
||||||
|
c1.5-0.8,3.4-1.3,5.6-1.7c2.2-0.3,4.6-0.6,7.4-0.6c0.1-0.4,0.2-0.7,0.2-1c0.1-0.3,0.1-0.6,0.1-0.9c0-0.6-0.1-1.2-0.4-1.6
|
||||||
|
c-0.3-0.4-0.6-0.7-1.1-1c-0.5-0.2-1-0.4-1.7-0.5c-0.6-0.1-1.3-0.1-2.1-0.1c-1.2,0-2.5,0.2-4,0.6c-1.5,0.4-2.7,0.7-3.6,1.1h-0.2
|
||||||
|
l0.8-3.8c0.8-0.2,1.9-0.4,3.4-0.7c1.5-0.3,2.9-0.4,4.3-0.4c2.8,0,5,0.4,6.4,1.3c1.4,0.9,2.1,2.3,2.1,4.2c0,0.4,0,0.8-0.1,1.2
|
||||||
|
s-0.1,0.8-0.2,1.2l-3.6,15.4h-3.8L324.7,211.3z M327,201.8c-2.1,0.1-4,0.2-5.6,0.5c-1.6,0.2-3,0.6-4,1c-1.1,0.4-1.9,1.1-2.5,1.8
|
||||||
|
c-0.6,0.8-0.9,1.7-0.9,2.9c0,1,0.3,1.7,1,2.2c0.7,0.5,1.7,0.8,3.1,0.8c1.2,0,2.5-0.3,3.8-0.8c1.3-0.5,2.5-1.2,3.6-2L327,201.8z" />
|
||||||
|
<path class="st5" d="M352.5,191l-0.7,3.1h-7.9l-2.4,10.5c-0.1,0.5-0.3,1.1-0.4,1.8c-0.1,0.7-0.2,1.2-0.2,1.6c0,1,0.3,1.7,0.8,2.2
|
||||||
|
c0.5,0.5,1.4,0.7,2.8,0.7c0.6,0,1.2-0.1,2-0.3c0.8-0.2,1.3-0.3,1.6-0.4h0.2l-0.7,3.3c-0.8,0.2-1.6,0.3-2.4,0.5
|
||||||
|
c-0.9,0.1-1.6,0.2-2.3,0.2c-1.9,0-3.3-0.4-4.4-1.2c-1-0.8-1.5-2.1-1.5-3.9c0-0.4,0-0.9,0.1-1.3c0.1-0.4,0.1-0.9,0.3-1.5l2.8-12.2
|
||||||
|
h-2.6l0.7-3.1h2.6l1.5-6.5h3.9l-1.5,6.5H352.5z" />
|
||||||
|
<path class="st5"
|
||||||
|
d="M366.3,211.3c-0.4,0.2-0.9,0.5-1.5,0.9c-0.6,0.4-1.3,0.7-1.9,1c-0.7,0.3-1.5,0.6-2.3,0.8
|
||||||
|
c-0.9,0.2-1.8,0.3-3,0.3c-1.8,0-3.3-0.5-4.4-1.6c-1.1-1-1.7-2.4-1.7-4.1c0-1.8,0.4-3.3,1.2-4.6c0.8-1.2,2-2.2,3.5-3
|
||||||
|
c1.5-0.8,3.4-1.3,5.6-1.7c2.2-0.3,4.6-0.6,7.4-0.6c0.1-0.4,0.2-0.7,0.2-1c0.1-0.3,0.1-0.6,0.1-0.9c0-0.6-0.1-1.2-0.4-1.6
|
||||||
|
c-0.3-0.4-0.6-0.7-1.1-1c-0.5-0.2-1-0.4-1.7-0.5c-0.6-0.1-1.3-0.1-2.1-0.1c-1.2,0-2.5,0.2-4,0.6c-1.5,0.4-2.7,0.7-3.6,1.1h-0.2
|
||||||
|
l0.8-3.8c0.8-0.2,1.9-0.4,3.4-0.7c1.5-0.3,2.9-0.4,4.3-0.4c2.8,0,5,0.4,6.4,1.3c1.4,0.9,2.1,2.3,2.1,4.2c0,0.4,0,0.8-0.1,1.2
|
||||||
|
s-0.1,0.8-0.2,1.2l-3.6,15.4h-3.8L366.3,211.3z M368.5,201.8c-2.1,0.1-4,0.2-5.6,0.5c-1.6,0.2-3,0.6-4,1c-1.1,0.4-1.9,1.1-2.5,1.8
|
||||||
|
c-0.6,0.8-0.9,1.7-0.9,2.9c0,1,0.3,1.7,1,2.2c0.7,0.5,1.7,0.8,3.1,0.8c1.2,0,2.5-0.3,3.8-0.8c1.3-0.5,2.5-1.2,3.6-2L368.5,201.8z" />
|
||||||
|
<path class="st5" d="M417.4,213.7h-4.7l-8-12.1h-5.8l-2.8,12.1H392l7-30.2h8.3c1.9,0,3.4,0.1,4.5,0.4c1.2,0.2,2.2,0.7,3,1.3
|
||||||
|
c0.8,0.6,1.4,1.2,1.8,2c0.4,0.8,0.7,1.8,0.7,2.9c0,2.5-0.8,4.7-2.4,6.6c-1.6,1.9-3.7,3.2-6.2,4L417.4,213.7z M412.8,191
|
||||||
|
c0-0.7-0.1-1.3-0.3-1.8c-0.2-0.5-0.6-0.9-1-1.3c-0.5-0.4-1.2-0.7-1.9-0.9c-0.7-0.2-1.7-0.2-2.8-0.2h-4.6l-2.7,11.6h4.3
|
||||||
|
c1.3,0,2.5-0.1,3.5-0.4c1-0.2,1.9-0.7,2.7-1.3c0.9-0.7,1.6-1.5,2.1-2.5C412.6,193.2,412.8,192.1,412.8,191z" />
|
||||||
|
<path class="st5" d="M431.5,214.2c-3.2,0-5.6-0.7-7.4-2.2c-1.8-1.5-2.7-3.6-2.7-6.5c0-4.2,1.3-7.7,4-10.7s5.9-4.5,9.8-4.5
|
||||||
|
c2.6,0,4.6,0.6,5.9,1.9c1.4,1.3,2.1,3.1,2.1,5.4c0,0.4-0.1,1-0.2,1.9c-0.1,0.9-0.3,1.9-0.6,3.1h-16.8c-0.1,0.4-0.1,0.8-0.2,1.2
|
||||||
|
c0,0.4-0.1,0.7-0.1,1.1c0,1.9,0.6,3.4,1.8,4.5c1.2,1.1,2.8,1.6,5,1.6c1.5,0,3-0.3,4.6-0.9c1.6-0.6,2.9-1.2,4-2h0.2l-0.8,4.1
|
||||||
|
c-0.7,0.2-1.3,0.5-1.8,0.7s-1.2,0.4-2.1,0.6c-0.8,0.2-1.6,0.4-2.2,0.5C433.3,214.2,432.5,214.2,431.5,214.2z M439.2,199.9
|
||||||
|
c0.1-0.4,0.1-0.7,0.1-1c0-0.3,0-0.6,0-0.9c0-1.4-0.4-2.6-1.2-3.4c-0.8-0.8-2.1-1.2-3.8-1.2c-1.9,0-3.6,0.6-5.1,1.8
|
||||||
|
c-1.5,1.2-2.5,2.8-3,4.7H439.2z" />
|
||||||
|
<path class="st5" d="M468.8,198.2c0,2.2-0.4,4.4-1.1,6.3c-0.7,2-1.6,3.7-2.8,5c-1.2,1.4-2.5,2.5-4.1,3.4c-1.6,0.8-3.2,1.2-5,1.2
|
||||||
|
c-1.2,0-2.4-0.1-3.4-0.4s-2-0.7-2.8-1.2l-2.2,9.5h-3.8l7.2-31h3.8l-0.6,2.4c1.3-0.9,2.5-1.6,3.7-2.2c1.2-0.6,2.6-0.8,4.1-0.8
|
||||||
|
c2.2,0,3.9,0.7,5.1,2.1C468.2,193.8,468.8,195.7,468.8,198.2z M464.8,198.9c0-1.6-0.4-2.9-1.1-3.7c-0.7-0.9-1.8-1.3-3.4-1.3
|
||||||
|
c-1.1,0-2.3,0.3-3.5,0.8c-1.2,0.6-2.3,1.2-3.4,1.9l-3,12.9c0.9,0.5,1.7,0.8,2.5,1.1c0.8,0.2,1.8,0.3,2.9,0.3c1.4,0,2.7-0.3,3.8-1
|
||||||
|
s2.1-1.6,2.8-2.6c0.8-1.1,1.4-2.4,1.7-3.8C464.6,202,464.8,200.5,464.8,198.9z" />
|
||||||
|
<path class="st5" d="M494.1,199.1c0,2-0.3,4-0.9,5.8c-0.6,1.9-1.5,3.5-2.7,4.9c-1.2,1.4-2.6,2.6-4.1,3.4c-1.6,0.8-3.4,1.2-5.4,1.2
|
||||||
|
c-2.7,0-4.8-0.8-6.3-2.3c-1.5-1.5-2.3-3.7-2.3-6.4c0-2,0.3-4,0.9-5.8c0.6-1.8,1.5-3.5,2.7-4.9c1.1-1.4,2.5-2.5,4.2-3.3
|
||||||
|
c1.6-0.8,3.4-1.2,5.4-1.2c2.6,0,4.7,0.7,6.3,2.2S494.1,196.3,494.1,199.1z M487.8,207.6c0.7-1.1,1.3-2.3,1.7-3.8s0.6-2.9,0.6-4.5
|
||||||
|
c0-1.9-0.5-3.3-1.4-4.3c-0.9-1-2.2-1.5-3.9-1.5c-1.3,0-2.5,0.3-3.6,0.9c-1,0.6-2,1.5-2.7,2.6c-0.7,1.1-1.3,2.3-1.7,3.8
|
||||||
|
c-0.4,1.4-0.6,2.9-0.6,4.5c0,1.9,0.5,3.3,1.4,4.3c0.9,1,2.2,1.5,3.9,1.5c1.3,0,2.5-0.3,3.6-0.9
|
||||||
|
C486.2,209.6,487.1,208.7,487.8,207.6z" />
|
||||||
|
<path class="st5" d="M504.2,214.3c-1.7,0-3.2-0.2-4.6-0.6c-1.3-0.4-2.5-0.9-3.4-1.4l0.9-4.1h0.2c0.3,0.2,0.7,0.5,1.1,0.9
|
||||||
|
c0.5,0.3,1,0.7,1.7,1c0.6,0.3,1.4,0.6,2.2,0.8c0.8,0.2,1.7,0.3,2.6,0.3c1.9,0,3.4-0.4,4.5-1.1s1.6-1.7,1.6-3.1
|
||||||
|
c0-0.7-0.3-1.3-0.8-1.7c-0.6-0.4-1.4-0.7-2.4-0.9c-0.5-0.1-1.2-0.3-1.9-0.4c-0.7-0.1-1.5-0.3-2.3-0.5c-1.6-0.4-2.8-1.1-3.5-1.9
|
||||||
|
c-0.8-0.8-1.1-1.9-1.1-3.1c0-1.1,0.2-2,0.7-3c0.5-0.9,1.1-1.8,2.1-2.5c0.9-0.7,2-1.3,3.3-1.8c1.3-0.5,2.8-0.7,4.5-0.7
|
||||||
|
c1.4,0,2.7,0.2,4.1,0.5c1.4,0.3,2.5,0.8,3.3,1.3l-0.8,3.9H516c-0.2-0.2-0.5-0.4-1-0.7c-0.4-0.3-1-0.6-1.7-0.9
|
||||||
|
c-0.6-0.3-1.3-0.5-2.1-0.7c-0.8-0.2-1.6-0.3-2.4-0.3c-1.7,0-3.1,0.4-4.1,1.1c-1.1,0.7-1.6,1.7-1.6,2.9c0,0.7,0.3,1.2,0.8,1.7
|
||||||
|
c0.5,0.5,1.3,0.8,2.4,1.1c0.7,0.2,1.4,0.3,2.1,0.5c0.7,0.1,1.4,0.3,2.1,0.5c1.6,0.4,2.8,1,3.6,1.8s1.2,1.9,1.2,3.1
|
||||||
|
c0,1-0.2,2.1-0.7,3.1c-0.5,1-1.2,1.9-2.2,2.6c-1,0.8-2.1,1.4-3.5,1.8C507.4,214,505.9,214.3,504.2,214.3z" />
|
||||||
|
<path class="st5" d="M528,191l-5.3,22.7h-3.8l5.3-22.7H528z M530.1,183.3l-0.9,4h-4.3l0.9-4H530.1z" />
|
||||||
|
<path class="st5" d="M547.4,191l-0.7,3.1h-7.9l-2.4,10.5c-0.1,0.5-0.3,1.1-0.4,1.8c-0.1,0.7-0.2,1.2-0.2,1.6c0,1,0.3,1.7,0.8,2.2
|
||||||
|
c0.5,0.5,1.4,0.7,2.8,0.7c0.6,0,1.2-0.1,2-0.3c0.8-0.2,1.3-0.3,1.6-0.4h0.2l-0.7,3.3c-0.8,0.2-1.6,0.3-2.4,0.5
|
||||||
|
c-0.9,0.1-1.6,0.2-2.3,0.2c-1.9,0-3.3-0.4-4.4-1.2c-1-0.8-1.5-2.1-1.5-3.9c0-0.4,0-0.9,0.1-1.3c0.1-0.4,0.1-0.9,0.3-1.5l2.8-12.2
|
||||||
|
h-2.6l0.7-3.1h2.6l1.5-6.5h3.9l-1.5,6.5H547.4z" />
|
||||||
|
<path class="st5" d="M569.2,199.1c0,2-0.3,4-0.9,5.8c-0.6,1.9-1.5,3.5-2.7,4.9c-1.2,1.4-2.6,2.6-4.1,3.4c-1.5,0.8-3.4,1.2-5.4,1.2
|
||||||
|
c-2.7,0-4.8-0.8-6.3-2.3c-1.5-1.5-2.3-3.7-2.3-6.4c0-2,0.3-4,0.9-5.8c0.6-1.8,1.5-3.5,2.7-4.9c1.1-1.4,2.5-2.5,4.2-3.3
|
||||||
|
c1.6-0.8,3.4-1.2,5.4-1.2c2.6,0,4.7,0.7,6.3,2.2C568.4,194.1,569.2,196.3,569.2,199.1z M563,207.6c0.7-1.1,1.3-2.3,1.7-3.8
|
||||||
|
c0.4-1.4,0.6-2.9,0.6-4.5c0-1.9-0.5-3.3-1.4-4.3c-0.9-1-2.2-1.5-3.9-1.5c-1.3,0-2.5,0.3-3.6,0.9c-1,0.6-2,1.5-2.7,2.6
|
||||||
|
c-0.7,1.1-1.3,2.3-1.7,3.8c-0.4,1.4-0.6,2.9-0.6,4.5c0,1.9,0.5,3.3,1.4,4.3c0.9,1,2.2,1.5,3.9,1.5c1.3,0,2.5-0.3,3.6-0.9
|
||||||
|
C561.3,209.6,562.2,208.7,563,207.6z" />
|
||||||
|
<path class="st5" d="M590.6,195.1h-0.2c-0.5-0.1-1.1-0.2-1.5-0.3c-0.5-0.1-1-0.1-1.7-0.1c-1.3,0-2.5,0.3-3.8,0.9
|
||||||
|
c-1.3,0.6-2.5,1.3-3.6,2.1l-3.7,16.1h-3.9l5.2-22.7h3.9l-0.8,3.3c1.8-1.3,3.3-2.1,4.6-2.6c1.3-0.5,2.5-0.7,3.6-0.7
|
||||||
|
c0.7,0,1.2,0,1.4,0.1c0.3,0,0.7,0.1,1.3,0.2L590.6,195.1z" />
|
||||||
|
<path class="st5" d="M594.1,222.1h-4.2l6.6-9.7l-4.1-21.3h4l3.2,16.9l10.9-16.9h4.2L594.1,222.1z" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
|
@ -1,8 +1,8 @@
|
||||||
import type { Translations } from './registry';
|
import type { Translations } from './registry';
|
||||||
import { getLanguage, getBrowserLocale } from './locale';
|
import { getLanguage } from './locale';
|
||||||
import { getAppTranslations, hasAppTranslations, registerAppTranslations, unregisterAppTranslations } from './registry';
|
import { getAppTranslations, registerAppTranslations, unregisterAppTranslations } from './registry';
|
||||||
// import { generateFilePath } from '@nextcloud/router';
|
// import { generateFilePath } from '@nextcloud/router';
|
||||||
import axios from 'axios';
|
// import axios from 'axios';
|
||||||
|
|
||||||
// import DOMPurify from 'dompurify';
|
// import DOMPurify from 'dompurify';
|
||||||
import escapeHTML from 'escape-html';
|
import escapeHTML from 'escape-html';
|
||||||
|
@ -206,7 +206,7 @@ export async function loadTranslations(appName: string) {
|
||||||
try {
|
try {
|
||||||
// Making a GET request using Axios
|
// Making a GET request using Axios
|
||||||
// const response = await axios.get(url);
|
// const response = await axios.get(url);
|
||||||
const response = await import(`@/apps/settings/l18n/${locale}`);
|
const response = await import(`@/apps/settings/l18n/${locale}.js`);
|
||||||
// Check if the response data contains translations
|
// Check if the response data contains translations
|
||||||
const bundle = response.default;
|
const bundle = response.default;
|
||||||
if (typeof bundle.translations === 'object') {
|
if (typeof bundle.translations === 'object') {
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
<input type="hidden" id="initial-state-settings-cronErrors" value="IiI=">
|
<input type="hidden" id="initial-state-settings-cronErrors" value="IiI=">
|
||||||
<input type="hidden" id="initial-state-settings-cliBasedCronPossible" value="dHJ1ZQ==">
|
<input type="hidden" id="initial-state-settings-cliBasedCronPossible" value="dHJ1ZQ==">
|
||||||
<input type="hidden" id="initial-state-settings-cliBasedCronUser" value="Ind3dy1kYXRhIg==">
|
<input type="hidden" id="initial-state-settings-cliBasedCronUser" value="Ind3dy1kYXRhIg==">
|
||||||
|
@vite(['resources/js/app.ts'])
|
||||||
|
|
||||||
@routes('test')
|
@routes('test')
|
||||||
</head>
|
</head>
|
||||||
|
@ -29,8 +30,8 @@
|
||||||
<body>
|
<body>
|
||||||
@inertia({ as: 'div', class: 'h-full' })
|
@inertia({ as: 'div', class: 'h-full' })
|
||||||
|
|
||||||
@entryPointStyles('app')
|
{{-- @entryPointStyles('app')
|
||||||
@entryPointScripts('app')
|
@entryPointScripts('app') --}}
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
52
start/env.ts
52
start/env.ts
|
@ -11,39 +11,37 @@
|
||||||
| and hence do not rename or move this file to a different location.
|
| and hence do not rename or move this file to a different location.
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
import { Env } from "@adonisjs/core/env"
|
import { Env } from '@adonisjs/core/env';
|
||||||
|
|
||||||
export default await Env.create(new URL("../", import.meta.url), {
|
export default await Env.create(new URL('../', import.meta.url), {
|
||||||
HOST: Env.schema.string({ format: 'host' }),
|
HOST: Env.schema.string({ format: 'host' }),
|
||||||
PORT: Env.schema.number(),
|
PORT: Env.schema.number(),
|
||||||
APP_KEY: Env.schema.string(),
|
APP_KEY: Env.schema.string(),
|
||||||
APP_NAME: Env.schema.string(),
|
APP_NAME: Env.schema.string(),
|
||||||
CACHE_VIEWS: Env.schema.boolean(),
|
CACHE_VIEWS: Env.schema.boolean(),
|
||||||
SESSION_DRIVER: Env.schema.enum(["cookie", "memory"] as const),
|
SESSION_DRIVER: Env.schema.enum(['cookie', 'memory'] as const),
|
||||||
|
|
||||||
DRIVE_DISK: Env.schema.enum(['local'] as const),
|
DRIVE_DISK: Env.schema.enum(['local'] as const),
|
||||||
NODE_ENV: Env.schema.enum(['development', 'production', 'test'] as const),
|
NODE_ENV: Env.schema.enum(['development', 'production', 'test'] as const),
|
||||||
DB_CONNECTION: Env.schema.string(),
|
DB_CONNECTION: Env.schema.string(),
|
||||||
PG_HOST: Env.schema.string({ format: 'host' }),
|
PG_HOST: Env.schema.string({ format: 'host' }),
|
||||||
PG_PORT: Env.schema.number(),
|
PG_PORT: Env.schema.number(),
|
||||||
PG_USER: Env.schema.string(),
|
PG_USER: Env.schema.string(),
|
||||||
PG_PASSWORD: Env.schema.string.optional(),
|
PG_PASSWORD: Env.schema.string.optional(),
|
||||||
PG_DB_NAME: Env.schema.string(),
|
PG_DB_NAME: Env.schema.string(),
|
||||||
|
|
||||||
REDIS_HOST: Env.schema.string({ format: 'host' }),
|
REDIS_HOST: Env.schema.string({ format: 'host' }),
|
||||||
REDIS_PORT: Env.schema.number(),
|
REDIS_PORT: Env.schema.number(),
|
||||||
|
|
||||||
HASH_DRIVER: Env.schema.enum(["scrypt", "argon", "bcrypt", "laravel", undefined] as const),
|
HASH_DRIVER: Env.schema.enum(['scrypt', 'argon', 'bcrypt', 'laravel', undefined] as const),
|
||||||
OAI_LIST_SIZE: Env.schema.number(),
|
OAI_LIST_SIZE: Env.schema.number(),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|----------------------------------------------------------
|
|----------------------------------------------------------
|
||||||
| Variables for configuring the mail package
|
| Variables for configuring the mail package
|
||||||
|----------------------------------------------------------
|
|----------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
SMTP_HOST: Env.schema.string.optional(),
|
SMTP_HOST: Env.schema.string.optional(),
|
||||||
SMTP_PORT: Env.schema.string.optional(),
|
SMTP_PORT: Env.schema.string.optional(),
|
||||||
RESEND_API_KEY: Env.schema.string.optional()
|
RESEND_API_KEY: Env.schema.string.optional(),
|
||||||
|
});
|
||||||
})
|
|
||||||
|
|
||||||
|
|
|
@ -24,8 +24,8 @@ server.use([
|
||||||
() => import('@adonisjs/static/static_middleware'),
|
() => import('@adonisjs/static/static_middleware'),
|
||||||
// () => import('@adonisjs/cors/cors_middleware'),
|
// () => import('@adonisjs/cors/cors_middleware'),
|
||||||
() => import('@adonisjs/inertia/inertia_middleware'),
|
() => import('@adonisjs/inertia/inertia_middleware'),
|
||||||
|
() => import('@adonisjs/vite/vite_middleware'),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The router middleware stack runs middleware on all the HTTP
|
* The router middleware stack runs middleware on all the HTTP
|
||||||
* requests with a registered route.
|
* requests with a registered route.
|
||||||
|
|
441
start/routes.ts
441
start/routes.ts
|
@ -41,150 +41,361 @@ import db from '@adonisjs/lucid/services/db'; // Import the DB service
|
||||||
router.get('/health', ({ response }: HttpContext) => response.noContent());
|
router.get('/health', ({ response }: HttpContext) => response.noContent());
|
||||||
|
|
||||||
// OAI routes
|
// OAI routes
|
||||||
router.group(() => {
|
router
|
||||||
router.get('/oai', [OaiController, 'index']).as('get');
|
.group(() => {
|
||||||
router.post('/oai', [OaiController, 'index']).as('post');
|
router.get('/oai', [OaiController, 'index']).as('get');
|
||||||
}).as('oai');
|
router.post('/oai', [OaiController, 'index']).as('post');
|
||||||
|
})
|
||||||
|
.as('oai');
|
||||||
|
|
||||||
// Welcome route
|
// Welcome route
|
||||||
router.get('/welcome', async ({ view }: HttpContext) => {
|
router
|
||||||
return view.render('welcome');
|
.get('/welcome', async ({ view }: HttpContext) => {
|
||||||
}).as('welcome');
|
return view.render('welcome');
|
||||||
|
})
|
||||||
|
.as('welcome');
|
||||||
|
|
||||||
// Dashboard route
|
// Dashboard route
|
||||||
router.get('/', async ({ response }: HttpContext) => {
|
router
|
||||||
return response.redirect().toRoute('apps.dashboard');
|
.get('/', async ({ response }: HttpContext) => {
|
||||||
}).as('dashboard');
|
return response.redirect().toRoute('apps.dashboard');
|
||||||
|
})
|
||||||
|
.as('dashboard');
|
||||||
|
|
||||||
// Apps group
|
// Apps group
|
||||||
router.group(() => {
|
router
|
||||||
router.get('/dashboard', async ({ inertia }: HttpContext) => {
|
.group(() => {
|
||||||
return inertia.render('Dashboard');
|
router
|
||||||
}).as('dashboard');
|
.get('/dashboard', async ({ inertia }: HttpContext) => {
|
||||||
|
return inertia.render('Dashboard');
|
||||||
|
})
|
||||||
|
.as('dashboard');
|
||||||
|
|
||||||
router.get('/map', async ({ inertia }: HttpContext) => {
|
router
|
||||||
return inertia.render('Map');
|
.get('/map', async ({ inertia }: HttpContext) => {
|
||||||
}).as('map');
|
return inertia.render('Map');
|
||||||
|
})
|
||||||
|
.as('map');
|
||||||
|
|
||||||
router.get('/', async ({ inertia }: HttpContext) => {
|
router
|
||||||
const users = await User.query().orderBy('login');
|
.get('/', async ({ inertia }: HttpContext) => {
|
||||||
return inertia.render('App', {
|
const users = await User.query().orderBy('login');
|
||||||
testing: 'this is a test',
|
return inertia.render('App', {
|
||||||
users: users,
|
testing: 'this is a test',
|
||||||
});
|
users: users,
|
||||||
}).as('index');
|
});
|
||||||
|
})
|
||||||
|
.as('index');
|
||||||
|
|
||||||
router.get('/register', async ({ inertia }: HttpContext) => {
|
router
|
||||||
return inertia.render('register-view/register-view-component');
|
.get('/register', async ({ inertia }: HttpContext) => {
|
||||||
}).as('register.show');
|
return inertia.render('register-view/register-view-component');
|
||||||
|
})
|
||||||
|
.as('register.show');
|
||||||
|
|
||||||
router.post('/register', async ({ request, response }: HttpContext) => {
|
router
|
||||||
await request.validateUsing(authValidator);
|
.post('/register', async ({ request, response }: HttpContext) => {
|
||||||
return response.redirect().toRoute('app.index');
|
await request.validateUsing(authValidator);
|
||||||
}).as('register.store');
|
return response.redirect().toRoute('app.index');
|
||||||
}).prefix('apps').as('apps').use(middleware.auth());
|
})
|
||||||
|
.as('register.store');
|
||||||
|
})
|
||||||
|
.prefix('apps')
|
||||||
|
.as('apps')
|
||||||
|
.use(middleware.auth());
|
||||||
|
|
||||||
// Auth routes
|
// Auth routes
|
||||||
router.get('/app/login', ({ inertia }: HttpContext) => {
|
router
|
||||||
return inertia.render('Auth/Login');
|
.get('/app/login', ({ inertia }: HttpContext) => {
|
||||||
}).as('app.login.show');
|
return inertia.render('Auth/Login');
|
||||||
|
})
|
||||||
|
.as('app.login.show');
|
||||||
|
|
||||||
router.post('/app/login', [AuthController, 'login']).as('login.store');
|
router.post('/app/login', [AuthController, 'login']).as('login.store');
|
||||||
router.post('/app/twoFactorChallenge', [AuthController, 'twoFactorChallenge']).as('login.twoFactorChallenge');
|
router.post('/app/twoFactorChallenge', [AuthController, 'twoFactorChallenge']).as('login.twoFactorChallenge');
|
||||||
router.post('/signout', [AuthController, 'logout']).as('logout');
|
router.post('/signout', [AuthController, 'logout']).as('logout');
|
||||||
|
|
||||||
// Administrator routes
|
// Administrator routes
|
||||||
router.group(() => {
|
router
|
||||||
router.get('/settings', async ({ inertia }: HttpContext) => {
|
.group(() => {
|
||||||
const updatedConfigValue = await db.from('appconfigs')
|
router
|
||||||
.select('configvalue')
|
.get('/settings', async ({ inertia }: HttpContext) => {
|
||||||
.where('appid', 'backgroundjob')
|
const updatedConfigValue = await db
|
||||||
.where('configkey', 'lastjob')
|
.from('appconfigs')
|
||||||
.first();
|
.select('configvalue')
|
||||||
return inertia.render('Admin/Settings', {
|
.where('appid', 'backgroundjob')
|
||||||
lastCron: updatedConfigValue?.configvalue || '',
|
.where('configkey', 'lastjob')
|
||||||
});
|
.first();
|
||||||
}).as('overview');
|
return inertia.render('Admin/Settings', {
|
||||||
|
lastCron: updatedConfigValue?.configvalue || '',
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.as('overview');
|
||||||
|
|
||||||
router.post('/mail/store', [MailSettingsController, 'setMailSettings']).as('mail.store').use(middleware.can(['user-create']));
|
router
|
||||||
router.post('/mail/send', [MailSettingsController, 'sendTestMail']).as('mail.send').use(middleware.can(['user-create']));
|
.post('/mail/store', [MailSettingsController, 'setMailSettings'])
|
||||||
|
.as('mail.store')
|
||||||
|
.use(middleware.can(['user-create']));
|
||||||
|
router
|
||||||
|
.post('/mail/send', [MailSettingsController, 'sendTestMail'])
|
||||||
|
.as('mail.send')
|
||||||
|
.use(middleware.can(['user-create']));
|
||||||
|
|
||||||
// User routes
|
// User routes
|
||||||
router.get('/user', [AdminuserController, 'index']).as('user.index').use(middleware.can(['user-list']));
|
router
|
||||||
router.get('/user/create', [AdminuserController, 'create']).as('user.create').use(middleware.can(['user-create']));
|
.get('/user', [AdminuserController, 'index'])
|
||||||
router.post('/user/store', [AdminuserController, 'store']).as('user.store').use(middleware.can(['user-create']));
|
.as('user.index')
|
||||||
router.get('/user/:id', [AdminuserController, 'show']).as('user.show').where('id', router.matchers.number());
|
.use(middleware.can(['user-list']));
|
||||||
router.get('/user/:id/edit', [AdminuserController, 'edit']).as('user.edit').where('id', router.matchers.number()).use(middleware.can(['user-edit']));
|
router
|
||||||
router.put('/user/:id/update', [AdminuserController, 'update']).as('user.update').where('id', router.matchers.number()).use(middleware.can(['user-edit']));
|
.get('/user/create', [AdminuserController, 'create'])
|
||||||
router.delete('/user/:id', [AdminuserController, 'destroy']).as('user.destroy').where('id', router.matchers.number()).use(middleware.can(['user-delete']));
|
.as('user.create')
|
||||||
|
.use(middleware.can(['user-create']));
|
||||||
|
router
|
||||||
|
.post('/user/store', [AdminuserController, 'store'])
|
||||||
|
.as('user.store')
|
||||||
|
.use(middleware.can(['user-create']));
|
||||||
|
router.get('/user/:id', [AdminuserController, 'show']).as('user.show').where('id', router.matchers.number());
|
||||||
|
router
|
||||||
|
.get('/user/:id/edit', [AdminuserController, 'edit'])
|
||||||
|
.as('user.edit')
|
||||||
|
.where('id', router.matchers.number())
|
||||||
|
.use(middleware.can(['user-edit']));
|
||||||
|
router
|
||||||
|
.put('/user/:id/update', [AdminuserController, 'update'])
|
||||||
|
.as('user.update')
|
||||||
|
.where('id', router.matchers.number())
|
||||||
|
.use(middleware.can(['user-edit']));
|
||||||
|
router
|
||||||
|
.delete('/user/:id', [AdminuserController, 'destroy'])
|
||||||
|
.as('user.destroy')
|
||||||
|
.where('id', router.matchers.number())
|
||||||
|
.use(middleware.can(['user-delete']));
|
||||||
|
|
||||||
// Role routes
|
// Role routes
|
||||||
router.get('/role', [RoleController, 'index']).as('role.index').use(middleware.can(['user-list']));
|
router
|
||||||
router.get('/role/create', [RoleController, 'create']).as('role.create').use(middleware.can(['user-create']));
|
.get('/role', [RoleController, 'index'])
|
||||||
router.post('/role/store', [RoleController, 'store']).as('role.store').use(middleware.can(['user-create']));
|
.as('role.index')
|
||||||
router.get('/role/:id', [RoleController, 'show']).as('role.show').where('id', router.matchers.number());
|
.use(middleware.can(['user-list']));
|
||||||
router.get('/role/:id/edit', [RoleController, 'edit']).as('role.edit').where('id', router.matchers.number()).use(middleware.can(['user-edit']));
|
router
|
||||||
router.put('/role/:id/update', [RoleController, 'update']).as('role.update').where('id', router.matchers.number()).use(middleware.can(['user-edit']));
|
.get('/role/create', [RoleController, 'create'])
|
||||||
|
.as('role.create')
|
||||||
|
.use(middleware.can(['user-create']));
|
||||||
|
router
|
||||||
|
.post('/role/store', [RoleController, 'store'])
|
||||||
|
.as('role.store')
|
||||||
|
.use(middleware.can(['user-create']));
|
||||||
|
router.get('/role/:id', [RoleController, 'show']).as('role.show').where('id', router.matchers.number());
|
||||||
|
router
|
||||||
|
.get('/role/:id/edit', [RoleController, 'edit'])
|
||||||
|
.as('role.edit')
|
||||||
|
.where('id', router.matchers.number())
|
||||||
|
.use(middleware.can(['user-edit']));
|
||||||
|
router
|
||||||
|
.put('/role/:id/update', [RoleController, 'update'])
|
||||||
|
.as('role.update')
|
||||||
|
.where('id', router.matchers.number())
|
||||||
|
.use(middleware.can(['user-edit']));
|
||||||
|
|
||||||
// License routes
|
// License routes
|
||||||
router.get('/license', [LicenseController, 'index']).as('license.index');
|
router.get('/license', [LicenseController, 'index']).as('license.index');
|
||||||
router.get('/license/:id/down', [LicenseController, 'down']).as('license.down').where('id', router.matchers.number()).use(middleware.can(['settings']));
|
router
|
||||||
router.get('/license/:id/up', [LicenseController, 'up']).as('license.up').where('id', router.matchers.number()).use(middleware.can(['settings']));
|
.get('/license/:id/down', [LicenseController, 'down'])
|
||||||
|
.as('license.down')
|
||||||
|
.where('id', router.matchers.number())
|
||||||
|
.use(middleware.can(['settings']));
|
||||||
|
router
|
||||||
|
.get('/license/:id/up', [LicenseController, 'up'])
|
||||||
|
.as('license.up')
|
||||||
|
.where('id', router.matchers.number())
|
||||||
|
.use(middleware.can(['settings']));
|
||||||
|
|
||||||
// Mimetype routes
|
// Mimetype routes
|
||||||
router.get('/mimetype', [MimetypeController, 'index']).as('mimetype.index');
|
router.get('/mimetype', [MimetypeController, 'index']).as('mimetype.index');
|
||||||
router.get('/mimetype/create', [MimetypeController, 'create']).as('mimetype.create').use(middleware.can(['settings']));
|
router
|
||||||
router.post('/mimetype/store', [MimetypeController, 'store']).as('mimetype.store').use(middleware.can(['settings']));
|
.get('/mimetype/create', [MimetypeController, 'create'])
|
||||||
router.get('/mimetype/:id/down', [MimetypeController, 'down']).as('mimetype.down').where('id', router.matchers.number()).use(middleware.can(['settings']));
|
.as('mimetype.create')
|
||||||
router.get('/mimetype/:id/up', [MimetypeController, 'up']).as('mimetype.up').where('id', router.matchers.number()).use(middleware.can(['settings']));
|
.use(middleware.can(['settings']));
|
||||||
router.get('/mimetype/:id/delete', [MimetypeController, 'delete']).as('mimetype.delete').use([middleware.auth(), middleware.can(['dataset-delete'])]);
|
router
|
||||||
router.delete('/mimetype/:id/deleteStore', [MimetypeController, 'deleteStore']).as('mimetype.deleteStore').use([middleware.auth(), middleware.can(['settings'])]);
|
.post('/mimetype/store', [MimetypeController, 'store'])
|
||||||
}).prefix('admin').as('settings').use([middleware.auth(), middleware.is(['administrator', 'moderator'])]);
|
.as('mimetype.store')
|
||||||
|
.use(middleware.can(['settings']));
|
||||||
|
router
|
||||||
|
.get('/mimetype/:id/down', [MimetypeController, 'down'])
|
||||||
|
.as('mimetype.down')
|
||||||
|
.where('id', router.matchers.number())
|
||||||
|
.use(middleware.can(['settings']));
|
||||||
|
router
|
||||||
|
.get('/mimetype/:id/up', [MimetypeController, 'up'])
|
||||||
|
.as('mimetype.up')
|
||||||
|
.where('id', router.matchers.number())
|
||||||
|
.use(middleware.can(['settings']));
|
||||||
|
router
|
||||||
|
.get('/mimetype/:id/delete', [MimetypeController, 'delete'])
|
||||||
|
.as('mimetype.delete')
|
||||||
|
.use([middleware.auth(), middleware.can(['dataset-delete'])]);
|
||||||
|
router
|
||||||
|
.delete('/mimetype/:id/deleteStore', [MimetypeController, 'deleteStore'])
|
||||||
|
.as('mimetype.deleteStore')
|
||||||
|
.use([middleware.auth(), middleware.can(['settings'])]);
|
||||||
|
})
|
||||||
|
.prefix('admin')
|
||||||
|
.as('settings')
|
||||||
|
.use([middleware.auth(), middleware.is(['administrator', 'moderator'])]);
|
||||||
|
|
||||||
router.get('/settings/user/security', [UserController, 'accountInfo']).as('settings.user').use(middleware.auth());
|
router.get('/settings/user/security', [UserController, 'accountInfo']).as('settings.user').use(middleware.auth());
|
||||||
router.post('/settings/user/store', [UserController, 'accountInfoStore']).as('account.password.store').use(middleware.auth());
|
router.post('/settings/user/store', [UserController, 'accountInfoStore']).as('account.password.store').use(middleware.auth());
|
||||||
|
|
||||||
// Submitter routes
|
// Submitter routes
|
||||||
router.group(() => {
|
router
|
||||||
router.get('/dataset', [DatasetController, 'index']).as('dataset.list').use([middleware.auth(), middleware.can(['dataset-list'])]);
|
.group(() => {
|
||||||
router.get('/dataset/create', [DatasetController, 'create']).as('dataset.create').use([middleware.auth(), middleware.can(['dataset-submit'])]);
|
router
|
||||||
router.post('/dataset/first/first-step', [DatasetController, 'firstStep']).as('dataset.first.step').use([middleware.auth(), middleware.can(['dataset-submit'])]);
|
.get('/dataset', [DatasetController, 'index'])
|
||||||
router.post('/dataset/second/second-step', [DatasetController, 'secondStep']).as('dataset.second.step').use([middleware.auth(), middleware.can(['dataset-submit'])]);
|
.as('dataset.list')
|
||||||
router.post('/dataset/second/third-step', [DatasetController, 'thirdStep']).as('dataset.third.step').use([middleware.auth(), middleware.can(['dataset-submit'])]);
|
.use([middleware.auth(), middleware.can(['dataset-list'])]);
|
||||||
router.post('/dataset/submit', [DatasetController, 'store']).as('dataset.submit').use([middleware.auth(), middleware.can(['dataset-submit'])]);
|
router
|
||||||
router.get('/dataset/:id/release', [DatasetController, 'release']).as('dataset.release').where('id', router.matchers.number()).use([middleware.auth(), middleware.can(['dataset-edit'])]);
|
.get('/dataset/create', [DatasetController, 'create'])
|
||||||
router.put('/dataset/:id/releaseupdate', [DatasetController, 'releaseUpdate']).as('dataset.releaseUpdate').use([middleware.auth(), middleware.can(['dataset-edit'])]);
|
.as('dataset.create')
|
||||||
router.get('/dataset/:id/edit', [DatasetController, 'edit']).as('dataset.edit').where('id', router.matchers.number()).use([middleware.auth(), middleware.can(['dataset-edit'])]);
|
.use([middleware.auth(), middleware.can(['dataset-submit'])]);
|
||||||
router.put('/dataset/:id/update', [DatasetController, 'update']).as('dataset.update').where('id', router.matchers.number()).use([middleware.auth(), middleware.can(['dataset-edit'])]);
|
router
|
||||||
router.get('/dataset/:id/delete', [DatasetController, 'delete']).as('dataset.delete').use([middleware.auth(), middleware.can(['dataset-delete'])]);
|
.post('/dataset/first/first-step', [DatasetController, 'firstStep'])
|
||||||
router.put('/dataset/:id/deleteupdate', [DatasetController, 'deleteUpdate']).as('dataset.deleteUpdate').use([middleware.auth(), middleware.can(['dataset-delete'])]);
|
.as('dataset.first.step')
|
||||||
router.get('/person', [PersonController, 'index']).as('person.index').use([middleware.auth()]);
|
.use([middleware.auth(), middleware.can(['dataset-submit'])]);
|
||||||
router.get('/dataset/categorize', ({ inertia }: HttpContext) => {
|
router
|
||||||
return inertia.render('Submitter/Dataset/Category');
|
.post('/dataset/second/second-step', [DatasetController, 'secondStep'])
|
||||||
});
|
.as('dataset.second.step')
|
||||||
}).prefix('submitter');
|
.use([middleware.auth(), middleware.can(['dataset-submit'])]);
|
||||||
|
router
|
||||||
|
.post('/dataset/second/third-step', [DatasetController, 'thirdStep'])
|
||||||
|
.as('dataset.third.step')
|
||||||
|
.use([middleware.auth(), middleware.can(['dataset-submit'])]);
|
||||||
|
router
|
||||||
|
.post('/dataset/submit', [DatasetController, 'store'])
|
||||||
|
.as('dataset.submit')
|
||||||
|
.use([middleware.auth(), middleware.can(['dataset-submit'])]);
|
||||||
|
router
|
||||||
|
.get('/dataset/:id/release', [DatasetController, 'release'])
|
||||||
|
.as('dataset.release')
|
||||||
|
.where('id', router.matchers.number())
|
||||||
|
.use([middleware.auth(), middleware.can(['dataset-edit'])]);
|
||||||
|
router
|
||||||
|
.put('/dataset/:id/releaseupdate', [DatasetController, 'releaseUpdate'])
|
||||||
|
.as('dataset.releaseUpdate')
|
||||||
|
.use([middleware.auth(), middleware.can(['dataset-edit'])]);
|
||||||
|
router
|
||||||
|
.get('/dataset/:id/edit', [DatasetController, 'edit'])
|
||||||
|
.as('dataset.edit')
|
||||||
|
.where('id', router.matchers.number())
|
||||||
|
.use([middleware.auth(), middleware.can(['dataset-edit'])]);
|
||||||
|
router
|
||||||
|
.put('/dataset/:id/update', [DatasetController, 'update'])
|
||||||
|
.as('dataset.update')
|
||||||
|
.where('id', router.matchers.number())
|
||||||
|
.use([middleware.auth(), middleware.can(['dataset-edit'])]);
|
||||||
|
router
|
||||||
|
.get('/dataset/:id/delete', [DatasetController, 'delete'])
|
||||||
|
.as('dataset.delete')
|
||||||
|
.use([middleware.auth(), middleware.can(['dataset-delete'])]);
|
||||||
|
router
|
||||||
|
.put('/dataset/:id/deleteupdate', [DatasetController, 'deleteUpdate'])
|
||||||
|
.as('dataset.deleteUpdate')
|
||||||
|
.use([middleware.auth(), middleware.can(['dataset-delete'])]);
|
||||||
|
router.get('/person', [PersonController, 'index']).as('person.index').use([middleware.auth()]);
|
||||||
|
router.get('/dataset/categorize', ({ inertia }: HttpContext) => {
|
||||||
|
return inertia.render('Submitter/Dataset/Category');
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.prefix('submitter');
|
||||||
|
|
||||||
// Editor routes
|
// Editor routes
|
||||||
router.group(() => {
|
router
|
||||||
router.get('/dataset', [EditorDatasetController, 'index']).as('editor.dataset.list').use([middleware.auth(), middleware.can(['dataset-editor-list'])]);
|
.group(() => {
|
||||||
router.get('dataset/:id/receive', [EditorDatasetController, 'receive']).as('editor.dataset.receive').where('id', router.matchers.number()).use([middleware.auth(), middleware.can(['dataset-receive'])]);
|
router
|
||||||
router.put('dataset/:id/receive', [EditorDatasetController, 'receiveUpdate']).as('editor.dataset.receiveUpdate').where('id', router.matchers.number()).use([middleware.auth(), middleware.can(['dataset-receive'])]);
|
.get('/dataset', [EditorDatasetController, 'index'])
|
||||||
router.get('dataset/:id/approve', [EditorDatasetController, 'approve']).as('editor.dataset.approve').where('id', router.matchers.number()).use([middleware.auth(), middleware.can(['dataset-approve'])]);
|
.as('editor.dataset.list')
|
||||||
router.put('dataset/:id/approve', [EditorDatasetController, 'approveUpdate']).as('editor.dataset.approveUpdate').where('id', router.matchers.number()).use([middleware.auth(), middleware.can(['dataset-approve'])]);
|
.use([middleware.auth(), middleware.can(['dataset-editor-list'])]);
|
||||||
router.get('dataset/:id/reject', [EditorDatasetController, 'reject']).as('editor.dataset.reject').where('id', router.matchers.number()).use([middleware.auth(), middleware.can(['dataset-editor-reject'])]);
|
router
|
||||||
router.put('dataset/:id/reject', [EditorDatasetController, 'rejectUpdate']).as('editor.dataset.rejectUpdate').where('id', router.matchers.number()).use([middleware.auth(), middleware.can(['dataset-editor-reject'])]);
|
.get('dataset/:id/receive', [EditorDatasetController, 'receive'])
|
||||||
router.get('dataset/:id/publish', [EditorDatasetController, 'publish']).as('editor.dataset.publish').where('id', router.matchers.number()).use([middleware.auth(), middleware.can(['dataset-publish'])]);
|
.as('editor.dataset.receive')
|
||||||
router.put('dataset/:id/publish', [EditorDatasetController, 'publishUpdate']).as('editor.dataset.publishUpdate').where('id', router.matchers.number()).use([middleware.auth(), middleware.can(['dataset-publish'])]);
|
.where('id', router.matchers.number())
|
||||||
router.get('dataset/:id/doi', [EditorDatasetController, 'doiCreate']).as('editor.dataset.doi').where('id', router.matchers.number()).use([middleware.auth(), middleware.can(['dataset-publish'])]);
|
.use([middleware.auth(), middleware.can(['dataset-receive'])]);
|
||||||
router.put('dataset/:publish_id/doi', [EditorDatasetController, 'doiStore']).as('editor.dataset.doiStore').where('id', router.matchers.number()).use([middleware.auth(), middleware.can(['dataset-publish'])]);
|
router
|
||||||
router.put('/dataset/:id/update', [EditorDatasetController, 'update']).as('editor.dataset.update').use([middleware.auth(), middleware.can(['dataset-editor-edit'])]);
|
.put('dataset/:id/receive', [EditorDatasetController, 'receiveUpdate'])
|
||||||
}).prefix('editor');
|
.as('editor.dataset.receiveUpdate')
|
||||||
|
.where('id', router.matchers.number())
|
||||||
|
.use([middleware.auth(), middleware.can(['dataset-receive'])]);
|
||||||
|
router
|
||||||
|
.get('dataset/:id/approve', [EditorDatasetController, 'approve'])
|
||||||
|
.as('editor.dataset.approve')
|
||||||
|
.where('id', router.matchers.number())
|
||||||
|
.use([middleware.auth(), middleware.can(['dataset-approve'])]);
|
||||||
|
router
|
||||||
|
.put('dataset/:id/approve', [EditorDatasetController, 'approveUpdate'])
|
||||||
|
.as('editor.dataset.approveUpdate')
|
||||||
|
.where('id', router.matchers.number())
|
||||||
|
.use([middleware.auth(), middleware.can(['dataset-approve'])]);
|
||||||
|
router
|
||||||
|
.get('dataset/:id/reject', [EditorDatasetController, 'reject'])
|
||||||
|
.as('editor.dataset.reject')
|
||||||
|
.where('id', router.matchers.number())
|
||||||
|
.use([middleware.auth(), middleware.can(['dataset-editor-reject'])]);
|
||||||
|
router
|
||||||
|
.put('dataset/:id/reject', [EditorDatasetController, 'rejectUpdate'])
|
||||||
|
.as('editor.dataset.rejectUpdate')
|
||||||
|
.where('id', router.matchers.number())
|
||||||
|
.use([middleware.auth(), middleware.can(['dataset-editor-reject'])]);
|
||||||
|
router
|
||||||
|
.get('dataset/:id/publish', [EditorDatasetController, 'publish'])
|
||||||
|
.as('editor.dataset.publish')
|
||||||
|
.where('id', router.matchers.number())
|
||||||
|
.use([middleware.auth(), middleware.can(['dataset-publish'])]);
|
||||||
|
router
|
||||||
|
.put('dataset/:id/publish', [EditorDatasetController, 'publishUpdate'])
|
||||||
|
.as('editor.dataset.publishUpdate')
|
||||||
|
.where('id', router.matchers.number())
|
||||||
|
.use([middleware.auth(), middleware.can(['dataset-publish'])]);
|
||||||
|
router
|
||||||
|
.get('dataset/:id/doi', [EditorDatasetController, 'doiCreate'])
|
||||||
|
.as('editor.dataset.doi')
|
||||||
|
.where('id', router.matchers.number())
|
||||||
|
.use([middleware.auth(), middleware.can(['dataset-publish'])]);
|
||||||
|
router
|
||||||
|
.put('dataset/:publish_id/doi', [EditorDatasetController, 'doiStore'])
|
||||||
|
.as('editor.dataset.doiStore')
|
||||||
|
.where('id', router.matchers.number())
|
||||||
|
.use([middleware.auth(), middleware.can(['dataset-publish'])]);
|
||||||
|
router
|
||||||
|
.put('/dataset/:id/update', [EditorDatasetController, 'update'])
|
||||||
|
.as('editor.dataset.update')
|
||||||
|
.use([middleware.auth(), middleware.can(['dataset-editor-edit'])]);
|
||||||
|
})
|
||||||
|
.prefix('editor');
|
||||||
|
|
||||||
// Reviewer routes
|
// Reviewer routes
|
||||||
router.group(() => {
|
router
|
||||||
router.get('/dataset', [ReviewerDatasetController, 'index']).as('reviewer.dataset.list').use([middleware.auth(), middleware.can(['dataset-review-list'])]);
|
.group(() => {
|
||||||
router.get('dataset/:id/review', [ReviewerDatasetController, 'review']).as('reviewer.dataset.review').where('id', router.matchers.number()).use([middleware.auth(), middleware.can(['dataset-review'])]);
|
router
|
||||||
router.put('dataset/:id/review', [ReviewerDatasetController, 'reviewUpdate']).as('reviewer.dataset.reviewUpdate').where('id', router.matchers.number()).use([middleware.auth(), middleware.can(['dataset-review'])]);
|
.get('/dataset', [ReviewerDatasetController, 'index'])
|
||||||
router.get('dataset/:id/reject', [ReviewerDatasetController, 'reject']).as('reviewer.dataset.reject').where('id', router.matchers.number()).use([middleware.auth(), middleware.can(['dataset-review-reject'])]);
|
.as('reviewer.dataset.list')
|
||||||
router.put('dataset/:id/reject', [ReviewerDatasetController, 'rejectUpdate']).as('reviewer.dataset.rejectUpdate').where('id', router.matchers.number()).use([middleware.auth(), middleware.can(['dataset-review-reject'])]);
|
.use([middleware.auth(), middleware.can(['dataset-review-list'])]);
|
||||||
}).prefix('reviewer');
|
router
|
||||||
|
.get('dataset/:id/review', [ReviewerDatasetController, 'review'])
|
||||||
|
.as('reviewer.dataset.review')
|
||||||
|
.where('id', router.matchers.number())
|
||||||
|
.use([middleware.auth(), middleware.can(['dataset-review'])]);
|
||||||
|
router
|
||||||
|
.put('dataset/:id/review', [ReviewerDatasetController, 'reviewUpdate'])
|
||||||
|
.as('reviewer.dataset.reviewUpdate')
|
||||||
|
.where('id', router.matchers.number())
|
||||||
|
.use([middleware.auth(), middleware.can(['dataset-review'])]);
|
||||||
|
router
|
||||||
|
.get('dataset/:id/reject', [ReviewerDatasetController, 'reject'])
|
||||||
|
.as('reviewer.dataset.reject')
|
||||||
|
.where('id', router.matchers.number())
|
||||||
|
.use([middleware.auth(), middleware.can(['dataset-review-reject'])]);
|
||||||
|
router
|
||||||
|
.put('dataset/:id/reject', [ReviewerDatasetController, 'rejectUpdate'])
|
||||||
|
.as('reviewer.dataset.rejectUpdate')
|
||||||
|
.where('id', router.matchers.number())
|
||||||
|
.use([middleware.auth(), middleware.can(['dataset-review-reject'])]);
|
||||||
|
})
|
||||||
|
.prefix('reviewer');
|
||||||
|
|
|
@ -6,30 +6,32 @@ import HomeController from '#controllers/Http/Api/HomeController';
|
||||||
import FileController from '#controllers/Http/Api/FileController';
|
import FileController from '#controllers/Http/Api/FileController';
|
||||||
import AvatarController from '#controllers/Http/Api/AvatarController';
|
import AvatarController from '#controllers/Http/Api/AvatarController';
|
||||||
import UserController from '#controllers/Http/Api/UserController';
|
import UserController from '#controllers/Http/Api/UserController';
|
||||||
import { middleware } from '../kernel.js'
|
import { middleware } from '../kernel.js';
|
||||||
// API
|
// API
|
||||||
router.group(() => {
|
router
|
||||||
|
.group(() => {
|
||||||
|
router.get('authors', [AuthorsController, 'index']).as('author.index');
|
||||||
|
router.get('datasets', [DatasetController, 'index']).as('dataset.index');
|
||||||
|
router.get('persons', [AuthorsController, 'persons']).as('author.persons');
|
||||||
|
|
||||||
|
router.get('/dataset', [DatasetController, 'findAll']).as('dataset.findAll');
|
||||||
router.get('authors', [AuthorsController, "index"]).as('author.index');
|
router.get('/dataset/:publish_id', [DatasetController, 'findOne']).as('dataset.findOne');
|
||||||
router.get('datasets', [DatasetController, "index"]).as('dataset.index');
|
router.get('/sitelinks/:year', [HomeController, 'findDocumentsPerYear']);
|
||||||
router.get('persons', [AuthorsController, "persons"]).as('author.persons');
|
router.get('/years', [HomeController, 'findYears']);
|
||||||
|
router.get('/statistic/:year', [HomeController, 'findPublicationsPerMonth']);
|
||||||
router.get('/dataset', [DatasetController, "findAll"]).as('dataset.findAll');
|
|
||||||
router.get('/dataset/:publish_id', [DatasetController, "findOne"]).as('dataset.findOne');
|
|
||||||
router.get('/sitelinks/:year', [HomeController, "findDocumentsPerYear"]);
|
|
||||||
router.get('/years', [HomeController, "findYears"]);
|
|
||||||
router.get('/statistic/:year', [HomeController, "findPublicationsPerMonth"]);
|
|
||||||
|
|
||||||
router.get('/download/:id', [FileController, "findOne"]).as('file.findOne');
|
router.get('/download/:id', [FileController, 'findOne']).as('file.findOne');
|
||||||
|
|
||||||
router.get('/avatar/:name/:background?/:textColor?/:size?', [AvatarController, 'generateAvatar']);
|
router.get('/avatar/:name/:background?/:textColor?/:size?', [AvatarController, 'generateAvatar']);
|
||||||
|
|
||||||
|
router
|
||||||
router.post('/twofactor_totp/settings/enable/:state/:code?', [UserController, 'enable']).as('apps.twofactor_totp.enable') .use(middleware.auth());
|
.post('/twofactor_totp/settings/enable/:state/:code?', [UserController, 'enable'])
|
||||||
router.post('/twofactor_backupcodes/settings/create', [UserController, 'createCodes']).as('apps.twofactor_backupcodes.create') .use(middleware.auth());
|
.as('apps.twofactor_totp.enable')
|
||||||
|
.use(middleware.auth());
|
||||||
})
|
router
|
||||||
|
.post('/twofactor_backupcodes/settings/create', [UserController, 'createCodes'])
|
||||||
|
.as('apps.twofactor_backupcodes.create')
|
||||||
|
.use(middleware.auth());
|
||||||
|
})
|
||||||
// .namespace('App/Controllers/Http/Api')
|
// .namespace('App/Controllers/Http/Api')
|
||||||
.prefix('api');
|
.prefix('api');
|
||||||
|
|
|
@ -9,7 +9,6 @@ import vine from '@vinejs/vine';
|
||||||
// import { VineString } from '@vinejs/vine';
|
// import { VineString } from '@vinejs/vine';
|
||||||
import { VineMultipartFile, isBodyParserFile } from '#providers/vinejs_provider';
|
import { VineMultipartFile, isBodyParserFile } from '#providers/vinejs_provider';
|
||||||
import type { MultipartFile } from '@adonisjs/core/bodyparser';
|
import type { MultipartFile } from '@adonisjs/core/bodyparser';
|
||||||
// import db from '@adonisjs/lucid/services/db';
|
|
||||||
import MimeType from '#models/mime_type';
|
import MimeType from '#models/mime_type';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -22,11 +21,14 @@ import MimeType from '#models/mime_type';
|
||||||
type Options = {
|
type Options = {
|
||||||
// size: string | number;
|
// size: string | number;
|
||||||
// extnames: string[];
|
// extnames: string[];
|
||||||
clientNameSizeLimit: number;
|
// clientNameSizeLimit?: number;
|
||||||
|
allowedExtensions: string[];
|
||||||
|
allowedMimeTypes: string[];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// async function allowedMimetypeExtensions(file: VineMultipartFile | unknown, options: Options | unknown, field: FieldContext) {
|
// async function allowedMimetypeExtensions(file: VineMultipartFile | unknown, options: Options | unknown, field: FieldContext) {
|
||||||
async function allowedMimetypeExtensions(file: VineMultipartFile | unknown, options: Options | unknown, field: FieldContext) {
|
async function allowedMimetypeExtensions(file: VineMultipartFile | unknown, options: Options, field: FieldContext) {
|
||||||
// if (typeof value !== 'string' && typeof value != 'number') {
|
// if (typeof value !== 'string' && typeof value != 'number') {
|
||||||
// return;
|
// return;
|
||||||
// }
|
// }
|
||||||
|
@ -42,7 +44,7 @@ async function allowedMimetypeExtensions(file: VineMultipartFile | unknown, opti
|
||||||
const mimeRecord = await MimeType.query().select('file_extension').where('name', mimeType).andWhere('enabled', true).first();
|
const mimeRecord = await MimeType.query().select('file_extension').where('name', mimeType).andWhere('enabled', true).first();
|
||||||
|
|
||||||
if (!mimeRecord) {
|
if (!mimeRecord) {
|
||||||
const allowedMimetypes = await MimeType.query().select('name').where('enabled', true);
|
const allowedMimetypes = await MimeType.query().select('name').where('enabled', true)
|
||||||
// Transform allowed MIME types to a concatenated string
|
// Transform allowed MIME types to a concatenated string
|
||||||
const allowedMimetypesString = allowedMimetypes.map((mime) => mime.name).join(', ');
|
const allowedMimetypesString = allowedMimetypes.map((mime) => mime.name).join(', ');
|
||||||
// throw new Error('Invalid MIME type');
|
// throw new Error('Invalid MIME type');
|
||||||
|
@ -53,14 +55,19 @@ async function allowedMimetypeExtensions(file: VineMultipartFile | unknown, opti
|
||||||
field,
|
field,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
const allowedExtensions = mimeRecord.file_extension.split('|');
|
let allowedExtensions: string[] = [];
|
||||||
|
if (options && options.allowedExtensions) {
|
||||||
|
allowedExtensions = options.allowedExtensions;
|
||||||
|
} else {
|
||||||
|
allowedExtensions = mimeRecord.file_extension.split('|');
|
||||||
|
}
|
||||||
// Validate if the file's extension is in the allowed extensions
|
// Validate if the file's extension is in the allowed extensions
|
||||||
if (!allowedExtensions.includes(fileExtension)) {
|
if (!allowedExtensions.includes(fileExtension)) {
|
||||||
//throw new Error(`File extension ${fileExtension} is not allowed for MIME type ${mimeType}`);
|
//throw new Error(`File extension ${fileExtension} is not allowed for MIME type ${mimeType}`);
|
||||||
field.report(
|
field.report(
|
||||||
`File extension ${fileExtension} is not allowed for MIME type ${mimeType}. Allowed extensions are: ${mimeRecord.file_extension}`,
|
`File extension ${fileExtension} is not allowed for MIME type ${mimeType}. Allowed extensions are: ${mimeRecord.file_extension}`,
|
||||||
'allowedMimetypeExtensions',
|
'allowedMimetypeExtensions',
|
||||||
field
|
field,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
// if (validatedFile.clientName.length > options.clientNameSizeLimit) {
|
// if (validatedFile.clientName.length > options.clientNameSizeLimit) {
|
||||||
|
@ -74,10 +81,10 @@ export const allowedMimetypeExtensionsRule = vine.createRule(allowedMimetypeExte
|
||||||
|
|
||||||
declare module '#providers/vinejs_provider' {
|
declare module '#providers/vinejs_provider' {
|
||||||
interface VineMultipartFile {
|
interface VineMultipartFile {
|
||||||
allowedMimetypeExtensions(options?: Options): this;
|
allowedMimetypeExtensions(options?: Options): this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VineMultipartFile.macro('allowedMimetypeExtensions', function (this: VineMultipartFile, options: Options) {
|
VineMultipartFile.macro('allowedMimetypeExtensions', function (this: VineMultipartFile, options: Options) {
|
||||||
return this.use(allowedMimetypeExtensionsRule(options));
|
return this.use(allowedMimetypeExtensionsRule(options));
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { FieldContext } from '@vinejs/vine/types';
|
import { FieldContext } from '@vinejs/vine/types';
|
||||||
import vine from '@vinejs/vine';
|
import vine from '@vinejs/vine';
|
||||||
import { VineString } from '@vinejs/vine';
|
import { VineString } from '@vinejs/vine';
|
||||||
import axios from 'axios';
|
import { default as axios } from 'axios';
|
||||||
import { ReferenceIdentifierTypes } from '#contracts/enums';
|
import { ReferenceIdentifierTypes } from '#contracts/enums';
|
||||||
|
|
||||||
type Options = {
|
type Options = {
|
||||||
|
@ -11,7 +11,7 @@ type Options = {
|
||||||
// Function to check if DOI exists using the DOI API
|
// Function to check if DOI exists using the DOI API
|
||||||
async function checkDoiExists(doi: string): Promise<boolean> {
|
async function checkDoiExists(doi: string): Promise<boolean> {
|
||||||
try {
|
try {
|
||||||
const response = await axios.default.get(`${doi}`);
|
const response = await axios.get(`${doi}`);
|
||||||
return response.status === 200; // If status is 200, DOI is valid
|
return response.status === 200; // If status is 200, DOI is valid
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return false; // If request fails, DOI does not exist
|
return false; // If request fails, DOI does not exist
|
||||||
|
@ -21,7 +21,7 @@ async function checkDoiExists(doi: string): Promise<boolean> {
|
||||||
// Function to check if ISBN exists using the Open Library API
|
// Function to check if ISBN exists using the Open Library API
|
||||||
async function checkIsbnExists(isbn: string): Promise<boolean> {
|
async function checkIsbnExists(isbn: string): Promise<boolean> {
|
||||||
try {
|
try {
|
||||||
const response = await axios.default.get(`https://isbnsearch.org/isbn/${isbn}`);
|
const response = await axios.get(`https://isbnsearch.org/isbn/${isbn}`);
|
||||||
return response.data && response.status == 200; // If title is returned, ISBN is valid
|
return response.data && response.status == 200; // If title is returned, ISBN is valid
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return false; // If request fails, ISBN does not exist
|
return false; // If request fails, ISBN does not exist
|
||||||
|
|
|
@ -17,7 +17,7 @@ type Options = {
|
||||||
};
|
};
|
||||||
|
|
||||||
async function translatedLanguage(value: unknown, options: Options, field: FieldContext) {
|
async function translatedLanguage(value: unknown, options: Options, field: FieldContext) {
|
||||||
if (typeof value !== 'string' && typeof value != 'number') {
|
if (typeof value !== 'string' && typeof value !== 'number') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,11 +15,11 @@ import { VineString, VineNumber } from '@vinejs/vine';
|
||||||
type Options = {
|
type Options = {
|
||||||
table: string;
|
table: string;
|
||||||
column: string;
|
column: string;
|
||||||
whereNot?: ((field: FieldContext) => string);
|
whereNot?: (field: FieldContext) => string;
|
||||||
};
|
};
|
||||||
|
|
||||||
async function isUnique(value: unknown, options: Options, field: FieldContext) {
|
async function isUnique(value: unknown, options: Options, field: FieldContext) {
|
||||||
if (typeof value !== 'string' && typeof value != 'number') {
|
if (typeof value !== 'string' && typeof value !== 'number') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,13 +37,11 @@ async function isUnique(value: unknown, options: Options, field: FieldContext) {
|
||||||
// report that value is NOT unique
|
// report that value is NOT unique
|
||||||
field.report('The {{ field }} field is not unique', 'isUnique', field);
|
field.report('The {{ field }} field is not unique', 'isUnique', field);
|
||||||
// field.report(messages.unique, "isUnique", field);
|
// field.report(messages.unique, "isUnique", field);
|
||||||
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const isUniqueRule = vine.createRule(isUnique);
|
export const isUniqueRule = vine.createRule(isUnique);
|
||||||
|
|
||||||
|
|
||||||
declare module '@vinejs/vine' {
|
declare module '@vinejs/vine' {
|
||||||
interface VineString {
|
interface VineString {
|
||||||
isUnique(options: Options): this;
|
isUnique(options: Options): this;
|
||||||
|
@ -58,4 +56,4 @@ VineString.macro('isUnique', function (this: VineString, options: Options) {
|
||||||
});
|
});
|
||||||
VineNumber.macro('isUnique', function (this: VineNumber, options: Options) {
|
VineNumber.macro('isUnique', function (this: VineNumber, options: Options) {
|
||||||
return this.use(isUniqueRule(options));
|
return this.use(isUniqueRule(options));
|
||||||
});
|
});
|
||||||
|
|
|
@ -19,9 +19,8 @@ type Options = {
|
||||||
idField: string;
|
idField: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
async function isUniquePerson(value: unknown, options: Options, field: FieldContext) {
|
async function isUniquePerson(value: unknown, options: Options, field: FieldContext) {
|
||||||
if (typeof value !== 'string' && typeof value != 'number') {
|
if (typeof value !== 'string' && typeof value !== 'number') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,13 +39,11 @@ async function isUniquePerson(value: unknown, options: Options, field: FieldCont
|
||||||
if (result) {
|
if (result) {
|
||||||
// report that value is NOT unique
|
// report that value is NOT unique
|
||||||
field.report('The {{ field }} field is not unique', 'isUnique', field);
|
field.report('The {{ field }} field is not unique', 'isUnique', field);
|
||||||
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const isUniquePersonRule = vine.createRule(isUniquePerson);
|
export const isUniquePersonRule = vine.createRule(isUniquePerson);
|
||||||
|
|
||||||
|
|
||||||
declare module '@vinejs/vine' {
|
declare module '@vinejs/vine' {
|
||||||
interface VineString {
|
interface VineString {
|
||||||
isUniquePerson(options: Options): this;
|
isUniquePerson(options: Options): this;
|
||||||
|
@ -61,4 +58,4 @@ VineString.macro('isUniquePerson', function (this: VineString, options: Options)
|
||||||
});
|
});
|
||||||
VineNumber.macro('isUniquePerson', function (this: VineNumber, options: Options) {
|
VineNumber.macro('isUniquePerson', function (this: VineNumber, options: Options) {
|
||||||
return this.use(isUniquePersonRule(options));
|
return this.use(isUniquePersonRule(options));
|
||||||
});
|
});
|
||||||
|
|
|
@ -13,20 +13,18 @@ import vine from '@vinejs/vine';
|
||||||
// import db from '@adonisjs/lucid/services/db';
|
// import db from '@adonisjs/lucid/services/db';
|
||||||
import { VanillaErrorReporter } from '#validators/vanilla_error_reporter';
|
import { VanillaErrorReporter } from '#validators/vanilla_error_reporter';
|
||||||
|
|
||||||
|
|
||||||
// vine.messagesProvider = new SimpleMessagesProvider({
|
// vine.messagesProvider = new SimpleMessagesProvider({
|
||||||
// // Applicable for all fields
|
// // Applicable for all fields
|
||||||
// 'required': 'The {{ field }} field is required',
|
// 'required': 'The {{ field }} field is required',
|
||||||
// 'string': 'The value of {{ field }} field must be a string',
|
// 'string': 'The value of {{ field }} field must be a string',
|
||||||
// 'email': 'The value is not a valid email address',
|
// 'email': 'The value is not a valid email address',
|
||||||
|
|
||||||
// // 'contacts.0.email.required': 'The primary email of the contact is required',
|
// // 'contacts.0.email.required': 'The primary email of the contact is required',
|
||||||
// // 'contacts.*.email.required': 'Contact email is required',
|
// // 'contacts.*.email.required': 'Contact email is required',
|
||||||
// 'permissions.minLength': 'at least {{ options.minLength }} permission must be defined',
|
// 'permissions.minLength': 'at least {{ options.minLength }} permission must be defined',
|
||||||
// 'permissions.*.number': 'Define permissions as valid numbers',
|
// 'permissions.*.number': 'Define permissions as valid numbers',
|
||||||
// })
|
// })
|
||||||
vine.errorReporter = () => new VanillaErrorReporter();
|
vine.errorReporter = () => new VanillaErrorReporter();
|
||||||
|
|
||||||
|
|
||||||
// /**
|
// /**
|
||||||
// * Options accepted by the unique rule
|
// * Options accepted by the unique rule
|
||||||
|
|
|
@ -12,10 +12,10 @@ import testUtils from '@adonisjs/core/services/test_utils';
|
||||||
// import { assert, runFailedTests, specReporter, apiClient } from '@japa/preset-adonis';
|
// import { assert, runFailedTests, specReporter, apiClient } from '@japa/preset-adonis';
|
||||||
|
|
||||||
import { assert } from '@japa/assert';
|
import { assert } from '@japa/assert';
|
||||||
import { apiClient } from '@japa/api-client';
|
// import { apiClient } from '@japa/api-client';
|
||||||
import { pluginAdonisJS } from '@japa/plugin-adonisjs';
|
import { pluginAdonisJS } from '@japa/plugin-adonisjs';
|
||||||
import app from '@adonisjs/core/services/app';
|
import app from '@adonisjs/core/services/app';
|
||||||
import env from '#start/env'
|
// import env from '#start/env'
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Japa Plugins
|
| Japa Plugins
|
||||||
|
@ -30,9 +30,9 @@ import env from '#start/env'
|
||||||
// export const plugins: Required<Config>['plugins'] = [assert(), runFailedTests(), apiClient()];
|
// export const plugins: Required<Config>['plugins'] = [assert(), runFailedTests(), apiClient()];
|
||||||
export const plugins: Config['plugins'] = [
|
export const plugins: Config['plugins'] = [
|
||||||
assert(),
|
assert(),
|
||||||
apiClient({
|
// apiClient({
|
||||||
baseURL: `http://${env.get('HOST')}:${env.get('PORT')}`,
|
// baseURL: `http://${env.get('HOST')}:${env.get('PORT')}`,
|
||||||
}),
|
// }),
|
||||||
pluginAdonisJS(app),
|
pluginAdonisJS(app),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ import User from '#models/user';
|
||||||
import Role from '#models/role';
|
import Role from '#models/role';
|
||||||
import Permission from '#models/permission';
|
import Permission from '#models/permission';
|
||||||
import { TestContext } from '@japa/runner/core';
|
import { TestContext } from '@japa/runner/core';
|
||||||
const BASE_URL = `http://${process.env.HOST}:${process.env.PORT}`
|
const BASE_URL = `http://${process.env.HOST}:${process.env.PORT}`;
|
||||||
|
|
||||||
test.group('DatasetController', (group) => {
|
test.group('DatasetController', (group) => {
|
||||||
// Write your test here
|
// Write your test here
|
||||||
|
@ -24,8 +24,6 @@ test.group('DatasetController', (group) => {
|
||||||
// server = await supertest(BASE_URL);
|
// server = await supertest(BASE_URL);
|
||||||
// });
|
// });
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
test('should render dataset release page', async ({ assert }: TestContext) => {
|
test('should render dataset release page', async ({ assert }: TestContext) => {
|
||||||
var testAgent = supertest(BASE_URL);
|
var testAgent = supertest(BASE_URL);
|
||||||
|
|
||||||
|
@ -35,19 +33,18 @@ test.group('DatasetController', (group) => {
|
||||||
email: 'alice@email.com',
|
email: 'alice@email.com',
|
||||||
password: 'password',
|
password: 'password',
|
||||||
});
|
});
|
||||||
|
|
||||||
const role = await Role.create({
|
const role = await Role.create({
|
||||||
name: 'administrator',
|
name: 'administrator',
|
||||||
display_name: 'admin',
|
display_name: 'admin',
|
||||||
description: 'User has access to all system functionality'
|
description: 'User has access to all system functionality',
|
||||||
});
|
});
|
||||||
await user.related('roles').attach([role.id]);
|
await user.related('roles').attach([role.id]);
|
||||||
|
|
||||||
|
|
||||||
const permission = await Permission.create({
|
const permission = await Permission.create({
|
||||||
name: 'dataset-edit',
|
name: 'dataset-edit',
|
||||||
display_name: 'edit dataset',
|
display_name: 'edit dataset',
|
||||||
description: 'allow role to edit datasets'
|
description: 'allow role to edit datasets',
|
||||||
});
|
});
|
||||||
await role.related('permissions').attach([permission.id]);
|
await role.related('permissions').attach([permission.id]);
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import { test } from '@japa/runner';
|
// import { test } from '@japa/runner';
|
||||||
|
|
||||||
test('display welcome page', async ({ client }) => {
|
// test('display welcome page', async ({ client }) => {
|
||||||
const response = await client.get('/welcome');
|
// const response = await client.get('/welcome');
|
||||||
|
|
||||||
response.assertStatus(200);
|
// response.assertStatus(200);
|
||||||
response.assertTextIncludes('<h1 class="title"> It Works! </h1>');
|
// response.assertTextIncludes('<h1 class="title"> It Works! </h1>');
|
||||||
});
|
// });
|
||||||
|
|
|
@ -10,8 +10,8 @@
|
||||||
"node_modules",
|
"node_modules",
|
||||||
"build",
|
"build",
|
||||||
"public",
|
"public",
|
||||||
"./resources/js/**/*.vue",
|
"./resources/js/**/*",
|
||||||
"./resources/js/**/*.ts"
|
// "./resources/js/**/*.ts"
|
||||||
],
|
],
|
||||||
// "exclude": ["./inertia/**/*"]
|
// "exclude": ["./inertia/**/*"]
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
|
@ -19,9 +19,10 @@
|
||||||
"outDir": "build",
|
"outDir": "build",
|
||||||
"rootDir": "./",
|
"rootDir": "./",
|
||||||
"sourceMap": true,
|
"sourceMap": true,
|
||||||
|
"sourceRoot": "./build",
|
||||||
"experimentalDecorators": true,
|
"experimentalDecorators": true,
|
||||||
"strictPropertyInitialization": false,
|
"strictPropertyInitialization": false,
|
||||||
"target": "esnext",
|
"target": "esnext", // Update to a version that supports top-level await
|
||||||
"skipLibCheck": true,
|
"skipLibCheck": true,
|
||||||
"esModuleInterop": true,
|
"esModuleInterop": true,
|
||||||
"allowSyntheticDefaultImports": true,
|
"allowSyntheticDefaultImports": true,
|
||||||
|
|
78
vite.config.ts
Normal file
78
vite.config.ts
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
import { defineConfig } from 'vite';
|
||||||
|
import adonisjs from '@adonisjs/vite/client';
|
||||||
|
// import { getDirname } from '@adonisjs/core/helpers';
|
||||||
|
import vue from '@vitejs/plugin-vue';
|
||||||
|
import path from 'path';
|
||||||
|
// import tailwind from '@tailwindcss/postcss';
|
||||||
|
// import autoprefixer from 'autoprefixer';
|
||||||
|
// import postcssNesting from 'postcss-nesting';
|
||||||
|
import inertia from '@adonisjs/inertia/client';
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
plugins: [
|
||||||
|
inertia(),
|
||||||
|
vue(),
|
||||||
|
adonisjs({
|
||||||
|
/**
|
||||||
|
* Entrypoints of your application. Each entrypoint will
|
||||||
|
* result in a separate bundle.
|
||||||
|
*/
|
||||||
|
entrypoints: ['resources/js/app.ts', 'resources/css/app.css'],
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Paths to watch and reload the browser on file change
|
||||||
|
*/
|
||||||
|
reload: ['resources/views/**/*.edge'],
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
server: {
|
||||||
|
port: 5173,
|
||||||
|
// host: '127.0.0.1'
|
||||||
|
},
|
||||||
|
|
||||||
|
// css: {
|
||||||
|
// postcss: {
|
||||||
|
// plugins: [
|
||||||
|
// postcssNesting(),
|
||||||
|
// tailwind(),
|
||||||
|
// autoprefixer(),
|
||||||
|
// ],
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
/**
|
||||||
|
* Define aliases for importing modules from
|
||||||
|
* your frontend code
|
||||||
|
*/
|
||||||
|
resolve: {
|
||||||
|
alias: {
|
||||||
|
'@': path.resolve('./resources/js/'),
|
||||||
|
'~': path.resolve(__dirname, 'node_modules/'),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
// optimizeDeps: {
|
||||||
|
// esbuildOptions: {
|
||||||
|
// target: 'esnext'
|
||||||
|
// },
|
||||||
|
// include: ['resources/js/**/*.{vue,js,jsx,ts,tsx}'],
|
||||||
|
// exclude: ['node_modules', 'app'],
|
||||||
|
// },
|
||||||
|
|
||||||
|
build: {
|
||||||
|
sourcemap: true,
|
||||||
|
outDir: 'public/assets',
|
||||||
|
emptyOutDir: true,
|
||||||
|
manifest: true,
|
||||||
|
rollupOptions: {
|
||||||
|
input: 'resources/js/app.ts',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// build: {
|
||||||
|
// outDir: 'public/assets',
|
||||||
|
// emptyOutDir: true,
|
||||||
|
// manifest: true,
|
||||||
|
// rollupOptions: {
|
||||||
|
// input: path.resolve(__dirname, 'resources/js/app.ts'),
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
});
|
|
@ -302,18 +302,18 @@ Encore.addLoader({
|
||||||
// vue$: 'vue/dist/vue.runtime.esm-bundler.js',
|
// vue$: 'vue/dist/vue.runtime.esm-bundler.js',
|
||||||
// });
|
// });
|
||||||
|
|
||||||
Encore.addLoader(babelLoader)
|
// Encore.addLoader(babelLoader)
|
||||||
// Encore.enableTypeScriptLoader(config => {
|
Encore.enableTypeScriptLoader(config => {
|
||||||
// // Loader-specific options
|
// Loader-specific options
|
||||||
// config.configFile = 'resources/js/tsconfig.json';
|
config.configFile = 'resources/js/tsconfig.json';
|
||||||
// config.appendTsSuffixTo = [/\.vue$/];
|
config.appendTsSuffixTo = [/\.vue$/];
|
||||||
// config.transpileOnly = true;
|
config.transpileOnly = true;
|
||||||
// config.happyPackMode = false;
|
config.happyPackMode = false;
|
||||||
// }, {
|
}, {
|
||||||
// // Directly change the exclude rule
|
// Directly change the exclude rule
|
||||||
// exclude: /node_modules/,
|
exclude: /node_modules/,
|
||||||
|
|
||||||
// })
|
})
|
||||||
.addAliases({
|
.addAliases({
|
||||||
'@': join(__dirname, 'resources/js'),
|
'@': join(__dirname, 'resources/js'),
|
||||||
'vue$': 'vue/dist/vue.runtime.esm-bundler.js',
|
'vue$': 'vue/dist/vue.runtime.esm-bundler.js',
|
||||||
|
|
Loading…
Add table
Reference in a new issue