Compare commits
15 Commits
ab337e6b1b
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 9987810cca | |||
| f8d8671ef2 | |||
| c6ecb4cc4b | |||
| af96b1c305 | |||
| d5c75e8644 | |||
|
|
53e7af0f20 | ||
|
|
336f5b69a5 | ||
| f696a468d6 | |||
| 4d07c0e5fa | |||
| 4bc23af526 | |||
| 418adc0abd | |||
| 83431e02a9 | |||
| 481c916179 | |||
| b459c402a5 | |||
| 4f71406de2 |
5
.github/workflows/docker-publish.yml
vendored
5
.github/workflows/docker-publish.yml
vendored
@@ -1,9 +1,8 @@
|
||||
name: Docker CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'master'
|
||||
release:
|
||||
types: [created]
|
||||
|
||||
jobs:
|
||||
docker:
|
||||
|
||||
14
README.md
14
README.md
@@ -15,6 +15,20 @@ docker push cubetiq/calpine-node:14
|
||||
docker run --rm -it cubetiq/calpine-node:14 /bin/sh
|
||||
```
|
||||
|
||||
# Example
|
||||
```Dockerfile
|
||||
FROM cubetiq/calpine-node:latest
|
||||
LABEL maintainer="sombochea@cubetiqs.com"
|
||||
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
COPY . /usr/src/app
|
||||
|
||||
RUN yarn
|
||||
|
||||
CMD [ "node" , "index.js"]
|
||||
```
|
||||
|
||||
# Contributors
|
||||
- Sambo Chea <sombochea@cubetiqs.com>
|
||||
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
# Examples
|
||||
- Say Hello to Docker with Nodejs
|
||||
- Excel file transform to json with Nodejs
|
||||
5
examples/excel2json/.gitignore
vendored
Normal file
5
examples/excel2json/.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
node_modules/
|
||||
yarn.lock
|
||||
package-lock.json
|
||||
yarn-error*
|
||||
outputs/
|
||||
16
examples/excel2json/Dockerfile
Normal file
16
examples/excel2json/Dockerfile
Normal file
@@ -0,0 +1,16 @@
|
||||
FROM cubetiq/calpine-node:latest
|
||||
LABEL maintainer="sombochea@cubetiqs.com"
|
||||
|
||||
VOLUME [ "/app/data" ]
|
||||
|
||||
ENV INPUT_FILE './data/people.xlsx'
|
||||
ENV OUTPUT_PATH './data/outputs'
|
||||
ENV MAPPER_FILE './data/mapper.json'
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY . /app
|
||||
|
||||
RUN yarn
|
||||
|
||||
CMD [ "node" , "index.js"]
|
||||
11
examples/excel2json/Makefile
Normal file
11
examples/excel2json/Makefile
Normal file
@@ -0,0 +1,11 @@
|
||||
DOCKER_IMAGE=cubetiq/node-excel2json
|
||||
|
||||
build:
|
||||
@echo "Building docker image..."
|
||||
docker build . -t ${DOCKER_IMAGE}
|
||||
|
||||
run:
|
||||
@echo "Running container..."
|
||||
docker run --rm -t ${DOCKER_IMAGE}
|
||||
|
||||
.PHONY: build
|
||||
60
examples/excel2json/README.md
Normal file
60
examples/excel2json/README.md
Normal file
@@ -0,0 +1,60 @@
|
||||
# excel2json
|
||||
|
||||
- Read file excel to json
|
||||
- Custom mapping with custom columns and configs
|
||||
|
||||
# Build
|
||||
|
||||
```shell
|
||||
bash build
|
||||
```
|
||||
|
||||
OR
|
||||
|
||||
```shell
|
||||
make build run
|
||||
```
|
||||
|
||||
# Example
|
||||
|
||||
```shell
|
||||
docker run -v /my/path:/app/data --rm -it cubetiq/node-excel2json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker run -v /home/sombochea/excel2json:/app/data -e APP_NAME="EXCEL 2 JSON" -e MAPPER_FILE="./data/mapper.json" --rm -it cubetiq/node-excel2json
|
||||
```
|
||||
|
||||
# Mapper Config
|
||||
|
||||
```json
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"dataIndex": "Name",
|
||||
"label": "Name"
|
||||
},
|
||||
{
|
||||
"dataIndex": "Age",
|
||||
"label": "Age"
|
||||
}
|
||||
],
|
||||
"configs": {
|
||||
"outputPath": "./data/outputs/exported",
|
||||
"outputName": "my_exported_data",
|
||||
"sheetName": "Sheet1",
|
||||
"saveToOutput": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
# Environment
|
||||
|
||||
```env
|
||||
APP_NAME=custom app name
|
||||
INPUT_FILE=./data/mydata.xlsx
|
||||
OUTPUT_PATH=./data/outputs
|
||||
MAPPER_FILE=./data/mapper.json
|
||||
SHEET_NAME=Sheet1
|
||||
ENCODING=utf-8
|
||||
```
|
||||
3
examples/excel2json/build.sh
Normal file
3
examples/excel2json/build.sh
Normal file
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
make build run
|
||||
18
examples/excel2json/data/mapper.json
Normal file
18
examples/excel2json/data/mapper.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"dataIndex": "Name",
|
||||
"label": "Name"
|
||||
},
|
||||
{
|
||||
"dataIndex": "Age",
|
||||
"label": "Age"
|
||||
}
|
||||
],
|
||||
"configs": {
|
||||
"outputPath": "./data/outputs/exported",
|
||||
"outputName": "my_exported_data",
|
||||
"sheetName": "Sheet1",
|
||||
"saveToOutput": true
|
||||
}
|
||||
}
|
||||
BIN
examples/excel2json/data/people.xlsx
Normal file
BIN
examples/excel2json/data/people.xlsx
Normal file
Binary file not shown.
100
examples/excel2json/excel2json.js
Normal file
100
examples/excel2json/excel2json.js
Normal file
@@ -0,0 +1,100 @@
|
||||
const XLSX = require("xlsx");
|
||||
const fs = require("fs");
|
||||
|
||||
// do export for excel to json output or data json object
|
||||
function _internalExport() {
|
||||
const NAME = process.env.APP_NAME || "excel2json";
|
||||
console.log("APP NAME =>", NAME, "\n");
|
||||
|
||||
// load from env
|
||||
const INPUT_FILE = process.env.INPUT_FILE || "./data/people.xlsx";
|
||||
const OUTPUT_PATH = process.env.OUTPUT_PATH || "./data/outputs";
|
||||
const MAPPER_FILE = process.env.MAPPER_FILE || "./data/mapper.json";
|
||||
const SHEET_NAME = process.env.SHEET_NAME || "Sheet1";
|
||||
const ENCODING = process.env.ENCODING || "utf-8";
|
||||
|
||||
// get mapper in string
|
||||
var mapperString = undefined;
|
||||
try {
|
||||
mapperString = fs.readFileSync(
|
||||
MAPPER_FILE,
|
||||
{ encoding: ENCODING },
|
||||
(err) => {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
}
|
||||
console.log("Load file suceed =>", MAPPER_FILE);
|
||||
}
|
||||
);
|
||||
} catch (err) {
|
||||
console.error("read file error", err);
|
||||
}
|
||||
|
||||
// convert mapper from string to json object
|
||||
const mapperJson = mapperString ? JSON.parse(mapperString) : {};
|
||||
const configs = mapperJson.configs || {};
|
||||
const columsData = mapperJson.data || undefined;
|
||||
|
||||
// read workbook from excel file
|
||||
const wb = XLSX.readFile(configs.inputFile || INPUT_FILE);
|
||||
const xlData = XLSX.utils.sheet_to_json(
|
||||
wb.Sheets[configs.sheetName || SHEET_NAME]
|
||||
);
|
||||
|
||||
// mapping the data from read excel file
|
||||
const data = xlData.map((row) => {
|
||||
if (columsData == undefined || !columsData) {
|
||||
return row;
|
||||
}
|
||||
|
||||
var _r = {};
|
||||
|
||||
columsData.map((col) => {
|
||||
_r[col.label] = row[col.dataIndex];
|
||||
});
|
||||
|
||||
return _r;
|
||||
});
|
||||
|
||||
// parse a new path
|
||||
const outputPath = configs.outputPath || OUTPUT_PATH;
|
||||
|
||||
// check directory and create it if not exist
|
||||
if (!fs.existsSync(outputPath)) {
|
||||
fs.mkdirSync(outputPath, { recursive: true });
|
||||
}
|
||||
|
||||
// able to save to output or not (default is true)
|
||||
const saveToOutput = configs.saveToOutput || true;
|
||||
|
||||
if (saveToOutput) {
|
||||
// json data output
|
||||
const jsonStringData = JSON.stringify(data);
|
||||
|
||||
try {
|
||||
// write to file
|
||||
fs.writeFileSync(
|
||||
`${outputPath}/${
|
||||
configs.outputName || "exported"
|
||||
}_${new Date().getTime()}.json`,
|
||||
jsonStringData,
|
||||
(err) => {
|
||||
if (err) throw err;
|
||||
console.log("Write succeed!");
|
||||
}
|
||||
);
|
||||
} catch (err) {}
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* excel2json
|
||||
* Allow to export data from excel to json object or output of json.
|
||||
*
|
||||
* @returns JSON Object of result
|
||||
*/
|
||||
module.exports = excel2json = () => {
|
||||
return _internalExport()
|
||||
}
|
||||
8
examples/excel2json/index.js
Normal file
8
examples/excel2json/index.js
Normal file
@@ -0,0 +1,8 @@
|
||||
// import excel2json module
|
||||
const excel2json = require("./excel2json");
|
||||
|
||||
// called function export excel2json
|
||||
const exported = excel2json();
|
||||
|
||||
// output data from exported
|
||||
console.log("Output =>\n", exported);
|
||||
15
examples/excel2json/package.json
Normal file
15
examples/excel2json/package.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"name": "excel2json",
|
||||
"version": "1.0.0",
|
||||
"description": "Excel to json",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"start": "node index.js",
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "Sambo Chea <sombochea@cubetiqs.com>",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"xlsx": "^0.16.9"
|
||||
}
|
||||
}
|
||||
3
examples/sayhello/build.sh
Normal file
3
examples/sayhello/build.sh
Normal file
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
make build run
|
||||
Reference in New Issue
Block a user