update to v0.23.1

+ package version bump to 0.22.0
+ support for PB v0.23.1 collections
This commit is contained in:
michal-kapala 2024-11-26 17:39:41 +01:00
parent ce03fd9991
commit df56216609
6 changed files with 131 additions and 120 deletions

7
csv.ts
View File

@ -64,7 +64,7 @@ async function importCsv() {
const _authResponse = await pb.admins.authWithPassword(adminName, adminPass); const _authResponse = await pb.admins.authWithPassword(adminName, adminPass);
// collection schema object // collection schema object
const schema = createSchema(data, options.id, "csv"); const fields = createSchema(data, options.id, "csv");
const creationDate = new Date().toISOString(); const creationDate = new Date().toISOString();
@ -73,14 +73,13 @@ async function importCsv() {
name: collectName, name: collectName,
type: "base", type: "base",
system: false, system: false,
schema, fields,
indexes: [], indexes: [],
listRule: null, listRule: null,
viewRule: null, viewRule: null,
createRule: null, createRule: null,
updateRule: null, updateRule: null,
deleteRule: null, deleteRule: null,
options: {},
}; };
// show the submitted collection // show the submitted collection
@ -96,7 +95,7 @@ async function importCsv() {
); );
// rows to be sent via PocketBase API // rows to be sent via PocketBase API
const rows = parseData(data, schema); const rows = parseData(data, fields);
console.log(`[Import] Importing ${rows.length} rows...`); console.log(`[Import] Importing ${rows.length} rows...`);

View File

@ -3,6 +3,6 @@
"dev": "deno run --watch main.ts" "dev": "deno run --watch main.ts"
}, },
"imports": { "imports": {
"pocketbase": "npm:pocketbase@^0.21.5" "pocketbase": "npm:pocketbase@^0.22.0"
} }
} }

8
deno.lock generated
View File

@ -1,11 +1,11 @@
{ {
"version": "4", "version": "4",
"specifiers": { "specifiers": {
"npm:pocketbase@~0.21.5": "0.21.5" "npm:pocketbase@0.22": "0.22.0"
}, },
"npm": { "npm": {
"pocketbase@0.21.5": { "pocketbase@0.22.0": {
"integrity": "sha512-bnI/uinnQps+ElSlzxkc4yvwuSFfKcoszDtXH/4QT2FhGq2mJVUvDlxn+rjRXVntUjPfmMG5LEPZ1eGqV6ssog==" "integrity": "sha512-jhP0Dcf2Z/4q+SNxqpgV+SJWLZeU0rOJA4TKMxwU7X2olFSBr0jhLu+G6Pc+RIQ40IYrC3WMGwbASPrK6rxQOw=="
} }
}, },
"remote": { "remote": {
@ -33,7 +33,7 @@
}, },
"workspace": { "workspace": {
"dependencies": [ "dependencies": [
"npm:pocketbase@~0.21.5" "npm:pocketbase@0.22"
] ]
} }
} }

View File

@ -48,21 +48,20 @@ async function importJson() {
const _authResponse = await pb.admins.authWithPassword(adminName, adminPass); const _authResponse = await pb.admins.authWithPassword(adminName, adminPass);
// collection schema object // collection schema object
const schema = createSchema(data, options.id, "json"); const fields = createSchema(data, options.id, "json");
// the new collection // the new collection
const collection: Collection = { const collection: Collection = {
name: collectName, name: collectName,
type: "base", type: "base",
system: false, system: false,
schema, fields,
indexes: [], indexes: [],
listRule: null, listRule: null,
viewRule: null, viewRule: null,
createRule: null, createRule: null,
updateRule: null, updateRule: null,
deleteRule: null, deleteRule: null,
options: {},
}; };
// show the submitted collection // show the submitted collection

View File

@ -34,32 +34,69 @@ export const POCKETBASE_SYSFIELD = [
"updated", "updated",
]; ];
export type Options = { export interface SchemaField {
[key: string]: any; hidden: boolean;
};
export type SchemaField = {
id?: string; id?: string;
name: string; name: string;
type: PocketbaseType; presentable: boolean;
required: boolean; required: boolean;
system: boolean; system: boolean;
presentable: boolean; type: PocketbaseType;
unique: boolean;
options: Options;
}; };
export type Collection = { export interface BoolField extends SchemaField {
type: "bool";
};
export interface NumberField extends SchemaField {
max?: number;
min?: number;
onlyInt: boolean;
type: "number";
};
export interface TextField extends SchemaField {
autogeneratePattern: string;
max?: number;
min?: number;
pattern: string;
primaryKey: boolean;
type: "text";
};
export interface EmailField extends SchemaField {
exceptDomains?: string[];
onlyDomains?: string[];
type: "email";
};
export interface DateField extends SchemaField {
max: string;
min: string;
type: "date";
}
export interface JsonField extends SchemaField {
maxSize: number;
type: "json";
}
export interface UrlField extends SchemaField {
exceptDomains?: string[];
onlyDomains?: string[];
type: "url";
}
export interface Collection {
id?: string; id?: string;
name: string; name: string;
type: string; type: string;
system: boolean; system: boolean;
schema: SchemaField[]; fields: SchemaField[];
indexes: string[]; indexes: string[];
listRule: string | null; listRule: string | null;
viewRule: string | null; viewRule: string | null;
createRule: string | null; createRule: string | null;
updateRule: string | null; updateRule: string | null;
deleteRule: string | null; deleteRule: string | null;
options: Options;
}; };

View File

@ -4,7 +4,14 @@ import {
POCKETBASE_TYPE, POCKETBASE_TYPE,
PocketbaseRowSchema, PocketbaseRowSchema,
PocketbaseType, PocketbaseType,
SchemaField SchemaField,
BoolField,
NumberField,
TextField,
EmailField,
JsonField,
DateField,
UrlField
} from "../types/pocketbase.ts"; } from "../types/pocketbase.ts";
import { addSchemaField as addCsvSchemaField } from "./csv.ts"; import { addSchemaField as addCsvSchemaField } from "./csv.ts";
import { addSchemaField as addJsonSchemaField } from "./json.ts"; import { addSchemaField as addJsonSchemaField } from "./json.ts";
@ -28,39 +35,19 @@ export function getSchemaType(
"color: red", "color: red",
); );
Deno.exit(-1); Deno.exit(-1);
return "text" return "text";
} }
switch (schemaField.type) { if (schemaField.type == null) {
case POCKETBASE_TYPE.BOOL:
return POCKETBASE_TYPE.BOOL;
case POCKETBASE_TYPE.NUMBER:
return POCKETBASE_TYPE.NUMBER;
case POCKETBASE_TYPE.PLAIN_TEXT:
return POCKETBASE_TYPE.PLAIN_TEXT;
case POCKETBASE_TYPE.EMAIL:
return POCKETBASE_TYPE.EMAIL;
case POCKETBASE_TYPE.JSON:
return POCKETBASE_TYPE.JSON;
case POCKETBASE_TYPE.DATETIME:
return POCKETBASE_TYPE.DATETIME;
case POCKETBASE_TYPE.URL:
return POCKETBASE_TYPE.URL;
default:
console.error( console.error(
`%cPbTypeError: Unsupported type '${schemaField.type}'`, `%cSchemaError: Column type missing for '${column}'`,
"color: red", "color: red",
); );
Deno.exit(-2); Deno.exit(-1);
return "text" return "text";
} }
return schemaField.type;
} }
/** /**
@ -76,93 +63,82 @@ export function createSchemaField(
switch (type) { switch (type) {
case POCKETBASE_TYPE.BOOL: case POCKETBASE_TYPE.BOOL:
return { return {
hidden: false,
name, name,
type,
system: false,
required: false,
presentable: false, presentable: false,
unique: false, required: false,
options: {}, system: false,
}; type,
} as BoolField;
case POCKETBASE_TYPE.NUMBER: case POCKETBASE_TYPE.NUMBER:
return { return {
hidden: false,
max: undefined,
min: undefined,
name, name,
type, onlyInt: false,
system: false,
required: false,
presentable: false, presentable: false,
unique: false, required: false,
options: { system: false,
min: null, type,
max: null, } as NumberField;
noDecimal: false,
},
};
case POCKETBASE_TYPE.PLAIN_TEXT: case POCKETBASE_TYPE.PLAIN_TEXT:
return { return {
autogeneratePattern: "",
hidden: false,
max: 0,
min: 0,
name, name,
type,
system: false,
required: false,
presentable: false,
unique: false,
options: {
min: null,
max: null,
pattern: "", pattern: "",
}, presentable: false,
}; primaryKey: false,
required: false,
system: false,
type,
} as TextField;
case POCKETBASE_TYPE.EMAIL: case POCKETBASE_TYPE.EMAIL:
return { return {
exceptDomains: undefined,
hidden: false,
name, name,
type, onlyDomains: undefined,
system: false,
required: false,
presentable: false, presentable: false,
unique: false, required: false,
options: { system: false,
exceptDomains: null, type,
onlyDomains: null, } as EmailField;
},
};
case POCKETBASE_TYPE.JSON: case POCKETBASE_TYPE.JSON:
return { return {
hidden: false,
maxSize: 0,
name, name,
type,
system: false,
required: false,
presentable: false, presentable: false,
unique: false, required: false,
options: { system: false,
maxSize: 2000000 type,
}, } as JsonField;
};
case POCKETBASE_TYPE.DATETIME: case POCKETBASE_TYPE.DATETIME:
return { return {
name, hidden: false,
type,
system: false,
required: false,
presentable: false,
unique: false,
options: {
min: "",
max: "", max: "",
}, min: "",
}; name,
presentable: false,
required: false,
system: false,
type,
} as DateField;
case POCKETBASE_TYPE.URL: case POCKETBASE_TYPE.URL:
return { return {
hidden: false,
exceptDomains: undefined,
name, name,
type, onlyDomains: undefined,
system: false,
required: false,
presentable: false, presentable: false,
unique: false, required: false,
options: { system: false,
exceptDomains: null, type,
onlyDomains: null, } as UrlField;
},
};
} }
} }