summaryrefslogtreecommitdiff
path: root/date-fns/scripts/build/packages.js
diff options
context:
space:
mode:
Diffstat (limited to 'date-fns/scripts/build/packages.js')
-rwxr-xr-xdate-fns/scripts/build/packages.js92
1 files changed, 92 insertions, 0 deletions
diff --git a/date-fns/scripts/build/packages.js b/date-fns/scripts/build/packages.js
new file mode 100755
index 0000000..154754c
--- /dev/null
+++ b/date-fns/scripts/build/packages.js
@@ -0,0 +1,92 @@
+#!/usr/bin/env node
+
+/**
+ * @file
+ * The script generates package.json files that points to correct ESM modules
+ * and TypeScript typings.
+ *
+ * It's a part of the build process.
+ */
+
+const { writeFile } = require('mz/fs')
+const path = require('path')
+const listFns = require('../_lib/listFns')
+const listFPFns = require('../_lib/listFPFns')
+const listLocales = require('../_lib/listLocales')
+const rootPath =
+ process.env.PACKAGE_OUTPUT_PATH || path.resolve(process.cwd(), 'tmp/package')
+
+const extraModules = [
+ { fullPath: './src/fp/index.js' },
+ { fullPath: './src/locale/index.js' },
+]
+
+writePackages()
+
+async function writePackages() {
+ const initialPackages = await getInitialPackages()
+ const modules = await listAll()
+ await Promise.all(
+ modules.map(async (module) =>
+ writePackage(module.fullPath, initialPackages[module.fullPath])
+ )
+ )
+ console.log('package.json files are generated')
+}
+
+function writePackage(fullPath, initialPackage) {
+ const dirPath = path.dirname(fullPath)
+ const typingsRelativePath = path.relative(dirPath, `./src/typings.d.ts`)
+ const packagePath = path.resolve(
+ rootPath,
+ `${dirPath.replace('./src/', './')}/package.json`
+ )
+
+ return writeFile(
+ packagePath,
+ JSON.stringify(
+ Object.assign({ sideEffects: false }, initialPackage || {}, {
+ typings: typingsRelativePath,
+ }),
+ null,
+ 2
+ )
+ )
+}
+
+async function getInitialPackages() {
+ const fns = await listFns()
+ return fns
+ .concat(listFPFns())
+ .concat(listLocales())
+ .concat(extraModules)
+ .reduce((acc, module) => {
+ acc[module.fullPath] = getModulePackage(module.fullPath)
+ return acc
+ }, {})
+}
+
+function getModulePackage(fullPath) {
+ const dirPath = path.dirname(fullPath)
+ const subPath = dirPath.match(/^\.\/src\/(.+)$/)[1]
+ const esmRelativePath = path.relative(
+ dirPath,
+ `./src/esm/${subPath}/index.js`
+ )
+ return { module: esmRelativePath }
+}
+
+async function listAll() {
+ const fns = await listFns()
+ return fns
+ .concat(listFPFns())
+ .concat(listLocales())
+ .concat(extraModules)
+ .reduce((acc, module) => {
+ const esmModule = Object.assign({}, module, {
+ fullPath: module.fullPath.replace('./src/', './src/esm/'),
+ })
+ return acc.concat([module, esmModule])
+ }, [])
+ .concat([])
+}