diff --git a/README.md b/README.md index 63a93ee..c641e90 100644 --- a/README.md +++ b/README.md @@ -4,15 +4,16 @@ ## List -- [@greenlabs/rescript-next](https://www.npmjs.com/package/@greenlabs/rescript-next) -- [@greenlabs/rescript-nock](https://www.npmjs.com/package/@greenlabs/rescript-nock) +- [@greenlabs/rescript-date-fns](https://www.npmjs.com/package/@greenlabs/rescript-date-fns) +- [@greenlabs/rescript-daum-postcode](https://www.npmjs.com/package/@greenlabs/rescript-daum-postcode) +- [@greenlabs/rescript-hammerjs](https://www.npmjs.com/package/@greenlabs/rescript-hammerjs) - [@greenlabs/rescript-jest](https://www.npmjs.com/package/@greenlabs/rescript-jest) +- [@greenlabs/rescript-nock](https://www.npmjs.com/package/@greenlabs/rescript-nock) - [@greenlabs/rescript-react-hook-form](https://www.npmjs.com/package/@greenlabs/rescript-react-hook-form) -- [@greenlabs/rescript-testing-library](https://www.npmjs.com/package/@greenlabs/rescript-testing-library) -- [@greenlabs/rescript-daum-postcode](https://www.npmjs.com/package/@greenlabs/rescript-daum-postcode) +- [@greenlabs/rescript-next](https://www.npmjs.com/package/@greenlabs/rescript-next) - [@greenlabs/rescript-react-linkify](https://www.npmjs.com/package/@greenlabs/rescript-react-linkify) -- [@greenlabs/rescript-date-fns](https://www.npmjs.com/package/@greenlabs/rescript-date-fns) -- [@greenlabs/rescript-hammerjs](https://www.npmjs.com/package/@greenlabs/rescript-hammerjs) +- [@greenlabs/rescript-testing-library](https://www.npmjs.com/package/@greenlabs/rescript-testing-library) +- [@greenlabs/rescript-use-debounce](https://www.npmjs.com/package/@greenlabs/rescript-use-debounce) ## Development diff --git a/package.json b/package.json index 62c2f85..2e71034 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "dependencies": { "@changesets/cli": "^2.24.4", "lerna": "^5.5.0", - "rescript": "^10.0.1" + "rescript": "11.0.0-rc.8" }, "private": true, "workspaces": [ diff --git a/packages/rescript-date-fns/package.json b/packages/rescript-date-fns/package.json index 01fd94c..92b0b06 100644 --- a/packages/rescript-date-fns/package.json +++ b/packages/rescript-date-fns/package.json @@ -1,7 +1,7 @@ { "name": "@greenlabs/rescript-date-fns", "description": "ReScript bindings to date-fns", - "version": "1.0.0", + "version": "2.30.0", "license": "MIT", "author": "Greenlabs Dev ", "contributors": [ @@ -25,6 +25,6 @@ "directory": "packages/rescript-date-fns" }, "dependencies": { - "date-fns": "2.20.0" + "date-fns": "2.30.0" } } diff --git a/packages/rescript-date-fns/bsconfig.json b/packages/rescript-date-fns/rescript.json similarity index 65% rename from packages/rescript-date-fns/bsconfig.json rename to packages/rescript-date-fns/rescript.json index 24efd29..a78b38f 100644 --- a/packages/rescript-date-fns/bsconfig.json +++ b/packages/rescript-date-fns/rescript.json @@ -9,10 +9,17 @@ { "dir": "./src", "subdirs": false + }, + { + "dir": "./test", + "type": "dev", + "subdirs": true } ], - "bsc-flags": ["-bs-no-version-header"], + "bsc-flags": [ + "-bs-no-version-header" + ], "warnings": { "error": true } -} +} \ No newline at end of file diff --git a/packages/rescript-date-fns/src/DateFns.mjs b/packages/rescript-date-fns/src/DateFns.mjs new file mode 100644 index 0000000..d17b62e --- /dev/null +++ b/packages/rescript-date-fns/src/DateFns.mjs @@ -0,0 +1,9 @@ + + + +var Locale = {}; + +export { + Locale , +} +/* No side effect */ diff --git a/packages/rescript-date-fns/src/DateFns.res b/packages/rescript-date-fns/src/DateFns.res index e0de66f..c7f5887 100644 --- a/packages/rescript-date-fns/src/DateFns.res +++ b/packages/rescript-date-fns/src/DateFns.res @@ -17,11 +17,11 @@ external closestTo: (Js.Date.t, array) => Js.Date.t = "default" @module("date-fns/format") external format: (Js.Date.t, string) => string = "default" type formatOptions = { - locale: option, - weekStartsOn: option, - firstWeekContainsDate: option, - useAdditionalWeekYearTokens: option, - useAdditionalDayOfYearTokens: option, + locale?: locale, + weekStartsOn?: int, + firstWeekContainsDate?: int, + useAdditionalWeekYearTokens?: bool, + useAdditionalDayOfYearTokens?: bool, } @module("date-fns/format") external formatOpt: (Js.Date.t, string, formatOptions) => string = "default" @@ -29,19 +29,19 @@ external formatOpt: (Js.Date.t, string, formatOptions) => string = "default" @module("date-fns/formatDistance") external formatDistance: (Js.Date.t, Js.Date.t) => string = "default" type formatDistanceOptions = { - includeSeconds: option, - addSuffix: option, - locale: option, + includeSeconds?: bool, + addSuffix?: bool, + locale?: locale, } @module("date-fns/formatDistance") external formatDistanceOpt: (Js.Date.t, Js.Date.t, formatDistanceOptions) => string = "default" @module("date-fns/formatDistanceStrict") external formatDistanceStrict: (Js.Date.t, Js.Date.t) => string = "default" type formatDistanceStrictOptions = { - addSuffix: option, - unit: option, - roundingMethod: option, - locale: option, + addSuffix?: bool, + unit?: string, + roundingMethod?: string, + locale?: locale, } @module("date-fns/formatDistanceStrict") external formatDistanceStrictOpt: (Js.Date.t, Js.Date.t, formatDistanceStrictOptions) => string = @@ -49,9 +49,9 @@ external formatDistanceStrictOpt: (Js.Date.t, Js.Date.t, formatDistanceStrictOpt @module("date-fns/formatDistanceToNow") external formatDistanceToNow: Js.Date.t => string = "default" type formatDistanceToNowOptions = { - includeSeconds: option, - addSuffix: option, - locale: option, + includeSeconds?: bool, + addSuffix?: bool, + locale?: locale, } @module("date-fns/formatDistanceToNow") external formatDistanceToNowOpt: (Js.Date.t, formatDistanceToNowOptions) => string = "default" @@ -59,8 +59,8 @@ external formatDistanceToNowOpt: (Js.Date.t, formatDistanceToNowOptions) => stri @module("date-fns/formatISO") external formatISO: Js.Date.t => string = "default" type formatISOOptions = { - format: option, - representation: option, + format?: string, + representation?: string, } @module("date-fns/formatISO") @@ -69,15 +69,15 @@ external formatISOOpt: (Js.Date.t, formatISOOptions) => string = "default" @module("date-fns/formatISO9075") external formatISO9075: Js.Date.t => string = "default" type formatISO9075Options = { - format: option, - representation: option, + format?: string, + representation?: string, } @module("date-fns/formatISO9075") external formatISO9075Opt: (Js.Date.t, formatISO9075Options) => string = "default" @module("date-fns/formatRFC3339") external formatRFC3339: Js.Date.t => string = "default" -type formatRFC3339Options = {fractionDigits: option} +type formatRFC3339Options = {fractionDigits?: int} @module("date-fns/formatRFC3339") external formatRFC3339Options: (Js.Date.t, formatRFC3339Options) => string = "default" @@ -87,8 +87,8 @@ external formatRFC3339Options: (Js.Date.t, formatRFC3339Options) => string = "de @module("date-fns/formatRelative") external formatRelative: (Js.Date.t, Js.Date.t) => string = "default" type formatRelativeOptions = { - locale: option, - weekStartsOn: option, + locale?: locale, + weekStartsOn?: int, } @module("date-fns/formatRelative") external formatRelativeOpt: (Js.Date.t, Js.Date.t, formatRelativeOptions) => string = "default" @@ -106,30 +106,30 @@ external formatRelativeOpt: (Js.Date.t, Js.Date.t, formatRelativeOptions) => str @module("date-fns/parse") external parse: (string, string, Js.Date.t) => Js.Date.t = "default" type parseOptions = { - locale: option, - weekStartsOn: option, - firstWeekContainsDate: option, - useAdditionalWeekYearTokens: option, - useAdditionalDayOfYearTokens: option, + locale?: locale, + weekStartsOn?: int, + firstWeekContainsDate?: int, + useAdditionalWeekYearTokens?: bool, + useAdditionalDayOfYearTokens?: bool, } @module("date-fns/parse") external parseOpt: (string, string, Js.Date.t, parseOptions) => Js.Date.t = "default" @module("date-fns/parseISO") external parseISO: string => Js.Date.t = "default" -type parseISOOptions = {additionalDigits: option} +type parseISOOptions = {additionalDigits?: int} @module("date-fns/parseISO") external parseISOOpt: (string, parseISOOptions) => Js.Date.t = "default" @module("date-fns/parseJSON") external parseJSONString: string => Js.Date.t = "default" @module("date-fns/parseJSON") external parseJSONFloat: float => Js.Date.t = "default" @module("date-fns/parseJSON") external parseJSONInt: int => Js.Date.t = "default" type setOptions = { - year: option, - month: option, - date: option, - hours: option, - minutes: option, - seconds: option, - milliseconds: option, + year?: int, + month?: int, + date?: int, + hours?: int, + minutes?: int, + seconds?: int, + milliseconds?: int, } @module("date-fns/set") external set: (Js.Date.t, setOptions) => Js.Date.t = "default" @module("date-fns/toDate") external toDateFloat: float => Js.Date.t = "default" @@ -143,15 +143,15 @@ external areIntervalsOverlapping: (interval, interval) => bool = "default" @module("date-fns/eachDayOfInterval") external eachDayOfInterval: interval => array = "default" -type eachDayOfIntervalOptions = {step: option} +type eachDayOfIntervalOptions = {step?: int} @module("date-fns/eachDayOfInterval") external eachDayOfIntervalOpt: (interval, eachDayOfIntervalOptions) => array = "default" @module("date-fns/eachWeekOfInterval") external eachWeekOfInterval: interval => array = "default" type eachWeekOfIntervalOptions = { - locale: option, - weekStartsOn: option, + locale?: locale, + weekStartsOn?: int, } @module("date-fns/eachWeekOfInterval") external eachWeekOfIntervalOpt: (interval, eachWeekOfIntervalOptions) => array = @@ -227,7 +227,7 @@ external differenceInMinutesf: (Js.Date.t, Js.Date.t) => float = "default" @module("date-fns/roundToNearestMinutes") external roundToNearestMinutes: Js.Date.t => Js.Date.t = "default" -type roundToNearestMinutesOptions = {nearestTo: option} +type roundToNearestMinutesOptions = {nearestTo?: int} @module("date-fns/roundToNearestMinutes") external roundToNearestMinutesOpt: (Js.Date.t, roundToNearestMinutesOptions) => Js.Date.t = @@ -317,8 +317,8 @@ external subBusinessDaysf: (Js.Date.t, float) => Js.Date.t = "default" @module("date-fns/setDay") external setDay: (Js.Date.t, int) => Js.Date.t = "default" @module("date-fns/setDay") external setDayf: (Js.Date.t, float) => Js.Date.t = "default" type setDayOptions = { - locale: option, - weekStartsOn: option, + locale?: locale, + weekStartsOn?: int, } @module("date-fns/setDay") external setDayOpt: (Js.Date.t, int, setDayOptions) => Js.Date.t = "default" @@ -329,8 +329,8 @@ external setDayOptf: (Js.Date.t, float, setDayOptions) => Js.Date.t = "default" // Week Helpers type weekOptions = { - locale: option, - weekStartsOn: option, + locale?: locale, + weekStartsOn?: int, } @module("date-fns/addWeeks") external addWeeks: (Js.Date.t, int) => Js.Date.t = "default" @module("date-fns/addWeeks") external addWeeksf: (Js.Date.t, float) => Js.Date.t = "default" @@ -358,9 +358,9 @@ external endOfWeekOpt: (Js.Date.t, weekOptions) => Js.Date.t = "default" @module("date-fns/getWeek") external getWeek: Js.Date.t => int = "default" @module("date-fns/getWeek") external getWeekf: Js.Date.t => float = "default" type getWeekOptions = { - locale: option, - weekStartsOn: option, - firstWeekContainsDate: option, + locale?: locale, + weekStartsOn?: int, + firstWeekContainsDate?: int, } @module("date-fns/getWeek") external getWeekOpt: (Js.Date.t, getWeekOptions) => int = "default" @module("date-fns/getWeek") external getWeekOptf: (Js.Date.t, getWeekOptions) => float = "default" @@ -392,9 +392,9 @@ external isSameWeekOpt: (Js.Date.t, Js.Date.t, weekOptions) => bool = "default" @module("date-fns/setWeek") external setWeek: (Js.Date.t, int) => Js.Date.t = "default" @module("date-fns/setWeek") external setWeekf: (Js.Date.t, float) => Js.Date.t = "default" type setWeekOptions = { - locale: option, - weekStartsOn: option, - firstWeekContainsDate: option, + locale?: locale, + weekStartsOn?: int, + firstWeekContainsDate?: int, } @module("date-fns/setWeek") external setWeekOpt: (Js.Date.t, int, setWeekOptions) => Js.Date.t = "default" @@ -468,7 +468,7 @@ external differenceInQuartersf: (Js.Date.t, Js.Date.t) => float = "default" @module("date-fns/isSameQuarter") external isSameQuarter: (Js.Date.t, Js.Date.t) => bool = "default" @module("date-fns/isThisQuarter") external isThisQuarter: Js.Date.t => bool = "default" @module("date-fns/lastDayOfQuarter") external lastDayOfQuarter: Js.Date.t => Js.Date.t = "default" -type lastDayOfQuarterOptions = {additionalDigits: option} +type lastDayOfQuarterOptions = {additionalDigits?: int} @module("date-fns/lastDayOfQuarter") external lastDayOfQuarterOpt: (Js.Date.t, lastDayOfQuarterOptions) => Js.Date.t = "default" @@ -542,7 +542,7 @@ external subISOWeekYearsf: (Js.Date.t, float) => Js.Date.t = "default" // Decade Helpers @module("date-fns/endOfDecade") external endOfDecade: Js.Date.t => Js.Date.t = "default" -type endOfDecadeOptions = {additionalDigits: option} +type endOfDecadeOptions = {additionalDigits?: int} @module("date-fns/endOfDecade") external endOfDecadeOpt: (Js.Date.t, endOfDecadeOptions) => Js.Date.t = "default" @module("date-fns/getDecade") external getDecade: Js.Date.t => int = "default" @@ -552,9 +552,9 @@ external endOfDecadeOpt: (Js.Date.t, endOfDecadeOptions) => Js.Date.t = "default // Week-Numbering Year Helpers type weekYearOptions = { - locale: option, - weekStartsOn: option, - firstWeekContainsDate: option, + locale?: locale, + weekStartsOn?: int, + firstWeekContainsDate?: int, } @module("date-fns/getWeekYear") external getWeekYear: Js.Date.t => int = "default" @module("date-fns/getWeekYear") diff --git a/packages/rescript-date-fns/test/bindingTest.mjs b/packages/rescript-date-fns/test/bindingTest.mjs new file mode 100644 index 0000000..c9f7034 --- /dev/null +++ b/packages/rescript-date-fns/test/bindingTest.mjs @@ -0,0 +1,19 @@ + + +import * as Caml_option from "rescript/lib/es6/caml_option.js"; +import Format from "date-fns/format"; +import FormatISO from "date-fns/formatISO"; +import Ko from "date-fns/locale/ko"; + +console.log(FormatISO(new Date())); + +var date = new Date(2020, 1, 1); + +console.log(Format(date, "yyyy년 M월 d일 (E)", { + locale: Caml_option.some(Ko) + })); + +export { + date , +} +/* Not a pure module */ diff --git a/packages/rescript-date-fns/test/bindingTest.res b/packages/rescript-date-fns/test/bindingTest.res new file mode 100644 index 0000000..a87c76b --- /dev/null +++ b/packages/rescript-date-fns/test/bindingTest.res @@ -0,0 +1,12 @@ +Js.log(Js.Date.make()->DateFns.formatISO) + +let date = Js.Date.makeWithYMD(~year=2020., ~month=1., ~date=1., ()) + +date +->DateFns.formatOpt( + "yyyy년 M월 d일 (E)", + { + locale: DateFns.Locale.ko, + }, +) +->Js.log diff --git a/yarn.lock b/yarn.lock index c2fa70c..0c240f0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -35,6 +35,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.21.0": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.7.tgz#dd7c88deeb218a0f8bd34d5db1aa242e0f203193" + integrity sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA== + dependencies: + regenerator-runtime "^0.14.0" + "@changesets/apply-release-plan@^6.1.0": version "6.1.0" resolved "https://registry.yarnpkg.com/@changesets/apply-release-plan/-/apply-release-plan-6.1.0.tgz#97d755a7725bdcc1152aa54d8c7fbc85a5bf1e40" @@ -2191,10 +2198,12 @@ dargs@^7.0.0: resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== -date-fns@2.20.0: - version "2.20.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.20.0.tgz#df00ba9177fbea22d88010b5844ecc91e9e03ceb" - integrity sha512-nmA7y6aDH5+fknfJ0G77HQzUSfTPpq4ifq+c9blP9d+X9zs3kNjxC+t3pcbBMGTp262a6PJB3RVjLlxIgoMI+Q== +date-fns@2.30.0: + version "2.30.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== + dependencies: + "@babel/runtime" "^7.21.0" dateformat@^3.0.0: version "3.0.3" @@ -4682,6 +4691,11 @@ regenerator-runtime@^0.13.4: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + regexp.prototype.flags@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" @@ -4706,10 +4720,10 @@ rescript-webapi@^0.6.1: resolved "https://registry.yarnpkg.com/rescript-webapi/-/rescript-webapi-0.6.1.tgz#b7e578c743b08e09f259938a6e9300c238020591" integrity sha512-I/eeHOcsUfWbCf6u15zd+rKxMz9awSjjdRa8eFtl2X+HjDNs0mJxoC4uFFK9dIazYcmY2VpuK5TTpOPXvdkhDw== -rescript@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/rescript/-/rescript-10.0.1.tgz#5b2da8a8bcfb994bed1eb24820bf10cfb9d8c440" - integrity sha512-XwO1GPDtoEU4H03xQE5bp0/qtSVR6YLaJRPxWKrfFgKc+LI36ODOCie7o9UJfgzQdoMYkkZyiTGZ4N9OQEaiUw== +rescript@11.0.0-rc8: + version "11.0.0-rc.8" + resolved "https://registry.yarnpkg.com/rescript/-/rescript-11.0.0-rc.8.tgz#60c94034731cb894e09feacf10f1adb20efc7fb1" + integrity sha512-KFeCeJ2tYtmSLD24o0WtWr7YLO22DflCWL31/L9Q8HGdHTLEhDNa+R0tnoyZ8B6wwm6bpNG8xosu1H4O+o7LGA== resolve-cwd@^3.0.0: version "3.0.0" @@ -5328,6 +5342,11 @@ upath@^2.0.1: resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== +use-debounce@^9.0.3: + version "9.0.4" + resolved "https://registry.yarnpkg.com/use-debounce/-/use-debounce-9.0.4.tgz#51d25d856fbdfeb537553972ce3943b897f1ac85" + integrity sha512-6X8H/mikbrt0XE8e+JXRtZ8yYVvKkdYRfmIhWZYsP8rcNs9hk3APV8Ua2mFkKRLcJKVdnX2/Vwrmg2GWKUQEaQ== + util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"