2
0
Эх сурвалжийг харах

feat: prevent config file from being fetched multiple times

Signed-off-by: Jonathan <theflametrooper@gmail.com>
Jonathan 4 жил өмнө
parent
commit
e7021da795
7 өөрчлөгдсөн 385 нэмэгдсэн , 588 устгасан
  1. 4 2
      README.md
  2. 0 0
      dist/lofig.min.js
  3. 0 6
      example/README.md
  4. 35 28
      lofig.js
  5. 340 548
      package-lock.json
  6. 3 2
      package.json
  7. 3 2
      webpack.config.js

+ 4 - 2
README.md

@@ -1,6 +1,6 @@
 # lofig
 
-> [npmjs.com/package/config](https://npmjs.com/package/config) for client side JavaScript
+> [npmjs.com/package/config](https://npmjs.com/package/config), but for client side JavaScript
 
 [![Known Vulnerabilities](https://snyk.io//test/github/jonathan-grah/lofig/badge.svg?targetFile=package.json)](https://snyk.io//test/github/jonathan-grah/lofig?targetFile=package.json)
 
@@ -30,4 +30,6 @@ lofig.get('secret', res => {
 })
 ```
 
-See the [example](https://github.com/jonathan-grah/lofig/tree/master/example) folder for more details.
+## Development
+
+Run `npm run dev` to use webpack-dev-server for development purposes.

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
dist/lofig.min.js


+ 0 - 6
example/README.md

@@ -1,6 +0,0 @@
-You will want to use a simple http server to view the example to avoid path issues.
-
-> Note: you will need to host the server in the root directory so the `dist` folder can be accessed. 
-
-
-For example: `python3 -m http.server`

+ 35 - 28
lofig.js

@@ -1,35 +1,42 @@
+
+
 window.lofig = {
 	folder: '/config/default.json',
-	get: (query, cb) => {
-		return fetch(lofig.folder)
-			.then(response => {
-				return response.json();
-			}).then(json => {
-				query.split('.')
-					.forEach(property => {
-						json = json[property];
-					});
-
-				if (cb) return cb(json);
-				else return json;
-			}).catch(err => {
-				console.log('parsing failed', err);
+	config: null,
+	fetchConfig: async () => {
+		if (!lofig.config) {
+			const response = await fetch(lofig.folder);
+
+			if (!response.ok) {
+				const message = `An error has occured: ${response.status}`;
+				throw new Error(message);
+			}
+
+			lofig.config = response.json();
+		}
+
+		return lofig.config;
+	},
+	get: async (query, cb) => {
+		let json = await lofig.fetchConfig();
+
+		query.split('.')
+			.forEach(property => {
+				json = json[property];
 			});
+
+		if (cb) return cb(json);
+		return json;
 	},
-	has: (query, cb) => {
-		return fetch(lofig.folder)
-			.then(response => {
-				return response.json();
-			}).then(json => {
-				query.split('.')
-					.forEach(property => {
-						json = json[property];
-					});
-
-				if (cb) return cb(json);
-				return json;
-			}).catch(err => {
-				console.log('parsing failed', err);
+	has: async (query, cb) => {
+		let json = await lofig.fetchConfig();
+
+		query.split('.')
+			.forEach(property => {
+				json = json[property];
 			});
+
+		if (cb) return cb(!!json);
+		return !!json;
 	}
 };

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 340 - 548
package-lock.json


+ 3 - 2
package.json

@@ -10,6 +10,7 @@
   "devDependencies": {
     "@babel/core": "^7.12.16",
     "@babel/preset-env": "^7.12.16",
+    "@webpack-cli/serve": "^1.3.0",
     "babel-cli": "^6.26.0",
     "babel-core": "^6.26.3",
     "babel-loader": "^8.2.2",
@@ -19,7 +20,7 @@
     "imports-loader": "^0.8.0",
     "snyk": "^1.456.0",
     "webpack": "^4.46.0",
-    "webpack-cli": "^3.3.12",
+    "webpack-cli": "^4.3.0",
     "webpack-dev-server": "^3.11.2"
   },
   "license": "MIT",
@@ -30,7 +31,7 @@
     "url": "git+https://github.com/jonathan-grah/lofig.git"
   },
   "scripts": {
-    "dev": "webpack-dev-server --inline --hot --content-base example",
+    "dev": "webpack serve --open --mode=development",
     "build": "webpack --mode=production",
     "test": "snyk test"
   },

+ 3 - 2
webpack.config.js

@@ -2,7 +2,7 @@ var path = require('path')
 var webpack = require('webpack')
 
 module.exports = {
-  entry: ['./lofig.js'],
+  entry: ['babel-polyfill', './lofig.js'],
   output: {
     path: path.resolve(__dirname, './dist'),
     publicPath: '/dist',
@@ -29,7 +29,8 @@ module.exports = {
   },
   devServer: {
     historyApiFallback: true,
-    noInfo: true
+    noInfo: true,
+    contentBase: './example'
   },
   devtool: '#eval-source-map'
 }

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно