This commit is contained in:
Tommy Parnell
2022-03-11 01:34:56 -05:00
parent 6fc2a57b0d
commit bb34fe4f60
15 changed files with 735 additions and 2839 deletions

7
.funcignore Normal file
View File

@@ -0,0 +1,7 @@
*.js.map
*.ts
.git*
.vscode
local.settings.json
test
getting_started.md

42
.gitignore vendored
View File

@@ -1 +1,43 @@
bin
obj
csx
.vs
edge
Publish
*.user
*.suo
*.cscfg
*.Cache
project.lock.json
/packages
/TestResults
/tools/NuGet.exe
/App_Data
/secrets
/data
.secrets
appsettings.json
local.settings.json
node_modules node_modules
dist
# Local python packages
.python_packages/
# Python Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

5
.vscode/extensions.json vendored Normal file
View File

@@ -0,0 +1,5 @@
{
"recommendations": [
"ms-azuretools.vscode-azurefunctions"
]
}

12
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,12 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "Attach to Node Functions",
"type": "node",
"request": "attach",
"port": 9229,
"preLaunchTask": "func: host start"
}
]
}

8
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,8 @@
{
"azureFunctions.deploySubpath": ".",
"azureFunctions.postDeployTask": "npm install (functions)",
"azureFunctions.projectLanguage": "TypeScript",
"azureFunctions.projectRuntime": "~3",
"debug.internalConsoleOptions": "neverOpen",
"azureFunctions.preDeployTask": "npm prune (functions)"
}

31
.vscode/tasks.json vendored Normal file
View File

@@ -0,0 +1,31 @@
{
"version": "2.0.0",
"tasks": [
{
"type": "func",
"command": "host start",
"problemMatcher": "$func-node-watch",
"isBackground": true,
"dependsOn": "npm build (functions)"
},
{
"type": "shell",
"label": "npm build (functions)",
"command": "npm run build",
"dependsOn": "npm install (functions)",
"problemMatcher": "$tsc"
},
{
"type": "shell",
"label": "npm install (functions)",
"command": "npm install"
},
{
"type": "shell",
"label": "npm prune (functions)",
"command": "npm prune --production",
"dependsOn": "npm build (functions)",
"problemMatcher": []
}
]
}

20
HttpTrigger/function.json Normal file
View File

@@ -0,0 +1,20 @@
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "res"
}
],
"scriptFile": "../dist/HttpTrigger/index.js"
}

43
HttpTrigger/index.ts Normal file
View File

@@ -0,0 +1,43 @@
import { AzureFunction, Context, HttpRequest } from "@azure/functions"
import * as Prism from 'prismjs';
import * as loadLanguages from 'prismjs/components/index.js';
loadLanguages();
const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest): Promise<void> {
if(req.method === "GET") {
context.res = {
// status: 200, /* Defaults to 200 */
body: "Ok"
};
return;
}
const data = req.rawBody;
if(!data.startsWith('```')) {
context.res = {
status: 200,
body: req.rawBody
}
return
}
const regex = data.match(/^```([a-zA-Z]*)$/m)
const lang = regex[1]
if(!lang) {
context.res = {
status: 200,
body: req.rawBody
}
return
}
const highlighted = Prism.highlight(data.replace(/```[a-zA-Z]*/m, '').replace('```', ''), Prism.languages[lang], lang)
// remove any backticks and the language
const highlightedCleaned = highlighted.trim()
context.res = {
status: 200,
body: `<pre><code>${highlightedCleaned}</code></pre>`
}
return
};
export default httpTrigger;

View File

@@ -1 +0,0 @@
web: npm run start

View File

@@ -1 +1 @@
This is a fastify nodejs server that parses and runs prism on the server. This is used by my blog which does not run Node and cannot use prism. I don't use prism's JS file on the client to avoid any lighthouse impact This is an azure nodejs function that parses and runs prism on the server. This is used by my blog which does not run Node and cannot use prism. I don't use prism's JS file on the client to avoid any lighthouse impact

15
host.json Normal file
View File

@@ -0,0 +1,15 @@
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
}
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[2.*, 3.0.0)"
}
}

View File

@@ -1,38 +0,0 @@
import Fastify from 'fastify';
import Prism from 'prismjs';
import loadLanguages from 'prismjs/components/index.js';
loadLanguages();
const fastify = Fastify({
logger: true
})
fastify.get('/', async (request, reply) => {
return reply.status(200).send(`ok`)
})
// Declare a route
fastify.post('/', function (request, reply) {
const data = request.body?.trim()
if(!data.startsWith('```')) {
return reply.send(request.body)
}
const regex = data.match(/^```([a-zA-Z]*)$/m)
const lang = regex[1]
if(!lang) {
return reply.send(request.body)
}
const highlighted = Prism.highlight(data.replace(/```[a-zA-Z]*/m, '').replace('```', ''), Prism.languages[lang], lang)
// remove any backticks and the language
const highlightedCleaned = highlighted.trim()
return `<pre><code>${highlightedCleaned}</code></pre>`
})
// Run the server!
fastify.listen(process.env.PORT || 3000, '0.0.0.0', function (err, address) {
if (err) {
fastify.log.error(err)
process.exit(1)
}
console.log(`Server is now listening on ${address}`)
})

3312
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,17 +1,25 @@
{ {
"name": "prismasaservice", "name": "prismasaservice",
"version": "1.0.0", "version": "",
"description": "",
"main": "index.mjs",
"scripts": { "scripts": {
"start": "node ./index.mjs" "build": "tsc",
"build:production": "npm run prestart && npm prune --production",
"watch": "tsc --w",
"prestart": "npm run build && func extensions install",
"start:host": "func start",
"start": "npm-run-all --parallel start:host watch",
"test": "echo \"No tests yet...\""
},
"description": "",
"devDependencies": {
"@azure/functions": "^1.0.1-beta1",
"npm-run-all": "^4.1.5",
"typescript": "^3.3.3"
}, },
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": { "dependencies": {
"fastify": "^3.27.4",
"fastify-cli": "^2.15.0",
"prismjs": "^1.27.0" "prismjs": "^1.27.0"
},
"volta": {
"node": "14.19.0"
} }
} }

10
tsconfig.json Normal file
View File

@@ -0,0 +1,10 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
"outDir": "dist",
"rootDir": ".",
"sourceMap": true,
"strict": false
}
}