diff --git a/.eleventy.js b/.eleventy.js
deleted file mode 100644
index 2d1bbd6..0000000
--- a/.eleventy.js
+++ /dev/null
@@ -1,192 +0,0 @@
-/**
- *
- * Eleventy command line debugging codes
- *
- *
- * Eleventy:Config
- * Eleventy:UserConfig
- * Eleventy:TemplateConfig
- *
- * Eleventy:CommandCheck
- *
- * Eleventy:EleventyFiles
- * Eleventy:TemplateWriter
- * Eleventy:TemplatePassthroughManager
- * Eleventy:TemplatePassthrough
- * Eleventy:TemplateData
- * Eleventy:Template
- *
- * Eleventy:ComputedData
- *
- * Eleventy:Benchmark
- *
- * EleventyAssets
- */
-
-
-import fs from 'fs-extra'
-import replace_css_url from 'replace-css-url'
-import dotenv from 'dotenv'
-import { InlineCodeManager } from '@11ty/eleventy-assets'
-import { transformSync } from 'esbuild'
-
-
-import nuxtConfig from './nuxt.config'
-
-// Setup dotenv
-dotenv.config()
-
-
-function getAssetFilePath(componentName) {
- return `./${componentName}`
-}
-
-const inlineAssetCache = new Map()
-
-const appBundles = new Map()
-
-module.exports = function ( eleventyConfig ) {
- // console.log('eleventyConfig', eleventyConfig)
-
- // Global Nuxt data
- eleventyConfig.addJavaScriptFunction('getNuxt', function () {
- return nuxtConfig
- })
- // eleventyConfig.addGlobalData('nuxt', () => nuxtConfig)
-
- const cssManager = new InlineCodeManager()
- const jsManager = new InlineCodeManager()
-
- eleventyConfig.addJavaScriptFunction('getAppVersions', async function ( bundleIdentifier ) {
- if (appBundles.size === 0) {
- const appBundlesFromJson = await fs.readJson('./static/app-bundles.json')
- appBundlesFromJson.forEach(([ jsonAppBundleIdentifier, versions ]) => {
- appBundles.set( jsonAppBundleIdentifier, versions )
- })
- }
-
- if ( appBundles.has( bundleIdentifier ) ) {
- return appBundles.get( bundleIdentifier )
- }
-
- // Bundle not found
- return null
- })
-
- eleventyConfig.addJavaScriptFunction('usingComponent', async function ( componentName ) {
- // console.log('Getting component', componentName)
-
- const assetFileName = getAssetFilePath( componentName )
-
- // console.log('Cache size', inlineAssetCache)
-
- if ( componentName.includes('.js') ) {
-
- // If a never before seen component, add the JS code
- if( !inlineAssetCache.has( assetFileName ) ) {
-
- let contents = ''
-
- // if ( inlineAssetCache.has( assetFileName ) ) {
- // console.log('Reading component from cache', componentName)
- // console.log('Cache size', inlineAssetCache.size)
-
- // contents = inlineAssetCache.get( assetFileName )
-
- // } else {
-
- // }
-
- console.log('Reading component file', componentName)
- const javascriptCode = fs.readFileSync( assetFileName, { encoding: "UTF-8" })
-
- console.log('Minifying code', componentName)
- const minified = await transformSync(javascriptCode, {
- // loader: 'ts',
- // bundle: true,
- minify: true,
- // format: 'iife',
- })//minify( javascriptCode )
-
- // console.log('minified', minified)
-
- contents = minified.code
-
- inlineAssetCache.set( assetFileName, contents )
-
- // console.log('Got component', componentName, componentCss)
-
- jsManager.addComponentCode(componentName, contents)
- }
-
- // Log usage for this url
- // this.page.url is supported on Eleventy 0.11.0 and newer
- jsManager.addComponentForUrl(componentName, this.page.url)
- } else if ( componentName.includes('.css') ) {
- // If a never before seen component, add the CSS code
- if(!cssManager.hasComponentCode(componentName)) {
- const fileContents = fs.readFileSync( assetFileName, { encoding: "UTF-8" })
-
- // Replace urls in css with relative urls for dist folder
- const parsedCss = replace_css_url(
- fileContents,
- function( path ) {
- const fileName = path.split('/').pop().split('#')[0].split('?')[0]
-
- return '/fonts/' + fileName
- }
- )
-
- cssManager.addComponentCode(componentName, parsedCss)
- }
-
- // Log usage for this url
- // this.page.url is supported on Eleventy 0.11.0 and newer
- cssManager.addComponentForUrl(componentName, this.page.url)
- }
-
- return
- })
-
-
- // Copy Inter font files
- eleventyConfig.addPassthroughCopy({
- "node_modules/@fontsource/inter/**/*.woff2": "fonts"
- })
-
- // This needs to be called in a Layout template.
- eleventyConfig.addJavaScriptFunction('getJs', function ( url = this.page.url ) {
- // console.log( 'jsManager.getCodeForUrl(url)', url )
-
- return jsManager.getCodeForUrl(url)
- })
-
- // This needs to be called in a Layout template.
- eleventyConfig.addJavaScriptFunction('getCss', function ( url = this.page.url ) {
- // console.log( 'jsManager.getCodeForUrl(url)', url )
-
- return cssManager.getCodeForUrl(url)
- })
-
- eleventyConfig.addJavaScriptFunction('boundComponent', function ( Component ) {
- return Component.bind(this)
- })
-
-
-
- return {
- // https://www.11ty.dev/docs/config/#template-formats
- // Default: html,liquid,ejs,md,hbs,mustache,haml,pug,njk,11ty.js
- templateFormats: [ '11ty.js' ],
-
- dir: {
- input: 'pages-eleventy',
- output: 'dist',
- jsDataFileSuffix: '.json',
-
- // Relative to input directory.
- data: '../static',
- layouts: '../layouts-eleventy'
- }
- }
-}
diff --git a/components-eleventy/video/card.js b/components-eleventy/video/card.js
deleted file mode 100644
index ba5501a..0000000
--- a/components-eleventy/video/card.js
+++ /dev/null
@@ -1,66 +0,0 @@
-import renderPoster from './poster.js'
-
-function pill ( text ) {
- return /* html */`
-
- ${ text }
-
- `
-}
-
-export default async function ( video, options = {} ) {
- const {
- width = '325px',
- classes = 'w-full flex-shrink-0 flex-grow-0 border-2 border-transparent rounded-2xl overflow-hidden'
- } = options
-
- // Setup inline lazysizes
- // await this.usingComponent( 'node_modules/lazysizes/lazysizes.min.js' )
-
- // console.log('video', video)
-
- const posterHtml = renderPoster( video )
-
- return /* html */`
-
-`
-}
diff --git a/components-eleventy/video/player.js b/components-eleventy/video/player.js
deleted file mode 100644
index 4bb2e2c..0000000
--- a/components-eleventy/video/player.js
+++ /dev/null
@@ -1,86 +0,0 @@
-import renderPoster from './poster.js'
-
-function renderTimestamps ( video ) {
-
- if ( video.timestamps.length === 0 ) return ''
-
- const timestampsForRender = video.timestamps.map( timestamp => {
- const [ minutes, seconds ] = timestamp.time.split(':')
-
- return {
- ...timestamp,
- inSeconds: (minutes * 60) + Number(seconds)
- }
- })
-
- const timestampButtonsHtml = timestampsForRender.map( timestamp => (/* html */`
-
- ${ timestamp.fullText }
-
- `) ).join('')
-
- return /* html */`
-
-
- ${ timestampButtonsHtml }
-
-
- `
-}
-
-export default async function ( video, options = {} ) {
- const {
- coverBottomHtml = ''
- // classes = 'w-full flex-shrink-0 flex-grow-0 border-2 border-transparent rounded-2xl overflow-hidden'
- } = options
-
- // Setup inline player script
- await this.usingComponent( 'node_modules/can-autoplay/build/can-autoplay.min.js' )
-
- await this.usingComponent( 'helpers/lite-youtube.js' )
-
- // Setup inline lazysizes
- await this.usingComponent( 'node_modules/lazysizes/lazysizes.min.js' )
-
- // console.log('video', video)
-
- const posterHtml = renderPoster( video )
-
- const timestampsHtml = renderTimestamps( video )
-
- return /* html */`
-
-
-
-
-
-
-
- ${ posterHtml }
-
-
-
-
-
${ coverBottomHtml }
-
-
-
-
-
- ${ timestampsHtml }
-
-
- `
-}
diff --git a/components-eleventy/video/poster.js b/components-eleventy/video/poster.js
deleted file mode 100644
index da88120..0000000
--- a/components-eleventy/video/poster.js
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-export default function ( video ) {
- const webpSource = {
- ...video.thumbnail,
- srcset: video.thumbnail.srcset.replaceAll('ytimg.com/vi/', 'ytimg.com/vi_webp/').replace(/.png|.jpg|.jpeg/g, '.webp')
- }
-
- const mergedSources = {
- webp: webpSource,
- jpeg: video.thumbnail
- }
-
- return /* html */`
-
-
- ${ Object.entries( mergedSources ).map( ([ key, source ]) => (/* html */`
-
- `) ).join('') }
-
-
-
- `
-}
diff --git a/components-eleventy/video/row.js b/components-eleventy/video/row.js
deleted file mode 100644
index b2cd950..0000000
--- a/components-eleventy/video/row.js
+++ /dev/null
@@ -1,87 +0,0 @@
-
-import VideoCard from './card.js'
-import SubmitCard from './submit-card.js'
-
-function getCardType ( video ) {
- const isSubmitCard = video.endpoint.includes('https://docs.google.com/forms')
-
- if ( isSubmitCard ) return SubmitCard
-
- return VideoCard
-}
-
-export default async function ( videos, options = {} ) {
-
- const {
- cardWidth = '325',
- classes = ''
- } = options
-
- // Math.random should be unique because of its seeding algorithm.
- // Convert it to base 36 (numbers + letters), and grab the first 9 characters
- // after the decimal.
- const uid = Math.random().toString(36).substr(2, 9)
- const rowId = `row-${ uid }`
-
- // Setup inline scroll script
- await this.usingComponent( 'helpers/scroll.js' )
-
- // Setup inline lazysizes
- await this.usingComponent( 'node_modules/lazysizes/lazysizes.min.js' )
-
- // console.log('video', video)
-
- const renderedCards = await Promise.all(videos.map( async video => {
- const Card = getCardType( video )
-
- // console.log('Card', this.boundComponent(Card)( video ) )
-
- return await this.boundComponent(Card)( video )
- } ))
-
- const cardsHtml = renderedCards.join('')
-
- // console.log( 'cardsHtml', cardsHtml )
-
- return /* html */`
-
-
-
-
-
- ${ cardsHtml }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- `
-}
diff --git a/components-eleventy/video/submit-card.js b/components-eleventy/video/submit-card.js
deleted file mode 100644
index 717bc4b..0000000
--- a/components-eleventy/video/submit-card.js
+++ /dev/null
@@ -1,81 +0,0 @@
-
-export default function ( video, {
- width = '325px',
- classes = 'w-full flex-shrink-0 flex-grow-0 border-2 border-transparent rounded-2xl overflow-hidden'
-} ) {
-
- // Setup inline lazysizes
- // this.usingComponent( 'node_modules/lazysizes/lazysizes.min.js' )
-
- // console.log('video', video)
-
- return /* html */`
-
-
-
-`
-}
diff --git a/layouts-eleventy/default.11ty.js b/layouts-eleventy/default.11ty.js
deleted file mode 100644
index b09c746..0000000
--- a/layouts-eleventy/default.11ty.js
+++ /dev/null
@@ -1,261 +0,0 @@
-import fs from 'fs'
-import { JSDOM } from 'jsdom'
-
-import config from '../nuxt.config.js'
-
-
-console.log('Running Default Layout file')
-
-
-const year = new Date().getFullYear()
-
-const makeTag = ( tag, tagName = 'meta') => {
-
- const attributes = Object.entries(tag).map( ([ name, value ]) => `${name}="${value}"` ).join(' ')
-
- return `<${tagName} ${attributes}>`
-}
-
-const mapMetaTag = ( tag ) => {
-
- if ( tag.hasOwnProperty('property') ) {
- return [
- `property-${tag.property}`,
- makeTag(tag)
- ]
- }
-
- if ( tag.hasOwnProperty('name') ) {
- return [
- `name-${tag.name}`,
- makeTag(tag)
- ]
- }
-
- if ( tag.hasOwnProperty('charset') ) {
- return [
- 'charset',
- makeTag(tag)
- ]
- }
-}
-
-const mapLinkTag = ( tag ) => {
- return [
- `type-${tag.type}`,
- makeTag(tag, 'link')
- ]
-}
-
-
-const getNuxtDefaultLayoutHtml = () => {
- const fileContents = fs.readFileSync('./dist/layout-template/index.html', { encoding: "UTF-8" })
-
- return fileContents
-}
-
-const templateVar = string => `--- template-var ${string} ---`
-
-const cleanNuxtLayout = ( layout ) => {
-
- const document = layout.window.document
-
- // Strip out existing meta
- Array.from(document.querySelectorAll('head > meta')).forEach( domNode => {
- domNode.remove()
- })
-
- // Strip out existing preloads
- Array.from(document.querySelectorAll('link[rel="preload"]')).forEach( domNode => {
- domNode.remove()
- })
-
- // Strip out existing scripts
- const scriptSelector = 'script[src*=".js"]:not(.include-on-static)'
-
- Array.from(document.querySelectorAll( scriptSelector )).forEach( domNode => {
- domNode.remove()
- })
-
- // Convert subscribe to iframe embed
- Array.from(document.querySelectorAll('form.all-updates-subscribe')).forEach( domNode => {
- const subscribeEmbed = document.createElement('iframe')
- subscribeEmbed.setAttribute('data-src', '/embed-subscribe')
- // https://web.dev/iframe-lazy-loading/
- subscribeEmbed.setAttribute('loading', 'lazy')
- subscribeEmbed.setAttribute('title', 'Get email updates')
- subscribeEmbed.classList.add('lazyload')
- subscribeEmbed.style.width = '350px'
- subscribeEmbed.style.height = '150px'
-
- domNode.parentNode.replaceChild(subscribeEmbed, domNode)
- })
-
-
- // Set page title
- document.title = templateVar('title')
-
- // Set link tags
- document.querySelector('title').insertAdjacentHTML('afterend', templateVar('link-tags') )
-
- // Add meta tags after title node
- document.querySelector('title').insertAdjacentHTML('afterend', templateVar('structured-data') )
-
- // Add meta tags after title node
- document.querySelector('title').insertAdjacentHTML('afterend', templateVar('meta-tags') )
-
- // Set page css
- // document.querySelector('head').insertAdjacentHTML('beforeend', this.getCss() )
-
- // Set page content
- document.querySelector('.app-main').innerHTML = templateVar('main-content')//content
-
- // Set js before end of body
- // ``
- document.querySelector('body').insertAdjacentHTML('beforeend', templateVar('scripts') )
-
- return layout
-}
-
-let nuxtLayoutHtml = null
-const parseDefaultLayoutDom = () => {
- if ( nuxtLayoutHtml === null ) {
- nuxtLayoutHtml = getNuxtDefaultLayoutHtml()
- }
- // const html = getNuxtDefaultLayoutHtml()
-
- // Build initial dom from the Layout
- const dom = new JSDOM( nuxtLayoutHtml )
-
- const cleanedLayout = cleanNuxtLayout( dom )
-
- return cleanedLayout
-}
-
-// Buld data that only needs to run once
-const defaultMeta = Object.fromEntries(config.head.meta.map( mapMetaTag ))
-
-const defaultLinkTags = Object.fromEntries(config.head.link.map( mapLinkTag ))
-
-const masterLayoutDomString = parseDefaultLayoutDom().serialize()
-
-class DefaultLayout {
-
- generateMetaTags = function ( renderData ) {
-
- const {
- title = null,
- description = null,
- meta: pageMeta = []
- } = renderData
-
- // console.log('renderData', Object.keys(renderData))
-
- const meta = {
- ...defaultMeta,
- 'property-twitter:url': ` `,
- ...Object.fromEntries( pageMeta.map(mapMetaTag) )
- }
-
- // console.log('renderData.description', renderData.description)
-
- // if set
- // get description from data
- if ( description ) {
- // Set meta description
- meta['name-description'] = ` `
- // Set twitter description
- meta['property-twitter:description'] = ` `
- }
-
- // if set
- // get title from data
- if ( title ) {
- // Set twitter title
- meta['property-twitter:title'] = ` `
- }
-
-
- return Object.values(meta).join('')
- }
-
- generateStructuredData = function ( renderData ) {
-
- const {
- structuredData = null
- } = renderData
-
- // console.log('renderData', Object.keys(renderData))
-
- if ( structuredData === null ) return ''
-
- const structuredDataJson = JSON.stringify( structuredData )
-
- return ``
- }
-
- generateLinkTags = ( renderData ) => {
-
- const {
- headLinkTags = []
- } = renderData
-
- const linkTags = {
- ...defaultLinkTags,
- ...Object.fromEntries( headLinkTags.map( mapLinkTag ) )
- }
-
- return Object.values( linkTags ).join('')
- }
-
-
- async render( data ) {
-
- // return nuxtLayoutHtml
-
- // console.log('Running DefaultLayout render')
-
- const {
- content,
- title = null,
- // description = null
- } = data
-
- const pageTitle = title || this.getNuxt().head.title
-
- let workingLayoutString = masterLayoutDomString
-
- // Set page title
- // pageTitle
- workingLayoutString = workingLayoutString.replace( templateVar('title'), pageTitle )
-
- // Set link tags
- // this.generateLinkTags()
- workingLayoutString = workingLayoutString.replace( templateVar('link-tags'), this.generateLinkTags( data ) )
-
- // Add meta tags after title node
- // this.generateMetaTags( data )
- workingLayoutString = workingLayoutString.replace( templateVar('meta-tags'), this.generateMetaTags( data ) )
-
- // Add structured data
- workingLayoutString = workingLayoutString.replace( templateVar('structured-data'), this.generateStructuredData( data ) )
-
- // Set page css
- // document.querySelector('head').insertAdjacentHTML('beforeend', this.getCss() )
-
- // Set page content
- // content
- workingLayoutString = workingLayoutString.replace( templateVar('main-content'), content )
-
- // Set js before end of body
- // ``
- workingLayoutString = workingLayoutString.replace( templateVar('scripts'), `` )
-
-
- // Return stringified html for page
- return workingLayoutString
-
- }
-}
-
-module.exports = DefaultLayout
diff --git a/middleware/README.md b/middleware/README.md
deleted file mode 100644
index 009e48c..0000000
--- a/middleware/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# MIDDLEWARE
-
-**This directory is not required, you can delete it if you don't want to use it.**
-
-This directory contains your application middleware.
-The middleware lets you define custom function to be ran before rendering a page or a group of pages (layouts).
-
-More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/routing#middleware).
diff --git a/nuxt.config.js b/nuxt.config.js
deleted file mode 100644
index ee04190..0000000
--- a/nuxt.config.js
+++ /dev/null
@@ -1,138 +0,0 @@
-import { promises as fs } from 'fs'
-
-import pkg from './package.json'
-import { getSiteUrl } from '~/helpers/url.js'
-import { publicRuntimeConfig } from '~/helpers/public-runtime-config.mjs'
-
-
-
-const siteUrl = getSiteUrl()
-
-
-export default {
- target: 'static',
-
- publicRuntimeConfig,
-
- /*
- ** Hooks
- * https://nuxtjs.org/api/configuration-hooks/
- */
- hooks: {
- // build: {
- // before: storeAppLists
- // },
- // generate: {
- // before: storeAppLists
- // }
- },
-
- generate: {
- crawler: false,
-
- // https://nuxtjs.org/docs/2.x/configuration-glossary/configuration-generate#cache
- cache: false,
- routes() {
- return fs.readFile('./static/nuxt-endpoints.json', 'utf-8')
- .then( endpointsJson => {
- return JSON.parse(endpointsJson)
- })
- }
- },
-
- /*
- ** Headers of the page
- */
- head: ,
-
- /*
- ** Customize the progress-bar color
- */
- loading: { color: '#fff' },
-
- /*
- ** Global CSS
- */
- // css: ['~/assets/css/tailwind.css'],
-
- /*
- ** Plugins to load before mounting the App
- */
- plugins: [
- '@/plugins/gtag'
- ],
-
- /*
- ** Nuxt.js modules
- */
-
- modules: [
- '@nuxtjs/sitemap'
- ],
-
- sitemap: {
- hostname: 'https://doesitarm.com',
- routes: async () => {
- // Get routes from previous build
- const sitemapEndpoints = await fs.readFile('./static/sitemap-endpoints.json', 'utf-8')
- .then( endpointsJson => {
- return JSON.parse(endpointsJson)
- })
-
- // console.log('Total Sitemap Endpoints', sitemapEndpoints.length)
-
- return sitemapEndpoints.map( endpoint => endpoint.route )
- }
- },
-
- buildModules: [
- '@nuxt/postcss8',
- '@nuxtjs/tailwindcss'
- ],
-
- /*
- ** Build configuration
- */
- build: {
- // parallel: true,
- // hardSource: true,
- cache: false,
- html: {
- minify: {
- minifyCSS: false,
- minifyJS: false,
- collapseWhitespace: true
- }
- },
- /*
- ** You can extend webpack config here
- */
- extend(config, ctx) {
-
- // Client
- if (ctx.isClient) {
- // Push meta import rule for zip.js
- config.module.rules.push({
- test: /\.js$/,
- loader: require.resolve('@open-wc/webpack-import-meta-loader')
- })
- }
-
- // Run ESLint on save
- if (ctx.isDev && ctx.isClient) {
-
- config.module.rules.push({
- enforce: 'pre',
- test: /\.(js|vue)$/,
- loader: 'eslint-loader',
- exclude: /(node_modules)/
- })
-
- config.node = {
- fs: "empty"
- }
-
- }
- }
- }
-}
diff --git a/pages-eleventy/app.11ty.js b/pages-eleventy/app.11ty.js
deleted file mode 100644
index f7cf122..0000000
--- a/pages-eleventy/app.11ty.js
+++ /dev/null
@@ -1,357 +0,0 @@
-import dotenv from 'dotenv'
-
-import config from '../nuxt.config.js'
-
-import { getAppType, getRouteType } from '../helpers/app-derived.js'
-import { deviceSupportsApp } from '../helpers/devices.js'
-import { makeLastUpdatedFriendly } from '../helpers/parse-date.js'
-import { getStatusOfScan } from '../helpers/statuses.js'
-import { isString } from '../helpers/check-types.js'
-
-
-import VideoRow from '../components-eleventy/video/row.js'
-
-// import VideoRow from '../components-eleventy/video/row.js'
-// import { isVideo } from '../helpers/app-derived'
-
-// Setup dotenv
-dotenv.config()
-
-export const makeTitle = function ( app ) {
- return `Does ${app.name} work on Apple Silicon? - ${ config.head.title }`
-}
-
-export const makeDescription = function ( app ) {
- return `Latest reported support status of ${ app.name } on Apple Silicon and ${ process.env.npm_package_config_verbiage_processors } Processors.`
-}
-
-// https://stackoverflow.com/a/15069646/1397641
-function makeEnglishList ( array, conjunction = 'and' ) {
- const total = array.length
-
- if ( total < 3 ) return array.join(` ${conjunction} `)
-
- array = array.slice()
-
- // Prepend conjunction to final part
- array[ total-1 ] = `${ conjunction } ${ array[ total-1 ] }`
-
- return array.join(', ')
-}
-
-export function renderPageLinksHtml ( links ) {
- return links.map( (link, i) => {
-
- const notAppTestLink = !link.label.includes('๐งช')
-
- const isMainLink = (i === 0) && notAppTestLink
-
- return /* html */`
- ${ isMainLink ? 'View' : link.label }
- `
- } ).join('')
-}
-
-export function supportedArchitectures ( appScan ) {
- // if ( Array.isArray(appScan['Macho Meta']) ) {
- // return appScan['Macho Meta'].map( architecture => architecture.processorType)
- // }
-
- // console.log('meta', appScan['Macho Meta'])
-
- if ( appScan['Macho Meta'].architectures === undefined ) return []
-
- return appScan['Macho Meta'].architectures
- .map( architecture => architecture.processorType)
- .filter(processorType => Number(processorType) !== 0)
-}
-
-function renderBundleDataLevel ( bundleLevelData, depth = 0 ) {
-
- const levelContainerClassses = 'border rounded-lg bg-black bg-opacity-10 space-y-4 p-4 mt-4'
- const maxDepth = 2
-
- if ( isString(bundleLevelData) ) {
- return bundleLevelData
- }
-
- if ( depth >= maxDepth ) {
- return /* html */`${ JSON.stringify(bundleLevelData, undefined, 2) } `
- }
-
- if ( Array.isArray( bundleLevelData ) ) {
- const htmlList = bundleLevelData.map( ( bundleLevel ) => {
- return /* html */`${ renderBundleDataLevel( bundleLevel, depth + 1 ) } `
- } ).join('')
-
- return /* html */``
- }
-
- if ( Object(bundleLevelData) === bundleLevelData ) {
- const htmlList = Object.entries(bundleLevelData).map( ( [key, bundleLevel] ) => {
- return /* html */`${key} : ${ renderBundleDataLevel( bundleLevel, depth + 1 ) } `
- } ).join('')
-
- return /* html */`
-
- Details
-
-
- `
- }
-
- return /* html */`${ JSON.stringify(bundleLevelData) }`
-}
-
-export class AppTemplate {
- // or `async data() {`
- // or `get data() {`
- data () {
- return {
- layout: 'default.11ty.js',
-
- pagination: {
- data: 'eleventy-endpoints',
- size: 1,
- alias: 'app',
-
- before: function( data ) {
- return data.filter( entry => {
- // const [ _, routeType ] = entry.route.split('/')
- const routeType = getRouteType( entry.route )
-
- return routeType === 'app'
- })
- }
- },
-
- eleventyComputed: {
- title: ({ app: { payload: { app } } }) => {
- // console.log('data', data)
- return makeTitle( app )
- },
- description: ({ app: { payload: { app } } }) => {
- return makeDescription( app )
- },
- mainHeading: ({ app: { payload: { app } } }) => {
- return `Does ${ app.name } work on Apple Silicon?`
- },
- },
-
- permalink: ({ app }) => {
- // console.log('payload', app.payload)
- return app.route.substring(1) + '/'
- }
- }
- }
-
- async render( data ) {
-
- const {
- app: { payload: { app, relatedVideos = [] } },
- 'device-list': deviceList,
- // 'app-bundles': appBundlesFromFile
- } = data
-
-
- // console.log('appBundlesFromFile', appBundlesFromFile)
-
- const hasRelatedVideos = relatedVideos.length > 0
-
- // console.log('deviceList', deviceList)
-
- // console.log('video.payload', Object.keys(video.payload))
-
- const hasMultipleAliases = !!app.aliases && app.aliases.length > 1
-
- const hasBundleIdentifiers = !!app.bundleIds && app.bundleIds.length > 0
-
- const appDeviceSupport = deviceList.map( device => {
- const supportsApp = deviceSupportsApp( device, app )
- return {
- ...device,
- emoji: supportsApp ? 'โ
' : '๐ซ',
- ariaLabel: `${app.name} has ${ supportsApp ? '' : 'not' } been reported to work on ${device.name}`
- }
- })
-
- const lastUpdatedFriendly = makeLastUpdatedFriendly( app.lastUpdated )
-
- const relatedLinksHtml = renderPageLinksHtml( app.relatedLinks )
-
-
- const relatedVideosRowHtml = hasRelatedVideos ? await this.boundComponent(VideoRow)( relatedVideos ) : null
-
- const appBundles = [] //hasBundleIdentifiers ? app.bundleIds.map( bundleId => this.getAppBundles() ) : null
-
- if ( hasBundleIdentifiers ) {
- for ( const bundleIdentifier of app.bundleIds ) {
- const versions = await this.getAppVersions( bundleIdentifier )
- appBundles.push( [bundleIdentifier, versions] )
- }
- }
-
-
- return /* html */`
-
-
-
-
- ${ data.mainHeading }
-
-
- ${ app.text }
-
-
- ${ hasMultipleAliases ? /* html */`
-
May also be known as ${ makeEnglishList( app.aliases, 'or' ) }
- ` : '' }
-
-
-
-
-
-
- ${ relatedLinksHtml }
-
-
-
-
- Device Support
-
-
-
- ${ appDeviceSupport.map( device => /* html */`
-
- `).join('') }
-
-
-
-
-
- ${ hasRelatedVideos ? /* html */`
-
-
- Related Videos
-
-
- ${ relatedVideosRowHtml }
-
-
- ` : '' }
-
-
- ${ hasBundleIdentifiers ? /* html */`
-
-
-
- App Bundles
-
-
-
-
-
-
- ${ appBundles.map( ( [bundleIdentifier, versions] ) => /* html */`
-
- `).join('') }
-
-
-
-
-
- ${ appBundles.map( ( [bundleIdentifier, versions] ) => /* html */`
-
-
${ bundleIdentifier }
-
-
-
-
-
- ${ Object.entries(versions).sort((a, b) => new Date(b[1]['Date']) - new Date(a[1]['Date'])).map( ( [ version, report ] ) => /* html */`
-
-
v${ version }
-
-
- ${ getStatusOfScan( report, false ) }
-
-
- ๐ฅ Supported Architectures ${ supportedArchitectures( report ).join(', ') }
-
-
-
- Full Info Plist
- ${ JSON.stringify(report['Info Plist'], undefined, 2) }
-
-
- Full Meta Details
- ${ JSON.stringify(report['Macho Meta'], undefined, 2) }
-
-
- `).join('') }
-
-
-
-
-
- `).join('') }
-
-
-
-
-
-
- ` : '' }
-
-
- ${ lastUpdatedFriendly !== null ? /* html */`
-
-
- Last Updated ${ lastUpdatedFriendly }
-
-
- ` : '' }
-
-
Report Update
-
-
-
- `
- }
-}
-
-module.exports = AppTemplate
diff --git a/pages-eleventy/formula.11ty.js b/pages-eleventy/formula.11ty.js
deleted file mode 100644
index 8423bc5..0000000
--- a/pages-eleventy/formula.11ty.js
+++ /dev/null
@@ -1,65 +0,0 @@
-import dotenv from 'dotenv'
-
-import config from '../nuxt.config.js'
-
-import { getAppType, getRouteType } from '../helpers/app-derived.js'
-
-import { AppTemplate } from './app.11ty.js'
-
-// import VideoRow from '../components-eleventy/video/row.js'
-// import { isVideo } from '../helpers/app-derived'
-
-// Setup dotenv
-dotenv.config()
-
-export const makeTitle = function ( app ) {
- return `Does ${app.name} work on Apple Silicon? - ${ config.head.title }`
-}
-
-export const makeDescription = function ( app ) {
- return `Latest reported support status of ${ app.name } on Apple Silicon and ${ process.env.npm_package_config_verbiage_processors } Processors when installed via Homebrew. `
-}
-
-class FormulaTemplate extends AppTemplate {
- // or `async data() {`
- // or `get data() {`
- data () {
- return {
- layout: 'default.11ty.js',
-
- pagination: {
- data: 'eleventy-endpoints',
- size: 1,
- alias: 'app',
- before: function( data ) {
- return data.filter( entry => {
- const routeType = getRouteType( entry.route )
-
- return routeType === 'formula'
- })
- }
- },
-
- eleventyComputed: {
- title: ({ app: { payload: { app } } }) => {
- // console.log('data', data)
- return makeTitle( app )
- },
- description: ({ app: { payload: { app } } }) => {
- return makeDescription( app )
- },
- mainHeading: ({ app: { payload: { app } } }) => {
- return `Does ${ app.name } work on Apple Silicon when installed via Homebrew?`
- }
- },
-
- permalink: ({ app }) => {
- // console.log('payload', app.payload)
- return app.route.substring(1) + '/'
- }
- }
- }
-
-}
-
-module.exports = FormulaTemplate
diff --git a/pages-eleventy/tv.11ty.js b/pages-eleventy/tv.11ty.js
deleted file mode 100644
index c316d85..0000000
--- a/pages-eleventy/tv.11ty.js
+++ /dev/null
@@ -1,202 +0,0 @@
-import dotenv from 'dotenv'
-
-import config from '../nuxt.config.js'
-
-import VideoPlayer from '../components-eleventy/video/player.js'
-import VideoRow from '../components-eleventy/video/row.js'
-
-import { getRouteType } from '../helpers/app-derived.js'
-import { buildVideoStructuredData } from '../helpers/structured-data.js'
-
-// Setup dotenv
-dotenv.config()
-
-export const myChannelId = 'UCB3jOb5QVjX7lYecvyCoTqQ'
-
-export const makeTitle = function ( name ) {
- // console.log('tvEntry', tvEntry)
-
- return `${ name } - ${ config.head.title }`
-}
-
-export const makeDescription = function ( tvEntry ) {
- if ( tvEntry.payload.featuredApps.length === 0 ) return 'Apple Silicon performance and support videos'
-
- const featuredAppsString = tvEntry.payload.featuredApps.slice(0, 5).map(app => app.name).join(', ')
-
- // console.log('tvEntry.payload.featuredApps', tvEntry.payload.featuredApps)
-
- return `Apple Silicon performance and support videos for ${ featuredAppsString }`
-}
-
-
-function renderFeaturedApps ( featuredApps ) {
- return /* html */`
-
- `
-}
-
-class TV {
- // or `async data() {`
- // or `get data() {`
- data () {
- return {
- layout: 'default.11ty.js',
-
- pagination: {
- data: 'eleventy-endpoints',
- size: 1,
- alias: 'tvEntry',
- before: function( endpoint ) {
- // console.log('Before runs')
-
- return endpoint.filter( entry => {
- const routeType = getRouteType( entry.route )
-
- return routeType === 'tv'
- })
- },
- },
-
- // tags: [ 'tv' ],
-
- eleventyComputed: {
- title: data => {
- // Declare dependencies for Eleventy
- // https://www.11ty.dev/docs/data-computed/#declaring-your-dependencies
- data.tvEntry
-
- return makeTitle( data.tvEntry.payload.video.name )
- },
- description: ( data ) => {
- // Declare dependencies for Eleventy
- // https://www.11ty.dev/docs/data-computed/#declaring-your-dependencies
- data.tvEntry
-
- return makeDescription( data.tvEntry )
- },
-
- headLinkTags: data => {
- // Declare dependencies for Eleventy
- // https://www.11ty.dev/docs/data-computed/#declaring-your-dependencies
- data.tvEntry
-
- return [
- // Preload video thumbnail
- //
- {
- 'rel': 'preload',
- 'as': 'image',
- 'href': `https://i.ytimg.com/vi_webp/${ data.tvEntry.payload.video.id }/sddefault.webp`
- },
- ]
- },
-
- structuredData: data => {
- // Declare dependencies for Eleventy
- // https://www.11ty.dev/docs/data-computed/#declaring-your-dependencies
- data.tvEntry
-
- return buildVideoStructuredData( data.tvEntry.payload.video, data.tvEntry.payload.featuredApps, {
- siteUrl: process.env.URL
- } )
- }
- },
-
- permalink: ( data ) => {
-
- return data.tvEntry.route.substring(1) + '/'
- }
- }
- }
-
- async render( data ) {
-
- const {
- tvEntry: {
- // route,
- payload: {
- video,
- relatedVideos = [],
- featuredApps = []
- }
- },
- // 'device-list': deviceList
- } = data
-
-
- // console.log('video.payload', Object.keys(video.payload))
-
- const coverBottomHtml = /* html */`
-
-
${ video.name }
-
- `
-
- const playerHtml = await this.boundComponent(VideoPlayer)( video, {
- coverBottomHtml
- } )
-
- const hasFeaturedApps = featuredApps.length > 0
- const featuredAppsHtml = hasFeaturedApps ? renderFeaturedApps( featuredApps ) : ''
-
- const rowHtml = await this.boundComponent(VideoRow)( relatedVideos )
-
- // const rowHtml = renderedRow.join('')
-
- return /* html */`
-
-
-
- ${ playerHtml }
-
-
-
- ${ video.channel.id !== myChannelId ? /* html */`
-
- ` : '' }
-
-
-
-
- ${ featuredAppsHtml }
-
-
-
Related Videos
-
- ${ rowHtml }
-
-
-
-
-
- `
- }
-}
-
-module.exports = TV
diff --git a/pages/README.md b/pages/README.md
deleted file mode 100644
index 7a6cffa..0000000
--- a/pages/README.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# PAGES
-
-This directory contains your Application Views and Routes.
-The framework reads all the `*.vue` files inside this directory and create the router of your application.
-
-More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/routing).
diff --git a/pages/app/_slug/benchmarks.vue b/pages/app/_slug/benchmarks.vue
deleted file mode 100644
index 52801ca..0000000
--- a/pages/app/_slug/benchmarks.vue
+++ /dev/null
@@ -1,268 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Benchmark Videos
-
-
-
-
-
-
-
- Performance Videos
-
-
-
-
-
-
-
- More Videos
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/pages/app/_slug/index.vue b/pages/app/_slug/index.vue
deleted file mode 100644
index 9b5197a..0000000
--- a/pages/app/_slug/index.vue
+++ /dev/null
@@ -1,141 +0,0 @@
-
-
-
-
-
- Does {{ app.name }} work on Apple Silicon?
-
-
- {{ app.text }}
-
-
-
-
-
-
- {{ (i === 0) ? 'View' : link.label }}
-
-
-
-
- Related Videos
-
-
-
-
-
-
-
- Last Updated {{ lastUpdatedFriendly }}
-
-
-
-
Report Update
-
-
-
-
-
-
diff --git a/pages/benchmarks.vue b/pages/benchmarks.vue
deleted file mode 100644
index bfb2f71..0000000
--- a/pages/benchmarks.vue
+++ /dev/null
@@ -1,253 +0,0 @@
-
-
-
-
-
diff --git a/pages/categories.vue b/pages/categories.vue
deleted file mode 100644
index 0dcbee5..0000000
--- a/pages/categories.vue
+++ /dev/null
@@ -1,126 +0,0 @@
-
-
-
-
- Categories
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/pages/device/_slug.vue b/pages/device/_slug.vue
deleted file mode 100644
index 76353a7..0000000
--- a/pages/device/_slug.vue
+++ /dev/null
@@ -1,204 +0,0 @@
-
-
-
-
-
-
-
- {{ device.name }}
-
-
-
- {{ device.description }}
-
-
-
- Supported apps include {{ supportedAppList.join(', ') }}.
-
-
-
-
- Check Pricing
-
-
-
-
-
-
-
-
-
- Search app support for {{ device.name }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/pages/devices.vue b/pages/devices.vue
deleted file mode 100644
index 84a490f..0000000
--- a/pages/devices.vue
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
-
-
- Devices
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/pages/embed-subscribe.vue b/pages/embed-subscribe.vue
deleted file mode 100644
index 27d1e7c..0000000
--- a/pages/embed-subscribe.vue
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
diff --git a/pages/embed/rich-results-player.vue b/pages/embed/rich-results-player.vue
deleted file mode 100644
index d8d96eb..0000000
--- a/pages/embed/rich-results-player.vue
+++ /dev/null
@@ -1,80 +0,0 @@
-
-
-
-
-
- {{ video.name }}
-
-
-
-
-
-
-
diff --git a/pages/formula/_slug.vue b/pages/formula/_slug.vue
deleted file mode 100644
index ce4192a..0000000
--- a/pages/formula/_slug.vue
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
-
-
- Does {{ app.name }} work on Apple Silicon when installed via Homebrew?
-
-
- {{ app.text }}
-
-
-
- According to Github
-
-
-
-
-
- {{ (i === 0) ? 'View' : link.label }}
-
-
-
-
-
-
-
-
-
diff --git a/pages/game/_slug/benchmarks.vue b/pages/game/_slug/benchmarks.vue
deleted file mode 100644
index 9621109..0000000
--- a/pages/game/_slug/benchmarks.vue
+++ /dev/null
@@ -1,226 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ row.heading }}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/pages/game/_slug/index.vue b/pages/game/_slug/index.vue
deleted file mode 100644
index c85b488..0000000
--- a/pages/game/_slug/index.vue
+++ /dev/null
@@ -1,178 +0,0 @@
-
-
-
-
-
-
-
- Does {{ app.name }} work on Apple Silicon?
-
-
- {{ app.text }}
-
-
-
-
-
-
-
-
-
- Related Videos
-
-
-
-
-
- Reports
-
-
-
-
-
-
-
-
-
{{ report['Specs'] }}
- {{ report['FPS'] }}
-
-
{{ report['Notes'] }}
-
- ๐ฅ {{ report['Resolution'] }}
-
-
- โ๏ธ {{ report['Settings'] }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/pages/games.vue b/pages/games.vue
deleted file mode 100644
index 887ad78..0000000
--- a/pages/games.vue
+++ /dev/null
@@ -1,103 +0,0 @@
-
-
-
-
- Does It ARM?
-
-
- Games that are reported to support Apple Silicon
-
-
-
-
-
-
-
- Report a Game
-
-
-
-
-
-
diff --git a/pages/index.vue b/pages/index.vue
deleted file mode 100644
index fd8e9c2..0000000
--- a/pages/index.vue
+++ /dev/null
@@ -1,246 +0,0 @@
-
-
-
-
-
- Does It ARM?
-
-
- Apps that are reported to support Apple Silicon
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/pages/kind/_slug.vue b/pages/kind/_slug.vue
deleted file mode 100644
index 8002fca..0000000
--- a/pages/kind/_slug.vue
+++ /dev/null
@@ -1,185 +0,0 @@
-
-
-
-
- {{ pluralLabel }} that are reported to support Apple Silicon
-
-
-
- Supported apps include {{ supportedAppList.join(', ') }}.
-
-
-
-
-
-
-
-
- {{ link.label }}
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/pages/layout-template.vue b/pages/layout-template.vue
deleted file mode 100644
index 9a44683..0000000
--- a/pages/layout-template.vue
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
diff --git a/pages/tv/_slug.vue b/pages/tv/_slug.vue
deleted file mode 100644
index c21e8e3..0000000
--- a/pages/tv/_slug.vue
+++ /dev/null
@@ -1,189 +0,0 @@
-
-
-
-
-
-
-
-
- {{ video.name }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Related Videos
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/plugins/README.md b/plugins/README.md
deleted file mode 100644
index 0d227f3..0000000
--- a/plugins/README.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# PLUGINS
-
-**This directory is not required, you can delete it if you don't want to use it.**
-
-This directory contains your Javascript plugins that you want to run before mounting the root Vue.js application.
-
-More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/plugins).
diff --git a/plugins/gtag.js b/plugins/gtag.js
deleted file mode 100644
index 806f363..0000000
--- a/plugins/gtag.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import Vue from 'vue'
-import VueGtag from 'vue-gtag'
-
-Vue.use(VueGtag, {
- config: { id: 'G-0WLH5YTTB0' }
-})
diff --git a/store/README.md b/store/README.md
deleted file mode 100644
index 111fea1..0000000
--- a/store/README.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# STORE
-
-**This directory is not required, you can delete it if you don't want to use it.**
-
-This directory contains your Vuex Store files.
-Vuex Store option is implemented in the Nuxt.js framework.
-
-Creating a file in this directory activate the option in the framework automatically.
-
-More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/vuex-store).
diff --git a/tailwind.config.js b/tailwind.config.js
index 086e37d..d8c857e 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -4,7 +4,6 @@ module.exports = {
'helpers/**/*.js',
// Nuxt
- 'nuxt.config.js',
'components/**/*.vue',
'layouts/**/*.vue',
'pages/**/*.vue',