Removing the use of helper-date which was causing some problems, instead took what we needed of it out of the package and updated to use dayjs instead of moment.
This commit is contained in:
parent
febad5ad9d
commit
537c5a02ca
|
@ -15,9 +15,9 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@budibase/handlebars-helpers": "^0.11.3",
|
||||
"dayjs": "^1.10.4",
|
||||
"handlebars": "^4.7.6",
|
||||
"handlebars-utils": "^1.0.6",
|
||||
"helper-date": "^1.0.1",
|
||||
"lodash": "^4.17.20"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
|
|
@ -0,0 +1,76 @@
|
|||
const dayjs = require("dayjs")
|
||||
|
||||
/**
|
||||
* This file was largely taken from the helper-date package - we did this for two reasons:
|
||||
* 1. It made use of both moment of date.js - this caused some weird bugs with some relatively simple
|
||||
* syntax and didn't offer much in return.
|
||||
* 2. Replacing moment with dayjs helps massively reduce bundle size.
|
||||
* The original package can be found here:
|
||||
* https://github.com/helpers/helper-date
|
||||
*/
|
||||
|
||||
function isOptions(val) {
|
||||
return typeof(val) === "object" && typeof(val.hash) === "object"
|
||||
}
|
||||
|
||||
function isApp(thisArg) {
|
||||
return typeof(thisArg) === "object"
|
||||
&& typeof(thisArg.options) === "object"
|
||||
&& typeof(thisArg.app) === "object"
|
||||
}
|
||||
|
||||
function getContext(thisArg, locals, options) {
|
||||
if (isOptions(thisArg)) {
|
||||
return getContext({}, locals, thisArg)
|
||||
}
|
||||
// ensure args are in the correct order
|
||||
if (isOptions(locals)) {
|
||||
return getContext(thisArg, options, locals)
|
||||
}
|
||||
const appContext = isApp(thisArg) ? thisArg.context : {}
|
||||
options = options || {}
|
||||
|
||||
// if "options" is not handlebars options, merge it onto locals
|
||||
if (!isOptions(options)) {
|
||||
locals = Object.assign({}, locals, options)
|
||||
}
|
||||
// merge handlebars root data onto locals if specified on the hash
|
||||
if (isOptions(options) && options.hash.root === true) {
|
||||
locals = Object.assign({}, options.data.root, locals)
|
||||
}
|
||||
let context = Object.assign({}, appContext, locals, options.hash)
|
||||
if (!isApp(thisArg)) {
|
||||
context = Object.assign({}, thisArg, context)
|
||||
}
|
||||
if (isApp(thisArg) && thisArg.view && thisArg.view.data) {
|
||||
context = Object.assign({}, context, thisArg.view.data)
|
||||
}
|
||||
return context
|
||||
}
|
||||
|
||||
module.exports = function dateHelper(str, pattern, options) {
|
||||
if (isOptions(pattern)) {
|
||||
options = pattern
|
||||
pattern = null
|
||||
}
|
||||
|
||||
if (isOptions(str)) {
|
||||
options = str
|
||||
pattern = null
|
||||
str = null
|
||||
}
|
||||
|
||||
// if no args are passed, return a formatted date
|
||||
if (str == null && pattern == null) {
|
||||
dayjs.locale("en")
|
||||
return dayjs().format("MMMM DD, YYYY")
|
||||
}
|
||||
|
||||
const defaults = {lang: "en", date: new Date(str)}
|
||||
const opts = getContext(this, defaults, options)
|
||||
|
||||
// set the language to use
|
||||
dayjs.locale(opts.lang || opts.language)
|
||||
|
||||
return dayjs(new Date(str)).format(pattern)
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
const helpers = require("@budibase/handlebars-helpers")
|
||||
const dateHelper = require("helper-date")
|
||||
const dateHelper = require("./date")
|
||||
const { HelperFunctionBuiltin } = require("./constants")
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
const {
|
||||
processString,
|
||||
processObject,
|
||||
isValid,
|
||||
} = require("../src/index")
|
||||
|
||||
|
@ -330,4 +331,11 @@ describe("Cover a few complex use cases", () => {
|
|||
const output = await processString(input, {})
|
||||
expect(output).toBe(input)
|
||||
})
|
||||
|
||||
it("getting a nice date from the user", async () => {
|
||||
const input = {text: `{{ date user.subscriptionDue "DD-MM" }}`}
|
||||
const context = JSON.parse(`{"user":{"email":"test@test.com","roleId":"ADMIN","type":"user","tableId":"ta_users","subscriptionDue":"2021-01-12T12:00:00.000Z","_id":"ro_ta_users_us_test@test.com","_rev":"2-24cc794985eb54183ecb93e148563f3d"}}`)
|
||||
const output = await processObject(input, context)
|
||||
expect(output.text).toBe("12-01")
|
||||
})
|
||||
})
|
|
@ -1596,6 +1596,11 @@ date.js@^0.3.1:
|
|||
dependencies:
|
||||
debug "~3.1.0"
|
||||
|
||||
dayjs@^1.10.4:
|
||||
version "1.10.4"
|
||||
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.4.tgz#8e544a9b8683f61783f570980a8a80eaf54ab1e2"
|
||||
integrity sha512-RI/Hh4kqRc1UKLOAf/T5zdMMX5DQIlDxwUe3wSyMMnEbGunnpENCdbUgM+dW7kXidZqCttBrmw7BhN4TMddkCw==
|
||||
|
||||
debug@^2.2.0, debug@^2.3.3:
|
||||
version "2.6.9"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
||||
|
|
Loading…
Reference in New Issue