url type added
+ support for `Url` columns
This commit is contained in:
@ -17,7 +17,7 @@ import {
|
||||
PocketbaseType,
|
||||
} from "../types/pocketbase.ts";
|
||||
import { createSchemaField, generateRowSchema } from "./pocketbase.ts";
|
||||
import { isBool, isDate, isEmail, isJson, isNumber } from "./regex.ts";
|
||||
import { isBool, isDate, isEmail, isJson, isNumber, isUrl } from "./regex.ts";
|
||||
|
||||
/**
|
||||
* Reads raw data from a CSV file.
|
||||
@ -122,6 +122,10 @@ export function addSchemaField(data: RawCsvRow[], prop: string): SchemaField {
|
||||
return createSchemaField(targetProp, "date");
|
||||
}
|
||||
|
||||
if (isUrl(data, prop)) {
|
||||
return createSchemaField(targetProp, "url");
|
||||
}
|
||||
|
||||
// Plain text is the default type
|
||||
return createSchemaField(targetProp, "text");
|
||||
}
|
||||
@ -206,6 +210,8 @@ function parseValue(value: string, type: PocketbaseType): any {
|
||||
return value !== "" ? value : null;
|
||||
case POCKETBASE_TYPE.DATETIME:
|
||||
return value !== "" ? value : null;
|
||||
case POCKETBASE_TYPE.URL:
|
||||
return value !== "" ? value : null;
|
||||
default:
|
||||
console.error(
|
||||
`%cPbTypeError: value parser for type '${type}' is not yet implemented.`,
|
||||
|
@ -3,7 +3,7 @@ import { SchemaField } from "https://unpkg.com/pocketbase@0.12.0/dist/pocketbase
|
||||
import { RawJsonRow } from "../types/json.ts";
|
||||
import { POCKETBASE_SYSFIELD } from "../types/pocketbase.ts";
|
||||
import { createSchemaField } from "./pocketbase.ts";
|
||||
import { isDate, isEmail } from "./regex.ts";
|
||||
import { isDate, isEmail, isUrl } from "./regex.ts";
|
||||
|
||||
/**
|
||||
* Reads an array of rows from a JSON file.
|
||||
@ -89,6 +89,9 @@ export function addSchemaField(data: RawJsonRow[], prop: string): SchemaField {
|
||||
case "bigint":
|
||||
return createSchemaField(targetProp, "number");
|
||||
case "string":
|
||||
if(isUrl(data, targetProp)) {
|
||||
return createSchemaField(targetProp, "url");
|
||||
}
|
||||
if (isEmail(data, targetProp)) {
|
||||
return createSchemaField(targetProp, "email");
|
||||
}
|
||||
|
@ -50,6 +50,9 @@ export function getSchemaType(
|
||||
case POCKETBASE_TYPE.DATETIME:
|
||||
return POCKETBASE_TYPE.DATETIME;
|
||||
|
||||
case POCKETBASE_TYPE.URL:
|
||||
return POCKETBASE_TYPE.URL;
|
||||
|
||||
default:
|
||||
console.error(
|
||||
`%cPbTypeError: Unsupported type '${schemaField.type}'`,
|
||||
@ -137,6 +140,18 @@ export function createSchemaField(
|
||||
max: null,
|
||||
},
|
||||
});
|
||||
case POCKETBASE_TYPE.URL:
|
||||
return new SchemaField({
|
||||
name,
|
||||
type,
|
||||
system: false,
|
||||
required: false,
|
||||
unique: false,
|
||||
options: {
|
||||
exceptDomains: null,
|
||||
onlyDomains: null,
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -64,6 +64,31 @@ export function isNumber(data: RawCsvRow[], prop: string): boolean {
|
||||
return matched === values && matched > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the column type could be `Url`.
|
||||
* @param data Sample data.
|
||||
* @param prop Validated property.
|
||||
* @returns
|
||||
*/
|
||||
export function isUrl(data: RawCsvRow[], prop: string): boolean {
|
||||
let values = 0;
|
||||
let parsed = 0;
|
||||
|
||||
data.forEach((obj) => {
|
||||
if (obj[prop] !== "" && obj[prop] !== null) {
|
||||
values++;
|
||||
try {
|
||||
new URL(obj[prop]);
|
||||
parsed++;
|
||||
} // deno-lint-ignore no-empty
|
||||
catch {}
|
||||
}
|
||||
});
|
||||
|
||||
// an empty column will return false
|
||||
return parsed === values && parsed > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the column type could be `Email`.
|
||||
* @param data Sample data.
|
||||
|
Reference in New Issue
Block a user