Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improvement Suggestions for the Repository #162

Open
wants to merge 26 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
b65464e
util script for read dirs deeply
MDReal32 Aug 16, 2023
caf2a37
read entrypoints deeply
MDReal32 Aug 16, 2023
1445b11
fix linting
MDReal32 Aug 16, 2023
faf46f1
update package.json exports path
MDReal32 Aug 16, 2023
538929a
fix directories import paths
MDReal32 Aug 16, 2023
2638feb
add options absolute and root for relative paths
MDReal32 Aug 16, 2023
f79625b
list of directories which created and added to exports
MDReal32 Aug 16, 2023
91eb4c9
improve getting entrypoints.
MDReal32 Aug 16, 2023
a28cf02
remove mkdir. It happens next
MDReal32 Aug 16, 2023
601c78c
some necessary constants.
MDReal32 Aug 16, 2023
27dfef0
add directories for import like ".../array"
MDReal32 Aug 16, 2023
39fd43f
write files and execute promises
MDReal32 Aug 16, 2023
b354519
map methods merged to same named directory
MDReal32 Aug 16, 2023
cb1f7b2
set methods merged to same named directory
MDReal32 Aug 16, 2023
9034411
array methods merged to same named directory
MDReal32 Aug 16, 2023
fff3848
json methods merged to same named directory and parse made generic fo…
MDReal32 Aug 16, 2023
0669404
made generic for defining return type without using as
MDReal32 Aug 16, 2023
f0fc361
files moved
MDReal32 Aug 16, 2023
79a52c3
exports updated
MDReal32 Aug 16, 2023
82262ac
formatted using prettier
MDReal32 Aug 16, 2023
89e80d3
new param for importing json files
MDReal32 Aug 16, 2023
80fb06c
installed prettier
MDReal32 Aug 16, 2023
a926bb4
jetbrains settings
MDReal32 Aug 16, 2023
699a4ee
added marker for pnpm version
MDReal32 Aug 16, 2023
f782899
Revert "installed prettier"
MDReal32 Aug 16, 2023
5c32c4e
revert generic changes
MDReal32 Aug 16, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 5 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/jsLibraryMappings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/prettier.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 12 additions & 0 deletions .idea/ts-reset.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

103 changes: 62 additions & 41 deletions package.json
Expand Up @@ -23,65 +23,85 @@
"import": "./dist/recommended.mjs",
"default": "./dist/recommended.js"
},
"./recommended": {
"types": "./dist/recommended.d.ts",
"import": "./dist/recommended.mjs",
"default": "./dist/recommended.js"
"./array": {
"types": "./dist/array/index.d.ts",
"import": "./dist/array/index.mjs",
"default": "./dist/array/index.js"
},
"./filter-boolean": {
"types": "./dist/filter-boolean.d.ts",
"import": "./dist/filter-boolean.mjs",
"default": "./dist/filter-boolean.js"
"./array/filter-boolean": {
"types": "./dist/array/filter-boolean.d.ts",
"import": "./dist/array/filter-boolean.mjs",
"default": "./dist/array/filter-boolean.js"
},
"./is-array": {
"types": "./dist/is-array.d.ts",
"import": "./dist/is-array.mjs",
"default": "./dist/is-array.js"
"./array/includes": {
"types": "./dist/array/includes.d.ts",
"import": "./dist/array/includes.mjs",
"default": "./dist/array/includes.js"
},
"./json-parse": {
"types": "./dist/json-parse.d.ts",
"import": "./dist/json-parse.mjs",
"default": "./dist/json-parse.js"
"./array/index-of": {
"types": "./dist/array/index-of.d.ts",
"import": "./dist/array/index-of.mjs",
"default": "./dist/array/index-of.js"
},
"./array/is-array": {
"types": "./dist/array/is-array.d.ts",
"import": "./dist/array/is-array.mjs",
"default": "./dist/array/is-array.js"
},
"./dom": {
"types": "./dist/dom.d.ts",
"import": "./dist/dom.mjs",
"default": "./dist/dom.js"
},
"./fetch": {
"types": "./dist/fetch.d.ts",
"import": "./dist/fetch.mjs",
"default": "./dist/fetch.js"
},
"./array-includes": {
"types": "./dist/array-includes.d.ts",
"import": "./dist/array-includes.mjs",
"default": "./dist/array-includes.js"
"./json": {
"types": "./dist/json/index.d.ts",
"import": "./dist/json/index.mjs",
"default": "./dist/json/index.js"
},
"./set-has": {
"types": "./dist/set-has.d.ts",
"import": "./dist/set-has.mjs",
"default": "./dist/set-has.js"
"./json/parse": {
"types": "./dist/json/parse.d.ts",
"import": "./dist/json/parse.mjs",
"default": "./dist/json/parse.js"
},
"./map-has": {
"types": "./dist/map-has.d.ts",
"import": "./dist/map-has.mjs",
"default": "./dist/map-has.js"
"./map": {
"types": "./dist/map/index.d.ts",
"import": "./dist/map/index.mjs",
"default": "./dist/map/index.js"
},
"./utils": {
"types": "./dist/utils.d.ts",
"import": "./dist/utils.mjs",
"default": "./dist/utils.js"
"./map/has": {
"types": "./dist/map/has.d.ts",
"import": "./dist/map/has.mjs",
"default": "./dist/map/has.js"
},
"./array-index-of": {
"types": "./dist/array-index-of.d.ts",
"import": "./dist/array-index-of.mjs",
"default": "./dist/array-index-of.js"
"./recommended": {
"types": "./dist/recommended.d.ts",
"import": "./dist/recommended.mjs",
"default": "./dist/recommended.js"
},
"./dom": {
"types": "./dist/dom.d.ts",
"import": "./dist/dom.mjs",
"default": "./dist/dom.js"
"./set": {
"types": "./dist/set/index.d.ts",
"import": "./dist/set/index.mjs",
"default": "./dist/set/index.js"
},
"./set/has": {
"types": "./dist/set/has.d.ts",
"import": "./dist/set/has.mjs",
"default": "./dist/set/has.js"
},
"./storage": {
"types": "./dist/storage.d.ts",
"import": "./dist/storage.mjs",
"default": "./dist/storage.js"
},
"./utils": {
"types": "./dist/utils.d.ts",
"import": "./dist/utils.mjs",
"default": "./dist/utils.js"
}
},
"keywords": [],
Expand All @@ -103,5 +123,6 @@
"singleQuote": false,
"tabWidth": 2,
"useTabs": false
}
},
"packageManager": "pnpm@7.33.6"
}
81 changes: 72 additions & 9 deletions scripts/build.ts
@@ -1,28 +1,91 @@
import * as fs from "fs/promises";
import * as path from "path";
// import pkgJson from "../package.json";

import { readdirRecursive } from "./util";

// interface Export {
// types: string;
// import: string;
// default: string;
// }
// type Exports = Record<string, string | Export>;

const entrypointDir = path.join(__dirname, "../", "src", "entrypoints");
const distDir = path.join(__dirname, "../", "dist");

const run = async () => {
try {
await fs.mkdir(distDir);
} catch (e) {}
// const exports: Exports = {
// "./package.json": "./package.json",
// ".": {
// types: "./dist/recommended.d.ts",
// import: "./dist/recommended.mjs",
// default: "./dist/recommended.js",
// },
// };

const entrypoints = await fs.readdir(entrypointDir);
const run = async () => {
const entrypoints = await readdirRecursive(entrypointDir);
const exportedDirectories = new Set<string>();

for (const entrypoint of entrypoints) {
const entrypointBase = entrypoint.replace(".d.ts", "");
// const unixBasedEntrypointBase = entrypointBase.replace(/[\\/]/g, "/");
const finalFilePath = path.resolve(distDir, entrypointBase);
const finalDir = path.dirname(finalFilePath);
const promises: Promise<unknown>[] = [];

if (!exportedDirectories.has(finalDir) && finalDir !== distDir) {
await fs.mkdir(finalDir, { recursive: true });
const files = await fs.readdir(
path.join(entrypointDir, path.dirname(entrypoint)),
);

await Promise.all([
promises.push(
fs.writeFile(
path.join(finalDir, "index.d.ts"),
files.map((file) => `/// <reference path="./${file}" />`).join("\n"),
),
fs.writeFile(
path.join(finalDir, "index.js"),
files.map((file) => `require("./${file}");`).join("\n"),
),
fs.writeFile(
path.join(finalDir, "index.mjs"),
files.map((file) => `import "./${file}";`).join("\n"),
),
);

// exports[`./${path.dirname(unixBasedEntrypointBase)}`] = {
// types: `./dist/${path.dirname(unixBasedEntrypointBase)}/index.d.ts`,
// import: `./dist/${path.dirname(unixBasedEntrypointBase)}/index.mjs`,
// default: `./dist/${path.dirname(unixBasedEntrypointBase)}/index.js`,
// };
exportedDirectories.add(finalDir);
}

promises.push(
fs.writeFile(path.join(distDir, `${entrypointBase}.js`), ""),
fs.writeFile(path.join(distDir, `${entrypointBase}.mjs`), ""),
fs.copyFile(
path.join(entrypointDir, entrypoint),
path.join(distDir, `${entrypointBase}.d.ts`),
path.resolve(entrypointDir, entrypoint),
path.resolve(distDir, `${entrypointBase}.d.ts`),
),
]);
);

// exports[`./${unixBasedEntrypointBase}`] = {
// types: `./dist/${unixBasedEntrypointBase}.d.ts`,
// import: `./dist/${unixBasedEntrypointBase}.mjs`,
// default: `./dist/${unixBasedEntrypointBase}.js`,
// };

await Promise.all(promises);
}

// pkgJson.exports = exports as typeof pkgJson.exports;
// await fs.writeFile(
// path.join(__dirname, "../", "package.json"),
// JSON.stringify(pkgJson, null, 2),
// );
};

run().catch((e) => {
Expand Down
16 changes: 9 additions & 7 deletions scripts/lint.ts
@@ -1,6 +1,8 @@
import * as fs from "fs";
import * as path from "path";

import { readdirRecursive } from "./util";

const packageJsonContents = fs.readFileSync(
path.join(__dirname, "../", "package.json"),
"utf8",
Expand All @@ -14,16 +16,16 @@ const pkgJsonExports = Object.keys(packageJson.exports).filter((entrypoint) => {
return entrypoint !== "."; // ignore the root entrypoint
});

const entrypointFiles = fs
.readdirSync(path.join(__dirname, "../src/entrypoints"))
.map((file) => {
return file.replace(".d.ts", "");
});
const root = path.join(__dirname, "../src/entrypoints");
const entrypointFiles = readdirRecursive.sync(root).map((file) => {
return file.replace(".d.ts", "");
});

for (const entrypointFile of entrypointFiles) {
if (!pkgJsonExports.includes(`./${entrypointFile}`)) {
const unixBasedEntrypointFile = entrypointFile.replace(/\\/g, "/");
if (!pkgJsonExports.includes(`./${unixBasedEntrypointFile}`)) {
console.error(
`Missing export file in package.json for ./src/entrypoints/${entrypointFile}.ts`,
`Missing export file in package.json for ./src/entrypoints/${unixBasedEntrypointFile}.ts`,
);

process.exit(1);
Expand Down
63 changes: 63 additions & 0 deletions scripts/util.ts
@@ -0,0 +1,63 @@
import * as fs from "fs";
import * as fsPromises from "fs/promises";
import * as path from "path";

interface ReaddirRecursiveOptions {
absolute?: boolean;
root?: string;
}

export const readdirRecursive = async (
dir: string,
options?: ReaddirRecursiveOptions,
): Promise<string[]> => {
const { absolute = false, root = dir } = options ?? {};

const files: string[] = [];
const entries = await fsPromises.readdir(dir, { withFileTypes: true });

for (const entry of entries) {
if (entry.isDirectory()) {
const subDir = await readdirRecursive(path.join(dir, entry.name), {
...options,
root: dir,
});
files.push(...subDir);
} else {
files.push(
absolute
? path.join(dir, entry.name)
: path.join(dir, entry.name).replace(path.join(root, "/"), ""),
);
}
}

return files;
};

readdirRecursive.sync = (
dir: string,
options?: ReaddirRecursiveOptions,
): string[] => {
const { absolute = false, root = dir } = options ?? {};
const files: string[] = [];
const entries = fs.readdirSync(dir, { withFileTypes: true });

for (const entry of entries) {
if (entry.isDirectory()) {
const subDir = readdirRecursive.sync(path.join(dir, entry.name), {
...options,
root: dir,
});
files.push(...subDir);
} else {
files.push(
absolute
? path.join(dir, entry.name)
: path.join(dir, entry.name).replace(path.join(root, "/"), ""),
);
}
}

return files;
};
@@ -1,4 +1,4 @@
/// <reference path="utils.d.ts" />
/// <reference path="../utils.d.ts" />

interface Array<T> {
filter(predicate: BooleanConstructor, thisArg?: any): TSReset.NonFalsy<T>[];
Expand Down
@@ -1,4 +1,4 @@
/// <reference path="utils.d.ts" />
/// <reference path="../utils.d.ts" />

interface ReadonlyArray<T> {
includes(
Expand Down