@rattus-orm/vuex
Version:
ORM for your JS/TS apps: vuex bindings
165 lines (158 loc) • 4.6 kB
JavaScript
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var src_exports = {};
__export(src_exports, {
VuexDataProvider: () => VuexDataProvider,
installRattusORM: () => installRattusORM,
useRepository: () => useRepository
});
module.exports = __toCommonJS(src_exports);
// src/composable/composable.ts
var import_integrationsHelpers = require("@rattus-orm/core/utils/integrationsHelpers");
var import_vueComposableUtils = require("@rattus-orm/core/utils/vueComposableUtils");
function useRepository(model, connection) {
const repo = (0, import_integrationsHelpers.useRepositoryForDynamicContext)(model, connection);
return (0, import_vueComposableUtils.computifyUseRepository)(repo);
}
// src/data-provider/vuex-data-provider.ts
var import_core = require("@rattus-orm/core");
// src/data-provider/mutations.ts
function save(state, records) {
state.data = Object.assign({}, state.data, records);
}
function fresh(state, records) {
state.data = records;
}
function destroy(state, ids) {
const data = {};
for (const id in state.data) {
if (!ids.includes(id)) {
data[id] = state.data[id];
}
}
state.data = data;
}
function flush(state) {
state.data = {};
}
// src/data-provider/vuex-data-provider.ts
var VuexDataProvider = class extends import_core.DataProviderHelpers {
constructor(store) {
super();
this.store = store;
}
delete(module2, ids) {
this.commit(module2, "delete", ids);
}
flush(module2) {
this.commit(module2, "flush");
}
replace(module2, records) {
this.commit(module2, "fresh", records);
}
getModuleState(module2) {
return this.store.getters[`${this.getModulePathString(module2)}/getData`];
}
insert(module2, records) {
this.commit(module2, "insert", records);
}
registerConnection(name) {
if (this.isModuleRegistered([name, ""])) {
return;
}
this.store.registerModule(name, {
namespaced: true,
state: {},
getters: this.createGetters()
});
this.markModuleAsRegistered([name, ""]);
}
registerModule(path, initialState = { data: {} }) {
if (this.isModuleRegistered(path)) {
return;
}
this.store.registerModule(
path,
{
namespaced: true,
mutations: this.createMutations(),
getters: this.createGetters(),
state: initialState
},
{
preserveState: this.moduleDataExists(path)
}
);
this.markModuleAsRegistered(path);
}
save(module2, records) {
this.commit(module2, "save", records);
}
update(module2, records) {
this.commit(module2, "update", records);
}
hasModule(module2) {
return this.isModuleRegistered(module2);
}
dump() {
return JSON.parse(JSON.stringify(this.store.state));
}
restore(data) {
super.restore(data);
}
getModulePathString(modulePath) {
return typeof modulePath === "string" ? modulePath : modulePath.join("/");
}
createMutations() {
return {
save,
fresh,
delete: destroy,
flush,
insert: save,
update: save
};
}
createGetters() {
return {
getData: (state) => state
};
}
commit(module2, name, payload) {
const type = [].concat(module2, name).join("/");
this.store.commit(type, payload);
}
moduleDataExists([connection, moduleName]) {
return !!this.store.state[connection]?.[moduleName];
}
};
// src/plugin/plugin.ts
var import_integrationsHelpers2 = require("@rattus-orm/core/utils/integrationsHelpers");
function installRattusORM(options) {
return (store) => {
(0, import_integrationsHelpers2.contextBootstrap)(options ?? { connection: "entities" }, new VuexDataProvider(store));
};
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
VuexDataProvider,
installRattusORM,
useRepository
});
;