feat: add transform system
All checks were successful
/ deploy_site (push) Successful in 3m56s

This commit is contained in:
2024-10-27 12:34:54 +09:00
parent beba067305
commit 87a35aeffc
11 changed files with 191 additions and 26 deletions

View File

@ -1,6 +0,0 @@
import { Transform } from "./Transform";
export const Base64DecodeTransform: Transform = {
name: 'base64d',
fn: () => 'Hello, world!'
}

View File

@ -0,0 +1,11 @@
import { Transform } from "./Transform";
export const Base64DecodeTransform: Transform = {
name: 'base64d',
fn: (v) => btoa(v)
}
export const Base64EncodeTransform: Transform = {
name: 'base64e',
fn: (v) => atob(v)
}

View File

@ -1,12 +1,59 @@
import { Base64DecodeTransform } from "./Base64DecodeTransform"
import { Base64DecodeTransform, Base64EncodeTransform } from "./Base64Transforms"
import { URIDecodeTransform, URIEncodeTransform } from "./URITransforms"
export interface TransformCheckboxOption {
type: 'CHECKBOX',
key: string,
label?: string,
value?: boolean
}
export interface TransformTextboxOption {
type: 'TEXTBOX',
key: string,
label?: string,
value?: string
}
export type TransformOption =
TransformCheckboxOption | TransformTextboxOption
export interface Transform {
name: string
fn: () => string
fn: (value: string, options: Map<string, TransformOption>) => string
options?: TransformOption[]
}
export interface WrappedTransform extends Omit<Transform, 'fn'> {
wrapped: true,
fn: (value: string, options: Map<string, TransformOption>) => {
error: boolean,
value: string
}
}
export const wrapTransform = (transform: Transform): WrappedTransform => ({
...transform,
fn: (...args) => {
try {
return {
error: false,
value: transform.fn(...args)
}
} catch (err: any) {
return {
error: true,
value: err.toString()
}
}
},
wrapped: true
})
export const transforms: Transform[] = [
Base64DecodeTransform,
Base64DecodeTransform,
Base64DecodeTransform,
Base64EncodeTransform,
URIDecodeTransform,
URIEncodeTransform
]

View File

@ -0,0 +1,29 @@
import { Transform } from "./Transform";
export const URIDecodeTransform: Transform = {
name: 'urid',
fn: (v, o) =>
o.get('cmp')?.value === true
? decodeURIComponent(v)
: decodeURI(v),
options: [{
type: 'CHECKBOX',
key: 'cmp'
}]
}
export const URIEncodeTransform: Transform = {
name: 'urie',
fn: (v, o) =>
o.get('cmp')?.value === true
? encodeURIComponent(v)
: encodeURI(v),
options: [{
type: 'CHECKBOX',
key: 'cmp'
}]
}