Skip to content

Commit 113025a

Browse files
committed
chore: wip
1 parent b7b1715 commit 113025a

File tree

5 files changed

+157
-14
lines changed

5 files changed

+157
-14
lines changed

.stacks/core/arrays/src/index.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { Arrayable, Nullable } from '@stacksjs/types'
22
import { clamp } from '@stacksjs/utils'
33
import { Macroable } from 'macroable'
44

5-
class Arr extends Macroable {
5+
export class Arr extends Macroable {
66
contains(needle: string, haystack: string[]) {
77
return contains(needle, haystack)
88
}
@@ -126,10 +126,7 @@ class Arr extends Macroable {
126126
}
127127
}
128128

129-
Arr.macros = {}
130-
Arr.getters = {}
131-
132-
export default Arr
129+
export const arr = new Arr()
133130

134131
export function average(arr: number[]): number {
135132
return sum(arr) / arr.length
@@ -374,3 +371,5 @@ export function shuffle<T>(array: T[]): T[] {
374371
}
375372
return array
376373
}
374+
375+
export default Arr

.stacks/core/strings/package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,15 @@
6363
"change-case": "^4.1.2",
6464
"detect-indent": "^7.0.1",
6565
"detect-newline": "^4.0.0",
66+
"macroable": "^7.0.2",
6667
"pluralize": "^8.0.0",
6768
"slugify": "^1.6.6",
6869
"title-case": "^3.0.3",
6970
"validator": "^13.9.0"
7071
},
72+
"dependencies": {
73+
"macroable": "^7.0.2"
74+
},
7175
"devDependencies": {
7276
"@stacksjs/development": "workspace:*"
7377
}

.stacks/core/strings/src/index.ts

Lines changed: 137 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,137 @@
1-
export * from './case'
2-
export * from './utils'
3-
export * from './pluralize'
1+
import { Macroable } from 'macroable'
2+
import * as u from './utils'
3+
import * as c from './case'
4+
import * as p from './pluralize'
5+
import { detectIndent } from './utils'
6+
7+
export class Str extends Macroable {
8+
slash(str: string) {
9+
return u.slash(str)
10+
}
11+
12+
ensurePrefix(prefix: string, str: string) {
13+
return u.ensurePrefix(prefix, str)
14+
}
15+
16+
ensureSuffix(suffix: string, str: string) {
17+
return u.ensureSuffix(suffix, str)
18+
}
19+
20+
template(str: string, ...args: any[]): string {
21+
return u.template(str, ...args)
22+
}
23+
24+
/**
25+
* Truncate a string
26+
*/
27+
truncate(str: string, length: number, end = '...') {
28+
return u.truncate(str, length, end)
29+
}
30+
31+
random(length = 16) {
32+
return u.randomStr(length)
33+
}
34+
35+
capitalize(str: string) {
36+
return u.capitalize(str)
37+
}
38+
39+
slug(str: string) {
40+
return u.slug(str)
41+
}
42+
43+
detectIndent(str: string) {
44+
return detectIndent(str)
45+
}
46+
47+
detectNewline(str: string) {
48+
return u.detectNewline(str)
49+
}
50+
51+
camelCase(str: string) {
52+
return c.camelCase(str)
53+
}
54+
55+
capitalCase(str: string) {
56+
return c.capitalCase(str)
57+
}
58+
59+
constantCase(str: string) {
60+
return c.constantCase(str)
61+
}
62+
63+
dotCase(str: string) {
64+
return c.dotCase(str)
65+
}
66+
67+
headerCase(str: string) {
68+
return c.headerCase(str)
69+
}
70+
71+
noCase(str: string) {
72+
return c.noCase(str)
73+
}
74+
75+
paramCase(str: string) {
76+
return c.paramCase(str)
77+
}
78+
79+
pascalCase(str: string) {
80+
return c.pascalCase(str)
81+
}
82+
83+
pathCase(str: string) {
84+
return c.pathCase(str)
85+
}
86+
87+
sentenceCase(str: string) {
88+
return c.sentenceCase(str)
89+
}
90+
91+
snakeCase(str: string) {
92+
return c.snakeCase(str)
93+
}
94+
95+
titleCase(str: string) {
96+
return c.titleCase(str)
97+
}
98+
99+
kebabCase(str: string) {
100+
return c.kebabCase(str)
101+
}
102+
103+
plural(str: string) {
104+
// plural, singular, isPlural, isSingular, addPluralRule, addSingularRule, addIrregularRule, addUncountableRule
105+
return p.plural(str)
106+
}
107+
108+
singular(str: string) {
109+
return p.singular(str)
110+
}
111+
112+
isPlural(str: string) {
113+
return p.isPlural(str)
114+
}
115+
116+
isSingular(str: string) {
117+
return p.isSingular(str)
118+
}
119+
120+
addPluralRule(rule: string | RegExp, repl: string) {
121+
return p.addPluralRule(rule, repl)
122+
}
123+
124+
addSingularRule(rule: string | RegExp, repl: string) {
125+
return p.addSingularRule(rule, repl)
126+
}
127+
128+
addIrregularRule(single: string, plural: string) {
129+
return p.addIrregularRule(single, plural)
130+
}
131+
132+
addUncountableRule(word: string | RegExp) {
133+
return p.addUncountableRule(word)
134+
}
135+
}
136+
137+
export default { Str, ...p, ...c, ...u }

.stacks/core/strings/src/utils.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,13 @@ export function template(str: string, ...args: any[]): string {
7878
})
7979
}
8080

81+
export function truncate(str: string, length: number, end = '...') {
82+
if (str.length <= length)
83+
return str
84+
85+
return str.slice(0, length - end.length) + end
86+
}
87+
8188
/**
8289
* Generate a random string
8390
* @category String

pnpm-lock.yaml

Lines changed: 5 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)