diff --git a/generate_sitemap.js b/generate_sitemap.js
deleted file mode 100644
index 0ede4094..00000000
--- a/generate_sitemap.js
+++ /dev/null
@@ -1,328 +0,0 @@
-import { simpleSitemapAndIndex } from 'sitemap'
-import algoliasearch from 'algoliasearch'
-import contentful from 'contentful'
-
-const PORTAL_BASE_URL = process.env.ROOL_URL || 'https://staging.sparc.science'
-
-// Algolia creds
-const ALGOLIA_APP_ID = process.env.ALGOLIA_APP_ID
-const ALGOLIA_API_KEY = process.env.ALGOLIA_API_KEY
-const ALGOLIA_INDEX = process.env.ALGOLIA_INDEX || 'k-core_dev'
-
-const algoliaClient = algoliasearch(ALGOLIA_APP_ID, ALGOLIA_API_KEY)
-const algoliaIndex = algoliaClient.initIndex(ALGOLIA_INDEX)
-
-// Contentful
-const CTF_SPACE_ID = process.env.CTF_SPACE_ID
-const CTF_CDA_ACCESS_TOKEN = process.env.CTF_CDA_ACCESS_TOKEN
-const CTF_API_HOST = process.env.CTF_API_HOST || 'preview.contentful.com'
-
-// Checking required variables
-if (
- ![
- PORTAL_BASE_URL,
- ALGOLIA_APP_ID,
- ALGOLIA_API_KEY,
- ALGOLIA_INDEX,
- CTF_SPACE_ID,
- CTF_CDA_ACCESS_TOKEN,
- CTF_API_HOST
- ].every(env => env)
-) {
- console.error('At least one required environment variable is missing.')
- process.exit(9)
-}
-
-const contentfulClient = contentful.createClient({
- space: CTF_SPACE_ID,
- accessToken: CTF_CDA_ACCESS_TOKEN,
- host: CTF_API_HOST
-})
-
-// Add static URLs here
-const urls = new Set([
- '/data',
- '/about',
- '/contact-us',
- '/share-data'
-])
-
-// DATA
-
-// Fetching DATASETS IDs
-process.stdout.write('Fetching datasets from Algolia...')
-
-const datasetResp = await algoliaIndex.search('', {
- hitsPerPage: 9999,
- facets: '["*"]',
- filters: '(NOT item.published.status:embargo OR item.published.status:embargo) AND item.types.name:Dataset'
-})
-
-process.stdout.clearLine(0)
-process.stdout.cursorTo(0)
-process.stdout.write('Fetching datasets from Algolia... Done. Found ' + datasetResp.hits.length + ' URLs.\n')
-
-datasetResp.hits.forEach(dataset => {
- urls.add(PORTAL_BASE_URL + '/datasets/' + dataset.objectID)
-})
-
-// Fetching ANATOMICAL MODELS IDs
-process.stdout.write('Fetching anatomical models from Algolia...')
-
-const anatomicalResp = await algoliaIndex.search('', {
- hitsPerPage: 9999,
- facets: '["*"]',
- filters: '(NOT item.published.status:embargo OR item.published.status:embargo) AND (NOT item.types.name:Dataset AND item.types.name:Scaffold)'
-})
-
-process.stdout.clearLine(0)
-process.stdout.cursorTo(0)
-process.stdout.write('Fetching anatomical models from Algolia... Done. Found ' + anatomicalResp.hits.length + ' URLs.\n')
-
-anatomicalResp.hits.forEach(dataset => {
- urls.add(PORTAL_BASE_URL + '/datasets/' + dataset.objectID)
-})
-
-// Fetching COMPUTATIONAL MODEL IDs
-process.stdout.write('Fetching computational models from Algolia...')
-
-const computationalResp = await algoliaIndex.search('', {
- hitsPerPage: 9999,
- facets: '["*"]',
- filters: '(NOT item.published.status:embargo OR item.published.status:embargo) AND (NOT item.types.name:Dataset AND NOT item.types.name:Scaffold)'
-})
-
-process.stdout.clearLine(0)
-process.stdout.cursorTo(0)
-process.stdout.write('Fetching computational models from Algolia... Done. Found ' + computationalResp.hits.length + ' URLs.\n')
-
-computationalResp.hits.forEach(dataset => {
- urls.add(PORTAL_BASE_URL + '/datasets/' + dataset.objectID)
-})
-
-// Fetching PROJECTS IDs
-process.stdout.write('Fetching projects from Contentful...')
-
-const projectResp = await contentfulClient.getEntries({
- content_type: 'sparcAward',
- limit: 1000
-})
-
-process.stdout.clearLine(0)
-process.stdout.cursorTo(0)
-process.stdout.write('Fetching projects from Contentful... Done. Found ' + projectResp.items.length + ' URLs.\n')
-
-projectResp.items.forEach(project => {
- urls.add(PORTAL_BASE_URL + '/about/projects/' + project.sys.id)
-})
-
-// TOOLS & RESOURCES
-
-// Fetching DATABASES IDs
-process.stdout.write('Fetching databases from Contentful...')
-
-const databasesResp = await contentfulClient.getEntries({
- content_type: 'sparcPartners',
- limit: 1000,
- 'fields.resourceType[in]': 'Data and Models'
-})
-
-process.stdout.clearLine(0)
-process.stdout.cursorTo(0)
-
-let counter = 0
-databasesResp.items.forEach(db => {
- if (db.fields.url && db.fields.url.includes(PORTAL_BASE_URL)) {
- counter++
- urls.add(db.fields.url)
- }
-})
-
-process.stdout.write('Fetching databases from Contentful... Done. Found ' + counter + ' URLs.\n')
-
-// Fetching SOFTWARE IDs
-process.stdout.write('Fetching software from Contentful...')
-
-const softwareResp = await contentfulClient.getEntries({
- content_type: 'sparcPartners',
- limit: 1000,
- 'fields.resourceType[in]': 'Software'
-})
-
-process.stdout.clearLine(0)
-process.stdout.cursorTo(0)
-
-counter = 0
-softwareResp.items.forEach(db => {
- if (db.fields.url && db.fields.url.includes(PORTAL_BASE_URL)) {
- counter++
- urls.add(db.fields.url)
- }
-})
-
-process.stdout.write('Fetching software from Contentful... Done. Found ' + counter + ' URLs.\n')
-
-// Fetching INFORMATION SERVICES IDs
-process.stdout.write('Fetching software from Contentful...')
-
-const infoResp = await contentfulClient.getEntries({
- content_type: 'sparcPartners',
- limit: 1000,
- 'fields.resourceType[in]': 'Information Services'
-})
-
-process.stdout.clearLine(0)
-process.stdout.cursorTo(0)
-
-counter = 0
-infoResp.items.forEach(db => {
- if (db.fields.url && db.fields.url.includes(PORTAL_BASE_URL)) {
- counter++
- urls.add(db.fields.url)
- }
-})
-
-process.stdout.write('Fetching information services from Contentful... Done. Found ' + counter + ' URLs.\n')
-
-// Fetching DEVICES IDs
-process.stdout.write('Fetching devices from Contentful...')
-
-const deviceResp = await contentfulClient.getEntries({
- content_type: 'sparcPartners',
- limit: 1000,
- 'fields.resourceType[in]': 'Devices'
-})
-
-process.stdout.clearLine(0)
-process.stdout.cursorTo(0)
-
-counter = 0
-deviceResp.items.forEach(db => {
- if (db.fields.url && db.fields.url.includes(PORTAL_BASE_URL)) {
- counter++
- urls.add(db.fields.url)
- }
-})
-
-process.stdout.write('Fetching devices from Contentful... Done. Found ' + counter + ' URLs.\n')
-
-// Fetching BIOLOGICAL IDs
-process.stdout.write('Fetching biological from Contentful...')
-
-const bioResp = await contentfulClient.getEntries({
- content_type: 'sparcPartners',
- limit: 1000,
- 'fields.resourceType[in]': 'Biologicals'
-})
-
-process.stdout.clearLine(0)
-process.stdout.cursorTo(0)
-
-counter = 0
-bioResp.items.forEach(db => {
- if (db.fields.url && db.fields.url.includes(PORTAL_BASE_URL)) {
- counter++
- urls.add(db.fields.url)
- }
-})
-
-process.stdout.write('Fetching biological from Contentful... Done. Found ' + counter + ' URLs.\n')
-
-// NEWS & EVENTS
-
-// Fetching NEWS IDs
-process.stdout.write('Fetching news from Contentful...')
-
-const newsResp = await contentfulClient.getEntries({
- content_type: 'news',
- limit: 1000
-})
-
-process.stdout.clearLine(0)
-process.stdout.cursorTo(0)
-
-counter = 0
-newsResp.items.forEach(db => {
- if (db.fields.url && db.fields.url.includes(PORTAL_BASE_URL)) {
- counter++
- urls.add(db.fields.url)
- }
-})
-
-process.stdout.write('Fetching news from Contentful... Done. Found ' + counter + ' URLs.\n')
-
-// Fetching EVENTS IDs
-process.stdout.write('Fetching events from Contentful...')
-
-const eventsResp = await contentfulClient.getEntries({
- content_type: 'event',
- limit: 1000
-})
-
-process.stdout.clearLine(0)
-process.stdout.cursorTo(0)
-
-counter = 0
-eventsResp.items.forEach(db => {
- if (db.fields.url && db.fields.url.includes(PORTAL_BASE_URL)) {
- counter++
- urls.add(db.fields.url)
- }
-})
-
-process.stdout.write('Fetching events from Contentful... Done. Found ' + counter + ' URLs.\n')
-
-// Fetching COMMUNITY SPOTLIGHT IDs
-process.stdout.write('Fetching community spotlights from Contentful...')
-
-const commResp = await contentfulClient.getEntries({
- content_type: 'communitySpotlight',
- limit: 1000,
- 'fields.itemType[in]': undefined,
- 'fields.anatomicalStructure[in]': undefined
-})
-
-process.stdout.clearLine(0)
-process.stdout.cursorTo(0)
-
-counter = 0
-commResp.items.forEach(db => {
- if (db.fields.linkedItem && db.fields.linkedItem.fields.storyRoute) {
- counter++
- urls.add(PORTAL_BASE_URL + '/news-and-events/community-spotlight/success-stories/' + db.fields.linkedItem.fields.storyRoute)
- }
-})
-
-// Fetching ABOUT DETAILS IDs
-process.stdout.write('Fetching about details from Contentful...')
-
-const aboutResp = await contentfulClient.getEntries({
- content_type: 'aboutPageSecondLevel',
- limit: 1000
-})
-
-process.stdout.clearLine(0)
-process.stdout.cursorTo(0)
-
-counter = 0
-aboutResp.items.forEach(db => {
- if (db.sys.id) {
- counter++
- urls.add(PORTAL_BASE_URL + '/about/' + db.sys.id)
- }
-})
-
-process.stdout.write('Fetching about details from Contentful... Done. Found ' + counter + ' URLs.\n')
-
-console.log('Finished scraping data. URLs found:', urls.size)
-process.stdout.write('Generating sitemap...')
-
-simpleSitemapAndIndex({
- hostname: PORTAL_BASE_URL,
- destinationDir: './public',
- sourceData: Array.from(urls).map(url => ({ url }))
-})
-
-process.stdout.clearLine(0)
-process.stdout.cursorTo(0)
-console.log('Generating sitemap... Done. Sitemap and sitemap index can be found in ./public.')
diff --git a/nuxt.config.ts b/nuxt.config.ts
index 889fd9db..6803f7c8 100644
--- a/nuxt.config.ts
+++ b/nuxt.config.ts
@@ -57,7 +57,8 @@ export default defineNuxtConfig({
'@pinia-plugin-persistedstate/nuxt',
'@zadigetvoltaire/nuxt-gtm',
'@nuxtjs/turnstile',
- '@nuxtjs/sitemap'
+ '@nuxtjs/sitemap',
+ "nuxt-simple-robots"
],
turnstile: {
siteKey: process.env.NUXT_PUBLIC_TURNSTILE_SITE_KEY || '0x4AAAAAAATLCwNJ5HNQWRsX'
@@ -200,8 +201,29 @@ export default defineNuxtConfig({
*/
css: ['sparc-design-system-components-2/dist/style.css', '@/assets/_base.scss'],
sitemap: {
+ sources: [
+ '/api/__sitemap__/urls'
+ ],
xslColumns: [
{ label: 'URL', width: '100%' }
],
},
+ robots: {
+ sitemap: 'https://sparc.science/sitemap.xml',
+ allow: ['/datasets'],
+ // provide simple disallow rules for all robots `user-agent: *`
+ // disallowing certain pages that are either redirects, authticated routes, or causing bots to recursively crawl
+ disallow: [
+ '/welcome',
+ '/user',
+ '/data',
+ '/contact-us',
+ '/help',
+ '/signup',
+ '/maps',
+ '/news-and-events/submit',
+ '/news-and-events/community-spotlight/submit'
+ ],
+ blockNonSeoBots: true
+ }
})
diff --git a/package.json b/package.json
index e1d4ee6e..b8d6fef4 100644
--- a/package.json
+++ b/package.json
@@ -18,6 +18,7 @@
"@zadigetvoltaire/nuxt-gtm": "^0.0.13",
"cypress": "13.9.0",
"nuxt": "^3.8.2",
+ "nuxt-simple-robots": "^4.0.0-rc.19",
"nuxt-svgo": "^3.5.6",
"sass": "^1.66.1",
"sitemap": "^7.1.1"
diff --git a/pages/data/index.vue b/pages/data/index.vue
index fa07b745..6a7510bd 100644
--- a/pages/data/index.vue
+++ b/pages/data/index.vue
@@ -6,6 +6,7 @@
+
diff --git a/server/api/__sitemap__/urls.js b/server/api/__sitemap__/urls.js
new file mode 100644
index 00000000..753caa4c
--- /dev/null
+++ b/server/api/__sitemap__/urls.js
@@ -0,0 +1,181 @@
+import algoliasearch from 'algoliasearch'
+import contentful from 'contentful'
+import { defineSitemapEventHandler } from '#imports'
+
+export default defineSitemapEventHandler(async () => {
+ try {
+ const PORTAL_BASE_URL = process.env.ROOL_URL || 'https://staging.sparc.science'
+
+ // Algolia creds
+ const ALGOLIA_APP_ID = process.env.ALGOLIA_APP_ID
+ const ALGOLIA_API_KEY = process.env.ALGOLIA_API_KEY
+ const ALGOLIA_INDEX = process.env.ALGOLIA_INDEX || 'k-core_dev'
+
+ const algoliaClient = algoliasearch(ALGOLIA_APP_ID, ALGOLIA_API_KEY)
+ const algoliaIndex = algoliaClient.initIndex(ALGOLIA_INDEX)
+
+ // Contentful
+ const CTF_SPACE_ID = process.env.CTF_SPACE_ID
+ const CTF_CDA_ACCESS_TOKEN = process.env.CTF_CDA_ACCESS_TOKEN
+ const CTF_API_HOST = process.env.CTF_API_HOST || 'preview.contentful.com'
+
+ const contentfulClient = contentful.createClient({
+ space: CTF_SPACE_ID,
+ accessToken: CTF_CDA_ACCESS_TOKEN,
+ host: CTF_API_HOST
+ })
+
+ let urls = []
+
+ // Fetching Algolia records
+
+ const datasetResp = await algoliaIndex.search('', {
+ hitsPerPage: 9999,
+ facets: '["*"]'
+ })
+
+ datasetResp.hits.forEach(dataset => {
+ urls.push(PORTAL_BASE_URL + '/datasets/' + dataset.objectID)
+ })
+
+ // Fetching PROJECTS IDs
+ const projectResp = await contentfulClient.getEntries({
+ content_type: 'sparcAward',
+ limit: 1000
+ })
+
+ projectResp.items.forEach(project => {
+ urls.push(PORTAL_BASE_URL + '/about/projects/' + project.sys.id)
+ })
+
+ // TOOLS & RESOURCES
+
+ // Fetching DATABASES IDs
+ const databasesResp = await contentfulClient.getEntries({
+ content_type: 'sparcPartners',
+ limit: 1000,
+ 'fields.resourceType[in]': 'Data and Models'
+ })
+
+ databasesResp.items.forEach(db => {
+ if (db.fields.url && db.fields.url.includes(PORTAL_BASE_URL)) {
+ urls.push(db.fields.url)
+ }
+ })
+
+ // Fetching SOFTWARE IDs
+
+ const softwareResp = await contentfulClient.getEntries({
+ content_type: 'sparcPartners',
+ limit: 1000,
+ 'fields.resourceType[in]': 'Software'
+ })
+
+ softwareResp.items.forEach(db => {
+ if (db.fields.url && db.fields.url.includes(PORTAL_BASE_URL)) {
+ urls.push(db.fields.url)
+ }
+ })
+
+ // Fetching INFORMATION SERVICES IDs
+
+ const infoResp = await contentfulClient.getEntries({
+ content_type: 'sparcPartners',
+ limit: 1000,
+ 'fields.resourceType[in]': 'Information Services'
+ })
+
+ infoResp.items.forEach(db => {
+ if (db.fields.url && db.fields.url.includes(PORTAL_BASE_URL)) {
+ urls.push(db.fields.url)
+ }
+ })
+
+ // Fetching DEVICES IDs
+ const deviceResp = await contentfulClient.getEntries({
+ content_type: 'sparcPartners',
+ limit: 1000,
+ 'fields.resourceType[in]': 'Devices'
+ })
+
+ deviceResp.items.forEach(db => {
+ if (db.fields.url && db.fields.url.includes(PORTAL_BASE_URL)) {
+ urls.push(db.fields.url)
+ }
+ })
+
+ // Fetching BIOLOGICAL IDs
+
+ const bioResp = await contentfulClient.getEntries({
+ content_type: 'sparcPartners',
+ limit: 1000,
+ 'fields.resourceType[in]': 'Biologicals'
+ })
+
+ bioResp.items.forEach(db => {
+ if (db.fields.url && db.fields.url.includes(PORTAL_BASE_URL)) {
+ urls.push(db.fields.url)
+ }
+ })
+
+ // NEWS & EVENTS
+
+ // Fetching NEWS IDs
+ const newsResp = await contentfulClient.getEntries({
+ content_type: 'news',
+ limit: 1000
+ })
+
+ newsResp.items.forEach(db => {
+ if (db.fields.url && db.fields.url.includes(PORTAL_BASE_URL)) {
+ urls.push(db.fields.url)
+ }
+ })
+
+ // Fetching EVENTS IDs
+ const eventsResp = await contentfulClient.getEntries({
+ content_type: 'event',
+ limit: 1000
+ })
+
+ eventsResp.items.forEach(db => {
+ if (db.fields.url && db.fields.url.includes(PORTAL_BASE_URL)) {
+ urls.push(db.fields.url)
+ }
+ })
+
+ // Fetching COMMUNITY SPOTLIGHT IDs
+
+ const commResp = await contentfulClient.getEntries({
+ content_type: 'communitySpotlight',
+ limit: 1000,
+ 'fields.itemType[in]': undefined,
+ 'fields.anatomicalStructure[in]': undefined
+ })
+
+ commResp.items.forEach(db => {
+ if (db.fields.linkedItem && db.fields.linkedItem.fields.storyRoute) {
+ urls.push(PORTAL_BASE_URL + '/news-and-events/community-spotlight/success-stories/' + db.fields.linkedItem.fields.storyRoute)
+ }
+ })
+
+ // Fetching ABOUT DETAILS IDs
+
+ const aboutResp = await contentfulClient.getEntries({
+ content_type: 'aboutPageSecondLevel',
+ limit: 1000
+ })
+
+ aboutResp.items.forEach(db => {
+ if (db.sys.id) {
+ urls.push(PORTAL_BASE_URL + '/about/' + db.sys.id)
+ }
+ })
+
+ return urls.map((url) => {
+ return { loc: url }
+ })
+ } catch (err) {
+ console.error('Error fetching dynamic routes:', err)
+ }
+})
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index f6012218..549047bf 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4190,6 +4190,13 @@
dependencies:
"@iconify/types" "*"
+"@iconify/collections@^1.0.406":
+ version "1.0.437"
+ resolved "https://registry.yarnpkg.com/@iconify/collections/-/collections-1.0.437.tgz#8631066a82794b497441dc0d98a538ec65c134bd"
+ integrity sha512-eGY1y8dP94zAh0a8hslIsQ6GofWzNwXKXXMW5F+rEr+EL+yO0RrDxYJOKTnYYvqzNsCBbmNr9kgX17OGQWeaEA==
+ dependencies:
+ "@iconify/types" "*"
+
"@iconify/types@*", "@iconify/types@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@iconify/types/-/types-2.0.0.tgz#ab0e9ea681d6c8a1214f30cd741fe3a20cc57f57"
@@ -4208,6 +4215,13 @@
local-pkg "^0.5.0"
mlly "^1.6.1"
+"@iconify/vue@^4.1.1":
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/@iconify/vue/-/vue-4.1.2.tgz#b76135785ca366b29bf0736eee9cfefc1c2ef79e"
+ integrity sha512-CQnYqLiQD5LOAaXhBrmj1mdL2/NCJvwcC4jtW2Z8ukhThiFkLDkutarTOV2trfc9EXqUqRs0KqXOL9pZ/IyysA==
+ dependencies:
+ "@iconify/types" "^2.0.0"
+
"@ioredis/commands@^1.1.1":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11"
@@ -4768,6 +4782,15 @@
"@nuxt/schema" "^3.11.2"
execa "^7.2.0"
+"@nuxt/devtools-kit@^1.1.1", "@nuxt/devtools-kit@^1.3.6":
+ version "1.3.9"
+ resolved "https://registry.yarnpkg.com/@nuxt/devtools-kit/-/devtools-kit-1.3.9.tgz#ad2dc18a76e2508913f1693105185051b45a1bd3"
+ integrity sha512-tgr/F+4BbI53/JxgaXl3cuV9dMuCXMsd4GEXN+JqtCdAkDbH3wL79GGWx0/6I9acGzRsB6UZ1H6U96nfgcIrAw==
+ dependencies:
+ "@nuxt/kit" "^3.12.2"
+ "@nuxt/schema" "^3.12.3"
+ execa "^7.2.0"
+
"@nuxt/devtools-ui-kit@^1.0.8", "@nuxt/devtools-ui-kit@^1.1.5":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@nuxt/devtools-ui-kit/-/devtools-ui-kit-1.2.0.tgz#89fbda7e557ad675eeade2a59a05c2d7ccc005d9"
@@ -4899,6 +4922,32 @@
unimport "^3.7.1"
untyped "^1.4.2"
+"@nuxt/kit@^3.11.1", "@nuxt/kit@^3.12.2":
+ version "3.12.3"
+ resolved "https://registry.yarnpkg.com/@nuxt/kit/-/kit-3.12.3.tgz#71a8ea30feb54e0c6fb3b7df33b71aa08ba05f8f"
+ integrity sha512-5R8FZLDxBKlkDWYsqwU1tctGJ5vwMA96WBrNkpQ0LznB2/p+3MWWTO6vz+0P0F9xvZZfkk/KKyZ3uUhnG9VJOA==
+ dependencies:
+ "@nuxt/schema" "3.12.3"
+ c12 "^1.11.1"
+ consola "^3.2.3"
+ defu "^6.1.4"
+ destr "^2.0.3"
+ globby "^14.0.2"
+ hash-sum "^2.0.0"
+ ignore "^5.3.1"
+ jiti "^1.21.6"
+ klona "^2.0.6"
+ knitwork "^1.1.0"
+ mlly "^1.7.1"
+ pathe "^1.1.2"
+ pkg-types "^1.1.2"
+ scule "^1.3.0"
+ semver "^7.6.2"
+ ufo "^1.5.3"
+ unctx "^2.3.1"
+ unimport "^3.7.2"
+ untyped "^1.4.2"
+
"@nuxt/kit@^3.7.0":
version "3.10.3"
resolved "https://registry.yarnpkg.com/@nuxt/kit/-/kit-3.10.3.tgz#911bc431d9b7541a7269e9e63333f70c8ecb5fd6"
@@ -4974,6 +5023,24 @@
unimport "^3.7.1"
untyped "^1.4.2"
+"@nuxt/schema@3.12.3", "@nuxt/schema@^3.12.3":
+ version "3.12.3"
+ resolved "https://registry.yarnpkg.com/@nuxt/schema/-/schema-3.12.3.tgz#da72479aea11a5136d1d08fe2889a4cac4ad3533"
+ integrity sha512-Zw/2stN5CWVOHQ6pKyewk3tvYW5ROBloTGyIbie7/TprJT5mL+E9tTgAxOZtkoKSFaYEQXZgE1K2OzMelhLRzw==
+ dependencies:
+ compatx "^0.1.8"
+ consola "^3.2.3"
+ defu "^6.1.4"
+ hookable "^5.5.3"
+ pathe "^1.1.2"
+ pkg-types "^1.1.2"
+ scule "^1.3.0"
+ std-env "^3.7.0"
+ ufo "^1.5.3"
+ uncrypto "^0.1.3"
+ unimport "^3.7.2"
+ untyped "^1.4.2"
+
"@nuxt/telemetry@^2.5.3":
version "2.5.3"
resolved "https://registry.yarnpkg.com/@nuxt/telemetry/-/telemetry-2.5.3.tgz#e702bbccfb5cc4ab9b0cfc8239e96ed9e2ccfc74"
@@ -5497,6 +5564,11 @@
resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-1.3.0.tgz#5b93b51ddb8def1e3a1543107f9b5b0540f716f6"
integrity sha512-7fedsBfuILDTBmrYZNFI8B6ATTxhQAasUHllHmjvSZPnoq4bULWoTpHwmuQvZ8Aq03/tAa2IGo6RXqWtHdWaCA==
+"@shikijs/core@1.6.4":
+ version "1.6.4"
+ resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-1.6.4.tgz#06bbb38f2cac7ee587be68586a9a9c0768a06194"
+ integrity sha512-WTU9rzZae1p2v6LOxMf6LhtmZOkIHYYW160IuahUyJy7YXPPjyWZLR1ag+SgD22ZMxZtz1gfU6Tccc8t0Il/XA==
+
"@sigstore/bundle@^2.1.1":
version "2.1.1"
resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-2.1.1.tgz#7fad9a1728939301607103722ac6f2a083d2f09a"
@@ -7995,6 +8067,24 @@ c12@^1.10.0:
pkg-types "^1.0.3"
rc9 "^2.1.1"
+c12@^1.11.1:
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/c12/-/c12-1.11.1.tgz#d5244e95407af450a523e44eb57e5b87b82f8677"
+ integrity sha512-KDU0TvSvVdaYcQKQ6iPHATGz/7p/KiVjPg4vQrB6Jg/wX9R0yl5RZxWm9IoZqaIHD2+6PZd81+KMGwRr/lRIUg==
+ dependencies:
+ chokidar "^3.6.0"
+ confbox "^0.1.7"
+ defu "^6.1.4"
+ dotenv "^16.4.5"
+ giget "^1.2.3"
+ jiti "^1.21.6"
+ mlly "^1.7.1"
+ ohash "^1.1.3"
+ pathe "^1.1.2"
+ perfect-debounce "^1.0.0"
+ pkg-types "^1.1.1"
+ rc9 "^2.1.2"
+
c12@^1.5.1, c12@^1.6.1:
version "1.6.1"
resolved "https://registry.yarnpkg.com/c12/-/c12-1.6.1.tgz#e6d3198d214cce66f82101e58e30daf2a0f58737"
@@ -8687,6 +8777,11 @@ commondir@^1.0.1:
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==
+compatx@^0.1.8:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/compatx/-/compatx-0.1.8.tgz#af6f61910ade6ce1073c0fdff23c786bcd75c026"
+ integrity sha512-jcbsEAR81Bt5s1qOFymBufmCbXCXbk0Ql+K5ouj6gCyx2yHlu6AgmGIi9HxfKixpUDO5bCFJUHQ5uM6ecbTebw==
+
component-emitter@^1.2.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17"
@@ -11167,6 +11262,11 @@ flatted@^3.2.9:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf"
integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
+flatted@^3.3.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a"
+ integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==
+
flatten-vertex-data@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/flatten-vertex-data/-/flatten-vertex-data-1.0.2.tgz#889fd60bea506006ca33955ee1105175fb620219"
@@ -11585,7 +11685,7 @@ getpass@^0.1.1:
dependencies:
assert-plus "^1.0.0"
-giget@^1.0.0:
+giget@^1.0.0, giget@^1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/giget/-/giget-1.2.3.tgz#ef6845d1140e89adad595f7f3bb60aa31c672cb6"
integrity sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==
@@ -11855,6 +11955,18 @@ globby@^14.0.1:
slash "^5.1.0"
unicorn-magic "^0.1.0"
+globby@^14.0.2:
+ version "14.0.2"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-14.0.2.tgz#06554a54ccfe9264e5a9ff8eded46aa1e306482f"
+ integrity sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==
+ dependencies:
+ "@sindresorhus/merge-streams" "^2.1.0"
+ fast-glob "^3.3.2"
+ ignore "^5.2.4"
+ path-type "^5.0.0"
+ slash "^5.1.0"
+ unicorn-magic "^0.1.0"
+
globby@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
@@ -13292,6 +13404,11 @@ jiti@^1.21.0:
resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d"
integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==
+jiti@^1.21.6:
+ version "1.21.6"
+ resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268"
+ integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==
+
joycon@^2.2.3:
version "2.2.5"
resolved "https://registry.yarnpkg.com/joycon/-/joycon-2.2.5.tgz#8d4cf4cbb2544d7b7583c216fcdfec19f6be1615"
@@ -13322,6 +13439,11 @@ js-tokens@^8.0.2:
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-8.0.3.tgz#1c407ec905643603b38b6be6977300406ec48775"
integrity sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==
+js-tokens@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-9.0.0.tgz#0f893996d6f3ed46df7f0a3b12a03f5fd84223c1"
+ integrity sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==
+
js-yaml@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
@@ -14574,7 +14696,7 @@ mkdirp@^1.0.3:
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
-mlly@1.4.0, mlly@^1.2.0, mlly@^1.3.0, mlly@^1.4.2, mlly@^1.5.0, mlly@^1.6.0, mlly@^1.6.1:
+mlly@1.4.0, mlly@^1.2.0, mlly@^1.3.0, mlly@^1.4.2, mlly@^1.5.0, mlly@^1.6.0, mlly@^1.6.1, mlly@^1.7.0, mlly@^1.7.1:
version "1.4.0"
resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.4.0.tgz#830c10d63f1f97bd8785377b24dc2a15d972832b"
integrity sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==
@@ -15102,6 +15224,37 @@ nuxi@^3.10.0:
optionalDependencies:
fsevents "~2.3.3"
+nuxt-icon@^0.6.10:
+ version "0.6.10"
+ resolved "https://registry.yarnpkg.com/nuxt-icon/-/nuxt-icon-0.6.10.tgz#a39afa47286a20dd78a9f9b4235ed143d9b44e1b"
+ integrity sha512-S9zHVA66ox4ZSpMWvCjqKZC4ZogC0s2z3vZs+M4D95YXGPEXwxDZu+insMKvkbe8+k7gvEmtTk0eq3KusKlxiw==
+ dependencies:
+ "@iconify/collections" "^1.0.406"
+ "@iconify/vue" "^4.1.1"
+ "@nuxt/devtools-kit" "^1.1.1"
+ "@nuxt/kit" "^3.11.1"
+
+nuxt-simple-robots@^4.0.0-rc.19:
+ version "4.0.0-rc.19"
+ resolved "https://registry.yarnpkg.com/nuxt-simple-robots/-/nuxt-simple-robots-4.0.0-rc.19.tgz#24303eed8c86427e9c613e33d9317e6932f07222"
+ integrity sha512-Q9ExiIPvvircFY8oDi/+7WZjTvVMu6acXberEQQwfIx6e+wXat7ZRR9POd2cucJxlxeFgPNqceHad+WGQ8YneA==
+ dependencies:
+ "@nuxt/devtools-kit" "^1.3.6"
+ "@nuxt/kit" "^3.12.2"
+ consola "^3.2.3"
+ defu "^6.1.4"
+ flatted "^3.3.1"
+ floating-vue "5.2.2"
+ nuxt-icon "^0.6.10"
+ nuxt-site-config "^2.2.12"
+ nuxt-site-config-kit "^2.2.12"
+ pathe "^1.1.2"
+ pkg-types "^1.1.1"
+ shiki "1.6.4"
+ sirv "^2.0.4"
+ std-env "^3.7.0"
+ ufo "^1.5.3"
+
nuxt-site-config-kit@2.2.12, nuxt-site-config-kit@^2.2.12:
version "2.2.12"
resolved "https://registry.yarnpkg.com/nuxt-site-config-kit/-/nuxt-site-config-kit-2.2.12.tgz#367b73afeab6248d45fcebf7aedfc8c853c0313d"
@@ -16008,6 +16161,15 @@ pkg-types@^1.1.0:
mlly "^1.6.1"
pathe "^1.1.2"
+pkg-types@^1.1.1, pkg-types@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.1.3.tgz#161bb1242b21daf7795036803f28e30222e476e3"
+ integrity sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==
+ dependencies:
+ confbox "^0.1.7"
+ mlly "^1.7.1"
+ pathe "^1.1.2"
+
pkg-up@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f"
@@ -16727,6 +16889,14 @@ rc9@^2.1.1:
destr "^2.0.0"
flat "^5.0.2"
+rc9@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/rc9/-/rc9-2.1.2.tgz#6282ff638a50caa0a91a31d76af4a0b9cbd1080d"
+ integrity sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==
+ dependencies:
+ defu "^6.1.4"
+ destr "^2.0.3"
+
rc@^1.0.1, rc@^1.1.6:
version "1.2.8"
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
@@ -17495,7 +17665,7 @@ semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.5.0, semve
dependencies:
lru-cache "^6.0.0"
-semver@^7.3.7:
+semver@^7.3.7, semver@^7.6.2:
version "7.6.2"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13"
integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==
@@ -17677,6 +17847,13 @@ shiki@1.2.4:
dependencies:
"@shikijs/core" "1.2.4"
+shiki@1.6.4:
+ version "1.6.4"
+ resolved "https://registry.yarnpkg.com/shiki/-/shiki-1.6.4.tgz#7413d7425732fb603e0eafa33aeb7cd6a1b0da74"
+ integrity sha512-X88chM7w8jnadoZtjPTi5ahCJx9pc9f8GfEkZAEYUTlcUZIEw2D/RY86HI/LkkE7Nj8TQWkiBfaFTJ3VJT6ESg==
+ dependencies:
+ "@shikijs/core" "1.6.4"
+
shiki@^1.1.7:
version "1.3.0"
resolved "https://registry.yarnpkg.com/shiki/-/shiki-1.3.0.tgz#3eda35cb49f6f0a98525e9da48fc072e6c655a3f"
@@ -18318,6 +18495,13 @@ strip-literal@^2.0.0:
dependencies:
js-tokens "^8.0.2"
+strip-literal@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-2.1.0.tgz#6d82ade5e2e74f5c7e8739b6c84692bd65f0bd2a"
+ integrity sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==
+ dependencies:
+ js-tokens "^9.0.0"
+
strip-outer@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631"
@@ -19137,6 +19321,25 @@ unimport@^3.6.0, unimport@^3.7.1:
strip-literal "^1.3.0"
unplugin "^1.5.1"
+unimport@^3.7.2:
+ version "3.7.2"
+ resolved "https://registry.yarnpkg.com/unimport/-/unimport-3.7.2.tgz#36fead8bdeb2695b6026861318bf111ad0596a5b"
+ integrity sha512-91mxcZTadgXyj3lFWmrGT8GyoRHWuE5fqPOjg5RVtF6vj+OfM5G6WCzXjuYtSgELE5ggB34RY4oiCSEP8I3AHw==
+ dependencies:
+ "@rollup/pluginutils" "^5.1.0"
+ acorn "^8.11.3"
+ escape-string-regexp "^5.0.0"
+ estree-walker "^3.0.3"
+ fast-glob "^3.3.2"
+ local-pkg "^0.5.0"
+ magic-string "^0.30.10"
+ mlly "^1.7.0"
+ pathe "^1.1.2"
+ pkg-types "^1.1.1"
+ scule "^1.3.0"
+ strip-literal "^2.1.0"
+ unplugin "^1.10.1"
+
union-value@^1.0.0, union-value@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"