react-stream-bloc
Version:
React Stream Bloc
214 lines (206 loc) • 5.99 kB
JavaScript
;
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
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 __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var index_exports = {};
__export(index_exports, {
Bloc: () => Bloc_default,
BlocBuilder: () => BlocBuilder_default,
BlocProvider: () => BlocProvider_default,
StreamBuilder: () => StreamBuilder_default,
clearStore: () => clearStore,
createContext: () => createContext2,
getStore: () => getStore,
removeStore: () => removeStore,
setStore: () => setStore
});
module.exports = __toCommonJS(index_exports);
// src/core/provider/BlocProvider.tsx
var React = __toESM(require("react"));
function BlocProvider({ providers, children }) {
return providers.reduceRight(
(children2, parent, index) => React.cloneElement(parent, {}, children2),
/* @__PURE__ */ React.createElement(React.Fragment, null, children)
);
}
var BlocProvider_default = BlocProvider;
// src/core/bloc/Bloc.ts
var Bloc = class {
internalState;
listeners = [];
constructor(initalState) {
this.internalState = initalState;
}
get state() {
return this.internalState;
}
changeState(state) {
this.internalState = state;
if (this.listeners.length > 0) {
this.listeners.forEach((listener) => listener(this.state));
}
}
subscribe(listener) {
this.listeners.push(listener);
}
unsubscribe(listener) {
const index = this.listeners.indexOf(listener);
if (index > -1) {
this.listeners.splice(index, 1);
}
}
};
var Bloc_default = Bloc;
// src/core/store/store.ts
var import_crypto_js = __toESM(require("crypto-js"));
var secretKey = "react-stream-secret-key";
var getStore = (key, session = false, secret_key = secretKey) => {
let encryptedData;
if (session) {
encryptedData = sessionStorage.getItem(key);
} else {
encryptedData = localStorage.getItem(key);
}
if (!encryptedData) return null;
try {
const bytes = import_crypto_js.default.AES.decrypt(encryptedData, secret_key);
return JSON.parse(bytes.toString(import_crypto_js.default.enc.Utf8));
} catch (error) {
return null;
}
};
var setStore = (key, data, session = false, secret_key = secretKey) => {
try {
const encrypted = import_crypto_js.default.AES.encrypt(
JSON.stringify(data),
secret_key
).toString();
if (session) {
sessionStorage.setItem(key, encrypted);
} else {
localStorage.setItem(key, encrypted);
}
return true;
} catch (e) {
return false;
}
};
var removeStore = (key, session = false) => {
try {
if (session) {
sessionStorage.removeItem(key);
} else {
localStorage.removeItem(key);
}
return true;
} catch (e) {
return false;
}
};
var clearStore = (session = false) => {
try {
if (session) {
sessionStorage.clear();
} else {
localStorage.clear();
}
return true;
} catch (err) {
return false;
}
};
// src/core/bloc/BlocBuilder.tsx
var React2 = __toESM(require("react"));
var BlocBuilder = ({
bloc,
builder
}) => {
const [state, setState] = React2.useState(bloc.state);
React2.useEffect(() => {
const stateSubscription = (state2) => {
setState(state2);
};
bloc.subscribe(stateSubscription);
return () => bloc.unsubscribe(stateSubscription);
}, [bloc]);
return builder(state);
};
var BlocBuilder_default = BlocBuilder;
// src/core/stream/StreamBuilder.ts
var React3 = __toESM(require("react"));
var import_rxjs = require("rxjs");
var StreamBuilder = class extends React3.Component {
subscription;
constructor(props) {
super(props);
this.state = {
snapshot: {
data: void 0,
state: 0 /* none */
}
};
this.subscription = import_rxjs.Subscription.EMPTY;
}
componentDidMount() {
this.subscription = this.props.stream.subscribe(
(snapshot) => this.setState({
snapshot: { data: snapshot, state: 2 /* active */ }
})
);
}
componentWillUnmount() {
this.subscription.unsubscribe();
}
render() {
return this.props.builder(this.state.snapshot);
}
};
var StreamBuilder_default = StreamBuilder;
// src/core/context/Context.tsx
var React4 = __toESM(require("react"));
function createContext2() {
const context = React4.createContext(void 0);
function useContext2() {
const ctx = React4.useContext(context);
if (!ctx) throw new Error("context must be inside a Provider with a value");
return ctx;
}
return [context, useContext2];
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
Bloc,
BlocBuilder,
BlocProvider,
StreamBuilder,
clearStore,
createContext,
getStore,
removeStore,
setStore
});