Skip to content

Commit

Permalink
Attempt to release for both ESM and CJS
Browse files Browse the repository at this point in the history
  • Loading branch information
garronej committed Nov 26, 2022
1 parent b4c6ac2 commit 91576a6
Show file tree
Hide file tree
Showing 8 changed files with 204 additions and 48 deletions.
124 changes: 117 additions & 7 deletions package.json
@@ -1,23 +1,22 @@
{
"name": "tsafe",
"version": "1.3.4",
"version": "1.4.0-rc.0",
"description": "A collection of utilities to step up your TypeScript game",
"repository": {
"type": "git",
"url": "git://github.com/garronej/tsafe.git"
},
"main": "dist/index.js",
"types": "dist/index.d.ts",
"scripts": {
"build": "tsc && tsc -p tsconfig.esm.json && denoify",
"test": "yarn test:node && yarn test:deno",
"test:deno": "deno run --reload --unstable --no-check deno_dist/test/mod.ts",
"test:node": "node dist/test/",
"build": "tsc && denoify",
"lint:check": "eslint . --ext .ts,.tsx",
"lint": "npm run lint:check -- --fix",
"_format": "prettier '**/*.{ts,tsx,json,md}'",
"format": "npm run _format -- --write",
"format:check": "npm run _format -- --list-different"
"format:check": "npm run _format -- --list-different",
"list-exports": "ts-node src/scripts/list-exports.ts && prettier --write package.json"
},
"lint-staged": {
"*.{ts,tsx}": [
Expand All @@ -29,7 +28,7 @@
},
"husky": {
"hooks": {
"pre-commit": "lint-staged -v"
"pre-commit": "yarn list-exports && git add package.json && lint-staged -v"
}
},
"author": "u/garronej",
Expand All @@ -39,7 +38,9 @@
"!src/test/",
"dist/",
"!dist/test/",
"!dist/tsconfig.tsbuildinfo"
"!dist/tsconfig.tsbuildinfo",
"!dist/esm/test/",
"!dist/esm/tsconfig.tsbuildinfo"
],
"keywords": [],
"homepage": "https://github.com/garronej/tsafe",
Expand All @@ -55,5 +56,114 @@
"prettier": "^2.2.1",
"typescript": "^4.2.3",
"denoify": "^0.15.0"
},
"main": "dist/index.js",
"types": "dist/index.d.ts",
"module": "dist/esm/index.js",
"exports": {
".": {
"require": "./dist/esm/index.js",
"import": "./esm/dist/esm/index.js"
},
"./uncapitalize": {
"require": "./dist/uncapitalize.js",
"import": "./dist/esm/uncapitalize.js"
},
"./typeGuard": {
"require": "./dist/typeGuard.js",
"import": "./dist/esm/typeGuard.js"
},
"./symToStr": {
"require": "./dist/symToStr.js",
"import": "./dist/esm/symToStr.js"
},
"./objectKeys": {
"require": "./dist/objectKeys.js",
"import": "./dist/esm/objectKeys.js"
},
"./objectFromEntries": {
"require": "./dist/objectFromEntries.js",
"import": "./dist/esm/objectFromEntries.js"
},
"./objectEntries": {
"require": "./dist/objectEntries.js",
"import": "./dist/esm/objectEntries.js"
},
"./noUndefined": {
"require": "./dist/noUndefined.js",
"import": "./dist/esm/noUndefined.js"
},
"./isPromiseLike": {
"require": "./dist/isPromiseLike.js",
"import": "./dist/esm/isPromiseLike.js"
},
"./is": {
"require": "./dist/is.js",
"import": "./dist/esm/is.js"
},
"./id": {
"require": "./dist/id.js",
"import": "./dist/esm/id.js"
},
"./flip": {
"require": "./dist/flip.js",
"import": "./dist/esm/flip.js"
},
"./exclude": {
"require": "./dist/exclude.js",
"import": "./dist/esm/exclude.js"
},
"./capitalize": {
"require": "./dist/capitalize.js",
"import": "./dist/esm/capitalize.js"
},
"./assert": {
"require": "./dist/assert.js",
"import": "./dist/esm/assert.js"
},
"./UnpackPromise": {
"require": "./dist/UnpackPromise.js",
"import": "./dist/esm/UnpackPromise.js"
},
"./ReturnType": {
"require": "./dist/ReturnType.js",
"import": "./dist/esm/ReturnType.js"
},
"./Reflect": {
"require": "./dist/Reflect.js",
"import": "./dist/esm/Reflect.js"
},
"./PickRequired": {
"require": "./dist/PickRequired.js",
"import": "./dist/esm/PickRequired.js"
},
"./PickOptionals": {
"require": "./dist/PickOptionals.js",
"import": "./dist/esm/PickOptionals.js"
},
"./Parameters": {
"require": "./dist/Parameters.js",
"import": "./dist/esm/Parameters.js"
},
"./Param0": {
"require": "./dist/Param0.js",
"import": "./dist/esm/Param0.js"
},
"./Not": {
"require": "./dist/Not.js",
"import": "./dist/esm/Not.js"
},
"./MethodNames": {
"require": "./dist/MethodNames.js",
"import": "./dist/esm/MethodNames.js"
},
"./Extends": {
"require": "./dist/Extends.js",
"import": "./dist/esm/Extends.js"
},
"./Equals": {
"require": "./dist/Equals.js",
"import": "./dist/esm/Equals.js"
}
}
}
12 changes: 0 additions & 12 deletions src/res/Equals_example1.ts

This file was deleted.

8 changes: 0 additions & 8 deletions src/res/Equals_example2.ts

This file was deleted.

9 changes: 0 additions & 9 deletions src/res/Equals_example3.ts

This file was deleted.

11 changes: 0 additions & 11 deletions src/res/Equals_example4.ts

This file was deleted.

70 changes: 70 additions & 0 deletions src/scripts/list-exports.ts
@@ -0,0 +1,70 @@
import * as fs from "fs";
import { join as pathJoin } from "path";
import { getProjectRoot } from "../tools/getProjectRoot";
import { exclude } from "../exclude";
import { execSync } from "child_process";
import { same } from "evt/tools/inDepth/same";

const packageJsonFilePath = pathJoin(getProjectRoot(), "package.json");

const packageJsonParsed = JSON.parse(fs.readFileSync(packageJsonFilePath).toString("utf8"));

const srcDirPath = pathJoin(getProjectRoot(), "src");

const newExports = {
".": {
"require": `./${packageJsonParsed["module"]}`,
"import": `./esm/${packageJsonParsed["module"]}`,
},
...Object.fromEntries(
fs
.readdirSync(srcDirPath)
.filter(basename => {
try {
execSync(`git ls-files --error-unmatch ${pathJoin(srcDirPath, basename)}`, {
"stdio": [],
});
} catch {
return false;
}

return true;
})
.map(basename => {
const match = basename.match(/^([^.]+)\.tsx?$/);

if (match === null) {
return undefined;
}

return match[1];
})
.filter(exclude(undefined))
.filter(exclude("index"))
.sort()
.reverse()
.map(name => [
`./${name}`,
{ "require": `./dist/${name}.js`, "import": `./dist/esm/${name}.js` },
]),
),
};

if (same(packageJsonParsed["exports"], newExports)) {
process.exit(0);
}

fs.writeFileSync(
packageJsonFilePath,
Buffer.from(
JSON.stringify(
{
...packageJsonParsed,
"exports": newExports,
},
null,
2,
),
"utf8",
),
);
8 changes: 8 additions & 0 deletions tsconfig.esm.json
@@ -0,0 +1,8 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"module": "ES2015",
"outDir": "./dist/esm"
},
"exclude": ["src/test/", "src/scripts/"]
}
10 changes: 9 additions & 1 deletion tsconfig.json
Expand Up @@ -17,5 +17,13 @@
"noFallthroughCasesInSwitch": true
},
"include": ["src"],
"exclude": ["node_modules", "dist/", "deno_dist/", "src/**/*.deno.ts", "src/**/*.deno.tsx", "res/"]
"exclude": [
"node_modules",
"src/scripts/",
"dist/",
"deno_dist/",
"src/**/*.deno.ts",
"src/**/*.deno.tsx",
"res/"
]
}

0 comments on commit 91576a6

Please sign in to comment.