|
3 | 3 | // TODO: |
4 | 4 | // confirm files w/user before uploading? |
5 | 5 |
|
6 | | -let ApiClient = require('../lib/api') |
7 | | -let fs = require('fs') |
8 | | -let path = require('path') |
9 | | -let program = require('commander') |
10 | | -let watch = require('chokidar').watch |
| 6 | +const fs = require('fs'); |
| 7 | +const path = require('path'); |
| 8 | +const program = require('commander'); |
| 9 | +const watch = require('chokidar').watch; |
| 10 | + |
| 11 | +const ApiClient = require('../lib/api'); |
| 12 | +const { getFiles } = require('../lib/get-files'); |
11 | 13 |
|
12 | 14 | program |
13 | 15 | .option('-w, --watch', 'deploy files on change') |
14 | | - .option('-x --replace', 'replace css and js file paths inside html file with their QuickBase url') |
15 | | - .parse(process.argv) |
16 | | - |
17 | | -let sourceArg = program.args[0] || '.' |
18 | | -let configPath = require('../lib/find-config')(sourceArg) |
19 | | -let config = require(configPath) |
20 | | -let api = new ApiClient(config) |
| 16 | + .option( |
| 17 | + '-x --replace', |
| 18 | + 'replace css and js file paths inside html file with their QuickBase url' |
| 19 | + ) |
| 20 | + .parse(process.argv); |
21 | 21 |
|
22 | | -const CONFIG_FILE_NAME = 'quickbase-cli.config.js' |
| 22 | +const sourceArg = program.args[0] || '.'; |
| 23 | +const configPath = require('../lib/find-config')(sourceArg); |
| 24 | +const config = require(configPath); |
| 25 | +const api = new ApiClient(config); |
23 | 26 |
|
24 | | -qbDeploy(sourceArg) |
| 27 | +qbDeploy(sourceArg); |
25 | 28 |
|
26 | 29 | if (program.watch) { |
27 | | - console.log(`Watching for file changes in ${sourceArg}`) |
| 30 | + console.log(`Watching for file changes in ${sourceArg}`); |
28 | 31 |
|
29 | | - watch(sourceArg, {}).on('change', (fileName) => { |
30 | | - console.log(`\nChange detected in ${fileName}. Deploying...`) |
31 | | - qbDeploy(fileName) |
32 | | - }) |
| 32 | + watch(sourceArg, {}).on('change', fileName => { |
| 33 | + console.log(`\nChange detected in ${fileName}. Deploying...`); |
| 34 | + qbDeploy(fileName); |
| 35 | + }); |
33 | 36 | } |
34 | 37 |
|
35 | 38 | function qbDeploy(source) { |
36 | | - let isFile = fs.statSync(source).isFile() |
| 39 | + let isFile = fs.statSync(source).isFile(); |
37 | 40 |
|
38 | 41 | if (isFile) { |
39 | 42 | return uploadToQuickbase(source) |
40 | | - .then(res => console.log(`Successfully uploaded to QuickBase:\n\t${source}`)) |
41 | | - .catch(err => console.error(err)) |
| 43 | + .then(res => |
| 44 | + console.log(`Successfully uploaded to QuickBase:\n=> ${source}`) |
| 45 | + ) |
| 46 | + .catch(err => console.error(err)); |
42 | 47 | } |
43 | 48 |
|
44 | 49 | if (!isFile) { |
45 | | - let allFiles = fs.readdirSync(source).filter(file => file.charAt(0) != '.' && file != CONFIG_FILE_NAME) |
46 | | - let htmlFiles = allFiles.filter(file => path.extname(file) == '.html').map(file => path.join(source, file)) |
47 | | - let assetFiles = allFiles.filter(file => path.extname(file) != '.html').map(file => path.join(source, file)) |
48 | | - |
49 | | - let uploadHtmlFiles = program.replace |
50 | | - ? replaceUrlsAndUpload(htmlFiles, assetFiles) |
51 | | - : htmlFiles.map(htmlFile => uploadToQuickbase(htmlFile)) |
52 | | - let uploadAssetFiles = assetFiles.map(assetFile => uploadToQuickbase(assetFile)) |
53 | | - let uploadAllFiles = uploadHtmlFiles.concat(uploadAssetFiles) |
54 | | - |
55 | | - return Promise.all(uploadAllFiles) |
56 | | - .then(res => console.log(`Successfully uploaded to QuickBase:\n\t${allFiles.join("\n\t")}`)) |
57 | | - .catch(err => console.error(err)) |
| 50 | + getFiles(source).then(files => { |
| 51 | + const { htmlFiles, assetFiles } = files; |
| 52 | + |
| 53 | + const uploadHtmlFiles = program.replace |
| 54 | + ? replaceUrlsAndUpload(htmlFiles, assetFiles) |
| 55 | + : htmlFiles.map(htmlFile => uploadToQuickbase(htmlFile)); |
| 56 | + |
| 57 | + const uploadAssetFiles = assetFiles.map(assetFile => |
| 58 | + uploadToQuickbase(assetFile) |
| 59 | + ); |
| 60 | + |
| 61 | + const uploadAllFiles = uploadHtmlFiles.concat(uploadAssetFiles); |
| 62 | + |
| 63 | + return Promise.all(uploadAllFiles) |
| 64 | + .then(res => |
| 65 | + console.log( |
| 66 | + `Successfully uploaded to QuickBase:\n=> ${htmlFiles |
| 67 | + .concat(assetFiles) |
| 68 | + .join('\n=> ')}` |
| 69 | + ) |
| 70 | + ) |
| 71 | + .catch(err => console.error(err)); |
| 72 | + }); |
58 | 73 | } |
59 | 74 | } |
60 | 75 |
|
61 | 76 | function uploadToQuickbase(file, fileContents) { |
62 | | - let fileName = path.basename(file) |
63 | | - let codePageName |
| 77 | + let fileName = path.basename(file); |
| 78 | + let codePageName; |
64 | 79 |
|
65 | 80 | if (!fileContents) { |
66 | | - fileContents = fs.readFileSync(file, 'utf-8') |
| 81 | + fileContents = fs.readFileSync(file, 'utf-8'); |
67 | 82 | } |
68 | 83 |
|
69 | 84 | if (config.appName) { |
70 | | - codePageName = `${config.appName}-${fileName}` |
| 85 | + codePageName = `${config.appName}-${fileName}`; |
71 | 86 | } else { |
72 | | - codePageName = fileName |
| 87 | + codePageName = fileName; |
73 | 88 | } |
74 | 89 |
|
75 | | - return api.uploadPage(codePageName, fileContents) |
| 90 | + return api.uploadPage(codePageName, fileContents); |
76 | 91 | } |
77 | 92 |
|
78 | 93 | function replaceUrlsAndUpload(htmlFiles, assetFiles) { |
79 | 94 | return htmlFiles.map(htmlFile => { |
80 | | - let htmlContents = fs.readFileSync(htmlFile, 'utf-8') |
| 95 | + let htmlContent = fs.readFileSync(htmlFile, 'utf-8'); |
81 | 96 |
|
82 | 97 | assetFiles.forEach(assetFile => { |
83 | | - assetFile = path.basename(assetFile) |
84 | | - assetFileTagRegExp = |
85 | | - |
86 | | - htmlContents = htmlContents.replace(new RegExp(assetFile, 'g'), generateCustomPageUrl(assetFile)) |
87 | | - }) |
88 | | - |
89 | | - return uploadToQuickbase(htmlFile, htmlContents) |
90 | | - }) |
| 98 | + const fileName = path.basename(assetFile); |
| 99 | + const regex = new RegExp(`("|')[^"]*${fileName}("|')`, 'g'); |
| 100 | + |
| 101 | + htmlContent = htmlContent.replace( |
| 102 | + regex, |
| 103 | + generateCustomPageUrl(path.basename(assetFile)) |
| 104 | + ); |
| 105 | + }); |
| 106 | + |
| 107 | + console.log(htmlContent); |
| 108 | + return uploadToQuickbase(htmlFile, htmlContent); |
| 109 | + }); |
91 | 110 | } |
92 | 111 |
|
93 | 112 | function generateCustomPageUrl(fileName) { |
94 | | - return `https://${config.realm}.quickbase.com/db/${config.dbid}?a=dbpage&pagename=${config.appName}-${fileName}` |
| 113 | + const suffix = config.appName |
| 114 | + ? `${config.appName}-${fileName}` |
| 115 | + : `${fileName}`; |
| 116 | + |
| 117 | + return `"https://${config.realm}.quickbase.com/db/${ |
| 118 | + config.dbid |
| 119 | + }?a=dbpage&pagename=${suffix}"`; |
95 | 120 | } |
0 commit comments