@sapphire/pieces 4.4.2-next.601894a → 4.4.2-next.9e1847d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -45,6 +45,7 @@ var _LoaderStrategy = class _LoaderStrategy {
|
|
|
45
45
|
url$1.searchParams.append("d", Date.now().toString());
|
|
46
46
|
url$1.searchParams.append("name", file.name);
|
|
47
47
|
url$1.searchParams.append("extension", file.extension);
|
|
48
|
+
if (Reflect.has(globalThis, "Bun")) return internal_cjs.mjsImport(file.path + url$1.search);
|
|
48
49
|
return internal_cjs.mjsImport(url$1);
|
|
49
50
|
}
|
|
50
51
|
const mod = __require(file.path);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/strategies/LoaderStrategy.ts"],"names":["getRootData","CanLoadTypeScriptFiles","path","extname","basename","url","pathToFileURL","mjsImport","isClass","classExtends","MissingExportsError","opendir","join"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAyBO,IAAM,eAAA,GAAN,MAAM,eAA8D,CAAA;AAAA,EAKnE,WAAc,GAAA;AAJrB,IAAO,aAAA,CAAA,IAAA,EAAA,qBAAA,EAAsBA,wBAAY,EAAA,CAAE,IAAS,KAAA,KAAA,CAAA;AACpD,IAAA,aAAA,CAAA,IAAA,EAAO,qBAAsB,EAAA,CAAC,KAAO,EAAA,MAAA,EAAQ,MAAM,CAAA,CAAA;AACnD,IAAA,aAAA,CAAA,IAAA,EAAiB,gBAA0B,EAAA,KAAA,CAAA;AAG1C,IAAA,IAAIC,8BAAwB,EAAA;AAC3B,MAAA,IAAA,CAAK,mBAAoB,CAAA,IAAA,CAAK,KAAO,EAAA,MAAA,EAAQ,MAAM,CAAA;AACnD,MAAA,IAAA,CAAK,cAAiB,GAAA,IAAA;AAAA;AACvB;AACD,EAEO,OAAOC,MAA4B,EAAA;AAEzC,IAAM,MAAA,SAAA,GAAYC,aAAQD,MAAI,CAAA;AAC9B,IAAA,IAAI,CAAC,IAAK,CAAA,mBAAA,CAAoB,QAAS,CAAA,SAAS,GAAU,OAAA,IAAA;AAE1D,IAAA,IAAI,KAAK,cAAkB,IAAAA,MAAA,CAAK,QAAS,CAAA,OAAO,GAAU,OAAA,IAAA;AAG1D,IAAM,MAAA,IAAA,GAAOE,aAAS,CAAAF,MAAA,EAAM,SAAS,CAAA;AACrC,IAAA,IAAI,SAAS,EAAM,IAAA,IAAA,CAAK,UAAW,CAAA,GAAG,GAAU,OAAA,IAAA;AAGhD,IAAO,OAAA,EAAE,SAAW,QAAAA,MAAA,EAAM,IAAK,EAAA;AAAA;AAChC,EAEA,MAAa,QAAQ,IAAyC,EAAA;AAC7D,IAAA,MAAM,MAAM,CAAC,MAAA,EAAQ,MAAM,CAAA,CAAE,SAAS,IAAK,CAAA,SAAS,CAAM,IAAA,CAAC,OAAO,KAAK,CAAA,CAAE,SAAS,IAAK,CAAA,SAAS,KAAK,IAAK,CAAA,mBAAA;AAC1G,IAAA,IAAI,GAAK,EAAA;AACR,MAAM,MAAAG,KAAA,GAAMC,iBAAc,CAAA,IAAA,CAAK,IAAI,CAAA;AACnC,MAAAD,KAAA,CAAI,aAAa,MAAO,CAAA,GAAA,EAAK,KAAK,GAAI,EAAA,CAAE,UAAU,CAAA;AAClD,MAAAA,KAAA,CAAI,YAAa,CAAA,MAAA,CAAO,MAAQ,EAAA,IAAA,CAAK,IAAI,CAAA;AACzC,MAAAA,KAAA,CAAI,YAAa,CAAA,MAAA,CAAO,WAAa,EAAA,IAAA,CAAK,SAAS,CAAA;
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/strategies/LoaderStrategy.ts"],"names":["getRootData","CanLoadTypeScriptFiles","path","extname","basename","url","pathToFileURL","mjsImport","isClass","classExtends","MissingExportsError","opendir","join"],"mappings":"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","file":"LoaderStrategy.cjs","sourcesContent":["import { type Awaitable } from '@sapphire/utilities';\nimport { opendir } from 'fs/promises';\nimport { basename, extname, join } from 'path';\nimport { pathToFileURL } from 'url';\nimport { MissingExportsError } from '../errors/MissingExportsError';\nimport { getRootData } from '../internal/RootScan';\nimport { mjsImport } from '../internal/internal';\nimport type { Piece } from '../structures/Piece';\nimport type { Store, StoreLogger } from '../structures/Store';\nimport type {\n\tAsyncPreloadResult,\n\tFilterResult,\n\tHydratedModuleData,\n\tILoaderResult,\n\tILoaderResultEntry,\n\tILoaderStrategy,\n\tModuleData\n} from './ILoaderStrategy';\nimport { classExtends, isClass } from './Shared';\nimport { CanLoadTypeScriptFiles } from './env';\n\n/**\n * A multi-purpose feature-complete loader strategy supporting multi-piece modules as well as supporting both ECMAScript\n * Modules and CommonJS with reloading support.\n */\nexport class LoaderStrategy<T extends Piece> implements ILoaderStrategy<T> {\n\tpublic clientUsesESModules = getRootData().type === 'ESM';\n\tpublic supportedExtensions = ['.js', '.cjs', '.mjs'];\n\tprivate readonly filterDtsFiles: boolean = false;\n\n\tpublic constructor() {\n\t\tif (CanLoadTypeScriptFiles) {\n\t\t\tthis.supportedExtensions.push('.ts', '.cts', '.mts');\n\t\t\tthis.filterDtsFiles = true;\n\t\t}\n\t}\n\n\tpublic filter(path: string): FilterResult {\n\t\t// Retrieve the file extension.\n\t\tconst extension = extname(path);\n\t\tif (!this.supportedExtensions.includes(extension)) return null;\n\n\t\tif (this.filterDtsFiles && path.endsWith('.d.ts')) return null;\n\n\t\t// Retrieve the name of the file, return null if empty.\n\t\tconst name = basename(path, extension);\n\t\tif (name === '' || name.startsWith('_')) return null;\n\n\t\t// Return the name and extension.\n\t\treturn { extension, path, name };\n\t}\n\n\tpublic async preload(file: ModuleData): AsyncPreloadResult<T> {\n\t\tconst mjs = ['.mjs', '.mts'].includes(file.extension) || (['.js', '.ts'].includes(file.extension) && this.clientUsesESModules);\n\t\tif (mjs) {\n\t\t\tconst url = pathToFileURL(file.path);\n\t\t\turl.searchParams.append('d', Date.now().toString());\n\t\t\turl.searchParams.append('name', file.name);\n\t\t\turl.searchParams.append('extension', file.extension);\n\n\t\t\t// Bun workaround: Import a file path with search params instead of an file URL to force re-evaluation due to caching bug.\n\t\t\tif (Reflect.has(globalThis, 'Bun')) return mjsImport(file.path + url.search);\n\n\t\t\treturn mjsImport(url);\n\t\t}\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-var-requires\n\t\tconst mod = require(file.path);\n\t\tdelete require.cache[require.resolve(file.path)];\n\t\treturn mod;\n\t}\n\n\tpublic async *load(store: Store<T>, file: HydratedModuleData): ILoaderResult<T> {\n\t\tlet yielded = false;\n\t\tconst result = await this.preload(file);\n\n\t\t// Support `module.exports`:\n\t\tif (isClass(result) && classExtends(result, store.Constructor)) {\n\t\t\tyield result;\n\t\t\tyielded = true;\n\t\t}\n\n\t\t// Support any other export:\n\t\tfor (const value of Object.values(result)) {\n\t\t\tif (isClass(value) && classExtends(value, store.Constructor)) {\n\t\t\t\tyield value as ILoaderResultEntry<T>;\n\t\t\t\tyielded = true;\n\t\t\t}\n\t\t}\n\n\t\tif (!yielded) {\n\t\t\tthrow new MissingExportsError(file.path);\n\t\t}\n\t}\n\n\tpublic onLoad(store: Store<T>, piece: T): Awaitable<unknown>;\n\tpublic onLoad(): unknown {\n\t\treturn undefined;\n\t}\n\n\tpublic onLoadAll(store: Store<T>): Awaitable<unknown>;\n\tpublic onLoadAll(): unknown {\n\t\treturn undefined;\n\t}\n\n\tpublic onUnload(store: Store<T>, piece: T): Awaitable<unknown>;\n\tpublic onUnload(): unknown {\n\t\treturn undefined;\n\t}\n\n\tpublic onUnloadAll(store: Store<T>): Awaitable<unknown>;\n\tpublic onUnloadAll(): unknown {\n\t\treturn undefined;\n\t}\n\n\tpublic onError(error: Error, path: string): void {\n\t\tconsole.error(`Error when loading '${path}':`, error);\n\t}\n\n\tpublic async *walk(store: Store<T>, path: string, logger?: StoreLogger | null): AsyncIterableIterator<string> {\n\t\tlogger?.(`[STORE => ${store.name}] [WALK] Loading all pieces from '${path}'.`);\n\t\ttry {\n\t\t\tconst dir = await opendir(path);\n\t\t\tfor await (const item of dir) {\n\t\t\t\tif (item.isFile()) yield join(dir.path, item.name);\n\t\t\t\telse if (item.isDirectory()) yield* this.walk(store, join(dir.path, item.name), logger);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\t// Specifically ignore ENOENT, which is commonly raised by fs operations\n\t\t\t// to indicate that a component of the specified pathname does not exist.\n\t\t\t// No entity (file or directory) could be found by the given path.\n\t\t\tif ((error as ErrorWithCode).code !== 'ENOENT') this.onError(error as Error, path);\n\t\t}\n\t}\n}\n\ntype ErrorWithCode = Error & { code: string };\n"]}
|
|
@@ -34,6 +34,7 @@ var _LoaderStrategy = class _LoaderStrategy {
|
|
|
34
34
|
url.searchParams.append("d", Date.now().toString());
|
|
35
35
|
url.searchParams.append("name", file.name);
|
|
36
36
|
url.searchParams.append("extension", file.extension);
|
|
37
|
+
if (Reflect.has(globalThis, "Bun")) return mjsImport(file.path + url.search);
|
|
37
38
|
return mjsImport(url);
|
|
38
39
|
}
|
|
39
40
|
const mod = __require(file.path);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/strategies/LoaderStrategy.ts"],"names":[],"mappings":";;;;;;;;;;;AAyBO,IAAM,eAAA,GAAN,MAAM,eAA8D,CAAA;AAAA,EAKnE,WAAc,GAAA;AAJrB,IAAO,aAAA,CAAA,IAAA,EAAA,qBAAA,EAAsB,WAAY,EAAA,CAAE,IAAS,KAAA,KAAA,CAAA;AACpD,IAAA,aAAA,CAAA,IAAA,EAAO,qBAAsB,EAAA,CAAC,KAAO,EAAA,MAAA,EAAQ,MAAM,CAAA,CAAA;AACnD,IAAA,aAAA,CAAA,IAAA,EAAiB,gBAA0B,EAAA,KAAA,CAAA;AAG1C,IAAA,IAAI,sBAAwB,EAAA;AAC3B,MAAA,IAAA,CAAK,mBAAoB,CAAA,IAAA,CAAK,KAAO,EAAA,MAAA,EAAQ,MAAM,CAAA;AACnD,MAAA,IAAA,CAAK,cAAiB,GAAA,IAAA;AAAA;AACvB;AACD,EAEO,OAAO,IAA4B,EAAA;AAEzC,IAAM,MAAA,SAAA,GAAY,QAAQ,IAAI,CAAA;AAC9B,IAAA,IAAI,CAAC,IAAK,CAAA,mBAAA,CAAoB,QAAS,CAAA,SAAS,GAAU,OAAA,IAAA;AAE1D,IAAA,IAAI,KAAK,cAAkB,IAAA,IAAA,CAAK,QAAS,CAAA,OAAO,GAAU,OAAA,IAAA;AAG1D,IAAM,MAAA,IAAA,GAAO,QAAS,CAAA,IAAA,EAAM,SAAS,CAAA;AACrC,IAAA,IAAI,SAAS,EAAM,IAAA,IAAA,CAAK,UAAW,CAAA,GAAG,GAAU,OAAA,IAAA;AAGhD,IAAO,OAAA,EAAE,SAAW,EAAA,IAAA,EAAM,IAAK,EAAA;AAAA;AAChC,EAEA,MAAa,QAAQ,IAAyC,EAAA;AAC7D,IAAA,MAAM,MAAM,CAAC,MAAA,EAAQ,MAAM,CAAA,CAAE,SAAS,IAAK,CAAA,SAAS,CAAM,IAAA,CAAC,OAAO,KAAK,CAAA,CAAE,SAAS,IAAK,CAAA,SAAS,KAAK,IAAK,CAAA,mBAAA;AAC1G,IAAA,IAAI,GAAK,EAAA;AACR,MAAM,MAAA,GAAA,GAAM,aAAc,CAAA,IAAA,CAAK,IAAI,CAAA;AACnC,MAAA,GAAA,CAAI,aAAa,MAAO,CAAA,GAAA,EAAK,KAAK,GAAI,EAAA,CAAE,UAAU,CAAA;AAClD,MAAA,GAAA,CAAI,YAAa,CAAA,MAAA,CAAO,MAAQ,EAAA,IAAA,CAAK,IAAI,CAAA;AACzC,MAAA,GAAA,CAAI,YAAa,CAAA,MAAA,CAAO,WAAa,EAAA,IAAA,CAAK,SAAS,CAAA;
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/strategies/LoaderStrategy.ts"],"names":[],"mappings":"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","file":"LoaderStrategy.mjs","sourcesContent":["import { type Awaitable } from '@sapphire/utilities';\nimport { opendir } from 'fs/promises';\nimport { basename, extname, join } from 'path';\nimport { pathToFileURL } from 'url';\nimport { MissingExportsError } from '../errors/MissingExportsError';\nimport { getRootData } from '../internal/RootScan';\nimport { mjsImport } from '../internal/internal';\nimport type { Piece } from '../structures/Piece';\nimport type { Store, StoreLogger } from '../structures/Store';\nimport type {\n\tAsyncPreloadResult,\n\tFilterResult,\n\tHydratedModuleData,\n\tILoaderResult,\n\tILoaderResultEntry,\n\tILoaderStrategy,\n\tModuleData\n} from './ILoaderStrategy';\nimport { classExtends, isClass } from './Shared';\nimport { CanLoadTypeScriptFiles } from './env';\n\n/**\n * A multi-purpose feature-complete loader strategy supporting multi-piece modules as well as supporting both ECMAScript\n * Modules and CommonJS with reloading support.\n */\nexport class LoaderStrategy<T extends Piece> implements ILoaderStrategy<T> {\n\tpublic clientUsesESModules = getRootData().type === 'ESM';\n\tpublic supportedExtensions = ['.js', '.cjs', '.mjs'];\n\tprivate readonly filterDtsFiles: boolean = false;\n\n\tpublic constructor() {\n\t\tif (CanLoadTypeScriptFiles) {\n\t\t\tthis.supportedExtensions.push('.ts', '.cts', '.mts');\n\t\t\tthis.filterDtsFiles = true;\n\t\t}\n\t}\n\n\tpublic filter(path: string): FilterResult {\n\t\t// Retrieve the file extension.\n\t\tconst extension = extname(path);\n\t\tif (!this.supportedExtensions.includes(extension)) return null;\n\n\t\tif (this.filterDtsFiles && path.endsWith('.d.ts')) return null;\n\n\t\t// Retrieve the name of the file, return null if empty.\n\t\tconst name = basename(path, extension);\n\t\tif (name === '' || name.startsWith('_')) return null;\n\n\t\t// Return the name and extension.\n\t\treturn { extension, path, name };\n\t}\n\n\tpublic async preload(file: ModuleData): AsyncPreloadResult<T> {\n\t\tconst mjs = ['.mjs', '.mts'].includes(file.extension) || (['.js', '.ts'].includes(file.extension) && this.clientUsesESModules);\n\t\tif (mjs) {\n\t\t\tconst url = pathToFileURL(file.path);\n\t\t\turl.searchParams.append('d', Date.now().toString());\n\t\t\turl.searchParams.append('name', file.name);\n\t\t\turl.searchParams.append('extension', file.extension);\n\n\t\t\t// Bun workaround: Import a file path with search params instead of an file URL to force re-evaluation due to caching bug.\n\t\t\tif (Reflect.has(globalThis, 'Bun')) return mjsImport(file.path + url.search);\n\n\t\t\treturn mjsImport(url);\n\t\t}\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-var-requires\n\t\tconst mod = require(file.path);\n\t\tdelete require.cache[require.resolve(file.path)];\n\t\treturn mod;\n\t}\n\n\tpublic async *load(store: Store<T>, file: HydratedModuleData): ILoaderResult<T> {\n\t\tlet yielded = false;\n\t\tconst result = await this.preload(file);\n\n\t\t// Support `module.exports`:\n\t\tif (isClass(result) && classExtends(result, store.Constructor)) {\n\t\t\tyield result;\n\t\t\tyielded = true;\n\t\t}\n\n\t\t// Support any other export:\n\t\tfor (const value of Object.values(result)) {\n\t\t\tif (isClass(value) && classExtends(value, store.Constructor)) {\n\t\t\t\tyield value as ILoaderResultEntry<T>;\n\t\t\t\tyielded = true;\n\t\t\t}\n\t\t}\n\n\t\tif (!yielded) {\n\t\t\tthrow new MissingExportsError(file.path);\n\t\t}\n\t}\n\n\tpublic onLoad(store: Store<T>, piece: T): Awaitable<unknown>;\n\tpublic onLoad(): unknown {\n\t\treturn undefined;\n\t}\n\n\tpublic onLoadAll(store: Store<T>): Awaitable<unknown>;\n\tpublic onLoadAll(): unknown {\n\t\treturn undefined;\n\t}\n\n\tpublic onUnload(store: Store<T>, piece: T): Awaitable<unknown>;\n\tpublic onUnload(): unknown {\n\t\treturn undefined;\n\t}\n\n\tpublic onUnloadAll(store: Store<T>): Awaitable<unknown>;\n\tpublic onUnloadAll(): unknown {\n\t\treturn undefined;\n\t}\n\n\tpublic onError(error: Error, path: string): void {\n\t\tconsole.error(`Error when loading '${path}':`, error);\n\t}\n\n\tpublic async *walk(store: Store<T>, path: string, logger?: StoreLogger | null): AsyncIterableIterator<string> {\n\t\tlogger?.(`[STORE => ${store.name}] [WALK] Loading all pieces from '${path}'.`);\n\t\ttry {\n\t\t\tconst dir = await opendir(path);\n\t\t\tfor await (const item of dir) {\n\t\t\t\tif (item.isFile()) yield join(dir.path, item.name);\n\t\t\t\telse if (item.isDirectory()) yield* this.walk(store, join(dir.path, item.name), logger);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\t// Specifically ignore ENOENT, which is commonly raised by fs operations\n\t\t\t// to indicate that a component of the specified pathname does not exist.\n\t\t\t// No entity (file or directory) could be found by the given path.\n\t\t\tif ((error as ErrorWithCode).code !== 'ENOENT') this.onError(error as Error, path);\n\t\t}\n\t}\n}\n\ntype ErrorWithCode = Error & { code: string };\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sapphire/pieces",
|
|
3
|
-
"version": "4.4.2-next.
|
|
3
|
+
"version": "4.4.2-next.9e1847d",
|
|
4
4
|
"description": "Sapphire's piece loader.",
|
|
5
5
|
"main": "dist/cjs/index.cjs",
|
|
6
6
|
"module": "dist/esm/index.mjs",
|
|
@@ -47,24 +47,24 @@
|
|
|
47
47
|
"@sapphire/eslint-config": "^5.0.6",
|
|
48
48
|
"@sapphire/prettier-config": "^2.0.0",
|
|
49
49
|
"@sapphire/ts-config": "^5.0.1",
|
|
50
|
-
"@types/node": "^22.
|
|
50
|
+
"@types/node": "^22.17.1",
|
|
51
51
|
"@typescript-eslint/eslint-plugin": "^7.18.0",
|
|
52
52
|
"@typescript-eslint/parser": "^7.18.0",
|
|
53
|
-
"@vitest/coverage-v8": "^3.2.
|
|
54
|
-
"concurrently": "^9.
|
|
53
|
+
"@vitest/coverage-v8": "^3.2.4",
|
|
54
|
+
"concurrently": "^9.2.0",
|
|
55
55
|
"cz-conventional-changelog": "^3.3.0",
|
|
56
56
|
"esbuild-plugin-file-path-extensions": "^2.1.4",
|
|
57
57
|
"eslint": "^8.57.1",
|
|
58
|
-
"eslint-config-prettier": "^10.1.
|
|
59
|
-
"eslint-plugin-prettier": "^5.4
|
|
60
|
-
"lint-staged": "^16.1.
|
|
61
|
-
"prettier": "^3.
|
|
58
|
+
"eslint-config-prettier": "^10.1.8",
|
|
59
|
+
"eslint-plugin-prettier": "^5.5.4",
|
|
60
|
+
"lint-staged": "^16.1.5",
|
|
61
|
+
"prettier": "^3.6.2",
|
|
62
62
|
"rimraf": "^6.0.1",
|
|
63
63
|
"tsup": "^8.5.0",
|
|
64
64
|
"typedoc": "^0.26.11",
|
|
65
65
|
"typedoc-json-parser": "^10.2.0",
|
|
66
66
|
"typescript": "^5.8.3",
|
|
67
|
-
"vitest": "^3.2.
|
|
67
|
+
"vitest": "^3.2.4"
|
|
68
68
|
},
|
|
69
69
|
"repository": {
|
|
70
70
|
"type": "git",
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
"access": "public"
|
|
109
109
|
},
|
|
110
110
|
"resolutions": {
|
|
111
|
-
"acorn": "^8.
|
|
111
|
+
"acorn": "^8.15.0",
|
|
112
112
|
"ansi-regex": "^5.0.1",
|
|
113
113
|
"minimist": "^1.2.8"
|
|
114
114
|
},
|