Skip to content

Commit

Permalink
Node.js ESM; full import paths and exports in package.json
Browse files Browse the repository at this point in the history
  • Loading branch information
marnusw committed Feb 24, 2022
1 parent 6b8ef0a commit 93675e4
Show file tree
Hide file tree
Showing 11 changed files with 69 additions and 26 deletions.
31 changes: 31 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,40 @@
"engine": {
"node": ">= 0.11"
},
"type": "commonjs",
"main": "index.js",
"module": "esm/index.js",
"types": "typings.d.ts",
"exports": {
".": "./index.js",
"./format": "./format/index.js",
"./formatInTimeZone": "./formatInTimeZone/index.js",
"./getTimezoneOffset": "./getTimezoneOffset/index.js",
"./toDate": "./toDate/index.js",
"./utcToZonedTime": "./utcToZonedTime/index.js",
"./zonedTimeToUtc": "./zonedTimeToUtc/index.js",
"./fp": "./fp/index.js",
"./fp/format": "./fp/format/index.js",
"./fp/formatInTimeZone": "./fp/formatInTimeZone/index.js",
"./fp/getTimezoneOffset": "./fp/getTimezoneOffset/index.js",
"./fp/toDate": "./fp/toDate/index.js",
"./fp/utcToZonedTime": "./fp/utcToZonedTime/index.js",
"./fp/zonedTimeToUtc": "./fp/zonedTimeToUtc/index.js",
"./esm": "./esm/index.js",
"./esm/format": "./esm/format/index.js",
"./esm/formatInTimeZone": "./esm/formatInTimeZone/index.js",
"./esm/getTimezoneOffset": "./esm/getTimezoneOffset/index.js",
"./esm/toDate": "./esm/toDate/index.js",
"./esm/utcToZonedTime": "./esm/utcToZonedTime/index.js",
"./esm/zonedTimeToUtc": "./esm/zonedTimeToUtc/index.js",
"./esm/fp": "./esm/fp/index.js",
"./esm/fp/format": "./esm/fp/format/index.js",
"./esm/fp/formatInTimeZone": "./esm/fp/formatInTimeZone/index.js",
"./esm/fp/getTimezoneOffset": "./esm/fp/getTimezoneOffset/index.js",
"./esm/fp/toDate": "./esm/fp/toDate/index.js",
"./esm/fp/utcToZonedTime": "./esm/fp/utcToZonedTime/index.js",
"./esm/fp/zonedTimeToUtc": "./esm/fp/zonedTimeToUtc/index.js"
},
"scripts": {
"build": "./scripts/build/build.sh",
"package": "./scripts/build/package.sh",
Expand Down
13 changes: 7 additions & 6 deletions scripts/build/package.sh
Original file line number Diff line number Diff line change
Expand Up @@ -59,13 +59,14 @@ done
find "$dir" -type f -name "test.js" -delete
find "$dir" -type f -name "benchmark.js" -delete

# Clean up package.json pointing to the modules
find "$dir/esm" -type f -name "package.json" -delete
# Copy esm package.json
cp ./src/esm/package.json "$dir/esm/package.json"

# Rewrite import paths to use esm version of date-fns
for fnFile in $(find $dir/esm -maxdepth 3 -mindepth 2 -type f -name index.js)
do
sed -i "s/from 'date-fns/from 'date-fns\/esm/" "$fnFile"
done
# todo Restore once date-fns supports ESM: https://github.com/date-fns/date-fns/issues/1781
# for fnFile in $(find $dir/esm -maxdepth 3 -mindepth 2 -type f -name index.js)
# do
# sed -i "s/from 'date-fns/from 'date-fns\/esm/" "$fnFile"
# done

./scripts/build/packages.js
14 changes: 11 additions & 3 deletions scripts/build/packages.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,21 @@ function writePackage(fullPath) {
const dirPath = path.dirname(fullPath)
const typingsRelativePath = path.relative(dirPath, `./src/typings.d.ts`)
const packagePath = path.resolve(rootPath, `${dirPath.replace('./src/', './')}/package.json`)
const isESM = packagePath.includes('esm')

return writeFile(
packagePath,
JSON.stringify(
Object.assign({ sideEffects: false }, initialPackages[fullPath] || {}, {
typings: typingsRelativePath,
}),
Object.assign(
{
sideEffects: false,
type: isESM ? 'module' : 'commonjs',
},
initialPackages[fullPath] || {},
{
typings: typingsRelativePath,
}
),
null,
2
)
Expand Down
3 changes: 3 additions & 0 deletions src/esm/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"type": "module"
}
4 changes: 2 additions & 2 deletions src/format/formatters/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import tzIntlTimeZoneName from '../../_lib/tzIntlTimeZoneName'
import tzParseTimezone from '../../_lib/tzParseTimezone'
import tzIntlTimeZoneName from '../../_lib/tzIntlTimeZoneName/index.js'
import tzParseTimezone from '../../_lib/tzParseTimezone/index.js'

var MILLISECONDS_IN_MINUTE = 60 * 1000

Expand Down
6 changes: 3 additions & 3 deletions src/format/index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import dateFnsFormat from 'date-fns/format'
import formatters from './formatters'
import toDate from '../toDate'
import dateFnsFormat from 'date-fns/format/index.js'
import formatters from './formatters/index.js'
import toDate from '../toDate/index.js'

var tzFormattingTokensRegExp = /([xXOz]+)|''|'(''|[^'])+('|$)/g

Expand Down
6 changes: 3 additions & 3 deletions src/formatInTimeZone/index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import cloneObject from 'date-fns/_lib/cloneObject'
import format from '../format'
import utcToZonedTime from '../utcToZonedTime'
import cloneObject from 'date-fns/_lib/cloneObject/index.js'
import format from '../format/index.js'
import utcToZonedTime from '../utcToZonedTime/index.js'

/**
* @name formatInTimeZone
Expand Down
2 changes: 1 addition & 1 deletion src/getTimezoneOffset/index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import tzParseTimezone from '../_lib/tzParseTimezone'
import tzParseTimezone from '../_lib/tzParseTimezone/index.js'

/**
* @name getTimezoneOffset
Expand Down
4 changes: 2 additions & 2 deletions src/toDate/index.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import toInteger from 'date-fns/_lib/toInteger/index.js'
import getTimezoneOffsetInMilliseconds from 'date-fns/_lib/getTimezoneOffsetInMilliseconds/index.js'
import tzParseTimezone from '../_lib/tzParseTimezone'
import tzPattern from '../_lib/tzPattern'
import tzParseTimezone from '../_lib/tzParseTimezone/index.js'
import tzPattern from '../_lib/tzPattern/index.js'

var MILLISECONDS_IN_HOUR = 3600000
var MILLISECONDS_IN_MINUTE = 60000
Expand Down
4 changes: 2 additions & 2 deletions src/utcToZonedTime/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import tzParseTimezone from '../_lib/tzParseTimezone'
import toDate from '../toDate'
import tzParseTimezone from '../_lib/tzParseTimezone/index.js'
import toDate from '../toDate/index.js'

/**
* @name utcToZonedTime
Expand Down
8 changes: 4 additions & 4 deletions src/zonedTimeToUtc/index.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import cloneObject from 'date-fns/_lib/cloneObject'
import toDate from '../toDate'
import tzPattern from '../_lib/tzPattern'
import tzParseTimezone from '../_lib/tzParseTimezone'
import cloneObject from 'date-fns/_lib/cloneObject/index.js'
import toDate from '../toDate/index.js'
import tzPattern from '../_lib/tzPattern/index.js'
import tzParseTimezone from '../_lib/tzParseTimezone/index.js'

/**
* @name zonedTimeToUtc
Expand Down

0 comments on commit 93675e4

Please sign in to comment.