65 lines
1.9 KiB
JavaScript
65 lines
1.9 KiB
JavaScript
// Compile-time constants for the dev-deploy plugin.
|
|
|
|
const PLUGIN_NAME = "dev-deploy";
|
|
const PLUGIN_VERSION = "0.0.1";
|
|
|
|
// Namespace UUID for deterministic IDs derived from (kind, name).
|
|
// Generated once via crypto.randomUUID() and frozen here forever.
|
|
// Two environments that bootstrap from the same metadata population
|
|
// will assign identical UUIDs to entities with the same (kind, name).
|
|
const ID_NAMESPACE = "8b3a1e0d-4f6c-4d2a-9c5b-7e8f9a0b1c2d";
|
|
|
|
const OP_SCHEMA_VERSION = 1;
|
|
|
|
const DATA_MODES = {
|
|
MANAGED: "managed",
|
|
STARTER: "starter",
|
|
USER: "user"
|
|
};
|
|
|
|
const DESTRUCTIVE_POLICY = {
|
|
AUTO: "auto",
|
|
CONFIRM: "confirm",
|
|
REFUSE: "refuse"
|
|
};
|
|
|
|
// Entity kinds the plugin tracks. Children point at parents via parent_uuid.
|
|
const ENTITY_KINDS = {
|
|
TABLE: "table",
|
|
FIELD: "field",
|
|
VIEW: "view",
|
|
PAGE: "page",
|
|
TRIGGER: "trigger",
|
|
ROLE: "role",
|
|
LIBRARY: "library",
|
|
TAG: "tag",
|
|
CONSTRAINT: "constraint",
|
|
FILE: "file",
|
|
PAGE_GROUP: "page_group",
|
|
PAGE_GROUP_MEMBER: "page_group_member",
|
|
WORKFLOW_STEP: "workflow_step"
|
|
};
|
|
|
|
|
|
// Files don't have a meaningful integer id in current Saltcorn (File.create
|
|
// doesn't insert into _sc_files anymore — files are identified by their disk
|
|
// location and metadata via xattrs). We derive a stable 31-bit int from the
|
|
// location string so files fit the existing UNIQUE(kind, current_id) shape of
|
|
// _dd_entity_ids without a schema change.
|
|
const fileLocationToId = (location) => {
|
|
const crypto = require("crypto");
|
|
const hash = crypto.createHash("sha256").update(String(location)).digest();
|
|
return hash.readUInt32BE(0) & 0x7FFFFFFF;
|
|
};
|
|
|
|
|
|
module.exports = {
|
|
PLUGIN_NAME,
|
|
PLUGIN_VERSION,
|
|
ID_NAMESPACE,
|
|
OP_SCHEMA_VERSION,
|
|
DATA_MODES,
|
|
DESTRUCTIVE_POLICY,
|
|
ENTITY_KINDS,
|
|
fileLocationToId
|
|
};
|