diff --git a/package.json b/package.json index 201ed88..91dd8ca 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "dependencies": { "commander": "^12.1.0", "execa": "^9.5.0", - "fast-glob": "^3.3.2", + "globby": "^14.0.2", "tar": "^7.4.3", "yaml": "^2.6.0" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1a9e729..d64ef15 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,9 +14,9 @@ importers: execa: specifier: ^9.5.0 version: 9.5.0 - fast-glob: - specifier: ^3.3.2 - version: 3.3.2 + globby: + specifier: ^14.0.2 + version: 14.0.2 tar: specifier: ^7.4.3 version: 7.4.3 @@ -662,6 +662,10 @@ packages: '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} + '@sindresorhus/merge-streams@4.0.0': resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} @@ -1433,6 +1437,10 @@ packages: resolution: {integrity: sha512-yeyNSjdbyVaWurlwCpcA6XNBrHTMIeDdj0/hnvX/OLJ9ekOXYbLsLinH/MucQyGvNnXhidTdNhTtJaffL2sMfw==} engines: {node: '>=18'} + globby@14.0.2: + resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==} + engines: {node: '>=18'} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -1911,6 +1919,10 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} + path-type@5.0.0: + resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} + engines: {node: '>=12'} + pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} @@ -2127,6 +2139,10 @@ packages: sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + slashes@3.0.12: resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==} @@ -2346,6 +2362,10 @@ packages: undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} @@ -2949,6 +2969,8 @@ snapshots: '@sec-ant/readable-stream@0.4.1': {} + '@sindresorhus/merge-streams@2.3.0': {} + '@sindresorhus/merge-streams@4.0.0': {} '@stylistic/eslint-plugin@2.9.0(eslint@9.13.0)(typescript@5.6.3)': @@ -3883,6 +3905,15 @@ snapshots: globals@15.11.0: {} + globby@14.0.2: + dependencies: + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.2 + ignore: 5.3.2 + path-type: 5.0.0 + slash: 5.1.0 + unicorn-magic: 0.1.0 + graceful-fs@4.2.11: {} graphemer@1.4.0: {} @@ -4491,6 +4522,8 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 + path-type@5.0.0: {} + pathe@1.1.2: {} pathval@2.0.0: {} @@ -4692,6 +4725,8 @@ snapshots: sisteransi@1.0.5: {} + slash@5.1.0: {} + slashes@3.0.12: {} sonic-boom@4.2.0: @@ -4899,6 +4934,8 @@ snapshots: undici-types@6.19.8: {} + unicorn-magic@0.1.0: {} + unicorn-magic@0.3.0: {} unist-util-is@6.0.0: diff --git a/src/cmd/install.test.ts b/src/cmd/install.test.ts index a49a58c..1a25073 100644 --- a/src/cmd/install.test.ts +++ b/src/cmd/install.test.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import fg from "fast-glob"; +import { globby } from "globby"; import { beforeEach, describe, expect, it } from "vitest"; import { fixture } from "../../tests/helper/fs"; import { Registry } from "../../tests/helper/registry"; @@ -39,7 +39,7 @@ describe.sequential("install file", () => { expect(await exists(path.join(ctx.workdir, folderName, ooPackageName))).toBe(true); - const fileList = await fg.glob("**/*", { + const fileList = await globby("**", { cwd: path.join(ctx.workdir, folderName), onlyFiles: true, absolute: false, @@ -89,7 +89,7 @@ describe.sequential("install file", () => { expect(await exists(path.join(ctx.workdir, folderName, ooPackageName))).toBe(true); - const fileList = await fg.glob("**/*", { + const fileList = await globby("**", { cwd: path.join(ctx.workdir, folderName), onlyFiles: true, absolute: false, @@ -202,7 +202,7 @@ describe.sequential("install all", () => { }, }); - const fileList = await fg.glob(`**/${ooPackageName}`, { + const fileList = await globby(`**/${ooPackageName}`, { cwd: distDir, onlyFiles: true, absolute: false, @@ -303,7 +303,7 @@ describe.sequential("install deps", () => { d: "0.0.1", }); - const fileList = await fg.glob(`**/${ooPackageName}`, { + const fileList = await globby(`**/${ooPackageName}`, { cwd: distDir, onlyFiles: true, absolute: false, @@ -383,7 +383,7 @@ describe.sequential("install deps", () => { b: "0.0.1", }); - const fileList = await fg.glob(`**/${ooPackageName}`, { + const fileList = await globby(`**/${ooPackageName}`, { cwd: distDir, onlyFiles: true, absolute: false, @@ -445,7 +445,7 @@ describe.sequential("install deps", () => { }, }); - const fileList = await fg.glob(`**/${ooPackageName}`, { + const fileList = await globby(`**/${ooPackageName}`, { cwd: distDir, onlyFiles: true, absolute: false, diff --git a/src/cmd/pack.ts b/src/cmd/pack.ts index a70f9ab..8d549c6 100644 --- a/src/cmd/pack.ts +++ b/src/cmd/pack.ts @@ -1,5 +1,6 @@ import path from "node:path"; import { execa } from "execa"; +import { globby } from "globby"; import { copyDir, remove, tempDir, writeFile } from "../utils/fs"; import { env } from "../utils/misc"; import { generatePackageJson } from "../utils/npm"; @@ -16,10 +17,22 @@ export async function prePack(p: string, ignore: string[]) { const workdir = await tempDir(); + const files = await globby("**", { + cwd: p, + dot: true, + onlyFiles: false, + gitignore: true, + ignore, + absolute: true, + }); + await Promise.all([ copyDir(p, path.join(workdir, "package"), (source, _) => { - const relative = path.relative(p, source).split(path.sep); - return !ignore.some(i => relative.includes(i)); + if (source === p) { + return true; + } + + return files.includes(source); }), writeFile(path.join(workdir, "package.json"), packageJson), ]); diff --git a/src/utils/npm.ts b/src/utils/npm.ts index b51283c..69c2542 100644 --- a/src/utils/npm.ts +++ b/src/utils/npm.ts @@ -1,6 +1,6 @@ import type { Deps, OOPackageSchema } from "../types"; import path from "node:path"; -import fg from "fast-glob"; +import { globby } from "globby"; import YAML from "yaml"; import { ooPackageName } from "../const"; import { exists, readFile, writeFile } from "./fs"; @@ -120,7 +120,7 @@ export async function createNpmrc(dir: string, registry: string, token: string) } export async function transformNodeModules(dir: string) { - const result = await fg("node_modules/**/package/package.oo.yaml", { + const result = await globby("node_modules/**/package/package.oo.yaml", { onlyFiles: true, cwd: dir, dot: false,