@ui-doc/node 0.1.0

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.
package/LICENSE.md ADDED
@@ -0,0 +1,9 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+
7
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md ADDED
File without changes
@@ -0,0 +1,13 @@
1
+ /// <reference types="node" />
2
+ import type { AssetLoader, FileSystem } from '@ui-doc/core';
3
+ export declare class NodeAssetLoader implements AssetLoader {
4
+ protected resolvedPackages: Record<string, string | null>;
5
+ protected fileSystem: FileSystem;
6
+ protected require: NodeRequire;
7
+ constructor(fileSystem: FileSystem);
8
+ packageExists(packageName: string): Promise<boolean>;
9
+ packagePath(packageName: string): Promise<string | undefined>;
10
+ resolve(file: string): Promise<string | undefined>;
11
+ copy(from: string, to: string): Promise<void>;
12
+ read(file: string): Promise<string>;
13
+ }
@@ -0,0 +1,9 @@
1
+ import type { FileFinder, FileFinderOnFoundCallback } from '@ui-doc/core';
2
+ export declare class NodeFileFinder implements FileFinder {
3
+ globs: string[];
4
+ constructor(globs?: string[]);
5
+ search(fileFound: FileFinderOnFoundCallback): Promise<void>;
6
+ protected searchGlob(glob: string, fileFound: FileFinderOnFoundCallback): Promise<Promise<void>[]>;
7
+ protected scanDirectory(directory: string, regex: RegExp, fileFound: FileFinderOnFoundCallback, recursive: boolean): Promise<Promise<void>[]>;
8
+ matches(file: string): boolean;
9
+ }
@@ -0,0 +1,18 @@
1
+ import type { FileSystem } from '@ui-doc/core';
2
+ import { NodeAssetLoader } from './NodeAssetLoader';
3
+ import { NodeFileFinder } from './NodeFileFinder';
4
+ export declare class NodeFileSystem implements FileSystem {
5
+ private static instance;
6
+ private assetLoaderInstance?;
7
+ static init(): NodeFileSystem;
8
+ createFileFinder(globs: string[]): NodeFileFinder;
9
+ assetLoader(): NodeAssetLoader;
10
+ fileRead(file: string): Promise<string>;
11
+ fileWrite(file: string, content: string): Promise<boolean>;
12
+ fileCopy(from: string, to: string): Promise<boolean>;
13
+ fileExists(file: string): Promise<boolean>;
14
+ fileBasename(file: string): string;
15
+ fileDirname(file: string): string;
16
+ ensureDirectoryExists(dir: string): Promise<void>;
17
+ }
18
+ export declare function cerateNodeFileSystem(): NodeFileSystem;
package/dist/index.cjs ADDED
@@ -0,0 +1,167 @@
1
+ 'use strict';
2
+
3
+ var fs = require('node:fs/promises');
4
+ var node_module = require('node:module');
5
+ var path = require('node:path');
6
+ var picomatch = require('picomatch');
7
+
8
+ var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
9
+ /* eslint-disable no-empty-function */
10
+ class NodeAssetLoader {
11
+ constructor(fileSystem) {
12
+ this.resolvedPackages = {};
13
+ this.fileSystem = fileSystem;
14
+ this.require = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)));
15
+ }
16
+ async packageExists(packageName) {
17
+ return (await this.packagePath(packageName)) !== undefined;
18
+ }
19
+ async packagePath(packageName) {
20
+ if (this.resolvedPackages[packageName] !== undefined) {
21
+ return this.resolvedPackages[packageName] === null
22
+ ? undefined
23
+ : this.resolvedPackages[packageName];
24
+ }
25
+ const paths = this.require.resolve.paths(packageName);
26
+ if (!paths) {
27
+ throw new Error('Could not resolve require paths');
28
+ }
29
+ this.resolvedPackages[packageName] = await paths.reduce(async (acc, nodePath) => {
30
+ if ((await acc) !== null) {
31
+ return acc;
32
+ }
33
+ const dir = path.join(nodePath, packageName);
34
+ return (await fs
35
+ .access(dir, fs.constants.R_OK)
36
+ .then(() => true)
37
+ .catch(() => false))
38
+ ? dir
39
+ : acc;
40
+ }, Promise.resolve(null));
41
+ return this.resolvedPackages[packageName] !== null
42
+ ? this.resolvedPackages[packageName]
43
+ : undefined;
44
+ }
45
+ async resolve(file) {
46
+ const resolvedFile = this.require.resolve(file);
47
+ return (await this.fileSystem.fileExists(resolvedFile)) ? resolvedFile : undefined;
48
+ }
49
+ async copy(from, to) {
50
+ const fromPath = await this.resolve(from);
51
+ if (!fromPath) {
52
+ throw new Error(`Could not resolve source asset "${from}"`);
53
+ }
54
+ await this.fileSystem.fileCopy(fromPath, to);
55
+ }
56
+ async read(file) {
57
+ const fromPath = await this.resolve(file);
58
+ if (!fromPath) {
59
+ throw new Error(`Could not resolve asset "${file}"`);
60
+ }
61
+ return this.fileSystem.fileRead(fromPath);
62
+ }
63
+ }
64
+
65
+ class NodeFileFinder {
66
+ constructor(globs = []) {
67
+ this.globs = [];
68
+ this.globs = globs.map(glob => path.resolve(glob));
69
+ }
70
+ async search(fileFound) {
71
+ await Promise.all(await Promise.all(this.globs.map(glob => this.searchGlob(glob, fileFound))));
72
+ }
73
+ searchGlob(glob, fileFound) {
74
+ const scan = picomatch.scan(glob, { parts: true, tokens: true });
75
+ const pathBase = path.join(scan.prefix, scan.base);
76
+ const recursive = scan.maxDepth === Infinity;
77
+ const regex = picomatch.makeRe(glob);
78
+ return this.scanDirectory(pathBase, regex, fileFound, recursive);
79
+ }
80
+ async scanDirectory(directory, regex, fileFound, recursive) {
81
+ const dirs = await fs.readdir(path.resolve(directory), { withFileTypes: true });
82
+ return dirs.reduce(async (acc, dirent) => {
83
+ const list = await acc;
84
+ if (dirent.isDirectory()) {
85
+ if (recursive) {
86
+ list.push(...(await this.scanDirectory(path.join(directory, dirent.name), regex, fileFound, recursive)));
87
+ }
88
+ }
89
+ else if (dirent.isFile()) {
90
+ const file = path.join(directory, dirent.name);
91
+ if (file.match(regex)) {
92
+ const onFound = fileFound(path.resolve(file));
93
+ list.push(onFound instanceof Promise ? onFound : Promise.resolve(onFound));
94
+ }
95
+ }
96
+ return Promise.resolve(list);
97
+ }, Promise.resolve([]));
98
+ }
99
+ matches(file) {
100
+ return this.globs.some(glob => picomatch.isMatch(file, glob));
101
+ }
102
+ }
103
+
104
+ class NodeFileSystem {
105
+ static init() {
106
+ if (!this.instance) {
107
+ this.instance = new NodeFileSystem();
108
+ }
109
+ return this.instance;
110
+ }
111
+ createFileFinder(globs) {
112
+ return new NodeFileFinder(globs);
113
+ }
114
+ assetLoader() {
115
+ if (!this.assetLoaderInstance) {
116
+ this.assetLoaderInstance = new NodeAssetLoader(this);
117
+ }
118
+ return this.assetLoaderInstance;
119
+ }
120
+ async fileRead(file) {
121
+ return fs.readFile(path.resolve(file), 'utf8');
122
+ }
123
+ async fileWrite(file, content) {
124
+ try {
125
+ await fs.writeFile(path.resolve(file), content, 'utf8');
126
+ return true;
127
+ }
128
+ catch (e) {
129
+ return false;
130
+ }
131
+ }
132
+ async fileCopy(from, to) {
133
+ const fromFile = path.resolve(from);
134
+ const toFile = path.resolve(to);
135
+ try {
136
+ await fs.copyFile(fromFile, toFile);
137
+ return true;
138
+ }
139
+ catch (e) {
140
+ return false;
141
+ }
142
+ }
143
+ async fileExists(file) {
144
+ return fs
145
+ .access(path.resolve(file), fs.constants.F_OK)
146
+ .then(() => true)
147
+ .catch(() => false);
148
+ }
149
+ fileBasename(file) {
150
+ return path.basename(file, path.extname(file));
151
+ }
152
+ fileDirname(file) {
153
+ return path.dirname(file);
154
+ }
155
+ async ensureDirectoryExists(dir) {
156
+ await fs.mkdir(path.resolve(dir), { recursive: true });
157
+ }
158
+ }
159
+ function cerateNodeFileSystem() {
160
+ return NodeFileSystem.init();
161
+ }
162
+
163
+ exports.NodeAssetLoader = NodeAssetLoader;
164
+ exports.NodeFileFinder = NodeFileFinder;
165
+ exports.NodeFileSystem = NodeFileSystem;
166
+ exports.cerateNodeFileSystem = cerateNodeFileSystem;
167
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../src/NodeAssetLoader.ts","../src/NodeFileFinder.ts","../src/NodeFileSystem.ts"],"sourcesContent":[null,null,null],"names":["createRequire"],"mappings":";;;;;;;;AAAA;MAOa,eAAe,CAAA;AAO1B,IAAA,WAAA,CAAmB,UAAsB,EAAA;QAN/B,IAAgB,CAAA,gBAAA,GAAkC,EAAE,CAAA;AAO5D,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAGA,yBAAa,CAAC,8LAAe,CAAC,CAAA;KAC9C;IAEM,MAAM,aAAa,CAAC,WAAmB,EAAA;QAC5C,OAAO,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,SAAS,CAAA;KAC3D;IAEM,MAAM,WAAW,CAAC,WAAmB,EAAA;QAC1C,IAAI,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,SAAS,EAAE;AACpD,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,IAAI;AAChD,kBAAE,SAAS;AACX,kBAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAE,CAAA;SACxC;AAED,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;QAErD,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;SACnD;AAED,QAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,EAAE,QAAQ,KAAI;AAC9E,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,EAAE;AACxB,gBAAA,OAAO,GAAG,CAAA;aACX;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;YAE5C,OAAO,CAAC,MAAM,EAAE;iBACb,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;AAC9B,iBAAA,IAAI,CAAC,MAAM,IAAI,CAAC;AAChB,iBAAA,KAAK,CAAC,MAAM,KAAK,CAAC;AACnB,kBAAE,GAAG;kBACH,GAAG,CAAA;SACR,EAAE,OAAO,CAAC,OAAO,CAAgB,IAAI,CAAC,CAAC,CAAA;AAExC,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,IAAI;AAChD,cAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAE;cACnC,SAAS,CAAA;KACd;IAEM,MAAM,OAAO,CAAC,IAAY,EAAA;QAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAE/C,QAAA,OAAO,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,YAAY,GAAG,SAAS,CAAA;KACnF;AAEM,IAAA,MAAM,IAAI,CAAC,IAAY,EAAE,EAAU,EAAA;QACxC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAEzC,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,CAAA,CAAA,CAAG,CAAC,CAAA;SAC5D;QAED,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;KAC7C;IAEM,MAAM,IAAI,CAAC,IAAY,EAAA;QAC5B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAEzC,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAA,CAAA,CAAG,CAAC,CAAA;SACrD;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;KAC1C;AACF;;MC3EY,cAAc,CAAA;AAGzB,IAAA,WAAA,CAAY,QAAkB,EAAE,EAAA;QAFzB,IAAK,CAAA,KAAA,GAAa,EAAE,CAAA;AAGzB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;KACnD;IAEM,MAAM,MAAM,CAAC,SAAoC,EAAA;AACtD,QAAA,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;KAC/F;IAES,UAAU,CAClB,IAAY,EACZ,SAAoC,EAAA;AAEpC,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;AAChE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;AAClD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAA;QAC5C,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AAEpC,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;KACjE;IAES,MAAM,aAAa,CAC3B,SAAiB,EACjB,KAAa,EACb,SAAoC,EACpC,SAAkB,EAAA;QAElB,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;QAE/E,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,EAAE,MAAM,KAA8B;AACjE,YAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAA;AAEtB,YAAA,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE;gBACxB,IAAI,SAAS,EAAE;AACb,oBAAA,IAAI,CAAC,IAAI,CACP,IAAI,MAAM,IAAI,CAAC,aAAa,CAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,EACjC,KAAK,EACL,SAAS,EACT,SAAS,CACV,EACF,CAAA;iBACF;aACF;AAAM,iBAAA,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE;AAC1B,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;AAE9C,gBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;oBACrB,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;oBAE7C,IAAI,CAAC,IAAI,CAAC,OAAO,YAAY,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;iBAC3E;aACF;AAED,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;SAC7B,EAAE,OAAO,CAAC,OAAO,CAAkB,EAAE,CAAC,CAAC,CAAA;KACzC;AAEM,IAAA,OAAO,CAAC,IAAY,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;KAC9D;AACF;;MC5DY,cAAc,CAAA;AAKlB,IAAA,OAAO,IAAI,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAA;SACrC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAA;KACrB;AAEM,IAAA,gBAAgB,CAAC,KAAe,EAAA;AACrC,QAAA,OAAO,IAAI,cAAc,CAAC,KAAK,CAAC,CAAA;KACjC;IAEM,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC7B,IAAI,CAAC,mBAAmB,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAA;SACrD;QAED,OAAO,IAAI,CAAC,mBAAmB,CAAA;KAChC;IAEM,MAAM,QAAQ,CAAC,IAAY,EAAA;AAChC,QAAA,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;KAC/C;AAEM,IAAA,MAAM,SAAS,CAAC,IAAY,EAAE,OAAe,EAAA;AAClD,QAAA,IAAI;AACF,YAAA,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AAEvD,YAAA,OAAO,IAAI,CAAA;SACZ;QAAC,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,KAAK,CAAA;SACb;KACF;AAEM,IAAA,MAAM,QAAQ,CAAC,IAAY,EAAE,EAAU,EAAA;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;AAE/B,QAAA,IAAI;YACF,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;AAEnC,YAAA,OAAO,IAAI,CAAA;SACZ;QAAC,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,KAAK,CAAA;SACb;KACF;IAEM,MAAM,UAAU,CAAC,IAAY,EAAA;AAClC,QAAA,OAAO,EAAE;AACN,aAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;AAC7C,aAAA,IAAI,CAAC,MAAM,IAAI,CAAC;AAChB,aAAA,KAAK,CAAC,MAAM,KAAK,CAAC,CAAA;KACtB;AAEM,IAAA,YAAY,CAAC,IAAY,EAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;KAC/C;AAEM,IAAA,WAAW,CAAC,IAAY,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;KAC1B;IAEM,MAAM,qBAAqB,CAAC,GAAW,EAAA;AAC5C,QAAA,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;KACvD;AACF,CAAA;SAEe,oBAAoB,GAAA;AAClC,IAAA,OAAO,cAAc,CAAC,IAAI,EAAE,CAAA;AAC9B;;;;;;;"}
@@ -0,0 +1,3 @@
1
+ export * from './NodeAssetLoader';
2
+ export * from './NodeFileFinder';
3
+ export * from './NodeFileSystem';
package/dist/index.mjs ADDED
@@ -0,0 +1,161 @@
1
+ import fs from 'node:fs/promises';
2
+ import { createRequire } from 'node:module';
3
+ import path from 'node:path';
4
+ import picomatch from 'picomatch';
5
+
6
+ /* eslint-disable no-empty-function */
7
+ class NodeAssetLoader {
8
+ constructor(fileSystem) {
9
+ this.resolvedPackages = {};
10
+ this.fileSystem = fileSystem;
11
+ this.require = createRequire(import.meta.url);
12
+ }
13
+ async packageExists(packageName) {
14
+ return (await this.packagePath(packageName)) !== undefined;
15
+ }
16
+ async packagePath(packageName) {
17
+ if (this.resolvedPackages[packageName] !== undefined) {
18
+ return this.resolvedPackages[packageName] === null
19
+ ? undefined
20
+ : this.resolvedPackages[packageName];
21
+ }
22
+ const paths = this.require.resolve.paths(packageName);
23
+ if (!paths) {
24
+ throw new Error('Could not resolve require paths');
25
+ }
26
+ this.resolvedPackages[packageName] = await paths.reduce(async (acc, nodePath) => {
27
+ if ((await acc) !== null) {
28
+ return acc;
29
+ }
30
+ const dir = path.join(nodePath, packageName);
31
+ return (await fs
32
+ .access(dir, fs.constants.R_OK)
33
+ .then(() => true)
34
+ .catch(() => false))
35
+ ? dir
36
+ : acc;
37
+ }, Promise.resolve(null));
38
+ return this.resolvedPackages[packageName] !== null
39
+ ? this.resolvedPackages[packageName]
40
+ : undefined;
41
+ }
42
+ async resolve(file) {
43
+ const resolvedFile = this.require.resolve(file);
44
+ return (await this.fileSystem.fileExists(resolvedFile)) ? resolvedFile : undefined;
45
+ }
46
+ async copy(from, to) {
47
+ const fromPath = await this.resolve(from);
48
+ if (!fromPath) {
49
+ throw new Error(`Could not resolve source asset "${from}"`);
50
+ }
51
+ await this.fileSystem.fileCopy(fromPath, to);
52
+ }
53
+ async read(file) {
54
+ const fromPath = await this.resolve(file);
55
+ if (!fromPath) {
56
+ throw new Error(`Could not resolve asset "${file}"`);
57
+ }
58
+ return this.fileSystem.fileRead(fromPath);
59
+ }
60
+ }
61
+
62
+ class NodeFileFinder {
63
+ constructor(globs = []) {
64
+ this.globs = [];
65
+ this.globs = globs.map(glob => path.resolve(glob));
66
+ }
67
+ async search(fileFound) {
68
+ await Promise.all(await Promise.all(this.globs.map(glob => this.searchGlob(glob, fileFound))));
69
+ }
70
+ searchGlob(glob, fileFound) {
71
+ const scan = picomatch.scan(glob, { parts: true, tokens: true });
72
+ const pathBase = path.join(scan.prefix, scan.base);
73
+ const recursive = scan.maxDepth === Infinity;
74
+ const regex = picomatch.makeRe(glob);
75
+ return this.scanDirectory(pathBase, regex, fileFound, recursive);
76
+ }
77
+ async scanDirectory(directory, regex, fileFound, recursive) {
78
+ const dirs = await fs.readdir(path.resolve(directory), { withFileTypes: true });
79
+ return dirs.reduce(async (acc, dirent) => {
80
+ const list = await acc;
81
+ if (dirent.isDirectory()) {
82
+ if (recursive) {
83
+ list.push(...(await this.scanDirectory(path.join(directory, dirent.name), regex, fileFound, recursive)));
84
+ }
85
+ }
86
+ else if (dirent.isFile()) {
87
+ const file = path.join(directory, dirent.name);
88
+ if (file.match(regex)) {
89
+ const onFound = fileFound(path.resolve(file));
90
+ list.push(onFound instanceof Promise ? onFound : Promise.resolve(onFound));
91
+ }
92
+ }
93
+ return Promise.resolve(list);
94
+ }, Promise.resolve([]));
95
+ }
96
+ matches(file) {
97
+ return this.globs.some(glob => picomatch.isMatch(file, glob));
98
+ }
99
+ }
100
+
101
+ class NodeFileSystem {
102
+ static init() {
103
+ if (!this.instance) {
104
+ this.instance = new NodeFileSystem();
105
+ }
106
+ return this.instance;
107
+ }
108
+ createFileFinder(globs) {
109
+ return new NodeFileFinder(globs);
110
+ }
111
+ assetLoader() {
112
+ if (!this.assetLoaderInstance) {
113
+ this.assetLoaderInstance = new NodeAssetLoader(this);
114
+ }
115
+ return this.assetLoaderInstance;
116
+ }
117
+ async fileRead(file) {
118
+ return fs.readFile(path.resolve(file), 'utf8');
119
+ }
120
+ async fileWrite(file, content) {
121
+ try {
122
+ await fs.writeFile(path.resolve(file), content, 'utf8');
123
+ return true;
124
+ }
125
+ catch (e) {
126
+ return false;
127
+ }
128
+ }
129
+ async fileCopy(from, to) {
130
+ const fromFile = path.resolve(from);
131
+ const toFile = path.resolve(to);
132
+ try {
133
+ await fs.copyFile(fromFile, toFile);
134
+ return true;
135
+ }
136
+ catch (e) {
137
+ return false;
138
+ }
139
+ }
140
+ async fileExists(file) {
141
+ return fs
142
+ .access(path.resolve(file), fs.constants.F_OK)
143
+ .then(() => true)
144
+ .catch(() => false);
145
+ }
146
+ fileBasename(file) {
147
+ return path.basename(file, path.extname(file));
148
+ }
149
+ fileDirname(file) {
150
+ return path.dirname(file);
151
+ }
152
+ async ensureDirectoryExists(dir) {
153
+ await fs.mkdir(path.resolve(dir), { recursive: true });
154
+ }
155
+ }
156
+ function cerateNodeFileSystem() {
157
+ return NodeFileSystem.init();
158
+ }
159
+
160
+ export { NodeAssetLoader, NodeFileFinder, NodeFileSystem, cerateNodeFileSystem };
161
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../src/NodeAssetLoader.ts","../src/NodeFileFinder.ts","../src/NodeFileSystem.ts"],"sourcesContent":[null,null,null],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "@ui-doc/node",
3
+ "description": "Node implementations for UI-Doc.",
4
+ "version": "0.1.0",
5
+ "license": "MIT",
6
+ "keywords": [
7
+ "ui-doc",
8
+ "styleguide",
9
+ "ui-kit",
10
+ "documentation",
11
+ "generation",
12
+ "node"
13
+ ],
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "https://github.com/gherrink/ui-doc",
17
+ "directory": "packages/node"
18
+ },
19
+ "author": "Maurice Busch",
20
+ "homepage": "https://github.com/gherrink/ui-doc/tree/master/packages/node#readme",
21
+ "bugs": "https://github.com/gherrink/ui-doc/issues",
22
+ "main": "./dist/index.cjs",
23
+ "module": "./dist/index.mjs",
24
+ "types": "./dist/index.d.ts",
25
+ "exports": {
26
+ ".": {
27
+ "types": "./dist/index.d.ts",
28
+ "import": "./dist/index.mjs",
29
+ "default": "./dist/index.cjs"
30
+ }
31
+ },
32
+ "engines": {
33
+ "node": ">=16.0.0"
34
+ },
35
+ "files": [
36
+ "dist",
37
+ "LICENSE.md",
38
+ "README.md"
39
+ ],
40
+ "publishConfig": {
41
+ "access": "public"
42
+ },
43
+ "sideEffects": false,
44
+ "peerDependencies": {
45
+ "node": "^16.0.0||^18.0.0||^20.0.0||^22.0.0",
46
+ "@ui-doc/core": "^0.1.00.0.0"
47
+ },
48
+ "dependencies": {
49
+ "picomatch": "^4.0.2"
50
+ },
51
+ "devDependencies": {
52
+ "@types/node": "^20.12.7",
53
+ "@types/picomatch": "^2.3.3",
54
+ "@ui-doc/core": "^0.0.0"
55
+ },
56
+ "scripts": {
57
+ "build": "rollup -c",
58
+ "prebuild": "rm -rf dist dist",
59
+ "prerelease": "pnpm build",
60
+ "release": "pnpm --workspace-root package:release $(pwd)",
61
+ "release:dry": "pnpm --workspace-root package:release-dry $(pwd)",
62
+ "test": "jest"
63
+ }
64
+ }