diff --git a/packages/commons/.gitignore b/packages/commons/.gitignore index 466ca394..e815bc05 100644 --- a/packages/commons/.gitignore +++ b/packages/commons/.gitignore @@ -37,3 +37,5 @@ jspm_packages # Optional REPL history .node_repl_history + +.kbot \ No newline at end of file diff --git a/packages/commons/dist/_glob.d.ts b/packages/commons/dist/_glob.d.ts index c615e5b9..ebd7691b 100644 --- a/packages/commons/dist/_glob.d.ts +++ b/packages/commons/dist/_glob.d.ts @@ -1,7 +1,9 @@ import { GlobOptions } from 'glob'; export declare const files: (cwd: any, glob: any, options?: any) => []; export declare const filesEx: (cwd: any, glob: any, options?: GlobOptions) => []; -import { PATH_INFO } from '@/types_common.js'; +import { PATH_INFO } from './types_common.js'; +export { globBase } from './glob-base.js'; +export { globParent } from './glob-parent.js'; export declare const forward_slash: (path: any) => any; export declare const pathInfoEx: (src: string, altToken?: boolean, globOptions?: GlobOptions) => PATH_INFO; export declare const pathInfo: (src: string, altToken?: boolean, cwd?: string) => PATH_INFO; diff --git a/packages/commons/dist/_glob.js b/packages/commons/dist/_glob.js index 75cacf3a..c5ece5b0 100644 --- a/packages/commons/dist/_glob.js +++ b/packages/commons/dist/_glob.js @@ -1,14 +1,14 @@ import * as path from 'path'; -// import * as isGlob from 'is-glob' -// import * as fg from 'fast-glob' import { glob, globSync, hasMagic } from 'glob'; import { REGEX_VAR, REGEX_VAR_ALT } from "@polymech/core/constants"; import { sync as exists } from '@polymech/fs/exists'; export const files = (cwd, glob, options) => globSync(glob, { ...{ dot: true, cwd, absolute: true, caseSensitiveMatch: false }, ...options || {} }); export const filesEx = (cwd, glob, options) => globSync(glob, { ...{ dot: true, cwd, absolute: true, caseSensitiveMatch: false }, ...options || {} }); -import { substitute } from '@/variables.js'; -import { isFile, isFolder } from '@/fs.js'; -const globBase = require('glob-base'); +import { substitute } from './variables.js'; +import { isFile, isFolder } from './fs.js'; +import { globBase } from './glob-base.js'; +export { globBase } from './glob-base.js'; +export { globParent } from './glob-parent.js'; export const forward_slash = (path) => { const isExtendedLengthPath = /^\\\\\?\\/.test(path); const hasNonAscii = /[^\u0000-\u0080]+/.test(path); diff --git a/packages/commons/dist/_glob.js.map b/packages/commons/dist/_glob.js.map index 342b1fc6..7ae9dfa7 100644 --- a/packages/commons/dist/_glob.js.map +++ b/packages/commons/dist/_glob.js.map @@ -1 +1 @@ -{"version":3,"file":"_glob.js","sourceRoot":"","sources":["../src/_glob.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"_glob.js","sourceRoot":"","sources":["../src/_glob.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/commons/dist/glob-base.d.ts b/packages/commons/dist/glob-base.d.ts new file mode 100644 index 00000000..92f549c1 --- /dev/null +++ b/packages/commons/dist/glob-base.d.ts @@ -0,0 +1,13 @@ +/*! + * glob-base + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ +interface GlobBaseResult { + base: string; + isGlob: boolean; + glob: string; +} +export declare const globBase: (pattern: string) => GlobBaseResult; +export {}; diff --git a/packages/commons/dist/glob-base.js b/packages/commons/dist/glob-base.js new file mode 100644 index 00000000..22764ba9 --- /dev/null +++ b/packages/commons/dist/glob-base.js @@ -0,0 +1,47 @@ +/*! + * glob-base + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ +import { dirname as pathDirname } from 'path'; +import { hasMagic } from 'glob'; +import { globParent } from './glob-parent.js'; +function dirname(glob) { + if (glob.slice(-1) === '/') + return glob; + return pathDirname(glob); +} +export const globBase = (pattern) => { + if (typeof pattern !== 'string') { + throw new TypeError('glob-base expects a string.'); + } + const res = { + base: globParent(pattern), + isGlob: hasMagic(pattern), + glob: '' + }; + if (res.base !== '.') { + res.glob = pattern.substr(res.base.length); + if (res.glob.charAt(0) === '/') { + res.glob = res.glob.substr(1); + } + } + else { + res.glob = pattern; + } + if (!res.isGlob) { + res.base = dirname(pattern); + res.glob = res.base !== '.' + ? pattern.substr(res.base.length) + : pattern; + } + if (res.glob.substr(0, 2) === './') { + res.glob = res.glob.substr(2); + } + if (res.glob.charAt(0) === '/') { + res.glob = res.glob.substr(1); + } + return res; +}; +//# sourceMappingURL=glob-base.js.map \ No newline at end of file diff --git a/packages/commons/dist/glob-base.js.map b/packages/commons/dist/glob-base.js.map new file mode 100644 index 00000000..86a13373 --- /dev/null +++ b/packages/commons/dist/glob-base.js.map @@ -0,0 +1 @@ +{"version":3,"file":"glob-base.js","sourceRoot":"","sources":["../src/glob-base.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,MAAM,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAQ7C,SAAS,OAAO,CAAC,IAAY;IAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,OAAe,EAAkB,EAAE;IAC1D,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;QAC/B,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC,CAAC;KACpD;IAED,MAAM,GAAG,GAAmB;QAC1B,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC;QACzB,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC;QACzB,IAAI,EAAE,EAAE;KACT,CAAC;IAEF,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;QACpB,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;YAC9B,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAC/B;KACF;SAAM;QACL,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC;KACpB;IAED,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;QACf,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5B,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG;YACzB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;YACjC,CAAC,CAAC,OAAO,CAAC;KACb;IAED,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;QAClC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KAC/B;IACD,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;QAC9B,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KAC/B;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAA"} \ No newline at end of file diff --git a/packages/commons/dist/glob-parent.d.ts b/packages/commons/dist/glob-parent.d.ts new file mode 100644 index 00000000..7354ba22 --- /dev/null +++ b/packages/commons/dist/glob-parent.d.ts @@ -0,0 +1,5 @@ +interface Options { + flipBackslashes?: boolean; +} +export declare const globParent: (str: string, opts?: Options) => string; +export {}; diff --git a/packages/commons/dist/glob-parent.js b/packages/commons/dist/glob-parent.js new file mode 100644 index 00000000..934f986c --- /dev/null +++ b/packages/commons/dist/glob-parent.js @@ -0,0 +1,58 @@ +import { posix } from 'path'; +import { platform } from 'os'; +import { hasMagic } from 'glob'; +const isWin32 = platform() === 'win32'; +const slash = '/'; +const backslash = /\\/g; +const escaped = /\\([!*?|[\](){}])/g; +export const globParent = (str, opts) => { + const options = { flipBackslashes: true, ...opts }; + // flip windows path separators + if (options.flipBackslashes && isWin32 && !str.includes(slash)) { + str = str.replace(backslash, slash); + } + // special case for strings ending in enclosure containing path separator + if (isEnclosure(str)) { + str += slash; + } + // preserves full path in case of trailing path separator + str += 'a'; + // remove path parts that are globby + do { + str = posix.dirname(str); + } while (isGlobby(str)); + // remove escape chars and return result + return str.replace(escaped, '$1'); +}; +function isEnclosure(str) { + const lastChar = str.slice(-1); + let enclosureStart; + switch (lastChar) { + case '}': + enclosureStart = '{'; + break; + case ']': + enclosureStart = '['; + break; + default: + return false; + } + const foundIndex = str.indexOf(enclosureStart); + if (foundIndex < 0) { + return false; + } + return str.slice(foundIndex + 1, -1).includes(slash); +} +function isGlobby(str) { + if (/\([^()]+$/.test(str)) { + return true; + } + if (str[0] === '{' || str[0] === '[') { + return true; + } + if (/[^\\][{[]/.test(str)) { + return true; + } + return hasMagic(str); +} +//# sourceMappingURL=glob-parent.js.map \ No newline at end of file diff --git a/packages/commons/dist/glob-parent.js.map b/packages/commons/dist/glob-parent.js.map new file mode 100644 index 00000000..63c080bd --- /dev/null +++ b/packages/commons/dist/glob-parent.js.map @@ -0,0 +1 @@ +{"version":3,"file":"glob-parent.js","sourceRoot":"","sources":["../src/glob-parent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAA;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAE/B,MAAM,OAAO,GAAG,QAAQ,EAAE,KAAK,OAAO,CAAA;AAEtC,MAAM,KAAK,GAAG,GAAG,CAAC;AAClB,MAAM,SAAS,GAAG,KAAK,CAAC;AACxB,MAAM,OAAO,GAAG,oBAAoB,CAAC;AAMrC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,IAAc,EAAU,EAAE;IAChE,MAAM,OAAO,GAAY,EAAE,eAAe,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;IAE5D,+BAA+B;IAC/B,IAAI,OAAO,CAAC,eAAe,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QAC9D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;KACrC;IAED,yEAAyE;IACzE,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE;QACpB,GAAG,IAAI,KAAK,CAAC;KACd;IAED,yDAAyD;IACzD,GAAG,IAAI,GAAG,CAAC;IAEX,oCAAoC;IACpC,GAAG;QACD,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;KAC1B,QAAQ,QAAQ,CAAC,GAAG,CAAC,EAAE;IAExB,wCAAwC;IACxC,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACpC,CAAC,CAAA;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/B,IAAI,cAAsB,CAAC;IAC3B,QAAQ,QAAQ,EAAE;QAChB,KAAK,GAAG;YACN,cAAc,GAAG,GAAG,CAAC;YACrB,MAAM;QACR,KAAK,GAAG;YACN,cAAc,GAAG,GAAG,CAAC;YACrB,MAAM;QACR;YACE,OAAO,KAAK,CAAC;KAChB;IAED,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/C,IAAI,UAAU,GAAG,CAAC,EAAE;QAClB,OAAO,KAAK,CAAC;KACd;IAED,OAAO,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW;IAC3B,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACzB,OAAO,IAAI,CAAC;KACb;IACD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;QACpC,OAAO,IAAI,CAAC;KACb;IACD,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACzB,OAAO,IAAI,CAAC;KACb;IACD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC"} \ No newline at end of file diff --git a/packages/commons/package.json b/packages/commons/package.json index 1e395fa7..dc322e8f 100644 --- a/packages/commons/package.json +++ b/packages/commons/package.json @@ -30,6 +30,18 @@ "./profile": { "import": "./dist/profile.js", "require": "./dist/profile.cjs" + }, + "./component": { + "import": "./dist/component.js", + "require": "./dist/component.cjs" + }, + "./filter": { + "import": "./dist/filter.js", + "require": "./dist/filter.cjs" + }, + "./glob": { + "import": "./dist/_glob.js", + "require": "./dist/_glob.cjs" } }, "licenses": [ diff --git a/packages/commons/src/_glob.ts b/packages/commons/src/_glob.ts index 3f6c2b89..e0fcb5b4 100644 --- a/packages/commons/src/_glob.ts +++ b/packages/commons/src/_glob.ts @@ -1,6 +1,5 @@ import * as path from 'path' -// import * as isGlob from 'is-glob' -// import * as fg from 'fast-glob' + import { glob, globSync, GlobOptions, hasMagic } from 'glob' import { REGEX_VAR, REGEX_VAR_ALT } from "@polymech/core/constants" import { sync as exists } from '@polymech/fs/exists' @@ -8,11 +7,13 @@ import { sync as exists } from '@polymech/fs/exists' export const files = (cwd, glob, options?: any) => globSync(glob, { ...{ dot: true, cwd, absolute: true, caseSensitiveMatch: false }, ...options || {} }) as [] export const filesEx = (cwd, glob, options?: GlobOptions) => globSync(glob, { ...{ dot: true, cwd, absolute: true, caseSensitiveMatch: false }, ...options || {} }) as [] -import { substitute } from '@/variables.js' -import { isFile, isFolder } from '@/fs.js' -import { PATH_INFO } from '@/types_common.js' +import { substitute } from './variables.js' +import { isFile, isFolder } from './fs.js' +import { PATH_INFO } from './types_common.js' -const globBase = require('glob-base') +import { globBase } from './glob-base.js' +export { globBase } from './glob-base.js' +export { globParent } from './glob-parent.js' export const forward_slash = (path) => { const isExtendedLengthPath = /^\\\\\?\\/.test(path) @@ -22,6 +23,7 @@ export const forward_slash = (path) => { } return path.replace(/\\/g, '/') } + export const pathInfoEx = (src: string, altToken: boolean = false, globOptions: GlobOptions = {}): PATH_INFO => { const srcParts = path.parse(src) let variables: PATH_INFO = { diff --git a/packages/commons/src/glob-base.ts b/packages/commons/src/glob-base.ts new file mode 100644 index 00000000..02f18083 --- /dev/null +++ b/packages/commons/src/glob-base.ts @@ -0,0 +1,57 @@ +/*! + * glob-base + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +import { dirname as pathDirname } from 'path' +import { hasMagic } from 'glob' +import { globParent } from './glob-parent.js' + +interface GlobBaseResult { + base: string; + isGlob: boolean; + glob: string; +} + +function dirname(glob: string): string { + if (glob.slice(-1) === '/') return glob; + return pathDirname(glob); +} + +export const globBase = (pattern: string): GlobBaseResult =>{ + if (typeof pattern !== 'string') { + throw new TypeError('glob-base expects a string.'); + } + + const res: GlobBaseResult = { + base: globParent(pattern), + isGlob: hasMagic(pattern), + glob: '' + }; + + if (res.base !== '.') { + res.glob = pattern.substr(res.base.length); + if (res.glob.charAt(0) === '/') { + res.glob = res.glob.substr(1); + } + } else { + res.glob = pattern; + } + + if (!res.isGlob) { + res.base = dirname(pattern); + res.glob = res.base !== '.' + ? pattern.substr(res.base.length) + : pattern; + } + + if (res.glob.substr(0, 2) === './') { + res.glob = res.glob.substr(2); + } + if (res.glob.charAt(0) === '/') { + res.glob = res.glob.substr(1); + } + return res; +} diff --git a/packages/commons/src/glob-parent.ts b/packages/commons/src/glob-parent.ts new file mode 100644 index 00000000..a9d10582 --- /dev/null +++ b/packages/commons/src/glob-parent.ts @@ -0,0 +1,74 @@ +import { posix } from 'path' +import { platform } from 'os' +import { hasMagic } from 'glob' + +const isWin32 = platform() === 'win32' + +const slash = '/'; +const backslash = /\\/g; +const escaped = /\\([!*?|[\](){}])/g; + +interface Options { + flipBackslashes?: boolean; +} + +export const globParent = (str: string, opts?: Options): string => { + const options: Options = { flipBackslashes: true, ...opts }; + + // flip windows path separators + if (options.flipBackslashes && isWin32 && !str.includes(slash)) { + str = str.replace(backslash, slash); + } + + // special case for strings ending in enclosure containing path separator + if (isEnclosure(str)) { + str += slash; + } + + // preserves full path in case of trailing path separator + str += 'a'; + + // remove path parts that are globby + do { + str = posix.dirname(str); + } while (isGlobby(str)); + + // remove escape chars and return result + return str.replace(escaped, '$1'); +} + +function isEnclosure(str: string): boolean { + const lastChar = str.slice(-1); + + let enclosureStart: string; + switch (lastChar) { + case '}': + enclosureStart = '{'; + break; + case ']': + enclosureStart = '['; + break; + default: + return false; + } + + const foundIndex = str.indexOf(enclosureStart); + if (foundIndex < 0) { + return false; + } + + return str.slice(foundIndex + 1, -1).includes(slash); +} + +function isGlobby(str: string): boolean { + if (/\([^()]+$/.test(str)) { + return true; + } + if (str[0] === '{' || str[0] === '[') { + return true; + } + if (/[^\\][{[]/.test(str)) { + return true; + } + return hasMagic(str); +}