UNPKG

@rattus-orm/vuex

Version:
165 lines (158 loc) 4.6 kB
"use strict"; 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 });